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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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/82] 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 1575946d87bb6ca098284b9097f1ae7c25b9548b Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 19:29:45 +0900 Subject: [PATCH 51/82] refactor(rsc): wrap exports at module boundary Co-authored-by: OpenCode --- packages/plugin-rsc/src/plugin.ts | 4 +- ...anonical-vs-wrapped-binding.js.map.snap.md | 11 +- .../canonical-vs-wrapped-binding.js.snap.md | 8 +- .../default-anonymous.js.map.snap.md | 12 +- .../wrap-export/default-anonymous.js.snap.md | 9 +- .../wrap-export/default-named.js.map.snap.md | 12 +- .../wrap-export/default-named.js.snap.md | 12 +- .../dependent-declarators.js.map.snap.md | 11 +- .../dependent-declarators.js.snap.md | 9 +- .../multiple-exports.js.map.snap.md | 22 +- .../wrap-export/multiple-exports.js.snap.md | 17 +- .../named-function-expression.js.map.snap.md | 11 +- .../named-function-expression.js.snap.md | 11 +- .../wrap-export/named-function.js.map.snap.md | 11 +- .../wrap-export/named-function.js.snap.md | 11 +- .../pre-declaration-reference.js.map.snap.md | 13 +- .../pre-declaration-reference.js.snap.md | 11 +- .../wrap-export/recursive.js.map.snap.md | 13 +- .../wrap-export/recursive.js.snap.md | 11 +- .../wrap-export/variables.js.map.snap.md | 18 +- .../wrap-export/variables.js.snap.md | 15 +- .../src/transforms/module-export-wrap.test.ts | 35 +- .../src/transforms/module-export-wrap.ts | 307 ++++++------------ .../src/transforms/source-map.test.ts | 5 +- 24 files changed, 250 insertions(+), 349 deletions(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index cb1976dca..efc109e51 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -2760,9 +2760,9 @@ export async function transformRscCssExport(options: { } const result = transformModuleExportWrap(options.code, options.ast, { - generate: ({ implementation, exportName, meta }) => + generate: ({ implementation, originalName, exportName, meta }) => `__vite_rsc_wrap_css__(${implementation}, ${JSON.stringify( - meta.defaultExportIdentifierName ?? exportName, + originalName ?? meta.defaultExportIdentifierName ?? exportName, )})`, filter: options.filter, exportAll: 'preserve', 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 index 2627e5e80..c34a8f4d7 100644 --- 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 @@ -27,12 +27,11 @@ ## 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" +(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" +[unmapped] --> (7:0) "const $$module_0_binding_direct = /* #__PURE__ */ Object.defineProperty(registerServerReference(direct, \"direct\"), \"name\", { value: \"direct\" });\n" +[unmapped] --> (8:0) "export { $$module_0_binding_direct as direct };\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 index 4d21726b6..81833b936 100644 --- 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 @@ -59,18 +59,18 @@ registerServerReference(indirect, "indirect"); **References:** direct, indirect -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDY4AApjb25zdCAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RpcmVjdCA9IGFzeW5jIGZ1bmN0aW9uICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGlyZWN0KCkge307CmV4cG9ydCBjb25zdCBkaXJlY3QgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGlyZWN0LCAibmFtZSIsIHsgdmFsdWU6ICJkaXJlY3QiIH0pLCAiZGlyZWN0Iik7Cgpjb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9CgoKY29uc3VtZShkaXJlY3QsIGluZGlyZWN0KQoKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX2luZGlyZWN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGluZGlyZWN0LCAiaW5kaXJlY3QiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMV9iaW5kaW5nX2luZGlyZWN0IGFzIGluZGlyZWN0IH07CjM0MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXJlY3QoKSB7fVxuXG5jb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9XG5leHBvcnQgeyBpbmRpcmVjdCB9XG5cbmNvbnN1bWUoZGlyZWN0LCBpbmRpcmVjdClcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBTztBQUFBLDJGQUF3QixDQUFDOzs7QUFFaEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztBQUc5QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUTs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDMzAGFzeW5jIGZ1bmN0aW9uIGRpcmVjdCgpIHt9Cgpjb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9CgoKY29uc3VtZShkaXJlY3QsIGluZGlyZWN0KQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RpcmVjdCA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGlyZWN0LCAiZGlyZWN0IiksICJuYW1lIiwgeyB2YWx1ZTogImRpcmVjdCIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19kaXJlY3QgYXMgZGlyZWN0IH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19pbmRpcmVjdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShpbmRpcmVjdCwgImluZGlyZWN0Iik7CmV4cG9ydCB7ICQkbW9kdWxlXzFfYmluZGluZ19pbmRpcmVjdCBhcyBpbmRpcmVjdCB9OwozNzAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlyZWN0KCkge31cblxuY29uc3QgaW5kaXJlY3QgPSBhc3luYyAoKSA9PiB7fVxuZXhwb3J0IHsgaW5kaXJlY3QgfVxuXG5jb25zdW1lKGRpcmVjdCwgaW5kaXJlY3QpXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRWhDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVE7Ozs7OzsifQ==) ```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"); +async function direct() {} const indirect = async () => {} consume(direct, indirect) +const $$module_0_binding_direct = /* #__PURE__ */ Object.defineProperty(registerServerReference(direct, "direct"), "name", { value: "direct" }); +export { $$module_0_binding_direct as direct }; const $$module_1_binding_indirect = /* #__PURE__ */ registerServerReference(indirect, "indirect"); export { $$module_1_binding_indirect as indirect }; ``` 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 436cffa92..a0d5e00e9 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 @@ -28,10 +28,10 @@ ```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) "export default /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_default, \"name\", { value: \"default\" }), \"default\");\n" +(2:0) "export default " --> (2:0) "const $$module_0_implementation_default = " +(2:15) "async function () {\n" --> (2:42) "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] --> (6:0) "const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" });\n" +[unmapped] --> (7:0) "export { $$module_0_binding_default as 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 11a221a84..763312c37 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,14 +52,15 @@ export default $$effect_default; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjgwACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCcKfTsKZXhwb3J0IGRlZmF1bHQgLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pLCAiZGVmYXVsdCIpOwoyOTIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVJO0FBQUEsNERBQWtCO0FBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQzNDOzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzQ5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9Cgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpLCAibmFtZSIsIHsgdmFsdWU6ICJkZWZhdWx0IiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLDBDQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0=) ```js 'use server' - const $$module_0_implementation_default = async function () { return 'default anonymous function called' -}; -export default /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_default, "name", { value: "default" }), "default"); +} + +const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, "default"), "name", { value: "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 987fb400b..ea277f79f 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 @@ -26,11 +26,9 @@ ```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) "const defaultNamedFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_defaultNamedFunction, \"name\", { value: \"defaultNamedFunction\" }), \"default\");\n" -[unmapped] --> (7:0) "export default defaultNamedFunction;\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] --> (6:0) "const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference(defaultNamedFunction, \"default\"), \"name\", { value: \"defaultNamedFunction\" });\n" +[unmapped] --> (7:0) "export { $$module_0_binding_default as default };\n" ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md index 2cf6ae566..a6f8b0871 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,15 +52,15 @@ export default defaultNamedFunction; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDEyACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdE5hbWVkRnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHROYW1lZEZ1bmN0aW9uKCkgewogIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnCn07CmNvbnN0IGRlZmF1bHROYW1lZEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHROYW1lZEZ1bmN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJkZWZhdWx0TmFtZWRGdW5jdGlvbiIgfSksICJkZWZhdWx0Iik7CmV4cG9ydCBkZWZhdWx0IGRlZmF1bHROYW1lZEZ1bmN0aW9uOwozMDkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSTtBQUFBLHVIQUFzQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGRlZmF1bHROYW1lZEZ1bmN0aW9uLCAiZGVmYXVsdCIpLCAibmFtZSIsIHsgdmFsdWU6ICJkZWZhdWx0TmFtZWRGdW5jdGlvbiIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0=) ```js 'use server' - -const $$module_0_implementation_defaultNamedFunction = async function $$module_0_implementation_defaultNamedFunction() { +async function defaultNamedFunction() { return 'default named function called' -}; -const defaultNamedFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_defaultNamedFunction, "name", { value: "defaultNamedFunction" }), "default"); -export default defaultNamedFunction; +} + +const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference(defaultNamedFunction, "default"), "name", { value: "defaultNamedFunction" }); +export { $$module_0_binding_default as default }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md index bc688b1f8..f540ad5bf 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 @@ -27,13 +27,10 @@ ```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" -(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" +(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" +[unmapped] --> (5:0) "const $$module_0_binding_first = /* #__PURE__ */ Object.defineProperty(registerServerReference(first, \"first\"), \"name\", { value: \"first\" });\n" +[unmapped] --> (6:0) "export { $$module_0_binding_first as 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 824b2a8b1..04523cea9 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,17 +51,16 @@ export { first, second }; **References:** first, second -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDE1ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCc7CmNvbnN0IGZpcnN0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0LCAibmFtZSIsIHsgdmFsdWU6ICJmaXJzdCIgfSksICJmaXJzdCIpLAogIHNlY29uZCA9IGZpcnN0Cgpjb25zdCAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kIGFzIHNlY29uZCB9OwpleHBvcnQgeyBmaXJzdCB9OwozMTYAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLFxuICBzZWNvbmQgPSBmaXJzdFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVU7QUFBQSxvREFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUE5QyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMscUlBQWtDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDA5ACd1c2Ugc2VydmVyJwoKY29uc3QgZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcsCiAgc2Vjb25kID0gZmlyc3QKCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19maXJzdCA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3QsICJmaXJzdCIpLCAibmFtZSIsIHsgdmFsdWU6ICJmaXJzdCIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19maXJzdCBhcyBmaXJzdCB9Owpjb25zdCAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kIGFzIHNlY29uZCB9OwozNDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLFxuICBzZWNvbmQgPSBmaXJzdFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Ozs7OzsifQ==) ```js 'use server' - -const $$module_0_implementation_first = async () => 'first action called'; -const first = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_first, "name", { value: "first" }), "first"), +const first = async () => 'first action called', second = first +const $$module_0_binding_first = /* #__PURE__ */ Object.defineProperty(registerServerReference(first, "first"), "name", { value: "first" }); +export { $$module_0_binding_first as 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/multiple-exports.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-exports.js.map.snap.md index 72b9b5dd7..a0c33eae5 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 @@ -36,16 +36,14 @@ ```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" -(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" +(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" +[unmapped] --> (10:0) "const $$module_0_binding_firstAction = /* #__PURE__ */ Object.defineProperty(registerServerReference(firstAction, \"firstAction\"), \"name\", { value: \"firstAction\" });\n" +[unmapped] --> (11:0) "export { $$module_0_binding_firstAction as firstAction };\n" +[unmapped] --> (12:0) "const $$module_1_binding_secondAction = /* #__PURE__ */ Object.defineProperty(registerServerReference(secondAction, \"secondAction\"), \"name\", { value: \"secondAction\" });\n" +[unmapped] --> (13:0) "export { $$module_1_binding_secondAction as 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 b5eba5171..c65d6f53e 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,20 +68,21 @@ export { secondAction }; **References:** firstAction, secondAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#NjU2ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZmlyc3RBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uKCkgewogIHJldHVybiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcKfTsKCmNvbnN0ICQkbW9kdWxlXzFfaW1wbGVtZW50YXRpb25fc2Vjb25kQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9zZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfTsKZXhwb3J0IGNvbnN0IGZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2ZpcnN0QWN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJmaXJzdEFjdGlvbiIgfSksICJmaXJzdEFjdGlvbiIpOwoKZXhwb3J0IGNvbnN0IHNlY29uZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9zZWNvbmRBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogInNlY29uZEFjdGlvbiIgfSksICJzZWNvbmRBY3Rpb24iKTsKNDMwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXJzdEFjdGlvbigpIHtcbiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJ1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2Vjb25kQWN0aW9uKCkge1xuICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUo7QUFBQSxxR0FBNkI7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3QjtBQUVPO0FBQUEsdUdBQThCO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDOUI7Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NTk4ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2ZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0QWN0aW9uIiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2ZpcnN0QWN0aW9uIGFzIGZpcnN0QWN0aW9uIH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19zZWNvbmRBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpLCAibmFtZSIsIHsgdmFsdWU6ICJzZWNvbmRBY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kQWN0aW9uIGFzIHNlY29uZEFjdGlvbiB9Owo0ODkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3Qjs7QUFFTyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM5Qjs7Ozs7OyJ9) ```js 'use server' - -const $$module_0_implementation_firstAction = async function $$module_0_implementation_firstAction() { +async function firstAction() { return 'first action called' -}; +} -const $$module_1_implementation_secondAction = async function $$module_1_implementation_secondAction() { +async function secondAction() { return 'second action called' -}; -export const firstAction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_firstAction, "name", { value: "firstAction" }), "firstAction"); +} -export const secondAction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_1_implementation_secondAction, "name", { value: "secondAction" }), "secondAction"); +const $$module_0_binding_firstAction = /* #__PURE__ */ Object.defineProperty(registerServerReference(firstAction, "firstAction"), "name", { value: "firstAction" }); +export { $$module_0_binding_firstAction as firstAction }; +const $$module_1_binding_secondAction = /* #__PURE__ */ Object.defineProperty(registerServerReference(secondAction, "secondAction"), "name", { value: "secondAction" }); +export { $$module_1_binding_secondAction as 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 5217b019e..92a154b65 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 @@ -26,10 +26,9 @@ ```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" -(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" +(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" +[unmapped] --> (6:0) "const $$module_0_binding_action = /* #__PURE__ */ Object.defineProperty(registerServerReference(action, \"action\"), \"name\", { value: \"actionImplementation\" });\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/named-function-expression.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md index c32fad4a9..87ab0cef0 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,14 +51,15 @@ export { action }; **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzE1ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKZXhwb3J0IGNvbnN0IGFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9hY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbkltcGxlbWVudGF0aW9uIiB9KSwgImFjdGlvbiIpCjM1NwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgY29uc3QgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7XG4gIHJldHVybiAnbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFVztBQUFBLCtFQUFzQztBQUM1RCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUMxQztBQUZBLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzIzACd1c2Ugc2VydmVyJwoKY29uc3QgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbkltcGxlbWVudGF0aW9uIiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiBhcyBhY3Rpb24gfTsKMzgwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDOzs7OyJ9) ```js 'use server' - -const $$module_0_implementation_action = async function actionImplementation() { +const action = async function actionImplementation() { return 'named function expression called' -}; -export const action = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_action, "name", { value: "actionImplementation" }), "action") +} + +const $$module_0_binding_action = /* #__PURE__ */ Object.defineProperty(registerServerReference(action, "action"), "name", { value: "actionImplementation" }); +export { $$module_0_binding_action as 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 d24376038..f2f5ae629 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 @@ -25,10 +25,9 @@ ```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) "export const namedFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_namedFunction, \"name\", { value: \"namedFunction\" }), \"namedFunction\");\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" +[unmapped] --> (6:0) "const $$module_0_binding_namedFunction = /* #__PURE__ */ Object.defineProperty(registerServerReference(namedFunction, \"namedFunction\"), \"name\", { value: \"namedFunction\" });\n" +[unmapped] --> (7:0) "export { $$module_0_binding_namedFunction as 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 2f1e15f59..d94a8b10c 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,14 +51,15 @@ export { namedFunction }; **References:** namedFunction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzQ1ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfTsKZXhwb3J0IGNvbnN0IG5hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fbmFtZWRGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAibmFtZWRGdW5jdGlvbiIgfSksICJuYW1lZEZ1bmN0aW9uIik7CjI3NQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSjtBQUFBLHlHQUErQjtBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzE4ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX25hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfbmFtZWRGdW5jdGlvbiBhcyBuYW1lZEZ1bmN0aW9uIH07CjMwNQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUMvQjs7OzsifQ==) ```js 'use server' - -const $$module_0_implementation_namedFunction = async function $$module_0_implementation_namedFunction() { +async function namedFunction() { return 'named function called' -}; -export const namedFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_namedFunction, "name", { value: "namedFunction" }), "namedFunction"); +} + +const $$module_0_binding_namedFunction = /* #__PURE__ */ Object.defineProperty(registerServerReference(namedFunction, "namedFunction"), "name", { value: "namedFunction" }); +export { $$module_0_binding_namedFunction as 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 c7647a2aa..12250d716 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 @@ -27,11 +27,10 @@ ```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" -(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" +(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" +[unmapped] --> (8:0) "const $$module_0_binding_action = /* #__PURE__ */ Object.defineProperty(registerServerReference(action, \"action\"), \"name\", { value: \"action\" });\n" +[unmapped] --> (9:0) "export { $$module_0_binding_action as 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 70c83615c..f3e8b3325 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,16 +57,17 @@ export { action }; **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA4ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9hY3Rpb24oKSB7CiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJwp9Owp2b2lkIGFjdGlvbgoKZXhwb3J0IGNvbnN0IGFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9hY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbiIgfSksICJhY3Rpb24iKTsKMjgxAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbnZvaWQgYWN0aW9uXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gIHJldHVybiAnYWN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUlKO0FBQUEsMkZBQXdCO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2QjtBQUpBLElBQUksQ0FBQzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjc0ACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19hY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpLCAibmFtZSIsIHsgdmFsdWU6ICJhY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYWN0aW9uIGFzIGFjdGlvbiB9OwozMTEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxudm9pZCBhY3Rpb25cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHtcbiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsSUFBSSxDQUFDOztBQUVFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDdkI7Ozs7In0=) ```js 'use server' +void action -const $$module_0_implementation_action = async function $$module_0_implementation_action() { +async function action() { return 'action called' -}; -void action +} -export const action = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_action, "name", { value: "action" }), "action"); +const $$module_0_binding_action = /* #__PURE__ */ Object.defineProperty(registerServerReference(action, "action"), "name", { value: "action" }); +export { $$module_0_binding_action as 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 14bac1eaf..7455c3d2f 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 @@ -27,11 +27,10 @@ ```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) "export const recursive = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_recursive, \"name\", { value: \"recursive\" }), \"recursive\");\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" +[unmapped] --> (7:0) "const $$module_0_binding_recursive = /* #__PURE__ */ Object.defineProperty(registerServerReference(recursive, \"recursive\"), \"name\", { value: \"recursive\" });\n" +[unmapped] --> (8:0) "export { $$module_0_binding_recursive as 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 a622ddfd1..2d64d4d29 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,15 +54,16 @@ export { recursive }; **References:** recursive -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzU4ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVjdXJzaXZlID0gZnVuY3Rpb24gJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9yZWN1cnNpdmUoZGVwdGgpIHsKICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSkKICByZXR1cm4gcmVjdXJzaXZlLm1hcmtlcgp9OwpleHBvcnQgY29uc3QgcmVjdXJzaXZlID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX3JlY3Vyc2l2ZSwgIm5hbWUiLCB7IHZhbHVlOiAicmVjdXJzaXZlIiB9KSwgInJlY3Vyc2l2ZSIpOwo0MDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3Vyc2l2ZShkZXB0aCkge1xuICBpZiAoZGVwdGggPiAwKSByZXR1cm4gcmVjdXJzaXZlKGRlcHRoIC0gMSlcbiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXJcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKO0FBQUEsZ0dBQTBCO0FBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ25COzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzI3ACd1c2Ugc2VydmVyJwoKZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7CiAgaWYgKGRlcHRoID4gMCkgcmV0dXJuIHJlY3Vyc2l2ZShkZXB0aCAtIDEpCiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXIKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlY3Vyc2l2ZSA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UocmVjdXJzaXZlLCAicmVjdXJzaXZlIiksICJuYW1lIiwgeyB2YWx1ZTogInJlY3Vyc2l2ZSIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19yZWN1cnNpdmUgYXMgcmVjdXJzaXZlIH07CjQyNQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7XG4gIGlmIChkZXB0aCA+IDApIHJldHVybiByZWN1cnNpdmUoZGVwdGggLSAxKVxuICByZXR1cm4gcmVjdXJzaXZlLm1hcmtlclxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNuQjs7OzsifQ==) ```js 'use server' - -const $$module_0_implementation_recursive = function $$module_0_implementation_recursive(depth) { +function recursive(depth) { if (depth > 0) return recursive(depth - 1) return recursive.marker -}; -export const recursive = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_recursive, "name", { value: "recursive" }), "recursive"); +} + +const $$module_0_binding_recursive = /* #__PURE__ */ Object.defineProperty(registerServerReference(recursive, "recursive"), "name", { value: "recursive" }); +export { $$module_0_binding_recursive as 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 a8121b3d5..02ccc4847 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 @@ -34,14 +34,12 @@ ```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" -(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" +(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" +[unmapped] --> (8:0) "const $$module_0_binding_arrowFunction = /* #__PURE__ */ Object.defineProperty(registerServerReference(arrowFunction, \"arrowFunction\"), \"name\", { value: \"arrowFunction\" });\n" +[unmapped] --> (9:0) "export { $$module_0_binding_arrowFunction as arrowFunction };\n" +[unmapped] --> (10:0) "const $$module_1_binding_functionExpression = /* #__PURE__ */ Object.defineProperty(registerServerReference(functionExpression, \"functionExpression\"), \"name\", { value: \"functionExpression\" });\n" +[unmapped] --> (11:0) "export { $$module_1_binding_functionExpression as 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 158f61034..d26d5590d 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,18 +62,19 @@ export { functionExpression }; **References:** arrowFunction, functionExpression -[Source map visualization](https://evanw.github.io/source-map-visualization/#NjA4ACd1c2Ugc2VydmVyJwoKCmNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnOwoKY29uc3QgJCRtb2R1bGVfMV9pbXBsZW1lbnRhdGlvbl9mdW5jdGlvbkV4cHJlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfTsKZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fYXJyb3dGdW5jdGlvbiwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSksICJhcnJvd0Z1bmN0aW9uIikKCmV4cG9ydCBjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkbW9kdWxlXzFfaW1wbGVtZW50YXRpb25fZnVuY3Rpb25FeHByZXNzaW9uLCAibmFtZSIsIHsgdmFsdWU6ICJmdW5jdGlvbkV4cHJlc3Npb24iIH0pLCAiZnVuY3Rpb25FeHByZXNzaW9uIikKNDkzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVrQjtBQUFBLDREQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBRTdCO0FBQUEsdUVBQWtCO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7QUFKQSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDOztBQUU1QixNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjYxACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2Fycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFycm93RnVuY3Rpb24sICJhcnJvd0Z1bmN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogImFycm93RnVuY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYXJyb3dGdW5jdGlvbiBhcyBhcnJvd0Z1bmN0aW9uIH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19mdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZ1bmN0aW9uRXhwcmVzc2lvbiwgImZ1bmN0aW9uRXhwcmVzc2lvbiIpLCAibmFtZSIsIHsgdmFsdWU6ICJmdW5jdGlvbkV4cHJlc3Npb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfZnVuY3Rpb25FeHByZXNzaW9uIGFzIGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1MjgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQzs7Ozs7OyJ9) ```js 'use server' +const arrowFunction = async () => 'arrow function called' -const $$module_0_implementation_arrowFunction = async () => 'arrow function called'; - -const $$module_1_implementation_functionExpression = async function () { +const functionExpression = async function () { return 'function expression called' -}; -export const arrowFunction = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_0_implementation_arrowFunction, "name", { value: "arrowFunction" }), "arrowFunction") +} -export const functionExpression = /* #__PURE__ */ registerServerReference(Object.defineProperty($$module_1_implementation_functionExpression, "name", { value: "functionExpression" }), "functionExpression") +const $$module_0_binding_arrowFunction = /* #__PURE__ */ Object.defineProperty(registerServerReference(arrowFunction, "arrowFunction"), "name", { value: "arrowFunction" }); +export { $$module_0_binding_arrowFunction as arrowFunction }; +const $$module_1_binding_functionExpression = /* #__PURE__ */ Object.defineProperty(registerServerReference(functionExpression, "functionExpression"), "name", { value: "functionExpression" }); +export { $$module_1_binding_functionExpression as 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 2d021a919..d2310b5a7 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -13,7 +13,10 @@ async function transform( const ast = await parseAstAsync(input) return transformModuleExportWrap(input, ast, { generate: ({ implementation, originalName, exportName }) => - `wrap(${restoreFunctionName(implementation, originalName)}, ${JSON.stringify(exportName)})`, + restoreFunctionName( + `wrap(${implementation}, ${JSON.stringify(exportName)})`, + originalName, + ), ...options, }) } @@ -49,12 +52,12 @@ export default async function Page() {} expect(result.references.map(formatContext)).toEqual([ { - implementation: '$$module_0_implementation_action', + implementation: 'action', originalName: 'action', exportName: 'action', }, { - implementation: '$$module_1_implementation_loader', + implementation: 'loader', originalName: 'loader', exportName: 'loader', }, @@ -69,7 +72,7 @@ export default async function Page() {} exportName: 'forwarded', }, { - implementation: '$$module_4_implementation_Page', + implementation: 'Page', originalName: 'Page', exportName: 'default', }, @@ -91,16 +94,18 @@ export default async function Page() {} expect(result.references.map(formatContext)).toEqual([ { - implementation: '$$module_0_implementation_selected', + implementation: 'selected', originalName: 'selected', exportName: 'selected', }, ]) expect(result.referenceNames).toEqual(['selected']) expect(result.output.toString()).toMatchInlineSnapshot(` - " - const $$module_0_implementation_selected = async () => {}; - export const selected = /* #__PURE__ */ wrap(Object.defineProperty($$module_0_implementation_selected, "name", { value: "selected" }), "selected"), skipped = async () => {} + "const selected = async () => {}, skipped = async () => {} + + const $$module_0_binding_selected = /* #__PURE__ */ Object.defineProperty(wrap(selected, "selected"), "name", { value: "selected" }); + export { $$module_0_binding_selected as selected }; + export { skipped }; " `) @@ -125,6 +130,20 @@ export default async function Page() {} expect(filtered.references).toEqual([]) }) + test('preserves comments around default export keywords', async () => { + const result = await transform( + `export /* before */ default /* after */ async () => {}`, + ) + + expect(result.output.toString()).toMatchInlineSnapshot(` + "/* before */ const $$module_0_implementation_default = /* after */ async () => {} + + const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(wrap($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" }); + export { $$module_0_binding_default as default }; + " + `) + }) + test('controls export-all preservation', async () => { const input = `export * from './dep'` diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 80cfada74..abac4a186 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -1,20 +1,15 @@ import { tinyassert } from '@hiogawa/utils' -import type { Program } from 'estree' import MagicString from 'magic-string' import type { ESTree } from 'vite' -import { - scanModuleExports, - type ModuleExportDirectFunction, - type ModuleExportMeta, -} from './module-export-scan' -import { getDirectivePrologueEnd, validateNonAsyncFunction } from './utils' +import { scanModuleExports, type ModuleExportMeta } from './module-export-scan' +import { 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. + * The runtime name of a directly exported function. When present, the + * generated expression is responsible for assigning it to the wrapper. * * - `"action"` for `export const action = () => {}` * - `"implementation"` for `export const action = function implementation() {}` @@ -47,7 +42,8 @@ export type TransformModuleExportWrapResult = { } /** - * Replaces selected module exports with canonical runtime wrapper bindings. + * Replaces selected module exports with runtime wrapper bindings while + * preserving their original module-local values. * * Conceptually: * @@ -66,19 +62,13 @@ export type TransformModuleExportWrapResult = { * ```js * 'use server' * - * const $$module_0_implementation_someFn = async function $$module_0_implementation_someFn(value) { + * async function 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', - * }), - * 'someFn', - * ) - * - * // References within this module resolve to the original value. * const someValue = createSomeValue() + * + * const $$module_0_binding_someFn = __WRAP__(someFn, 'someFn') + * export { $$module_0_binding_someFn as someFn } * const $$module_1_binding_someValue = __WRAP__(someValue, 'someValue') * export { $$module_1_binding_someValue as someValue } * ``` @@ -86,14 +76,12 @@ export type TransformModuleExportWrapResult = { * Here, `__WRAP__(...)` represents the expression returned by the `generate` * 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. + * name should be assigned to the generated wrapper. * `references` returns those contexts in wrapper creation order, while * `referenceNames` returns only their export names. * - * 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. + * Local references to both `someFn` and `someValue` retain their original + * values. Importers receive the generated wrapper bindings. * * Generated `$$module_*` names are not deconflicted from user bindings, * consistent with the other transform helpers. @@ -103,10 +91,7 @@ export function transformModuleExportWrap( viteAst: ESTree.Program, options: TransformModuleExportWrapOptions, ): TransformModuleExportWrapResult { - const ast = viteAst as unknown as Program - - // Keep a boundary outside the parsed AST so moving an export at EOF does not - // also move code inserted at the export's end. + // Keep appended wrapper bindings separated from source ending at EOF. if (!input.endsWith('\n')) { input += '\n' } @@ -115,7 +100,6 @@ export function transformModuleExportWrap( const filter = options.filter ?? (() => true) const references: TransformModuleExportWrapContext[] = [] const wrappedBindingCode: string[] = [] - const hoistPosition = getDirectivePrologueEnd(ast) function createContext( implementation: string, @@ -162,7 +146,7 @@ export function transformModuleExportWrap( * * ```js * // Existing source initialization, left in place - * export const value = init() + * const value = init() * * // Code appended by emitWrappedBinding * const $$module_0_binding_value = __WRAP__(value, 'value') @@ -177,75 +161,19 @@ export function transformModuleExportWrap( implementation: string, exportName: string, meta: ModuleExportMeta, + originalName?: string, ): void { const binding = createName('binding', exportName) - const context = createContext(implementation, exportName, meta) - wrappedBindingCode.push( - `const ${binding} = ${generate(context)};`, - exportBinding(binding, exportName), - ) - } - - /** - * 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, originalName: 'action' }, '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 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( - directFunction: ModuleExportDirectFunction, - sourceName: string, - exportName: string, - meta: ModuleExportMeta, - ): string { - const { node, originalName } = directFunction - 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) - output.update( - node.start, - node.body.start, - `\nconst ${implementation} = ${originalPrefix}`, - ) - output.appendLeft(node.end, ';\n') - output.move(node.start, node.end, hoistPosition) - const context = createContext( implementation, exportName, meta, originalName, ) - return generate(context) + wrappedBindingCode.push( + `const ${binding} = ${generate(context)};`, + exportBinding(binding, exportName), + ) } for (const group of scanModuleExports(viteAst)) { @@ -255,40 +183,31 @@ export function transformModuleExportWrap( const meta = entry.meta if (!filter(entry.exportName, meta)) continue + // export function f() {} + // export class C {} + // ⬇️ (keep declarations in place and append wrapped bindings) + // function f() {} + // class C {} + // const $$module_0_binding_f = __WRAP__(f, 'f') + // export { $$module_0_binding_f as f } 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) - emitWrappedBinding(name, entry.exportName, meta) + validateNonAsyncFunction(options, group.directFunction.node) } + output.remove(group.node.start, group.declaration.start) + emitWrappedBinding( + name, + entry.exportName, + meta, + group.directFunction?.originalName, + ) } 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() + // ⬇️ (keep initializers in place and append wrapped bindings) + // const action = async () => {}, value = init() + // const $$module_0_binding_action = __WRAP__(action, 'action') + // export { $$module_0_binding_action as action } // const $$module_1_binding_value = __WRAP__(value, 'value') // export { $$module_1_binding_value as value } - // export { action } const wrappedBindingNames = new Set() const exportNames = group.declarators.flatMap((item) => item.exports.map((entry) => entry.exportName), @@ -296,39 +215,27 @@ export function transformModuleExportWrap( for (const declarator of group.declarators) { const directFunction = declarator.directFunction - let validate = false + let selected = false for (const entry of declarator.exports) { const meta = entry.meta if (!filter(entry.exportName, meta)) continue - validate = true + selected = 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, - entry.exportName, - meta, - ) - output.appendLeft(directFunction.node.start, replacement) - } else { - // 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) - } + wrappedBindingNames.add(entry.exportName) + emitWrappedBinding( + entry.localName, + entry.exportName, + meta, + directFunction?.originalName, + ) } - if (validate && declarator.node.init && !directFunction) { - validateNonAsyncFunction(options, declarator.node.init) + if (selected && declarator.node.init) { + validateNonAsyncFunction( + options, + directFunction?.node ?? declarator.node.init, + ) } } @@ -409,75 +316,55 @@ export function transformModuleExportWrap( }) } } else if (group.type === 'default') { - let meta: ModuleExportMeta - - if (group.directFunction) { - const declaration = group.directFunction.node - // 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 = group.directFunction.originalName - meta = group.meta - if (!filter('default', meta)) continue + const declaration = group.node.declaration + const meta = group.meta + if (!filter('default', meta)) continue - const replacement = hoistFunction( - group.directFunction, - sourceName, - 'default', - meta, - ) + let implementation: string + const namedDeclaration = + (declaration.type === 'FunctionDeclaration' || + declaration.type === 'ClassDeclaration') && + declaration.id + if (namedDeclaration) { + // export default function Page() {} + // export default class Page {} + // ⬇️ (keep named declarations in place and append wrapped binding) + // function Page() {} + // class Page {} + // const $$module_0_binding_default = __WRAP__(Page, 'default') + // export { $$module_0_binding_default as default } + implementation = namedDeclaration.name output.remove(group.node.start, declaration.start) - output.appendLeft( + } else { + // export default current + // export default async () => {} + // ⬇️ (snapshot at the original export site) + // const $$module_0_implementation_default = current + // const $$module_0_binding_default = __WRAP__($$module_0_implementation_default, 'default') + // export { $$module_0_binding_default as default } + implementation = createName('implementation', 'default') + const prefix = input.slice(group.node.start, declaration.start) + output.update( + group.node.start, declaration.start, - declaration.type === 'FunctionDeclaration' && declaration.id - ? `const ${sourceName} = ${replacement};\nexport default ${sourceName};` - : `export default ${replacement};`, + prefix.replace( + /^export((?:\s|\/\*[\s\S]*?\*\/|\/\/[^\n]*(?:\n|$))*)default/, + (_, trivia: string) => + `${trivia.replace(/^\s+/, '')}const ${implementation} =`, + ), ) - } else { - const declaration = group.node.declaration - let implementation: string - if (declaration.type === 'ClassDeclaration' && declaration.id) { - // export default class Page {} - // ^^^^^^^^^^^^^^ - // ⬇️ (remove `export default` and append wrapped binding) - // 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 - 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} =`, - ), - ) - } - emitWrappedBinding(implementation, 'default', meta) } + if (group.directFunction) { + validateNonAsyncFunction(options, group.directFunction.node) + } else if (!namedDeclaration) { + validateNonAsyncFunction(options, declaration) + } + emitWrappedBinding( + implementation, + 'default', + meta, + group.directFunction?.originalName, + ) } } diff --git a/packages/plugin-rsc/src/transforms/source-map.test.ts b/packages/plugin-rsc/src/transforms/source-map.test.ts index 74283c1d6..cd19e0df1 100644 --- a/packages/plugin-rsc/src/transforms/source-map.test.ts +++ b/packages/plugin-rsc/src/transforms/source-map.test.ts @@ -33,7 +33,10 @@ describe('source map fixtures', () => { }) const moduleWrapResult = transformModuleExportWrap(input, ast, { generate: ({ implementation, originalName, exportName }) => - `registerServerReference(${restoreFunctionName(implementation, originalName)}, ${JSON.stringify(exportName)})`, + restoreFunctionName( + `registerServerReference(${implementation}, ${JSON.stringify(exportName)})`, + originalName, + ), }) await expect( parseAstAsync(moduleWrapResult.output.toString()), From 696fd16ad9e4b7101cef996e9d4446549d4abe7c Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Mon, 3 Aug 2026 19:45:43 +0900 Subject: [PATCH 52/82] test(rsc): compare export wrapper edge cases Co-authored-by: OpenCode --- .../wrap-export/default-comments.js | 5 ++ .../default-comments.js.map.snap.md | 37 +++++++++ .../wrap-export/default-comments.js.snap.md | 66 ++++++++++++++++ .../wrap-export/multiple-aliases.js | 7 ++ .../multiple-aliases.js.map.snap.md | 38 +++++++++ .../wrap-export/multiple-aliases.js.snap.md | 78 +++++++++++++++++++ 6 files changed, 231 insertions(+) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md create mode 100644 packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js new file mode 100644 index 000000000..ad74de428 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js @@ -0,0 +1,5 @@ +'use server' + +export default /* before */ /* after */ async function () { + return 'default comments called' +} diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md new file mode 100644 index 000000000..1ae64059d --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md @@ -0,0 +1,37 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "export /* before */ default /* after */ " --> (2:0) "const $$default = " +(2:40) "async function () {\n" --> (2:18) "async function () {\n" +(3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments 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) " /* before */ default /* after */ " --> (2:0) "const $$effect_default = " +(2:40) "async function () {\n" --> (2:25) "async function () {\n" +(3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(2:0) "export /* before */ default /* after */ async function () {\n" --> (5:0) "\n" +(2:0) "export /* before */ default /* after */ async function () {\n" --> (6:0) "registerServerReference($$effect_default, \"default\");\n" +(2:0) "export /* before */ default /* after */ async function () {\n" --> (7:0) "export default $$effect_default;\n" +``` + +## module-export-wrap + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "export /* before */ default /* after */ " --> (2:0) "/* before */ const $$module_0_implementation_default = /* after */ " +(2:40) "async function () {\n" --> (2:67) "async function () {\n" +(3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" +(4:0) "}\n" --> (4:0) "}\n" +[unmapped] --> (6:0) "const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" });\n" +[unmapped] --> (7:0) "export { $$module_0_binding_default as default };\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md new file mode 100644 index 000000000..51d6023d8 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md @@ -0,0 +1,66 @@ +## Input + +```js +'use server' + +export /* before */ default /* after */ async function () { + return 'default comments called' +} +``` + +## wrap-export + +**Status:** transformed + +**References:** default + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KOwpjb25zdCAkJHdyYXBfJCRkZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwXyQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgLyogYmVmb3JlICovIGRlZmF1bHQgLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsa0JBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) + +```js +'use server' + +const $$default = async function () { + return 'default comments 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/#MTg0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwozNDEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IC8qIGJlZm9yZSAqLyBkZWZhdWx0IC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGNvbW1lbnRzIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVMLHlCQUFrQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDakM7QUFGQTtBQUFBO0FBQUE7In0=) + +```js +'use server' + +const $$effect_default = async function () { + return 'default comments called' +} + +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/#MzY0ACd1c2Ugc2VydmVyJwoKLyogYmVmb3JlICovIGNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCA9IC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJwp9Cgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpLCAibmFtZSIsIHsgdmFsdWU6ICJkZWZhdWx0IiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IC8qIGJlZm9yZSAqLyBkZWZhdWx0IC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGNvbW1lbnRzIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLG1FQUF3QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDakM7Ozs7In0=) + +```js +'use server' + +/* before */ const $$module_0_implementation_default = /* after */ async function () { + return 'default comments called' +} + +const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, "default"), "name", { value: "default" }); +export { $$module_0_binding_default as default }; +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js new file mode 100644 index 000000000..babb53a27 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js @@ -0,0 +1,7 @@ +'use server' + +async function value() { + return 'multiple aliases called' +} + +export { value as first, value as second } diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md new file mode 100644 index 000000000..eb3145222 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md @@ -0,0 +1,38 @@ +## wrap-export + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function value() {\n" --> (2:0) "async function value() {\n" +(3:0) " return 'multiple aliases called'\n" --> (3:0) " return 'multiple aliases called'\n" +(4:0) "}\n" --> (4:0) "}\n" +[unmapped] --> (7:0) ";\n" +[unmapped] --> (8:0) "const $$wrap_value = /* #__PURE__ */ registerServerReference(value, \"first\");\n" +[unmapped] --> (9:0) "export { $$wrap_value as first };\n" +[unmapped] --> (10:0) "const $$wrap_value = /* #__PURE__ */ registerServerReference(value, \"second\");\n" +[unmapped] --> (11:0) "export { $$wrap_value as second };\n" +``` + +## module-export-effect + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function value() {\n" --> (2:0) "async function value() {\n" +(3:0) " return 'multiple aliases called'\n" --> (3:0) " return 'multiple aliases called'\n" +(4:0) "}\n" --> (4:0) "}\n" +(6:0) "export { value as first, value as second }\n" --> (6:0) "export { value as first, value as second }\n" +[unmapped] --> (8:0) "registerServerReference(value, \"first\");\n" +[unmapped] --> (9:0) "registerServerReference(value, \"second\");" +``` + +## module-export-wrap + +```txt +(0:0) "'use server'\n" --> (0:0) "'use server'\n" +(2:0) "async function value() {\n" --> (2:0) "async function value() {\n" +(3:0) " return 'multiple aliases called'\n" --> (3:0) " return 'multiple aliases called'\n" +(4:0) "}\n" --> (4:0) "}\n" +[unmapped] --> (8:0) "const $$module_0_binding_first = /* #__PURE__ */ registerServerReference(value, \"first\");\n" +[unmapped] --> (9:0) "export { $$module_0_binding_first as first };\n" +[unmapped] --> (10:0) "const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(value, \"second\");\n" +[unmapped] --> (11:0) "export { $$module_1_binding_second as second };\n" +``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md new file mode 100644 index 000000000..0cf2f4481 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md @@ -0,0 +1,78 @@ +## Input + +```js +'use server' + +async function value() { + return 'multiple aliases called' +} + +export { value as first, value as second } +``` + +## wrap-export + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gdmFsdWUoKSB7CiAgcmV0dXJuICdtdWx0aXBsZSBhbGlhc2VzIGNhbGxlZCcKfQoKCjsKY29uc3QgJCR3cmFwX3ZhbHVlID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHZhbHVlLCAiZmlyc3QiKTsKZXhwb3J0IHsgJCR3cmFwX3ZhbHVlIGFzIGZpcnN0IH07CmNvbnN0ICQkd3JhcF92YWx1ZSA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSh2YWx1ZSwgInNlY29uZCIpOwpleHBvcnQgeyAkJHdyYXBfdmFsdWUgYXMgc2Vjb25kIH07CjM0MgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgcmV0dXJuICdtdWx0aXBsZSBhbGlhc2VzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgdmFsdWUgYXMgZmlyc3QsIHZhbHVlIGFzIHNlY29uZCB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTTtBQUNqQzs7Ozs7Ozs7In0=) + +```js +'use server' + +async function value() { + return 'multiple aliases called' +} + + +; +const $$wrap_value = /* #__PURE__ */ registerServerReference(value, "first"); +export { $$wrap_value as first }; +const $$wrap_value = /* #__PURE__ */ registerServerReference(value, "second"); +export { $$wrap_value as second }; +``` + +## module-export-effect + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjAzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gdmFsdWUoKSB7CiAgcmV0dXJuICdtdWx0aXBsZSBhbGlhc2VzIGNhbGxlZCcKfQoKZXhwb3J0IHsgdmFsdWUgYXMgZmlyc3QsIHZhbHVlIGFzIHNlY29uZCB9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSh2YWx1ZSwgImZpcnN0Iik7CnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHZhbHVlLCAic2Vjb25kIik7NDI4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIHZhbHVlKCkge1xuICByZXR1cm4gJ211bHRpcGxlIGFsaWFzZXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyB2YWx1ZSBhcyBmaXJzdCwgdmFsdWUgYXMgc2Vjb25kIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNO0FBQ2pDOztBQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzs7OyJ9) + +```js +'use server' + +async function value() { + return 'multiple aliases called' +} + +export { value as first, value as second } + +registerServerReference(value, "first"); +registerServerReference(value, "second"); +``` + +## module-export-wrap + +**Status:** transformed + +**References:** first, second + +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzU1ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gdmFsdWUoKSB7CiAgcmV0dXJuICdtdWx0aXBsZSBhbGlhc2VzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZmlyc3QgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UodmFsdWUsICJmaXJzdCIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZmlyc3QgYXMgZmlyc3QgfTsKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSh2YWx1ZSwgInNlY29uZCIpOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kIGFzIHNlY29uZCB9OwozNDIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gdmFsdWUoKSB7XG4gIHJldHVybiAnbXVsdGlwbGUgYWxpYXNlcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IHZhbHVlIGFzIGZpcnN0LCB2YWx1ZSBhcyBzZWNvbmQgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU07QUFDakM7Ozs7Ozs7OyJ9) + +```js +'use server' + +async function value() { + return 'multiple aliases called' +} + + + +const $$module_0_binding_first = /* #__PURE__ */ registerServerReference(value, "first"); +export { $$module_0_binding_first as first }; +const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(value, "second"); +export { $$module_1_binding_second as second }; +``` From c4f51314a2ea80dc6dec1e5fd226457c4fd1ede5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 10:54:10 +0900 Subject: [PATCH 53/82] nit --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 6 +++--- 1 file changed, 3 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 abac4a186..e8d9add6c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -327,19 +327,19 @@ export function transformModuleExportWrap( declaration.id if (namedDeclaration) { // export default function Page() {} - // export default class Page {} + // ^^^^^^^^^^^^^^ // ⬇️ (keep named declarations in place and append wrapped binding) // function Page() {} - // class Page {} // const $$module_0_binding_default = __WRAP__(Page, 'default') // export { $$module_0_binding_default as default } implementation = namedDeclaration.name output.remove(group.node.start, declaration.start) } else { // export default current - // export default async () => {} + // ^^^^^^^^^^^^^^ // ⬇️ (snapshot at the original export site) // const $$module_0_implementation_default = current + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // const $$module_0_binding_default = __WRAP__($$module_0_implementation_default, 'default') // export { $$module_0_binding_default as default } implementation = createName('implementation', 'default') From 348801223fa1ceacfd547a044c284f87ddc4ba99 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 10:55:30 +0900 Subject: [PATCH 54/82] refactor(rsc): simplify default export rewrite Co-authored-by: OpenCode --- .../wrap-export/default-comments.js.map.snap.md | 14 +++++++------- .../wrap-export/default-comments.js.snap.md | 10 +++++----- .../src/transforms/module-export-wrap.test.ts | 14 -------------- .../src/transforms/module-export-wrap.ts | 7 +------ 4 files changed, 13 insertions(+), 32 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md index 1ae64059d..310cac4a6 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md @@ -2,7 +2,7 @@ ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:0) "export /* before */ default /* after */ " --> (2:0) "const $$default = " +(2:0) "export default /* before */ /* after */ " --> (2:0) "const $$default = " (2:40) "async function () {\n" --> (2:18) "async function () {\n" (3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" (4:0) "}\n" --> (4:0) "}\n" @@ -15,21 +15,21 @@ ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:6) " /* before */ default /* after */ " --> (2:0) "const $$effect_default = " +(2:6) " default /* before */ /* after */ " --> (2:0) "const $$effect_default = " (2:40) "async function () {\n" --> (2:25) "async function () {\n" (3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" (4:0) "}\n" --> (4:0) "}\n" -(2:0) "export /* before */ default /* after */ async function () {\n" --> (5:0) "\n" -(2:0) "export /* before */ default /* after */ async function () {\n" --> (6:0) "registerServerReference($$effect_default, \"default\");\n" -(2:0) "export /* before */ default /* after */ async function () {\n" --> (7:0) "export default $$effect_default;\n" +(2:0) "export default /* before */ /* after */ async function () {\n" --> (5:0) "\n" +(2:0) "export default /* before */ /* after */ async function () {\n" --> (6:0) "registerServerReference($$effect_default, \"default\");\n" +(2:0) "export default /* before */ /* after */ async function () {\n" --> (7:0) "export default $$effect_default;\n" ``` ## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:0) "export /* before */ default /* after */ " --> (2:0) "/* before */ const $$module_0_implementation_default = /* after */ " -(2:40) "async function () {\n" --> (2:67) "async function () {\n" +(2:0) "export default /* before */ /* after */ " --> (2:0) "const $$module_0_implementation_default = " +(2:40) "async function () {\n" --> (2:42) "async function () {\n" (3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" (4:0) "}\n" --> (4:0) "}\n" [unmapped] --> (6:0) "const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" });\n" diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md index 51d6023d8..7ea04bca0 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md @@ -3,7 +3,7 @@ ```js 'use server' -export /* before */ default /* after */ async function () { +export default /* before */ /* after */ async function () { return 'default comments called' } ``` @@ -14,7 +14,7 @@ export /* before */ default /* after */ async function () { **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KOwpjb25zdCAkJHdyYXBfJCRkZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwXyQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgLyogYmVmb3JlICovIGRlZmF1bHQgLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsa0JBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KOwpjb25zdCAkJHdyYXBfJCRkZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwXyQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCAvKiBiZWZvcmUgKi8gLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsa0JBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) ```js 'use server' @@ -33,7 +33,7 @@ export { $$wrap_$$default as default }; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTg0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwozNDEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IC8qIGJlZm9yZSAqLyBkZWZhdWx0IC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGNvbW1lbnRzIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVMLHlCQUFrQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDakM7QUFGQTtBQUFBO0FBQUE7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTg0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwozNDEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgLyogYmVmb3JlICovIC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGNvbW1lbnRzIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVMLHlCQUFrQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDakM7QUFGQTtBQUFBO0FBQUE7In0=) ```js 'use server' @@ -52,12 +52,12 @@ export default $$effect_default; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzY0ACd1c2Ugc2VydmVyJwoKLyogYmVmb3JlICovIGNvbnN0ICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCA9IC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJwp9Cgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpLCAibmFtZSIsIHsgdmFsdWU6ICJkZWZhdWx0IiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IC8qIGJlZm9yZSAqLyBkZWZhdWx0IC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGNvbW1lbnRzIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLG1FQUF3QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDakM7Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzM5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0ID0gLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJkZWZhdWx0IiksICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCAvKiBiZWZvcmUgKi8gLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsMENBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) ```js 'use server' -/* before */ const $$module_0_implementation_default = /* after */ async function () { +const $$module_0_implementation_default = async function () { return 'default comments called' } 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 d2310b5a7..dbcd583b3 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -130,20 +130,6 @@ export default async function Page() {} expect(filtered.references).toEqual([]) }) - test('preserves comments around default export keywords', async () => { - const result = await transform( - `export /* before */ default /* after */ async () => {}`, - ) - - expect(result.output.toString()).toMatchInlineSnapshot(` - "/* before */ const $$module_0_implementation_default = /* after */ async () => {} - - const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(wrap($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" }); - export { $$module_0_binding_default as default }; - " - `) - }) - test('controls export-all preservation', async () => { const input = `export * from './dep'` diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index e8d9add6c..f92b60c57 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -343,15 +343,10 @@ export function transformModuleExportWrap( // const $$module_0_binding_default = __WRAP__($$module_0_implementation_default, 'default') // export { $$module_0_binding_default as default } implementation = createName('implementation', 'default') - const prefix = input.slice(group.node.start, declaration.start) output.update( group.node.start, declaration.start, - prefix.replace( - /^export((?:\s|\/\*[\s\S]*?\*\/|\/\/[^\n]*(?:\n|$))*)default/, - (_, trivia: string) => - `${trivia.replace(/^\s+/, '')}const ${implementation} =`, - ), + `const ${implementation} = `, ) } if (group.directFunction) { From 006c50962d9a2a5e29972926dcbac63f27164d16 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 10:57:43 +0900 Subject: [PATCH 55/82] test(rsc): preserve source map fixture formatting Co-authored-by: OpenCode --- .oxfmtrc.json | 1 + .../source-map/wrap-export/default-comments.js | 2 +- .../wrap-export/default-comments.js.map.snap.md | 12 ++++++------ .../wrap-export/default-comments.js.snap.md | 8 ++++---- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.oxfmtrc.json b/.oxfmtrc.json index ec2b1779f..797131d57 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -10,6 +10,7 @@ }, "ignorePatterns": [ "*.snap.*", + "packages/plugin-rsc/src/transforms/fixtures/source-map/", "typescript-eslint/", "packages/*/CHANGELOG.md", "playground-temp/", diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js index ad74de428..b4c2fe4b9 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js @@ -1,5 +1,5 @@ 'use server' -export default /* before */ /* after */ async function () { +export /* before */ default /* after */ async function () { return 'default comments called' } diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md index 310cac4a6..d2f09cad3 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md @@ -2,7 +2,7 @@ ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:0) "export default /* before */ /* after */ " --> (2:0) "const $$default = " +(2:0) "export /* before */ default /* after */ " --> (2:0) "const $$default = " (2:40) "async function () {\n" --> (2:18) "async function () {\n" (3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" (4:0) "}\n" --> (4:0) "}\n" @@ -15,20 +15,20 @@ ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:6) " default /* before */ /* after */ " --> (2:0) "const $$effect_default = " +(2:6) " /* before */ default /* after */ " --> (2:0) "const $$effect_default = " (2:40) "async function () {\n" --> (2:25) "async function () {\n" (3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" (4:0) "}\n" --> (4:0) "}\n" -(2:0) "export default /* before */ /* after */ async function () {\n" --> (5:0) "\n" -(2:0) "export default /* before */ /* after */ async function () {\n" --> (6:0) "registerServerReference($$effect_default, \"default\");\n" -(2:0) "export default /* before */ /* after */ async function () {\n" --> (7:0) "export default $$effect_default;\n" +(2:0) "export /* before */ default /* after */ async function () {\n" --> (5:0) "\n" +(2:0) "export /* before */ default /* after */ async function () {\n" --> (6:0) "registerServerReference($$effect_default, \"default\");\n" +(2:0) "export /* before */ default /* after */ async function () {\n" --> (7:0) "export default $$effect_default;\n" ``` ## module-export-wrap ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\n" -(2:0) "export default /* before */ /* after */ " --> (2:0) "const $$module_0_implementation_default = " +(2:0) "export /* before */ default /* after */ " --> (2:0) "const $$module_0_implementation_default = " (2:40) "async function () {\n" --> (2:42) "async function () {\n" (3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" (4:0) "}\n" --> (4:0) "}\n" diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md index 7ea04bca0..859699234 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md @@ -3,7 +3,7 @@ ```js 'use server' -export default /* before */ /* after */ async function () { +export /* before */ default /* after */ async function () { return 'default comments called' } ``` @@ -14,7 +14,7 @@ export default /* before */ /* after */ async function () { **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KOwpjb25zdCAkJHdyYXBfJCRkZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwXyQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCAvKiBiZWZvcmUgKi8gLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsa0JBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjE5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRkZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KOwpjb25zdCAkJHdyYXBfJCRkZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCR3cmFwXyQkZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgLyogYmVmb3JlICovIGRlZmF1bHQgLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsa0JBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) ```js 'use server' @@ -33,7 +33,7 @@ export { $$wrap_$$default as default }; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MTg0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwozNDEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgLyogYmVmb3JlICovIC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGNvbW1lbnRzIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVMLHlCQUFrQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDakM7QUFGQTtBQUFBO0FBQUE7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTg0ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRlZmZlY3RfZGVmYXVsdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJwp9CgpyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGVmZmVjdF9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgZGVmYXVsdCAkJGVmZmVjdF9kZWZhdWx0OwozNDEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IC8qIGJlZm9yZSAqLyBkZWZhdWx0IC8qIGFmdGVyICovIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGNvbW1lbnRzIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVMLHlCQUFrQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDakM7QUFGQTtBQUFBO0FBQUE7In0=) ```js 'use server' @@ -52,7 +52,7 @@ export default $$effect_default; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzM5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0ID0gLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJkZWZhdWx0IiksICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCAvKiBiZWZvcmUgKi8gLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsMENBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzM5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0ID0gLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJkZWZhdWx0IiksICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgLyogYmVmb3JlICovIGRlZmF1bHQgLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsMENBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) ```js 'use server' From 3d4ab9882a3a86bcec499bfec473da2211540745 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:18:56 +0900 Subject: [PATCH 56/82] nit --- .../src/transforms/module-export-wrap.ts | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index f92b60c57..715544ee5 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -184,12 +184,11 @@ export function transformModuleExportWrap( if (!filter(entry.exportName, meta)) continue // export function f() {} - // export class C {} - // ⬇️ (keep declarations in place and append wrapped bindings) - // function f() {} - // class C {} - // const $$module_0_binding_f = __WRAP__(f, 'f') - // export { $$module_0_binding_f as f } + // ^^^^^^ + // ⬇️ + // function f() {}. << strip export + // const $$module_0_binding_f = __WRAP__(f, 'f') << emit wrapper + // export { $$module_0_binding_f as f } << emit export if (group.directFunction) { validateNonAsyncFunction(options, group.directFunction.node) } @@ -201,13 +200,15 @@ export function transformModuleExportWrap( group.directFunction?.originalName, ) } else if (group.type === 'variable-declaration') { - // export const action = async () => {}, value = init() - // ⬇️ (keep initializers in place and append wrapped bindings) - // const action = async () => {}, value = init() - // const $$module_0_binding_action = __WRAP__(action, 'action') - // export { $$module_0_binding_action as action } - // const $$module_1_binding_value = __WRAP__(value, 'value') - // export { $$module_1_binding_value as value } + // export const first = async () => {}, second = init() + // ^^^^^^ + // ⬇️ + // const first = async () => {}, second = init() << strip export + // const $$module_0_binding_first = __WRAP__(first, 'first') << emit wrapper + // export { $$module_0_binding_first as first } << emit export + // const $$module_1_binding_second = __WRAP__(second, 'second') << emit wrapper + // export { $$module_1_binding_second as second } << emit export + const wrappedBindingNames = new Set() const exportNames = group.declarators.flatMap((item) => item.exports.map((entry) => entry.exportName), @@ -240,11 +241,11 @@ export function transformModuleExportWrap( } if (wrappedBindingNames.size > 0) { - // export const selected = init(), skipped = init() + // export const selected = x, skipped = y // ^^^^^^ - // ⬇️ (remove `export` and restore the unwrapped export separately) - // const selected = init(), skipped = init() - // export { skipped } + // ⬇️ + // const selected = x, skipped = y << strip export + // export { skipped } << add back filtered-out exports output.remove(group.node.start, group.declaration.start) for (const name of exportNames) { if (!wrappedBindingNames.has(name)) { From 8173911e7f57dca4b986db2e53c7df1fb051b670 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:21:23 +0900 Subject: [PATCH 57/82] refactor(rsc): simplify wrapped re-exports Co-authored-by: OpenCode --- .../wrap-export/reexport-attributes.js.map.snap.md | 2 +- .../wrap-export/reexport-attributes.js.snap.md | 4 ++-- .../plugin-rsc/src/transforms/module-export-wrap.ts | 12 +++++------- 3 files changed, 8 insertions(+), 10 deletions(-) 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 818d5ba07..906c7b9bb 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 @@ -21,7 +21,7 @@ ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\n" -[unmapped] --> (4:0) "import { reexportedAction as $$module_0_implementation_reexportedAction } from './reexport-source' with { type: 'json' };\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-attributes.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.snap.md index 41b0a029a..5dee28e4f 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 @@ -47,14 +47,14 @@ registerServerReference($$effect_import_reexportedAction, "reexportedAction"); **References:** reexportedAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzU1ACd1c2Ugc2VydmVyJwoKCgppbXBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIGFzICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJyB3aXRoIHsgdHlwZTogJ2pzb24nIH07CmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19yZWV4cG9ydGVkQWN0aW9uID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVleHBvcnRlZEFjdGlvbiwgInJlZXhwb3J0ZWRBY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX3JlZXhwb3J0ZWRBY3Rpb24gYXMgcmVleHBvcnRlZEFjdGlvbiB9OwoxOTgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IHsgcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJyB3aXRoIHsgdHlwZTogJ2pzb24nIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOzs7Ozs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzMzACd1c2Ugc2VydmVyJwoKCgppbXBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIGFzICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlZXhwb3J0ZWRBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE5OAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnIHdpdGggeyB0eXBlOiAnanNvbicgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07Ozs7Ozs7In0=) ```js 'use server' -import { reexportedAction as $$module_0_implementation_reexportedAction } from './reexport-source' with { type: 'json' }; +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/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 715544ee5..b65e63815 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -282,17 +282,15 @@ 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' } + // export { remote as action } from './dep' + // ⬇️ + // import { remote as $$module_0_implementation_action } from './dep' // 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) - .replace(/;?\s*$/, ';') + // TODO: Preserve import attributes from the original re-export. wrappedBindingCode.push( - `import { ${localName} as ${implementation} } from ${group.node.source.raw}${sourceTail}`, + `import { ${localName} as ${implementation} } from ${group.node.source.raw};`, ) } emitWrappedBinding(implementation, exportName, meta) From 2cb474a3c95263204c9deb2ff29f74e4122ee26c Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:24:01 +0900 Subject: [PATCH 58/82] docs(rsc): link local binding fixture Co-authored-by: OpenCode --- ...ical-vs-wrapped-binding.js => local-binding-preservation.js} | 0 ...js.map.snap.md => local-binding-preservation.js.map.snap.md} | 0 ...binding.js.snap.md => local-binding-preservation.js.snap.md} | 0 packages/plugin-rsc/src/transforms/module-export-wrap.ts | 2 ++ 4 files changed, 2 insertions(+) rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{canonical-vs-wrapped-binding.js => local-binding-preservation.js} (100%) rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{canonical-vs-wrapped-binding.js.map.snap.md => local-binding-preservation.js.map.snap.md} (100%) rename packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/{canonical-vs-wrapped-binding.js.snap.md => local-binding-preservation.js.snap.md} (100%) 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/local-binding-preservation.js similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js 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/local-binding-preservation.js.map.snap.md similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.map.snap.md rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md 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/local-binding-preservation.js.snap.md similarity index 100% rename from packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/canonical-vs-wrapped-binding.js.snap.md rename to packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index b65e63815..076fadc37 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -82,6 +82,8 @@ export type TransformModuleExportWrapResult = { * * Local references to both `someFn` and `someValue` retain their original * values. Importers receive the generated wrapper bindings. + * See `fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md` + * for a side-by-side comparison with `transformWrapExport`. * * Generated `$$module_*` names are not deconflicted from user bindings, * consistent with the other transform helpers. From ec4a9b591fe2ba8a4317dbf83930dfae7211604a Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:37:24 +0900 Subject: [PATCH 59/82] todo --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 7 +++++-- 1 file changed, 5 insertions(+), 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 076fadc37..730eac67a 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -172,6 +172,7 @@ export function transformModuleExportWrap( meta, originalName, ) + // TODO: preserve original export location for generated code? (update + move trick) wrappedBindingCode.push( `const ${binding} = ${generate(context)};`, exportBinding(binding, exportName), @@ -237,6 +238,7 @@ export function transformModuleExportWrap( if (selected && declarator.node.init) { validateNonAsyncFunction( options, + // TODO: just declarator.node.init? directFunction?.node ?? declarator.node.init, ) } @@ -251,6 +253,7 @@ export function transformModuleExportWrap( output.remove(group.node.start, group.declaration.start) for (const name of exportNames) { if (!wrappedBindingNames.has(name)) { + // TODO: inline exportBinding? wrappedBindingCode.push(exportBinding(name, name)) } } @@ -329,7 +332,7 @@ export function transformModuleExportWrap( if (namedDeclaration) { // export default function Page() {} // ^^^^^^^^^^^^^^ - // ⬇️ (keep named declarations in place and append wrapped binding) + // ⬇️ // function Page() {} // const $$module_0_binding_default = __WRAP__(Page, 'default') // export { $$module_0_binding_default as default } @@ -338,7 +341,7 @@ export function transformModuleExportWrap( } else { // export default current // ^^^^^^^^^^^^^^ - // ⬇️ (snapshot at the original export site) + // ⬇️ // const $$module_0_implementation_default = current // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // const $$module_0_binding_default = __WRAP__($$module_0_implementation_default, 'default') From 7f91da13a3f9e436da013ec065324213e4054ba3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:38:14 +0900 Subject: [PATCH 60/82] refactor(rsc): simplify declarator validation Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 730eac67a..6bc046646 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -218,7 +218,6 @@ export function transformModuleExportWrap( ) for (const declarator of group.declarators) { - const directFunction = declarator.directFunction let selected = false for (const entry of declarator.exports) { @@ -231,16 +230,12 @@ export function transformModuleExportWrap( entry.localName, entry.exportName, meta, - directFunction?.originalName, + declarator.directFunction?.originalName, ) } if (selected && declarator.node.init) { - validateNonAsyncFunction( - options, - // TODO: just declarator.node.init? - directFunction?.node ?? declarator.node.init, - ) + validateNonAsyncFunction(options, declarator.node.init) } } From b099c9f005ef824d4bd21ba9a0b2f61ecb91019e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:39:09 +0900 Subject: [PATCH 61/82] nit --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 6bc046646..4342fbbad 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -234,6 +234,7 @@ export function transformModuleExportWrap( ) } + // TODO: should reject without `declarator.node.init`? if (selected && declarator.node.init) { validateNonAsyncFunction(options, declarator.node.init) } From f5c5db561a5aef320674e08659f97551c5f1f256 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:50:36 +0900 Subject: [PATCH 62/82] fix(rsc): reject uninitialized module exports Co-authored-by: OpenCode --- .../src/transforms/module-export-effect.test.ts | 4 ++++ .../src/transforms/module-export-effect.ts | 11 ++++++++--- .../src/transforms/module-export-wrap.test.ts | 4 ++++ .../src/transforms/module-export-wrap.ts | 12 ++++++++---- packages/plugin-rsc/src/transforms/utils.ts | 14 ++++++++++---- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.test.ts b/packages/plugin-rsc/src/transforms/module-export-effect.test.ts index a253a664c..11dff2921 100644 --- a/packages/plugin-rsc/src/transforms/module-export-effect.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-effect.test.ts @@ -81,6 +81,10 @@ export default async function Page() {} transform(input, { rejectNonAsyncFunction: true }), ).rejects.toThrow('unsupported non async function') + await expect( + transform(`export let action`, { rejectNonAsyncFunction: true }), + ).rejects.toThrow('unsupported non async function') + const filtered = await transform(input, { rejectNonAsyncFunction: true, filter: () => false, diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.ts b/packages/plugin-rsc/src/transforms/module-export-effect.ts index d6d6b633e..cdce3e84f 100644 --- a/packages/plugin-rsc/src/transforms/module-export-effect.ts +++ b/packages/plugin-rsc/src/transforms/module-export-effect.ts @@ -3,7 +3,7 @@ import type { Identifier } from 'estree' import MagicString from 'magic-string' import type { ESTree } from 'vite' import { scanModuleExports, type ModuleExportMeta } from './module-export-scan' -import { validateNonAsyncFunction } from './utils' +import { rejectNonAsyncFunction, validateNonAsyncFunction } from './utils' // TODO: Metadata, filtering, and returned reference contexts are currently // ported only for transformWrapExport compatibility. Remove them if no @@ -128,8 +128,13 @@ export function transformModuleExportEffect( effects.push(generate({ binding, exportName, meta })) } } - if (validate && declarator.node.init) { - validateNonAsyncFunction(options, declarator.node.init) + if (validate) { + const init = declarator.node.init + if (!init) { + rejectNonAsyncFunction(options, declarator.node.start) + } else { + validateNonAsyncFunction(options, init) + } } } if (effects.length > 0) { 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 dbcd583b3..06f5667e9 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -122,6 +122,10 @@ export default async function Page() {} transform(input, { rejectNonAsyncFunction: true }), ).rejects.toThrow('unsupported non async function') + await expect( + transform(`export let action`, { rejectNonAsyncFunction: true }), + ).rejects.toThrow('unsupported non async function') + const filtered = await transform(input, { rejectNonAsyncFunction: true, filter: () => false, diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 4342fbbad..0d09eea22 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -2,7 +2,7 @@ import { tinyassert } from '@hiogawa/utils' import MagicString from 'magic-string' import type { ESTree } from 'vite' import { scanModuleExports, type ModuleExportMeta } from './module-export-scan' -import { validateNonAsyncFunction } from './utils' +import { rejectNonAsyncFunction, validateNonAsyncFunction } from './utils' export type TransformModuleExportWrapContext = { /** The local expression that evaluates to the exported implementation. */ @@ -234,9 +234,13 @@ export function transformModuleExportWrap( ) } - // TODO: should reject without `declarator.node.init`? - if (selected && declarator.node.init) { - validateNonAsyncFunction(options, declarator.node.init) + if (selected) { + const init = declarator.node.init + if (!init) { + rejectNonAsyncFunction(options, declarator.node.start) + } else { + validateNonAsyncFunction(options, init) + } } } diff --git a/packages/plugin-rsc/src/transforms/utils.ts b/packages/plugin-rsc/src/transforms/utils.ts index b6595877e..66feb20cc 100644 --- a/packages/plugin-rsc/src/transforms/utils.ts +++ b/packages/plugin-rsc/src/transforms/utils.ts @@ -89,7 +89,6 @@ export function validateNonAsyncFunction( // export default function/class can be unnamed node: Node | ExportDefaultDeclaration['declaration'], ): void { - if (!opts.rejectNonAsyncFunction) return if ( node.type === 'ClassDeclaration' || node.type === 'ClassExpression' || @@ -98,8 +97,15 @@ export function validateNonAsyncFunction( node.type === 'ArrowFunctionExpression') && !node.async) ) { - throw Object.assign(new Error(`unsupported non async function`), { - pos: node.start, - }) + rejectNonAsyncFunction(opts, node.start) + } +} + +export function rejectNonAsyncFunction( + opts: { rejectNonAsyncFunction?: boolean }, + pos: number, +): void { + if (opts.rejectNonAsyncFunction) { + throw Object.assign(new Error(`unsupported non async function`), { pos }) } } From 07ddc5e6616e63cde20ef90212e854db3c929e8a Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:51:30 +0900 Subject: [PATCH 63/82] fix(rsc): validate wrapped class exports Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-wrap.test.ts | 4 ++++ packages/plugin-rsc/src/transforms/module-export-wrap.ts | 4 +--- 2 files changed, 5 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 06f5667e9..8f89f4719 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -126,6 +126,10 @@ export default async function Page() {} transform(`export let action`, { rejectNonAsyncFunction: true }), ).rejects.toThrow('unsupported non async function') + await expect( + transform(`export class Action {}`, { rejectNonAsyncFunction: true }), + ).rejects.toThrow('unsupported non async function') + const filtered = await transform(input, { rejectNonAsyncFunction: true, filter: () => false, diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 0d09eea22..94f3e81b6 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -192,9 +192,7 @@ export function transformModuleExportWrap( // function f() {}. << strip export // const $$module_0_binding_f = __WRAP__(f, 'f') << emit wrapper // export { $$module_0_binding_f as f } << emit export - if (group.directFunction) { - validateNonAsyncFunction(options, group.directFunction.node) - } + validateNonAsyncFunction(options, group.declaration) output.remove(group.node.start, group.declaration.start) emitWrappedBinding( name, From c8ed61e7d615305a134b49bbc46d8d681e885ba9 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:53:30 +0900 Subject: [PATCH 64/82] fix(rsc): validate wrapped default classes Co-authored-by: OpenCode --- .../plugin-rsc/src/transforms/module-export-wrap.test.ts | 6 ++++++ packages/plugin-rsc/src/transforms/module-export-wrap.ts | 6 +----- 2 files changed, 7 insertions(+), 5 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 8f89f4719..a2f0c7586 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -130,6 +130,12 @@ export default async function Page() {} transform(`export class Action {}`, { rejectNonAsyncFunction: true }), ).rejects.toThrow('unsupported non async function') + await expect( + transform(`export default class Action {}`, { + rejectNonAsyncFunction: true, + }), + ).rejects.toThrow('unsupported non async function') + const filtered = await transform(input, { rejectNonAsyncFunction: true, filter: () => false, diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 94f3e81b6..5cf9a948c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -351,11 +351,7 @@ export function transformModuleExportWrap( `const ${implementation} = `, ) } - if (group.directFunction) { - validateNonAsyncFunction(options, group.directFunction.node) - } else if (!namedDeclaration) { - validateNonAsyncFunction(options, declaration) - } + validateNonAsyncFunction(options, declaration) emitWrappedBinding( implementation, 'default', From d57389b99b92eb46f7efb0c26fd8a42270b92cf7 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:55:06 +0900 Subject: [PATCH 65/82] test(rsc): enumerate rejected wrapper exports Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.test.ts | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 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 a2f0c7586..7001a6e0c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -115,33 +115,24 @@ export default async function Page() {} expect(filtered.referenceNames).toEqual([]) }) - test('only validates selected exports as async functions', async () => { - const input = `export function action() {}` - + test.each([ + `export function action() {}`, + `export let action`, + `export class Action {}`, + `export default class Action {}`, + ])('rejects non-async function export: %s', async (input) => { await expect( transform(input, { rejectNonAsyncFunction: true }), ).rejects.toThrow('unsupported non async function') + }) - await expect( - transform(`export let action`, { rejectNonAsyncFunction: true }), - ).rejects.toThrow('unsupported non async function') - - await expect( - transform(`export class Action {}`, { rejectNonAsyncFunction: true }), - ).rejects.toThrow('unsupported non async function') - - await expect( - transform(`export default class Action {}`, { - rejectNonAsyncFunction: true, - }), - ).rejects.toThrow('unsupported non async function') - - const filtered = await transform(input, { + test('only validates selected exports', async () => { + const result = await transform(`export function action() {}`, { rejectNonAsyncFunction: true, filter: () => false, }) - expect(filtered.output.hasChanged()).toBe(false) - expect(filtered.references).toEqual([]) + expect(result.output.hasChanged()).toBe(false) + expect(result.references).toEqual([]) }) test('controls export-all preservation', async () => { From 5672b095aeb32f63fcdfe0f958e3ca31268e4057 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:56:47 +0900 Subject: [PATCH 66/82] nit --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 7 +++---- 1 file changed, 3 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 5cf9a948c..c1c966a25 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -361,11 +361,10 @@ export function transformModuleExportWrap( } } + // emit accumulated wrap + export statements at the end, e.g. + // const $$module_0_binding_action = __WRAP__(action, 'action') + // export { $$module_0_binding_action as action } 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${wrappedBindingCode.join('\n')}\n`) } From 0dd4cda59b5e663cbd1a30eb127b4f685db32bd3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 11:57:28 +0900 Subject: [PATCH 67/82] refactor(rsc): use scanned default export kind Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index c1c966a25..da83d1e2a 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -323,18 +323,15 @@ export function transformModuleExportWrap( if (!filter('default', meta)) continue let implementation: string - const namedDeclaration = - (declaration.type === 'FunctionDeclaration' || - declaration.type === 'ClassDeclaration') && - declaration.id - if (namedDeclaration) { + if (group.kind === 'named-declaration') { // export default function Page() {} // ^^^^^^^^^^^^^^ // ⬇️ // function Page() {} // const $$module_0_binding_default = __WRAP__(Page, 'default') // export { $$module_0_binding_default as default } - implementation = namedDeclaration.name + tinyassert(group.localName) + implementation = group.localName output.remove(group.node.start, declaration.start) } else { // export default current From 5f066a73281ac51eb1338410d698dda77a3cfc22 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:03:46 +0900 Subject: [PATCH 68/82] docs(rsc): note async export metadata Co-authored-by: OpenCode --- .../src/transforms/module-export-scan.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index 0a55b2242..dd78f3a42 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -30,6 +30,20 @@ export type ModuleExportDirectFunction = { } export type ModuleExportMeta = { + /* + * TODO: Track `isAsyncFunction` here so module export transforms can share + * static validation without probing export nodes themselves. + * + * | Export value | `isAsyncFunction` | Validation change | + * | ----------------------------- | ----------------- | ----------------- | + * | Async function or arrow | `true` | None | + * | Sync function | `false` | None | + * | Class | `false` | None | + * | Literal, object, or array | `false` | Accept -> reject | + * | Missing initializer | `false` | None | + * | Identifier or call expression | `undefined` | None | + * | Export specifier or re-export | `undefined` | None | + */ /** * The local declaration name when statically available. * From b0f738f9c69b5cefc3f4d74a35610553b0d25fdb Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:20:20 +0900 Subject: [PATCH 69/82] nit --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index da83d1e2a..8eaf68184 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -251,7 +251,6 @@ export function transformModuleExportWrap( output.remove(group.node.start, group.declaration.start) for (const name of exportNames) { if (!wrappedBindingNames.has(name)) { - // TODO: inline exportBinding? wrappedBindingCode.push(exportBinding(name, name)) } } From b1601cb6b34cef8aecc33d536f6baa39810dea7c Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:28:04 +0900 Subject: [PATCH 70/82] nit --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 7 +++---- 1 file changed, 3 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 8eaf68184..3613f204c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -284,12 +284,11 @@ export function transformModuleExportWrap( let implementation = localName if (group.node.source) { - // export { remote as action } from './dep' + // export { action } from './dep' // ⬇️ - // import { remote as $$module_0_implementation_action } from './dep' - // const $$module_0_binding_action = __WRAP__($$module_0_implementation_action, 'action') - // export { $$module_0_binding_action as action } + // import { $$module_0_implementation_action } from './dep' << emit import at the end implementation = createName('implementation', exportName) + // TODO: shouldn't call it wrappedBindingCode? // TODO: Preserve import attributes from the original re-export. wrappedBindingCode.push( `import { ${localName} as ${implementation} } from ${group.node.source.raw};`, From 8bf15900ac16b22ada500195f590a4f637488669 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:37:39 +0900 Subject: [PATCH 71/82] refactor(rsc): clarify appended module code Co-authored-by: OpenCode --- .../src/transforms/module-export-wrap.ts | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 3613f204c..a1bdacc65 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -101,7 +101,7 @@ export function transformModuleExportWrap( const output = new MagicString(input) const filter = options.filter ?? (() => true) const references: TransformModuleExportWrapContext[] = [] - const wrappedBindingCode: string[] = [] + const appendedCode: string[] = [] function createContext( implementation: string, @@ -173,7 +173,7 @@ export function transformModuleExportWrap( originalName, ) // TODO: preserve original export location for generated code? (update + move trick) - wrappedBindingCode.push( + appendedCode.push( `const ${binding} = ${generate(context)};`, exportBinding(binding, exportName), ) @@ -251,7 +251,7 @@ export function transformModuleExportWrap( output.remove(group.node.start, group.declaration.start) for (const name of exportNames) { if (!wrappedBindingNames.has(name)) { - wrappedBindingCode.push(exportBinding(name, name)) + appendedCode.push(exportBinding(name, name)) } } } @@ -261,7 +261,7 @@ export function transformModuleExportWrap( // const $$module_0_binding_action = __WRAP__(selected, 'action') // export { $$module_0_binding_action as action } // export { skipped } - const preserved: string[] = [] + const skippedExports: string[] = [] let selected = false for (const entry of group.exports) { tinyassert(entry.node.local.type === 'Identifier') @@ -273,7 +273,7 @@ export function transformModuleExportWrap( } const { localName, exportName, meta } = entry if (!filter(exportName, meta)) { - preserved.push( + skippedExports.push( localName === exportName ? localName : `${localName} as ${exportName}`, @@ -288,9 +288,8 @@ export function transformModuleExportWrap( // ⬇️ // import { $$module_0_implementation_action } from './dep' << emit import at the end implementation = createName('implementation', exportName) - // TODO: shouldn't call it wrappedBindingCode? // TODO: Preserve import attributes from the original re-export. - wrappedBindingCode.push( + appendedCode.push( `import { ${localName} as ${implementation} } from ${group.node.source.raw};`, ) } @@ -298,14 +297,14 @@ export function transformModuleExportWrap( } if (selected) { + // remove original export statement output.remove(group.node.start, group.node.end) - if (preserved.length > 0) { + // re-emit skipped exports + if (skippedExports.length > 0) { const source = group.node.source ? ` from ${group.node.source.raw}` : '' - wrappedBindingCode.push( - `export { ${preserved.join(', ')} }${source};`, - ) + appendedCode.push(`export { ${skippedExports.join(', ')} }${source};`) } } } else if (group.type === 'export-all') { @@ -359,8 +358,8 @@ export function transformModuleExportWrap( // emit accumulated wrap + export statements at the end, e.g. // const $$module_0_binding_action = __WRAP__(action, 'action') // export { $$module_0_binding_action as action } - if (wrappedBindingCode.length > 0) { - output.append(`\n${wrappedBindingCode.join('\n')}\n`) + if (appendedCode.length > 0) { + output.append(`\n${appendedCode.join('\n')}\n`) } return { From a50856d910f43cb0b143f4a53c00b97b5f2160c3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:41:59 +0900 Subject: [PATCH 72/82] refactor(rsc): make wrapper purity explicit Co-authored-by: OpenCode --- .../examples/use-cache-callable/callable-cache-plugin.ts | 2 +- packages/plugin-rsc/src/plugin.ts | 2 +- .../source-map/wrap-export/classes.js.map.snap.md | 6 +++--- .../fixtures/source-map/wrap-export/classes.js.snap.md | 8 ++++---- .../wrap-export/default-anonymous-class.js.map.snap.md | 2 +- .../wrap-export/default-anonymous-class.js.snap.md | 4 ++-- .../wrap-export/default-anonymous.js.map.snap.md | 2 +- .../source-map/wrap-export/default-anonymous.js.snap.md | 4 ++-- .../wrap-export/default-comments.js.map.snap.md | 2 +- .../source-map/wrap-export/default-comments.js.snap.md | 4 ++-- .../default-identifier-reassignment.js.map.snap.md | 2 +- .../default-identifier-reassignment.js.snap.md | 4 ++-- .../wrap-export/default-identifier.js.map.snap.md | 2 +- .../source-map/wrap-export/default-identifier.js.snap.md | 4 ++-- .../source-map/wrap-export/default-named.js.map.snap.md | 2 +- .../source-map/wrap-export/default-named.js.snap.md | 4 ++-- .../wrap-export/dependent-declarators.js.map.snap.md | 4 ++-- .../wrap-export/dependent-declarators.js.snap.md | 6 +++--- .../wrap-export/destructured-export.js.map.snap.md | 2 +- .../source-map/wrap-export/destructured-export.js.snap.md | 4 ++-- .../wrap-export/local-alias-reassignment.js.map.snap.md | 2 +- .../wrap-export/local-alias-reassignment.js.snap.md | 4 ++-- .../source-map/wrap-export/local-alias.js.map.snap.md | 2 +- .../source-map/wrap-export/local-alias.js.snap.md | 4 ++-- .../wrap-export/local-binding-preservation.js.map.snap.md | 4 ++-- .../wrap-export/local-binding-preservation.js.snap.md | 6 +++--- .../local-export-before-declaration.js.map.snap.md | 2 +- .../local-export-before-declaration.js.snap.md | 4 ++-- .../wrap-export/multiple-aliases.js.map.snap.md | 4 ++-- .../source-map/wrap-export/multiple-aliases.js.snap.md | 6 +++--- .../wrap-export/multiple-exports.js.map.snap.md | 4 ++-- .../source-map/wrap-export/multiple-exports.js.snap.md | 6 +++--- .../wrap-export/named-function-expression.js.map.snap.md | 2 +- .../wrap-export/named-function-expression.js.snap.md | 4 ++-- .../source-map/wrap-export/named-function.js.map.snap.md | 2 +- .../source-map/wrap-export/named-function.js.snap.md | 4 ++-- .../wrap-export/pre-declaration-reference.js.map.snap.md | 2 +- .../wrap-export/pre-declaration-reference.js.snap.md | 4 ++-- .../source-map/wrap-export/recursive.js.map.snap.md | 2 +- .../fixtures/source-map/wrap-export/recursive.js.snap.md | 4 ++-- .../wrap-export/reexport-attributes.js.map.snap.md | 2 +- .../source-map/wrap-export/reexport-attributes.js.snap.md | 4 ++-- .../source-map/wrap-export/reexport.js.map.snap.md | 2 +- .../fixtures/source-map/wrap-export/reexport.js.snap.md | 4 ++-- .../source-map/wrap-export/variables.js.map.snap.md | 4 ++-- .../fixtures/source-map/wrap-export/variables.js.snap.md | 6 +++--- .../plugin-rsc/src/transforms/module-export-wrap.test.ts | 2 +- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 8 ++------ 48 files changed, 85 insertions(+), 89 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 268a48611..562129549 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 @@ -39,7 +39,7 @@ export function callableCachePlugin(): Plugin { const result = hasDirective(ast.body, directive) ? transformModuleExportWrap(code, ast, { generate: ({ implementation, originalName, exportName }) => - runtime(implementation, exportName, originalName ?? exportName), + `/* #__PURE__ */ ${runtime(implementation, exportName, originalName ?? exportName)}`, rejectNonAsyncFunction: true, }) : transformHoistInlineDirective(code, ast, { diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index efc109e51..bed192ded 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -2761,7 +2761,7 @@ export async function transformRscCssExport(options: { const result = transformModuleExportWrap(options.code, options.ast, { generate: ({ implementation, originalName, exportName, meta }) => - `__vite_rsc_wrap_css__(${implementation}, ${JSON.stringify( + `/* #__PURE__ */ __vite_rsc_wrap_css__(${implementation}, ${JSON.stringify( originalName ?? meta.defaultExportIdentifierName ?? exportName, )})`, filter: options.filter, diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md index 76c6ecf1f..19c97ed8e 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.map.snap.md @@ -40,10 +40,10 @@ (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] --> (8:0) "const $$module_0_binding_NamedClass = 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] --> (10:0) "const $$module_1_binding_ClassExpression = 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] --> (12:0) "const $$module_2_binding_default = 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 index 19121f813..33d6bcb85 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/classes.js.snap.md @@ -68,7 +68,7 @@ export default DefaultClass; **References:** NamedClass, ClassExpression, default -[Source map visualization](https://evanw.github.io/source-map-visualization/#NjAxACd1c2Ugc2VydmVyJwoKY2xhc3MgTmFtZWRDbGFzcyB7fQoKY29uc3QgQ2xhc3NFeHByZXNzaW9uID0gY2xhc3MgSW5uZXJDbGFzcyB7fQoKY2xhc3MgRGVmYXVsdENsYXNzIHt9Cgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfTmFtZWRDbGFzcyA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShOYW1lZENsYXNzLCAiTmFtZWRDbGFzcyIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfTmFtZWRDbGFzcyBhcyBOYW1lZENsYXNzIH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19DbGFzc0V4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoQ2xhc3NFeHByZXNzaW9uLCAiQ2xhc3NFeHByZXNzaW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlXzFfYmluZGluZ19DbGFzc0V4cHJlc3Npb24gYXMgQ2xhc3NFeHByZXNzaW9uIH07CmNvbnN0ICQkbW9kdWxlXzJfYmluZGluZ19kZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKERlZmF1bHRDbGFzcywgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMl9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozNzAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNsYXNzIE5hbWVkQ2xhc3Mge31cblxuZXhwb3J0IGNvbnN0IENsYXNzRXhwcmVzc2lvbiA9IGNsYXNzIElubmVyQ2xhc3Mge31cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmYXVsdENsYXNzIHt9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBRWxCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs7QUFFbEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDOzs7Ozs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NTUzACd1c2Ugc2VydmVyJwoKY2xhc3MgTmFtZWRDbGFzcyB7fQoKY29uc3QgQ2xhc3NFeHByZXNzaW9uID0gY2xhc3MgSW5uZXJDbGFzcyB7fQoKY2xhc3MgRGVmYXVsdENsYXNzIHt9Cgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfTmFtZWRDbGFzcyA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKE5hbWVkQ2xhc3MsICJOYW1lZENsYXNzIik7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19OYW1lZENsYXNzIGFzIE5hbWVkQ2xhc3MgfTsKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX0NsYXNzRXhwcmVzc2lvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKENsYXNzRXhwcmVzc2lvbiwgIkNsYXNzRXhwcmVzc2lvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfQ2xhc3NFeHByZXNzaW9uIGFzIENsYXNzRXhwcmVzc2lvbiB9Owpjb25zdCAkJG1vZHVsZV8yX2JpbmRpbmdfZGVmYXVsdCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKERlZmF1bHRDbGFzcywgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMl9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozNzAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNsYXNzIE5hbWVkQ2xhc3Mge31cblxuZXhwb3J0IGNvbnN0IENsYXNzRXhwcmVzc2lvbiA9IGNsYXNzIElubmVyQ2xhc3Mge31cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmYXVsdENsYXNzIHt9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBRWxCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs7QUFFbEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDOzs7Ozs7OzsifQ==) ```js 'use server' @@ -79,10 +79,10 @@ const ClassExpression = class InnerClass {} class DefaultClass {} -const $$module_0_binding_NamedClass = /* #__PURE__ */ registerServerReference(NamedClass, "NamedClass"); +const $$module_0_binding_NamedClass = registerServerReference(NamedClass, "NamedClass"); export { $$module_0_binding_NamedClass as NamedClass }; -const $$module_1_binding_ClassExpression = /* #__PURE__ */ registerServerReference(ClassExpression, "ClassExpression"); +const $$module_1_binding_ClassExpression = registerServerReference(ClassExpression, "ClassExpression"); export { $$module_1_binding_ClassExpression as ClassExpression }; -const $$module_2_binding_default = /* #__PURE__ */ registerServerReference(DefaultClass, "default"); +const $$module_2_binding_default = 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.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md index ecde934cf..5d1a1eb50 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.map.snap.md @@ -26,6 +26,6 @@ (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] --> (4:0) "const $$module_0_binding_default = 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 index 71aeb4286..e557c2617 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous-class.js.snap.md @@ -46,13 +46,13 @@ export default $$effect_default; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM4ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gY2xhc3Mge30KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0ID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwoxNzEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3Mge31cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLDBDQUFlLEtBQUssQ0FBQyxDQUFDOzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjIyACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gY2xhc3Mge30KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0ID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCBhcyBkZWZhdWx0IH07CjE3MQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB7fVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsMENBQWUsS0FBSyxDQUFDLENBQUM7Ozs7In0=) ```js 'use server' const $$module_0_implementation_default = class {} -const $$module_0_binding_default = /* #__PURE__ */ registerServerReference($$module_0_implementation_default, "default"); +const $$module_0_binding_default = 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-anonymous.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-anonymous.js.map.snap.md index a0d5e00e9..537821997 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 @@ -32,6 +32,6 @@ (2:15) "async function () {\n" --> (2:42) "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] --> (6:0) "const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" });\n" +[unmapped] --> (6:0) "const $$module_0_binding_default = Object.defineProperty(registerServerReference($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" });\n" [unmapped] --> (7:0) "export { $$module_0_binding_default as 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 763312c37..0da796b68 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/#MzQ5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9Cgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpLCAibmFtZSIsIHsgdmFsdWU6ICJkZWZhdWx0IiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozMjMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgYW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLDBDQUFlLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDM0M7Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzMzACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJwp9Cgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJkZWZhdWx0IiksICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyMwB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBhbm9ueW1vdXMgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsMENBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUMzQzs7OzsifQ==) ```js 'use server' @@ -61,6 +61,6 @@ const $$module_0_implementation_default = async function () { return 'default anonymous function called' } -const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, "default"), "name", { value: "default" }); +const $$module_0_binding_default = Object.defineProperty(registerServerReference($$module_0_implementation_default, "default"), "name", { value: "default" }); export { $$module_0_binding_default as default }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md index d2f09cad3..38897e7d3 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.map.snap.md @@ -32,6 +32,6 @@ (2:40) "async function () {\n" --> (2:42) "async function () {\n" (3:0) " return 'default comments called'\n" --> (3:0) " return 'default comments called'\n" (4:0) "}\n" --> (4:0) "}\n" -[unmapped] --> (6:0) "const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" });\n" +[unmapped] --> (6:0) "const $$module_0_binding_default = Object.defineProperty(registerServerReference($$module_0_implementation_default, \"default\"), \"name\", { value: \"default\" });\n" [unmapped] --> (7:0) "export { $$module_0_binding_default as default };\n" ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md index 859699234..890af85d8 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-comments.js.snap.md @@ -52,7 +52,7 @@ export default $$effect_default; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzM5ACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0ID0gLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJkZWZhdWx0IiksICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHQiIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCBhcyBkZWZhdWx0IH07CjMyOQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgLyogYmVmb3JlICovIGRlZmF1bHQgLyogYWZ0ZXIgKi8gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgY29tbWVudHMgY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsMENBQXdDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUNqQzs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzIzACd1c2Ugc2VydmVyJwoKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkgewogIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnCn0KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCwgImRlZmF1bHQiKSwgIm5hbWUiLCB7IHZhbHVlOiAiZGVmYXVsdCIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzI5AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCAvKiBiZWZvcmUgKi8gZGVmYXVsdCAvKiBhZnRlciAqLyBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnZGVmYXVsdCBjb21tZW50cyBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCwwQ0FBd0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQ2pDOzs7OyJ9) ```js 'use server' @@ -61,6 +61,6 @@ const $$module_0_implementation_default = async function () { return 'default comments called' } -const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference($$module_0_implementation_default, "default"), "name", { value: "default" }); +const $$module_0_binding_default = Object.defineProperty(registerServerReference($$module_0_implementation_default, "default"), "name", { value: "default" }); export { $$module_0_binding_default as default }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.map.snap.md index adb32e69e..ce743d92d 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 @@ -31,6 +31,6 @@ (3:0) "export default " --> (3:0) "const $$module_0_implementation_default = " (3:15) "action\n" --> (3:42) "action\n" (4:0) "action = async () => 'second'\n" --> (4:0) "action = async () => 'second'\n" -[unmapped] --> (6:0) "const $$module_0_binding_default = /* #__PURE__ */ registerServerReference($$module_0_implementation_default, \"default\");\n" +[unmapped] --> (6:0) "const $$module_0_binding_default = registerServerReference($$module_0_implementation_default, \"default\");\n" [unmapped] --> (7:0) "export { $$module_0_binding_default as default };\n" ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier-reassignment.js.snap.md index 2cf9abe44..b4f65a67d 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 @@ -52,7 +52,7 @@ export default $$effect_default; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#Mjk5ACd1c2Ugc2VydmVyJwoKbGV0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdmaXJzdCcKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYWN0aW9uCmFjdGlvbiA9IGFzeW5jICgpID0+ICdzZWNvbmQnCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzgwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmxldCBhY3Rpb24gPSBhc3luYyAoKSA9PiAnZmlyc3QnXG5leHBvcnQgZGVmYXVsdCBhY3Rpb25cbmFjdGlvbiA9IGFzeW5jICgpID0+ICdzZWNvbmQnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQy9CLDBDQUFlO0FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNOzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjgzACd1c2Ugc2VydmVyJwoKbGV0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdmaXJzdCcKY29uc3QgJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0ID0gYWN0aW9uCmFjdGlvbiA9IGFzeW5jICgpID0+ICdzZWNvbmQnCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKCQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fZGVmYXVsdCwgImRlZmF1bHQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozODAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxubGV0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdmaXJzdCdcbmV4cG9ydCBkZWZhdWx0IGFjdGlvblxuYWN0aW9uID0gYXN5bmMgKCkgPT4gJ3NlY29uZCdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFDL0IsMENBQWU7QUFDZixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Ozs7In0=) ```js 'use server' @@ -61,6 +61,6 @@ let action = async () => 'first' const $$module_0_implementation_default = action action = async () => 'second' -const $$module_0_binding_default = /* #__PURE__ */ registerServerReference($$module_0_implementation_default, "default"); +const $$module_0_binding_default = 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-identifier.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-identifier.js.map.snap.md index 4346ba119..6e8989b58 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 @@ -34,6 +34,6 @@ (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] --> (8:0) "const $$module_0_binding_default = 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 b453ed846..3b0a838bb 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 $$effect_default; **References:** default -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzI0ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9kZWZhdWx0LCAiZGVmYXVsdCIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZGVmYXVsdCBhcyBkZWZhdWx0IH07CjM1NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SWRlbnRpZmllcigpIHtcbiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0SWRlbnRpZmllclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNuQzs7QUFFQSwwQ0FBZTs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA4ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdElkZW50aWZpZXIoKSB7CiAgcmV0dXJuICdkZWZhdWx0IGlkZW50aWZpZXIgY2FsbGVkJwp9Cgpjb25zdCAkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQgPSBkZWZhdWx0SWRlbnRpZmllcgoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX2RlZmF1bHQsICJkZWZhdWx0Iik7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzU2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJZGVudGlmaWVyKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgaWRlbnRpZmllciBjYWxsZWQnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRJZGVudGlmaWVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQ25DOztBQUVBLDBDQUFlOzs7OyJ9) ```js 'use server' @@ -69,6 +69,6 @@ async function defaultIdentifier() { const $$module_0_implementation_default = defaultIdentifier -const $$module_0_binding_default = /* #__PURE__ */ registerServerReference($$module_0_implementation_default, "default"); +const $$module_0_binding_default = 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 ea277f79f..4c0a33621 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 @@ -29,6 +29,6 @@ (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] --> (6:0) "const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference(defaultNamedFunction, \"default\"), \"name\", { value: \"defaultNamedFunction\" });\n" +[unmapped] --> (6:0) "const $$module_0_binding_default = Object.defineProperty(registerServerReference(defaultNamedFunction, \"default\"), \"name\", { value: \"defaultNamedFunction\" });\n" [unmapped] --> (7:0) "export { $$module_0_binding_default as default };\n" ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/default-named.js.snap.md index a6f8b0871..55407416d 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/#MzIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGRlZmF1bHROYW1lZEZ1bmN0aW9uLCAiZGVmYXVsdCIpLCAibmFtZSIsIHsgdmFsdWU6ICJkZWZhdWx0TmFtZWRGdW5jdGlvbiIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19kZWZhdWx0IGFzIGRlZmF1bHQgfTsKMzQwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGRlZmF1bHROYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ2RlZmF1bHQgbmFtZWQgZnVuY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07QUFDdkM7Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA3ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7CiAgcmV0dXJuICdkZWZhdWx0IG5hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGVmYXVsdE5hbWVkRnVuY3Rpb24sICJkZWZhdWx0IiksICJuYW1lIiwgeyB2YWx1ZTogImRlZmF1bHROYW1lZEZ1bmN0aW9uIiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RlZmF1bHQgYXMgZGVmYXVsdCB9OwozNDAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZGVmYXVsdE5hbWVkRnVuY3Rpb24oKSB7XG4gIHJldHVybiAnZGVmYXVsdCBuYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN2Qzs7OzsifQ==) ```js 'use server' @@ -61,6 +61,6 @@ async function defaultNamedFunction() { return 'default named function called' } -const $$module_0_binding_default = /* #__PURE__ */ Object.defineProperty(registerServerReference(defaultNamedFunction, "default"), "name", { value: "defaultNamedFunction" }); +const $$module_0_binding_default = Object.defineProperty(registerServerReference(defaultNamedFunction, "default"), "name", { value: "defaultNamedFunction" }); export { $$module_0_binding_default as default }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.map.snap.md index f540ad5bf..c10655488 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 @@ -29,8 +29,8 @@ (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" -[unmapped] --> (5:0) "const $$module_0_binding_first = /* #__PURE__ */ Object.defineProperty(registerServerReference(first, \"first\"), \"name\", { value: \"first\" });\n" +[unmapped] --> (5:0) "const $$module_0_binding_first = Object.defineProperty(registerServerReference(first, \"first\"), \"name\", { value: \"first\" });\n" [unmapped] --> (6:0) "export { $$module_0_binding_first as first };\n" -[unmapped] --> (7:0) "const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(second, \"second\");\n" +[unmapped] --> (7:0) "const $$module_1_binding_second = registerServerReference(second, \"second\");\n" [unmapped] --> (8:0) "export { $$module_1_binding_second as second };\n" ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/dependent-declarators.js.snap.md index 04523cea9..abf930550 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,7 +51,7 @@ export { first, second }; **References:** first, second -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDA5ACd1c2Ugc2VydmVyJwoKY29uc3QgZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcsCiAgc2Vjb25kID0gZmlyc3QKCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19maXJzdCA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZmlyc3QsICJmaXJzdCIpLCAibmFtZSIsIHsgdmFsdWU6ICJmaXJzdCIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19maXJzdCBhcyBmaXJzdCB9Owpjb25zdCAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kID0gLyogI19fUFVSRV9fICovIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZCwgInNlY29uZCIpOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kIGFzIHNlY29uZCB9OwozNDMAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGZpcnN0ID0gYXN5bmMgKCkgPT4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnLFxuICBzZWNvbmQgPSBmaXJzdFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Ozs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#Mzc3ACd1c2Ugc2VydmVyJwoKY29uc3QgZmlyc3QgPSBhc3luYyAoKSA9PiAnZmlyc3QgYWN0aW9uIGNhbGxlZCcsCiAgc2Vjb25kID0gZmlyc3QKCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19maXJzdCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdCwgImZpcnN0IiksICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0IiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2ZpcnN0IGFzIGZpcnN0IH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19zZWNvbmQgPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmQsICJzZWNvbmQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZCBhcyBzZWNvbmQgfTsKMzQzAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBmaXJzdCA9IGFzeW5jICgpID0+ICdmaXJzdCBhY3Rpb24gY2FsbGVkJyxcbiAgc2Vjb25kID0gZmlyc3RcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzs7Ozs7In0=) ```js 'use server' @@ -59,8 +59,8 @@ export { first, second }; const first = async () => 'first action called', second = first -const $$module_0_binding_first = /* #__PURE__ */ Object.defineProperty(registerServerReference(first, "first"), "name", { value: "first" }); +const $$module_0_binding_first = Object.defineProperty(registerServerReference(first, "first"), "name", { value: "first" }); export { $$module_0_binding_first as first }; -const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(second, "second"); +const $$module_1_binding_second = registerServerReference(second, "second"); export { $$module_1_binding_second as second }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/destructured-export.js.map.snap.md index cdaab44b0..9eecb2d1a 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 @@ -26,6 +26,6 @@ (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] --> (6:0) "const $$module_0_binding_action = 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 fd4d34487..ee472fcbb 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 @@ -51,7 +51,7 @@ export { action }; **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjUxACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24sICJhY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiBhcyBhY3Rpb24gfTsKNDIyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmNvbnN0IHNvdXJjZSA9IGFzeW5jICgpID0+ICdkZXN0cnVjdHVyZWQgZXhwb3J0IGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IHsgYWN0aW9uIH0gPSB7IGFjdGlvbjogc291cmNlIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTTs7QUFFL0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDOzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM1ACd1c2Ugc2VydmVyJwoKY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJwoKY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYWN0aW9uIGFzIGFjdGlvbiB9Owo0MjIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuY29uc3Qgc291cmNlID0gYXN5bmMgKCkgPT4gJ2Rlc3RydWN0dXJlZCBleHBvcnQgY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgeyBhY3Rpb24gfSA9IHsgYWN0aW9uOiBzb3VyY2UgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNOztBQUUvQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7Ozs7In0=) ```js 'use server' @@ -60,6 +60,6 @@ const source = async () => 'destructured export called' const { action } = { action: source } -const $$module_0_binding_action = /* #__PURE__ */ registerServerReference(action, "action"); +const $$module_0_binding_action = registerServerReference(action, "action"); export { $$module_0_binding_action as action }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.map.snap.md index 3d1e7e000..0b8981a70 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 @@ -25,6 +25,6 @@ (0:0) "'use server'\n" --> (0:0) "'use server'\n" (2:0) "let action = async () => 'first'\n" --> (2:0) "let action = async () => 'first'\n" (4:0) "action = async () => 'second'\n" --> (4:0) "action = async () => 'second'\n" -[unmapped] --> (6:0) "const $$module_0_binding_renamed = /* #__PURE__ */ registerServerReference(action, \"renamed\");\n" +[unmapped] --> (6:0) "const $$module_0_binding_renamed = registerServerReference(action, \"renamed\");\n" [unmapped] --> (7:0) "export { $$module_0_binding_renamed as renamed };\n" ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias-reassignment.js.snap.md index a27979108..0ca7add46 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 @@ -51,7 +51,7 @@ registerServerReference(action, "renamed"); **References:** renamed -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjI0ACd1c2Ugc2VydmVyJwoKbGV0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdmaXJzdCcKCmFjdGlvbiA9IGFzeW5jICgpID0+ICdzZWNvbmQnCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfcmVuYW1lZCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24sICJyZW5hbWVkIik7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19yZW5hbWVkIGFzIHJlbmFtZWQgfTsKMzc3AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmxldCBhY3Rpb24gPSBhc3luYyAoKSA9PiAnZmlyc3QnXG5leHBvcnQgeyBhY3Rpb24gYXMgcmVuYW1lZCB9XG5hY3Rpb24gPSBhc3luYyAoKSA9PiAnc2Vjb25kJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzs7QUFFL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNOzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjA4ACd1c2Ugc2VydmVyJwoKbGV0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdmaXJzdCcKCmFjdGlvbiA9IGFzeW5jICgpID0+ICdzZWNvbmQnCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfcmVuYW1lZCA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgInJlbmFtZWQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX3JlbmFtZWQgYXMgcmVuYW1lZCB9OwozNzcAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxubGV0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdmaXJzdCdcbmV4cG9ydCB7IGFjdGlvbiBhcyByZW5hbWVkIH1cbmFjdGlvbiA9IGFzeW5jICgpID0+ICdzZWNvbmQnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLOztBQUUvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Ozs7In0=) ```js 'use server' @@ -60,6 +60,6 @@ let action = async () => 'first' action = async () => 'second' -const $$module_0_binding_renamed = /* #__PURE__ */ registerServerReference(action, "renamed"); +const $$module_0_binding_renamed = registerServerReference(action, "renamed"); export { $$module_0_binding_renamed as renamed }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-alias.js.map.snap.md index 3a5c81178..c8769cd5c 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 @@ -28,6 +28,6 @@ (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] --> (8:0) "const $$module_0_binding_aliasedAction = 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 bfbf8706e..8b76df83e 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 @@ -57,7 +57,7 @@ registerServerReference(localAlias, "aliasedAction"); **References:** aliasedAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjUyACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfYWxpYXNlZEFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShsb2NhbEFsaWFzLCAiYWxpYXNlZEFjdGlvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYWxpYXNlZEFjdGlvbiBhcyBhbGlhc2VkQWN0aW9uIH07CjMzNgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5hc3luYyBmdW5jdGlvbiBsb2NhbEFsaWFzKCkge1xuICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCdcbn1cblxuZXhwb3J0IHsgbG9jYWxBbGlhcyBhcyBhbGlhc2VkQWN0aW9uIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzVCOzs7Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjM2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbG9jYWxBbGlhcygpIHsKICByZXR1cm4gJ2xvY2FsIGFsaWFzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfYWxpYXNlZEFjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGxvY2FsQWxpYXMsICJhbGlhc2VkQWN0aW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19hbGlhc2VkQWN0aW9uIGFzIGFsaWFzZWRBY3Rpb24gfTsKMzM2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIGxvY2FsQWxpYXMoKSB7XG4gIHJldHVybiAnbG9jYWwgYWxpYXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyBsb2NhbEFsaWFzIGFzIGFsaWFzZWRBY3Rpb24gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDNUI7Ozs7OzsifQ==) ```js 'use server' @@ -68,6 +68,6 @@ async function localAlias() { -const $$module_0_binding_aliasedAction = /* #__PURE__ */ registerServerReference(localAlias, "aliasedAction"); +const $$module_0_binding_aliasedAction = registerServerReference(localAlias, "aliasedAction"); export { $$module_0_binding_aliasedAction as aliasedAction }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md index c34a8f4d7..fec7c085d 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.map.snap.md @@ -30,8 +30,8 @@ (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" -[unmapped] --> (7:0) "const $$module_0_binding_direct = /* #__PURE__ */ Object.defineProperty(registerServerReference(direct, \"direct\"), \"name\", { value: \"direct\" });\n" +[unmapped] --> (7:0) "const $$module_0_binding_direct = Object.defineProperty(registerServerReference(direct, \"direct\"), \"name\", { value: \"direct\" });\n" [unmapped] --> (8:0) "export { $$module_0_binding_direct as direct };\n" -[unmapped] --> (9:0) "const $$module_1_binding_indirect = /* #__PURE__ */ registerServerReference(indirect, \"indirect\");\n" +[unmapped] --> (9:0) "const $$module_1_binding_indirect = 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/local-binding-preservation.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md index 81833b936..5893f53da 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-binding-preservation.js.snap.md @@ -59,7 +59,7 @@ registerServerReference(indirect, "indirect"); **References:** direct, indirect -[Source map visualization](https://evanw.github.io/source-map-visualization/#NDMzAGFzeW5jIGZ1bmN0aW9uIGRpcmVjdCgpIHt9Cgpjb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9CgoKY29uc3VtZShkaXJlY3QsIGluZGlyZWN0KQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RpcmVjdCA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoZGlyZWN0LCAiZGlyZWN0IiksICJuYW1lIiwgeyB2YWx1ZTogImRpcmVjdCIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19kaXJlY3QgYXMgZGlyZWN0IH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19pbmRpcmVjdCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShpbmRpcmVjdCwgImluZGlyZWN0Iik7CmV4cG9ydCB7ICQkbW9kdWxlXzFfYmluZGluZ19pbmRpcmVjdCBhcyBpbmRpcmVjdCB9OwozNzAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlyZWN0KCkge31cblxuY29uc3QgaW5kaXJlY3QgPSBhc3luYyAoKSA9PiB7fVxuZXhwb3J0IHsgaW5kaXJlY3QgfVxuXG5jb25zdW1lKGRpcmVjdCwgaW5kaXJlY3QpXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRWhDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7QUFHOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVE7Ozs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NDAxAGFzeW5jIGZ1bmN0aW9uIGRpcmVjdCgpIHt9Cgpjb25zdCBpbmRpcmVjdCA9IGFzeW5jICgpID0+IHt9CgoKY29uc3VtZShkaXJlY3QsIGluZGlyZWN0KQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2RpcmVjdCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZShkaXJlY3QsICJkaXJlY3QiKSwgIm5hbWUiLCB7IHZhbHVlOiAiZGlyZWN0IiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2RpcmVjdCBhcyBkaXJlY3QgfTsKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX2luZGlyZWN0ID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoaW5kaXJlY3QsICJpbmRpcmVjdCIpOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfaW5kaXJlY3QgYXMgaW5kaXJlY3QgfTsKMzcwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpcmVjdCgpIHt9XG5cbmNvbnN0IGluZGlyZWN0ID0gYXN5bmMgKCkgPT4ge31cbmV4cG9ydCB7IGluZGlyZWN0IH1cblxuY29uc3VtZShkaXJlY3QsIGluZGlyZWN0KVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVoQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBRzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFROzs7Ozs7In0=) ```js async function direct() {} @@ -69,8 +69,8 @@ const indirect = async () => {} consume(direct, indirect) -const $$module_0_binding_direct = /* #__PURE__ */ Object.defineProperty(registerServerReference(direct, "direct"), "name", { value: "direct" }); +const $$module_0_binding_direct = Object.defineProperty(registerServerReference(direct, "direct"), "name", { value: "direct" }); export { $$module_0_binding_direct as direct }; -const $$module_1_binding_indirect = /* #__PURE__ */ registerServerReference(indirect, "indirect"); +const $$module_1_binding_indirect = registerServerReference(indirect, "indirect"); export { $$module_1_binding_indirect as indirect }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.map.snap.md index 553b224b4..21920cdcc 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 @@ -22,6 +22,6 @@ ```txt (0:0) "'use server'\n" --> (0:0) "'use server'\n" (3:0) "const action = async () => 'action called'\n" --> (3:0) "const action = async () => 'action called'\n" -[unmapped] --> (5:0) "const $$module_0_binding_action = /* #__PURE__ */ registerServerReference(action, \"action\");\n" +[unmapped] --> (5:0) "const $$module_0_binding_action = registerServerReference(action, \"action\");\n" [unmapped] --> (6:0) "export { $$module_0_binding_action as action };\n" ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/local-export-before-declaration.js.snap.md index 4dd9d56de..c7ff900a5 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 @@ -48,7 +48,7 @@ registerServerReference(action, "action"); **References:** action -[Source map visualization](https://evanw.github.io/source-map-visualization/#MjAwACd1c2Ugc2VydmVyJwoKCmNvbnN0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdhY3Rpb24gY2FsbGVkJwoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24sICJhY3Rpb24iKTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiBhcyBhY3Rpb24gfTsKMjc5AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IGFjdGlvbiB9XG5jb25zdCBhY3Rpb24gPSBhc3luYyAoKSA9PiAnYWN0aW9uIGNhbGxlZCdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOzs7QUFHWCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MTg0ACd1c2Ugc2VydmVyJwoKCmNvbnN0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdhY3Rpb24gY2FsbGVkJwoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiA9IHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYWN0aW9uIGFzIGFjdGlvbiB9OwoyNzkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IHsgYWN0aW9uIH1cbmNvbnN0IGFjdGlvbiA9IGFzeW5jICgpID0+ICdhY3Rpb24gY2FsbGVkJ1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07OztBQUdYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNOzs7OyJ9) ```js 'use server' @@ -56,6 +56,6 @@ registerServerReference(action, "action"); const action = async () => 'action called' -const $$module_0_binding_action = /* #__PURE__ */ registerServerReference(action, "action"); +const $$module_0_binding_action = registerServerReference(action, "action"); export { $$module_0_binding_action as action }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md index eb3145222..f7c1ef2b2 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.map.snap.md @@ -31,8 +31,8 @@ (2:0) "async function value() {\n" --> (2:0) "async function value() {\n" (3:0) " return 'multiple aliases called'\n" --> (3:0) " return 'multiple aliases called'\n" (4:0) "}\n" --> (4:0) "}\n" -[unmapped] --> (8:0) "const $$module_0_binding_first = /* #__PURE__ */ registerServerReference(value, \"first\");\n" +[unmapped] --> (8:0) "const $$module_0_binding_first = registerServerReference(value, \"first\");\n" [unmapped] --> (9:0) "export { $$module_0_binding_first as first };\n" -[unmapped] --> (10:0) "const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(value, \"second\");\n" +[unmapped] --> (10:0) "const $$module_1_binding_second = registerServerReference(value, \"second\");\n" [unmapped] --> (11:0) "export { $$module_1_binding_second as second };\n" ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md index 0cf2f4481..157f70886 100644 --- a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md +++ b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/multiple-aliases.js.snap.md @@ -60,7 +60,7 @@ registerServerReference(value, "second"); **References:** first, second -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzU1ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gdmFsdWUoKSB7CiAgcmV0dXJuICdtdWx0aXBsZSBhbGlhc2VzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZmlyc3QgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UodmFsdWUsICJmaXJzdCIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZmlyc3QgYXMgZmlyc3QgfTsKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZCA9IC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSh2YWx1ZSwgInNlY29uZCIpOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kIGFzIHNlY29uZCB9OwozNDIAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuYXN5bmMgZnVuY3Rpb24gdmFsdWUoKSB7XG4gIHJldHVybiAnbXVsdGlwbGUgYWxpYXNlcyBjYWxsZWQnXG59XG5cbmV4cG9ydCB7IHZhbHVlIGFzIGZpcnN0LCB2YWx1ZSBhcyBzZWNvbmQgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU07QUFDakM7Ozs7Ozs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzIzACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gdmFsdWUoKSB7CiAgcmV0dXJuICdtdWx0aXBsZSBhbGlhc2VzIGNhbGxlZCcKfQoKCgpjb25zdCAkJG1vZHVsZV8wX2JpbmRpbmdfZmlyc3QgPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZSh2YWx1ZSwgImZpcnN0Iik7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19maXJzdCBhcyBmaXJzdCB9Owpjb25zdCAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kID0gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UodmFsdWUsICJzZWNvbmQiKTsKZXhwb3J0IHsgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZCBhcyBzZWNvbmQgfTsKMzQyAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmFzeW5jIGZ1bmN0aW9uIHZhbHVlKCkge1xuICByZXR1cm4gJ211bHRpcGxlIGFsaWFzZXMgY2FsbGVkJ1xufVxuXG5leHBvcnQgeyB2YWx1ZSBhcyBmaXJzdCwgdmFsdWUgYXMgc2Vjb25kIH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVYLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNO0FBQ2pDOzs7Ozs7OzsifQ==) ```js 'use server' @@ -71,8 +71,8 @@ async function value() { -const $$module_0_binding_first = /* #__PURE__ */ registerServerReference(value, "first"); +const $$module_0_binding_first = registerServerReference(value, "first"); export { $$module_0_binding_first as first }; -const $$module_1_binding_second = /* #__PURE__ */ registerServerReference(value, "second"); +const $$module_1_binding_second = registerServerReference(value, "second"); export { $$module_1_binding_second as 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 a0c33eae5..bd42bcfb2 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 @@ -42,8 +42,8 @@ (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" -[unmapped] --> (10:0) "const $$module_0_binding_firstAction = /* #__PURE__ */ Object.defineProperty(registerServerReference(firstAction, \"firstAction\"), \"name\", { value: \"firstAction\" });\n" +[unmapped] --> (10:0) "const $$module_0_binding_firstAction = Object.defineProperty(registerServerReference(firstAction, \"firstAction\"), \"name\", { value: \"firstAction\" });\n" [unmapped] --> (11:0) "export { $$module_0_binding_firstAction as firstAction };\n" -[unmapped] --> (12:0) "const $$module_1_binding_secondAction = /* #__PURE__ */ Object.defineProperty(registerServerReference(secondAction, \"secondAction\"), \"name\", { value: \"secondAction\" });\n" +[unmapped] --> (12:0) "const $$module_1_binding_secondAction = Object.defineProperty(registerServerReference(secondAction, \"secondAction\"), \"name\", { value: \"secondAction\" });\n" [unmapped] --> (13:0) "export { $$module_1_binding_secondAction as 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 c65d6f53e..054a79d7f 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/#NTk4ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2ZpcnN0QWN0aW9uID0gLyogI19fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmaXJzdEFjdGlvbiwgImZpcnN0QWN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogImZpcnN0QWN0aW9uIiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2ZpcnN0QWN0aW9uIGFzIGZpcnN0QWN0aW9uIH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19zZWNvbmRBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHNlY29uZEFjdGlvbiwgInNlY29uZEFjdGlvbiIpLCAibmFtZSIsIHsgdmFsdWU6ICJzZWNvbmRBY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfc2Vjb25kQWN0aW9uIGFzIHNlY29uZEFjdGlvbiB9Owo0ODkAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpcnN0QWN0aW9uKCkge1xuICByZXR1cm4gJ2ZpcnN0IGFjdGlvbiBjYWxsZWQnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7XG4gIHJldHVybiAnc2Vjb25kIGFjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM3Qjs7QUFFTyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUM5Qjs7Ozs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NTY2ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gZmlyc3RBY3Rpb24oKSB7CiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJwp9Cgphc3luYyBmdW5jdGlvbiBzZWNvbmRBY3Rpb24oKSB7CiAgcmV0dXJuICdzZWNvbmQgYWN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2ZpcnN0QWN0aW9uID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZpcnN0QWN0aW9uLCAiZmlyc3RBY3Rpb24iKSwgIm5hbWUiLCB7IHZhbHVlOiAiZmlyc3RBY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfZmlyc3RBY3Rpb24gYXMgZmlyc3RBY3Rpb24gfTsKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZEFjdGlvbiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZShzZWNvbmRBY3Rpb24sICJzZWNvbmRBY3Rpb24iKSwgIm5hbWUiLCB7IHZhbHVlOiAic2Vjb25kQWN0aW9uIiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMV9iaW5kaW5nX3NlY29uZEFjdGlvbiBhcyBzZWNvbmRBY3Rpb24gfTsKNDg5AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXJzdEFjdGlvbigpIHtcbiAgcmV0dXJuICdmaXJzdCBhY3Rpb24gY2FsbGVkJ1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2Vjb25kQWN0aW9uKCkge1xuICByZXR1cm4gJ3NlY29uZCBhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDN0I7O0FBRU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDOUI7Ozs7OzsifQ==) ```js 'use server' @@ -81,8 +81,8 @@ async function secondAction() { return 'second action called' } -const $$module_0_binding_firstAction = /* #__PURE__ */ Object.defineProperty(registerServerReference(firstAction, "firstAction"), "name", { value: "firstAction" }); +const $$module_0_binding_firstAction = Object.defineProperty(registerServerReference(firstAction, "firstAction"), "name", { value: "firstAction" }); export { $$module_0_binding_firstAction as firstAction }; -const $$module_1_binding_secondAction = /* #__PURE__ */ Object.defineProperty(registerServerReference(secondAction, "secondAction"), "name", { value: "secondAction" }); +const $$module_1_binding_secondAction = Object.defineProperty(registerServerReference(secondAction, "secondAction"), "name", { value: "secondAction" }); export { $$module_1_binding_secondAction as 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 92a154b65..c2241bf91 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 @@ -29,6 +29,6 @@ (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" -[unmapped] --> (6:0) "const $$module_0_binding_action = /* #__PURE__ */ Object.defineProperty(registerServerReference(action, \"action\"), \"name\", { value: \"actionImplementation\" });\n" +[unmapped] --> (6:0) "const $$module_0_binding_action = Object.defineProperty(registerServerReference(action, \"action\"), \"name\", { value: \"actionImplementation\" });\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/named-function-expression.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/named-function-expression.js.snap.md index 87ab0cef0..6135a7f18 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/#MzIzACd1c2Ugc2VydmVyJwoKY29uc3QgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbkltcGxlbWVudGF0aW9uIiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiBhcyBhY3Rpb24gfTsKMzgwAHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBhY3Rpb25JbXBsZW1lbnRhdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO0FBQzFDOzs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzA3ACd1c2Ugc2VydmVyJwoKY29uc3QgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gYWN0aW9uSW1wbGVtZW50YXRpb24oKSB7CiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2FjdGlvbiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZShhY3Rpb24sICJhY3Rpb24iKSwgIm5hbWUiLCB7IHZhbHVlOiAiYWN0aW9uSW1wbGVtZW50YXRpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYWN0aW9uIGFzIGFjdGlvbiB9OwozODAAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkltcGxlbWVudGF0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDMUM7Ozs7In0=) ```js 'use server' @@ -60,6 +60,6 @@ const action = async function actionImplementation() { return 'named function expression called' } -const $$module_0_binding_action = /* #__PURE__ */ Object.defineProperty(registerServerReference(action, "action"), "name", { value: "actionImplementation" }); +const $$module_0_binding_action = Object.defineProperty(registerServerReference(action, "action"), "name", { value: "actionImplementation" }); export { $$module_0_binding_action as 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 f2f5ae629..ba00ab6c2 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 @@ -28,6 +28,6 @@ (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" -[unmapped] --> (6:0) "const $$module_0_binding_namedFunction = /* #__PURE__ */ Object.defineProperty(registerServerReference(namedFunction, \"namedFunction\"), \"name\", { value: \"namedFunction\" });\n" +[unmapped] --> (6:0) "const $$module_0_binding_namedFunction = Object.defineProperty(registerServerReference(namedFunction, \"namedFunction\"), \"name\", { value: \"namedFunction\" });\n" [unmapped] --> (7:0) "export { $$module_0_binding_namedFunction as 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 d94a8b10c..7bb898376 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/#MzE4ACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX25hbWVkRnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKG5hbWVkRnVuY3Rpb24sICJuYW1lZEZ1bmN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogIm5hbWVkRnVuY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfbmFtZWRGdW5jdGlvbiBhcyBuYW1lZEZ1bmN0aW9uIH07CjMwNQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHtcbiAgcmV0dXJuICduYW1lZCBmdW5jdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUMvQjs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzAyACd1c2Ugc2VydmVyJwoKYXN5bmMgZnVuY3Rpb24gbmFtZWRGdW5jdGlvbigpIHsKICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX25hbWVkRnVuY3Rpb24gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UobmFtZWRGdW5jdGlvbiwgIm5hbWVkRnVuY3Rpb24iKSwgIm5hbWUiLCB7IHZhbHVlOiAibmFtZWRGdW5jdGlvbiIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19uYW1lZEZ1bmN0aW9uIGFzIG5hbWVkRnVuY3Rpb24gfTsKMzA1AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ25hbWVkIGZ1bmN0aW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQy9COzs7OyJ9) ```js 'use server' @@ -60,6 +60,6 @@ async function namedFunction() { return 'named function called' } -const $$module_0_binding_namedFunction = /* #__PURE__ */ Object.defineProperty(registerServerReference(namedFunction, "namedFunction"), "name", { value: "namedFunction" }); +const $$module_0_binding_namedFunction = Object.defineProperty(registerServerReference(namedFunction, "namedFunction"), "name", { value: "namedFunction" }); export { $$module_0_binding_namedFunction as 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 12250d716..572c58a79 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 @@ -31,6 +31,6 @@ (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" -[unmapped] --> (8:0) "const $$module_0_binding_action = /* #__PURE__ */ Object.defineProperty(registerServerReference(action, \"action\"), \"name\", { value: \"action\" });\n" +[unmapped] --> (8:0) "const $$module_0_binding_action = Object.defineProperty(registerServerReference(action, \"action\"), \"name\", { value: \"action\" });\n" [unmapped] --> (9:0) "export { $$module_0_binding_action as 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 f3e8b3325..325e5dd07 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/#Mjc0ACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19hY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgImFjdGlvbiIpLCAibmFtZSIsIHsgdmFsdWU6ICJhY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYWN0aW9uIGFzIGFjdGlvbiB9OwozMTEAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxudm9pZCBhY3Rpb25cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHtcbiAgcmV0dXJuICdhY3Rpb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRVgsSUFBSSxDQUFDOztBQUVFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDdkI7Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MjU4ACd1c2Ugc2VydmVyJwoKdm9pZCBhY3Rpb24KCmFzeW5jIGZ1bmN0aW9uIGFjdGlvbigpIHsKICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnCn0KCmNvbnN0ICQkbW9kdWxlXzBfYmluZGluZ19hY3Rpb24gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCAiYWN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogImFjdGlvbiIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19hY3Rpb24gYXMgYWN0aW9uIH07CjMxMQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG52b2lkIGFjdGlvblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uKCkge1xuICByZXR1cm4gJ2FjdGlvbiBjYWxsZWQnXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFWCxJQUFJLENBQUM7O0FBRUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtBQUN2Qjs7OzsifQ==) ```js 'use server' @@ -68,6 +68,6 @@ async function action() { return 'action called' } -const $$module_0_binding_action = /* #__PURE__ */ Object.defineProperty(registerServerReference(action, "action"), "name", { value: "action" }); +const $$module_0_binding_action = Object.defineProperty(registerServerReference(action, "action"), "name", { value: "action" }); export { $$module_0_binding_action as 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 7455c3d2f..8e72caa04 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 @@ -31,6 +31,6 @@ (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" -[unmapped] --> (7:0) "const $$module_0_binding_recursive = /* #__PURE__ */ Object.defineProperty(registerServerReference(recursive, \"recursive\"), \"name\", { value: \"recursive\" });\n" +[unmapped] --> (7:0) "const $$module_0_binding_recursive = Object.defineProperty(registerServerReference(recursive, \"recursive\"), \"name\", { value: \"recursive\" });\n" [unmapped] --> (8:0) "export { $$module_0_binding_recursive as 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 2d64d4d29..19f2b69dc 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/#MzI3ACd1c2Ugc2VydmVyJwoKZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7CiAgaWYgKGRlcHRoID4gMCkgcmV0dXJuIHJlY3Vyc2l2ZShkZXB0aCAtIDEpCiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXIKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlY3Vyc2l2ZSA9IC8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UocmVjdXJzaXZlLCAicmVjdXJzaXZlIiksICJuYW1lIiwgeyB2YWx1ZTogInJlY3Vyc2l2ZSIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19yZWN1cnNpdmUgYXMgcmVjdXJzaXZlIH07CjQyNQB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7XG4gIGlmIChkZXB0aCA+IDApIHJldHVybiByZWN1cnNpdmUoZGVwdGggLSAxKVxuICByZXR1cm4gcmVjdXJzaXZlLm1hcmtlclxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNuQjs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzExACd1c2Ugc2VydmVyJwoKZnVuY3Rpb24gcmVjdXJzaXZlKGRlcHRoKSB7CiAgaWYgKGRlcHRoID4gMCkgcmV0dXJuIHJlY3Vyc2l2ZShkZXB0aCAtIDEpCiAgcmV0dXJuIHJlY3Vyc2l2ZS5tYXJrZXIKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlY3Vyc2l2ZSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZShyZWN1cnNpdmUsICJyZWN1cnNpdmUiKSwgIm5hbWUiLCB7IHZhbHVlOiAicmVjdXJzaXZlIiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMF9iaW5kaW5nX3JlY3Vyc2l2ZSBhcyByZWN1cnNpdmUgfTsKNDI1AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBmdW5jdGlvbiByZWN1cnNpdmUoZGVwdGgpIHtcbiAgaWYgKGRlcHRoID4gMCkgcmV0dXJuIHJlY3Vyc2l2ZShkZXB0aCAtIDEpXG4gIHJldHVybiByZWN1cnNpdmUubWFya2VyXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7QUFFSixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ25COzs7OyJ9) ```js 'use server' @@ -64,6 +64,6 @@ function recursive(depth) { return recursive.marker } -const $$module_0_binding_recursive = /* #__PURE__ */ Object.defineProperty(registerServerReference(recursive, "recursive"), "name", { value: "recursive" }); +const $$module_0_binding_recursive = Object.defineProperty(registerServerReference(recursive, "recursive"), "name", { value: "recursive" }); export { $$module_0_binding_recursive as recursive }; ``` diff --git a/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.map.snap.md index 906c7b9bb..189d3403d 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 @@ -22,6 +22,6 @@ ```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] --> (5:0) "const $$module_0_binding_reexportedAction = 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-attributes.js.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport-attributes.js.snap.md index 5dee28e4f..18b72efb2 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 @@ -47,7 +47,7 @@ registerServerReference($$effect_import_reexportedAction, "reexportedAction"); **References:** reexportedAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzMzACd1c2Ugc2VydmVyJwoKCgppbXBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIGFzICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlZXhwb3J0ZWRBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE5OAB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnIHdpdGggeyB0eXBlOiAnanNvbicgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07Ozs7Ozs7In0=) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzE3ACd1c2Ugc2VydmVyJwoKCgppbXBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIGFzICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlZXhwb3J0ZWRBY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19yZWV4cG9ydGVkQWN0aW9uIGFzIHJlZXhwb3J0ZWRBY3Rpb24gfTsKMTk4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gfSBmcm9tICcuL3JlZXhwb3J0LXNvdXJjZScgd2l0aCB7IHR5cGU6ICdqc29uJyB9XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ==) ```js 'use server' @@ -55,6 +55,6 @@ registerServerReference($$effect_import_reexportedAction, "reexportedAction"); import { reexportedAction as $$module_0_implementation_reexportedAction } from './reexport-source'; -const $$module_0_binding_reexportedAction = /* #__PURE__ */ registerServerReference($$module_0_implementation_reexportedAction, "reexportedAction"); +const $$module_0_binding_reexportedAction = 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/reexport.js.map.snap.md b/packages/plugin-rsc/src/transforms/fixtures/source-map/wrap-export/reexport.js.map.snap.md index 6bc55c701..99dc2d9d8 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 @@ -22,6 +22,6 @@ ```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] --> (5:0) "const $$module_0_binding_reexportedAction = 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 f3e21dda7..ba4139b9c 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 @@ -47,7 +47,7 @@ registerServerReference($$effect_import_reexportedAction, "reexportedAction"); **References:** reexportedAction -[Source map visualization](https://evanw.github.io/source-map-visualization/#MzMzACd1c2Ugc2VydmVyJwoKCgppbXBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIGFzICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlZXhwb3J0ZWRBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRtb2R1bGVfMF9pbXBsZW1lbnRhdGlvbl9yZWV4cG9ydGVkQWN0aW9uLCAicmVleHBvcnRlZEFjdGlvbiIpOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfcmVleHBvcnRlZEFjdGlvbiBhcyByZWV4cG9ydGVkQWN0aW9uIH07CjE3NgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc2VydmVyJ1xuXG5leHBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIH0gZnJvbSAnLi9yZWV4cG9ydC1zb3VyY2UnXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTTs7Ozs7OzsifQ==) +[Source map visualization](https://evanw.github.io/source-map-visualization/#MzE3ACd1c2Ugc2VydmVyJwoKCgppbXBvcnQgeyByZWV4cG9ydGVkQWN0aW9uIGFzICQkbW9kdWxlXzBfaW1wbGVtZW50YXRpb25fcmVleHBvcnRlZEFjdGlvbiB9IGZyb20gJy4vcmVleHBvcnQtc291cmNlJzsKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX3JlZXhwb3J0ZWRBY3Rpb24gPSByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJG1vZHVsZV8wX2ltcGxlbWVudGF0aW9uX3JlZXhwb3J0ZWRBY3Rpb24sICJyZWV4cG9ydGVkQWN0aW9uIik7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19yZWV4cG9ydGVkQWN0aW9uIGFzIHJlZXhwb3J0ZWRBY3Rpb24gfTsKMTc2AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCB7IHJlZXhwb3J0ZWRBY3Rpb24gfSBmcm9tICcuL3JlZXhwb3J0LXNvdXJjZSdcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOzs7Ozs7OyJ9) ```js 'use server' @@ -55,6 +55,6 @@ registerServerReference($$effect_import_reexportedAction, "reexportedAction"); import { reexportedAction as $$module_0_implementation_reexportedAction } from './reexport-source'; -const $$module_0_binding_reexportedAction = /* #__PURE__ */ registerServerReference($$module_0_implementation_reexportedAction, "reexportedAction"); +const $$module_0_binding_reexportedAction = 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 02ccc4847..2d15d3a41 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 @@ -38,8 +38,8 @@ (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" -[unmapped] --> (8:0) "const $$module_0_binding_arrowFunction = /* #__PURE__ */ Object.defineProperty(registerServerReference(arrowFunction, \"arrowFunction\"), \"name\", { value: \"arrowFunction\" });\n" +[unmapped] --> (8:0) "const $$module_0_binding_arrowFunction = Object.defineProperty(registerServerReference(arrowFunction, \"arrowFunction\"), \"name\", { value: \"arrowFunction\" });\n" [unmapped] --> (9:0) "export { $$module_0_binding_arrowFunction as arrowFunction };\n" -[unmapped] --> (10:0) "const $$module_1_binding_functionExpression = /* #__PURE__ */ Object.defineProperty(registerServerReference(functionExpression, \"functionExpression\"), \"name\", { value: \"functionExpression\" });\n" +[unmapped] --> (10:0) "const $$module_1_binding_functionExpression = Object.defineProperty(registerServerReference(functionExpression, \"functionExpression\"), \"name\", { value: \"functionExpression\" });\n" [unmapped] --> (11:0) "export { $$module_1_binding_functionExpression as 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 d26d5590d..8baac85c2 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,7 +62,7 @@ export { functionExpression }; **References:** arrowFunction, functionExpression -[Source map visualization](https://evanw.github.io/source-map-visualization/#NjYxACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2Fycm93RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGFycm93RnVuY3Rpb24sICJhcnJvd0Z1bmN0aW9uIiksICJuYW1lIiwgeyB2YWx1ZTogImFycm93RnVuY3Rpb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8wX2JpbmRpbmdfYXJyb3dGdW5jdGlvbiBhcyBhcnJvd0Z1bmN0aW9uIH07CmNvbnN0ICQkbW9kdWxlXzFfYmluZGluZ19mdW5jdGlvbkV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKGZ1bmN0aW9uRXhwcmVzc2lvbiwgImZ1bmN0aW9uRXhwcmVzc2lvbiIpLCAibmFtZSIsIHsgdmFsdWU6ICJmdW5jdGlvbkV4cHJlc3Npb24iIH0pOwpleHBvcnQgeyAkJG1vZHVsZV8xX2JpbmRpbmdfZnVuY3Rpb25FeHByZXNzaW9uIGFzIGZ1bmN0aW9uRXhwcmVzc2lvbiB9Owo1MjgAeyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHNlcnZlcidcblxuZXhwb3J0IGNvbnN0IGFycm93RnVuY3Rpb24gPSBhc3luYyAoKSA9PiAnYXJyb3cgZnVuY3Rpb24gY2FsbGVkJ1xuXG5leHBvcnQgY29uc3QgZnVuY3Rpb25FeHByZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ2Z1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUMsR0FBRyxDQUFDLE1BQU07O0FBRUosS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUV4RCxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNwQzs7Ozs7OyJ9) +[Source map visualization](https://evanw.github.io/source-map-visualization/#NjI5ACd1c2Ugc2VydmVyJwoKY29uc3QgYXJyb3dGdW5jdGlvbiA9IGFzeW5jICgpID0+ICdhcnJvdyBmdW5jdGlvbiBjYWxsZWQnCgpjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKfQoKY29uc3QgJCRtb2R1bGVfMF9iaW5kaW5nX2Fycm93RnVuY3Rpb24gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoYXJyb3dGdW5jdGlvbiwgImFycm93RnVuY3Rpb24iKSwgIm5hbWUiLCB7IHZhbHVlOiAiYXJyb3dGdW5jdGlvbiIgfSk7CmV4cG9ydCB7ICQkbW9kdWxlXzBfYmluZGluZ19hcnJvd0Z1bmN0aW9uIGFzIGFycm93RnVuY3Rpb24gfTsKY29uc3QgJCRtb2R1bGVfMV9iaW5kaW5nX2Z1bmN0aW9uRXhwcmVzc2lvbiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWdpc3RlclNlcnZlclJlZmVyZW5jZShmdW5jdGlvbkV4cHJlc3Npb24sICJmdW5jdGlvbkV4cHJlc3Npb24iKSwgIm5hbWUiLCB7IHZhbHVlOiAiZnVuY3Rpb25FeHByZXNzaW9uIiB9KTsKZXhwb3J0IHsgJCRtb2R1bGVfMV9iaW5kaW5nX2Z1bmN0aW9uRXhwcmVzc2lvbiBhcyBmdW5jdGlvbkV4cHJlc3Npb24gfTsKNTI4AHsidmVyc2lvbiI6Mywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzZXJ2ZXInXG5cbmV4cG9ydCBjb25zdCBhcnJvd0Z1bmN0aW9uID0gYXN5bmMgKCkgPT4gJ2Fycm93IGZ1bmN0aW9uIGNhbGxlZCdcblxuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uRXhwcmVzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCdcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxDQUFDLEdBQUcsQ0FBQyxNQUFNOztBQUVKLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTs7QUFFeEQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDcEM7Ozs7OzsifQ==) ```js 'use server' @@ -73,8 +73,8 @@ const functionExpression = async function () { return 'function expression called' } -const $$module_0_binding_arrowFunction = /* #__PURE__ */ Object.defineProperty(registerServerReference(arrowFunction, "arrowFunction"), "name", { value: "arrowFunction" }); +const $$module_0_binding_arrowFunction = Object.defineProperty(registerServerReference(arrowFunction, "arrowFunction"), "name", { value: "arrowFunction" }); export { $$module_0_binding_arrowFunction as arrowFunction }; -const $$module_1_binding_functionExpression = /* #__PURE__ */ Object.defineProperty(registerServerReference(functionExpression, "functionExpression"), "name", { value: "functionExpression" }); +const $$module_1_binding_functionExpression = Object.defineProperty(registerServerReference(functionExpression, "functionExpression"), "name", { value: "functionExpression" }); export { $$module_1_binding_functionExpression as 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 7001a6e0c..19741ee1b 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -103,7 +103,7 @@ export default async function Page() {} expect(result.output.toString()).toMatchInlineSnapshot(` "const selected = async () => {}, skipped = async () => {} - const $$module_0_binding_selected = /* #__PURE__ */ Object.defineProperty(wrap(selected, "selected"), "name", { value: "selected" }); + const $$module_0_binding_selected = Object.defineProperty(wrap(selected, "selected"), "name", { value: "selected" }); export { $$module_0_binding_selected as selected }; export { skipped }; " diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index a1bdacc65..4fe3b735d 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -77,6 +77,7 @@ export type TransformModuleExportWrapResult = { * callback for each `{ implementation, originalName, exportName, meta }` * context. `originalName` is present for directly exported functions whose * name should be assigned to the generated wrapper. + * The callback is responsible for marking its expression as pure when needed. * `references` returns those contexts in wrapper creation order, while * `referenceNames` returns only their export names. * @@ -119,11 +120,6 @@ 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)}` - } - function exportBinding(binding: string, exportName: string): string { return binding === exportName ? `export { ${binding} };` @@ -174,7 +170,7 @@ export function transformModuleExportWrap( ) // TODO: preserve original export location for generated code? (update + move trick) appendedCode.push( - `const ${binding} = ${generate(context)};`, + `const ${binding} = ${options.generate(context)};`, exportBinding(binding, exportName), ) } From ce4816c1c5cdf4a35831b3a4da8ec76b1400230e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:56:32 +0900 Subject: [PATCH 73/82] docs(rsc): note wrapper rejection policy Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-wrap.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 4fe3b735d..8c27e2b79 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -31,6 +31,10 @@ export type TransformModuleExportWrapFilter = ( export type TransformModuleExportWrapOptions = { generate: (context: TransformModuleExportWrapContext) => string filter?: TransformModuleExportWrapFilter + // TODO: Replace this boolean with a rejection-policy callback receiving the + // normalized export metadata and optional value node. The async-function + // check can then be a reusable policy that directive consumers opt into, + // while consumers such as CSS wrapping omit it. rejectNonAsyncFunction?: boolean exportAll?: 'error' | 'preserve' } From 663922d763252860d28a4014cc1eba216baf1e63 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:56:32 +0900 Subject: [PATCH 74/82] docs(rsc): note wrapper rejection policy Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/module-export-scan.ts | 2 ++ packages/plugin-rsc/src/transforms/module-export-wrap.ts | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index dd78f3a42..58ac96b03 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -29,6 +29,7 @@ export type ModuleExportDirectFunction = { originalName: string } +// TODO: include raw `Node` so caller have move control? export type ModuleExportMeta = { /* * TODO: Track `isAsyncFunction` here so module export transforms can share @@ -98,6 +99,7 @@ export type ModuleExportGroup = declaration: FunctionDeclaration | ClassDeclaration /** Direct function metadata for `export function foo() {}`. */ directFunction?: ModuleExportDirectFunction + // TODO: just `export: ModuleExportEntry` pls exports: [ModuleExportEntry] } | { diff --git a/packages/plugin-rsc/src/transforms/module-export-wrap.ts b/packages/plugin-rsc/src/transforms/module-export-wrap.ts index 4fe3b735d..8c27e2b79 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.ts @@ -31,6 +31,10 @@ export type TransformModuleExportWrapFilter = ( export type TransformModuleExportWrapOptions = { generate: (context: TransformModuleExportWrapContext) => string filter?: TransformModuleExportWrapFilter + // TODO: Replace this boolean with a rejection-policy callback receiving the + // normalized export metadata and optional value node. The async-function + // check can then be a reusable policy that directive consumers opt into, + // while consumers such as CSS wrapping omit it. rejectNonAsyncFunction?: boolean exportAll?: 'error' | 'preserve' } From e18f34768b0cbdc7efa7b0c6b1fb5967f43019cc Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 13:14:24 +0900 Subject: [PATCH 75/82] refactor(rsc): expose export value nodes Co-authored-by: OpenCode --- .../callable-cache-plugin.ts | 3 ++ .../file-directive-from-server/action.ts | 3 ++ .../transforms/module-export-effect.test.ts | 10 +++++- .../src/transforms/module-export-scan.test.ts | 9 +++++- .../src/transforms/module-export-scan.ts | 31 +++++++++---------- .../src/transforms/module-export-wrap.test.ts | 20 ++++++++++-- .../plugin-rsc/src/transforms/utils.test.ts | 3 ++ packages/plugin-rsc/src/transforms/utils.ts | 3 ++ .../plugin-rsc/src/transforms/wrap-export.ts | 6 +++- 9 files changed, 66 insertions(+), 22 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 562129549..2350e9ac5 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 @@ -40,6 +40,9 @@ export function callableCachePlugin(): Plugin { ? transformModuleExportWrap(code, ast, { generate: ({ implementation, originalName, exportName }) => `/* #__PURE__ */ ${runtime(implementation, exportName, originalName ?? exportName)}`, + filter: (_name, meta) => + meta.valueNode?.type !== 'ObjectExpression' && + meta.valueNode?.type !== 'ArrayExpression', rejectNonAsyncFunction: true, }) : transformHoistInlineDirective(code, ast, { diff --git a/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/action.ts b/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/action.ts index c912d165f..10dbd7bdb 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/action.ts +++ b/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/action.ts @@ -2,6 +2,9 @@ import { state } from './state' +export const metadata = {} +export const tags: string[] = [] + export async function cachedFromServer(formData: FormData) { const argument = String(formData.get('argument')) state.executionCount++ diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.test.ts b/packages/plugin-rsc/src/transforms/module-export-effect.test.ts index 11dff2921..451585e4e 100644 --- a/packages/plugin-rsc/src/transforms/module-export-effect.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-effect.test.ts @@ -85,6 +85,12 @@ export default async function Page() {} transform(`export let action`, { rejectNonAsyncFunction: true }), ).rejects.toThrow('unsupported non async function') + await expect( + transform(`export const action = 1`, { + rejectNonAsyncFunction: true, + }), + ).rejects.toThrow('unsupported non async function') + const filtered = await transform(input, { rejectNonAsyncFunction: true, filter: () => false, @@ -237,7 +243,9 @@ export default async function Page() {} for (const [input, expected] of examples) { const result = await transform(input) - expect(result.references.map((context) => context.meta)).toEqual(expected) + expect( + result.references.map(({ meta: { valueNode: _, ...meta } }) => meta), + ).toEqual(expected) } }) }) 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 c1891e4e5..8b81dd977 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.test.ts @@ -30,6 +30,7 @@ export * from './all' meta: { localName: 'action', isFunction: true, + valueNode: { type: 'FunctionDeclaration' }, }, }, ], @@ -50,6 +51,7 @@ export * from './all' meta: { localName: 'loader', isFunction: true, + valueNode: { type: 'ArrowFunctionExpression' }, }, }, ], @@ -63,6 +65,7 @@ export * from './all' meta: { localName: 'value', isFunction: false, + valueNode: { type: 'Literal' }, }, }, ], @@ -81,6 +84,7 @@ export * from './all' meta: { localName: 'item', isFunction: undefined, + valueNode: { type: 'Identifier', name: 'source' }, }, }, ], @@ -101,7 +105,10 @@ export * from './all' type: 'default', kind: 'identifier', localName: undefined, - meta: { defaultExportIdentifierName: 'action' }, + meta: { + defaultExportIdentifierName: 'action', + valueNode: { type: 'Identifier', name: 'action' }, + }, }) expect(groups[6]).toMatchObject({ type: 'export-all' }) }) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index 58ac96b03..c8a1f8eaf 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -29,22 +29,12 @@ export type ModuleExportDirectFunction = { originalName: string } -// TODO: include raw `Node` so caller have move control? export type ModuleExportMeta = { - /* - * TODO: Track `isAsyncFunction` here so module export transforms can share - * static validation without probing export nodes themselves. - * - * | Export value | `isAsyncFunction` | Validation change | - * | ----------------------------- | ----------------- | ----------------- | - * | Async function or arrow | `true` | None | - * | Sync function | `false` | None | - * | Class | `false` | None | - * | Literal, object, or array | `false` | Accept -> reject | - * | Missing initializer | `false` | None | - * | Identifier or call expression | `undefined` | None | - * | Export specifier or re-export | `undefined` | None | + /** + * The source node that evaluates to the exported value when directly + * available. Indirect exports such as specifiers and re-exports omit it. */ + valueNode?: Node | ExportDefaultDeclaration['declaration'] /** * The local declaration name when statically available. * @@ -183,6 +173,7 @@ export function scanModuleExports( meta: { localName: name, isFunction, + valueNode: declarator.init ?? undefined, }, })), } @@ -208,6 +199,7 @@ export function scanModuleExports( meta: { localName: name, isFunction: getIsFunction(node.declaration), + valueNode: node.declaration, }, }, ], @@ -258,15 +250,22 @@ export function scanModuleExports( meta = { localName: node.declaration.id.name, isFunction: getIsFunction(node.declaration), + valueNode: node.declaration, } } else if (node.declaration.type === 'Identifier') { kind = 'identifier' - meta = { defaultExportIdentifierName: node.declaration.name } + meta = { + defaultExportIdentifierName: node.declaration.name, + valueNode: node.declaration, + } } else { // export default function () {} // export default () => {} kind = 'other' - meta = { isFunction: getIsFunction(node.declaration) } + meta = { + isFunction: getIsFunction(node.declaration), + valueNode: node.declaration, + } } groups.push({ type: 'default', 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 19741ee1b..439e388a1 100644 --- a/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-wrap.test.ts @@ -120,6 +120,9 @@ export default async function Page() {} `export let action`, `export class Action {}`, `export default class Action {}`, + `export const action = 1`, + `export const action = {}`, + `export const action = []`, ])('rejects non-async function export: %s', async (input) => { await expect( transform(input, { rejectNonAsyncFunction: true }), @@ -127,12 +130,23 @@ export default async function Page() {} }) test('only validates selected exports', async () => { - const result = await transform(`export function action() {}`, { + const result = await transform( + `export const action = async () => {}, object = {}, array = []`, + { + rejectNonAsyncFunction: true, + filter: (_name, meta) => + meta.valueNode?.type !== 'ObjectExpression' && + meta.valueNode?.type !== 'ArrayExpression', + }, + ) + expect(result.referenceNames).toEqual(['action']) + + const filtered = await transform(`export function action() {}`, { rejectNonAsyncFunction: true, filter: () => false, }) - expect(result.output.hasChanged()).toBe(false) - expect(result.references).toEqual([]) + expect(filtered.output.hasChanged()).toBe(false) + expect(filtered.references).toEqual([]) }) test('controls export-all preservation', async () => { diff --git a/packages/plugin-rsc/src/transforms/utils.test.ts b/packages/plugin-rsc/src/transforms/utils.test.ts index 535bec940..4a20b72a3 100644 --- a/packages/plugin-rsc/src/transforms/utils.test.ts +++ b/packages/plugin-rsc/src/transforms/utils.test.ts @@ -32,6 +32,9 @@ describe(validateNonAsyncFunction, () => { `export class Cls {}`, `export const Cls = class {}`, `export const Cls = class Foo {}`, + `export const value = 1`, + `export const value = {}`, + `export const value = []`, ] test(transformWrapExport, async () => { diff --git a/packages/plugin-rsc/src/transforms/utils.ts b/packages/plugin-rsc/src/transforms/utils.ts index 66feb20cc..f7ede7ef4 100644 --- a/packages/plugin-rsc/src/transforms/utils.ts +++ b/packages/plugin-rsc/src/transforms/utils.ts @@ -92,6 +92,9 @@ export function validateNonAsyncFunction( if ( node.type === 'ClassDeclaration' || node.type === 'ClassExpression' || + node.type === 'Literal' || + node.type === 'ObjectExpression' || + node.type === 'ArrayExpression' || ((node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression') && diff --git a/packages/plugin-rsc/src/transforms/wrap-export.ts b/packages/plugin-rsc/src/transforms/wrap-export.ts index c25ba25cb..a1a835afb 100644 --- a/packages/plugin-rsc/src/transforms/wrap-export.ts +++ b/packages/plugin-rsc/src/transforms/wrap-export.ts @@ -242,6 +242,10 @@ export function transformWrapExport( return { exportNames, output } } -function getExportMeta({ localName, ...meta }: ModuleExportMeta): ExportMeta { +function getExportMeta({ + localName, + valueNode: _, + ...meta +}: ModuleExportMeta): ExportMeta { return { ...meta, ...(localName && { declName: localName }) } } From a5c5855fccdd3c6642b70f0e7d00450f9c6b92e2 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:14:45 +0900 Subject: [PATCH 76/82] nit --- 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 c8a1f8eaf..6527e2765 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -167,6 +167,9 @@ export function scanModuleExports( return { node: declarator, directFunction, + // uniformly handle destructured exports such as: + // export const { foo, bar } = ... + // though associated `meta` likely doesn't make sense. exports: extractNames(declarator.id).map((name) => ({ localName: name, exportName: name, From 9e2dad2487e3ea10dcf7c4eea7a52acda273bfd4 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:19:34 +0900 Subject: [PATCH 77/82] nit --- packages/plugin-rsc/src/transforms/module-export-scan.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index 6527e2765..90c4f322a 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -35,6 +35,8 @@ export type ModuleExportMeta = { * available. Indirect exports such as specifiers and re-exports omit it. */ valueNode?: Node | ExportDefaultDeclaration['declaration'] + // TODO: followings are used only for internal `transformRscCssExport`. + // should probably simplify to use `valueNode` directly and remove these. /** * The local declaration name when statically available. * From f4ae4a6292ad7fa98e367199a17b7a5b126c9f9d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:31:39 +0900 Subject: [PATCH 78/82] docs(rsc): explain cache export filter Co-authored-by: OpenCode --- .../examples/use-cache-callable/callable-cache-plugin.ts | 4 ++++ 1 file changed, 4 insertions(+) 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 2350e9ac5..7be016bb3 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 @@ -40,6 +40,10 @@ export function callableCachePlugin(): Plugin { ? transformModuleExportWrap(code, ast, { generate: ({ implementation, originalName, exportName }) => `/* #__PURE__ */ ${runtime(implementation, exportName, originalName ?? exportName)}`, + // Next.js calls rejecting primitive literals while permitting + // objects and arrays arbitrary, but keeps the latter for metadata + // and viewport exports. + // https://github.com/vercel/next.js/blob/aae4179ac628e55483b62cd023a7e1827dcef122/crates/next-custom-transforms/src/transforms/server_actions.rs#L1914-L1919 filter: (_name, meta) => meta.valueNode?.type !== 'ObjectExpression' && meta.valueNode?.type !== 'ArrayExpression', From aa916fd7b806396f36ac19935ac224c97a343849 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:33:17 +0900 Subject: [PATCH 79/82] docs(rsc): explain export value nodes Co-authored-by: OpenCode --- .../plugin-rsc/src/transforms/module-export-scan.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index 90c4f322a..45d50ee8c 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -32,7 +32,16 @@ export type ModuleExportDirectFunction = { export type ModuleExportMeta = { /** * The source node that evaluates to the exported value when directly - * available. Indirect exports such as specifiers and re-exports omit it. + * available. Filters and generators can use it for syntax-sensitive policy. + * + * - The declaration for a function or class export. + * - The initializer for a variable export. + * - The declaration expression for a default export. + * - `undefined` for export specifiers and re-exports. + * + * The callable `"use cache"` example uses this to preserve object and array + * exports, matching an intentionally arbitrary Next.js exception without + * encoding that policy in the generic transform. */ valueNode?: Node | ExportDefaultDeclaration['declaration'] // TODO: followings are used only for internal `transformRscCssExport`. From 3a3bb2c140b7eb5b40b0f12d02475ae7dbaa7a31 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:34:18 +0900 Subject: [PATCH 80/82] docs(rsc): explain ordinary cache exports Co-authored-by: OpenCode --- .../src/features/file-directive-from-server/action.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/action.ts b/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/action.ts index 10dbd7bdb..056907b7e 100644 --- a/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/action.ts +++ b/packages/plugin-rsc/examples/use-cache-callable/src/features/file-directive-from-server/action.ts @@ -2,6 +2,8 @@ import { state } from './state' +// Next.js permits object and array values as ordinary exports from "use cache" +// modules, primarily for metadata and viewport objects. export const metadata = {} export const tags: string[] = [] From 8de4fcb728a9b644c64ef2c1a446b798bd7061f2 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:46:12 +0900 Subject: [PATCH 81/82] refactor(rsc): remove unrelated transform churn Co-authored-by: OpenCode --- packages/plugin-rsc/src/transforms/hoist.ts | 18 ++++++++++++++++-- .../src/transforms/server-action.test.ts | 10 +--------- packages/plugin-rsc/src/transforms/utils.ts | 11 ----------- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/hoist.ts b/packages/plugin-rsc/src/transforms/hoist.ts index 7cec8a782..8f72cfad1 100644 --- a/packages/plugin-rsc/src/transforms/hoist.ts +++ b/packages/plugin-rsc/src/transforms/hoist.ts @@ -10,7 +10,6 @@ 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. @@ -248,7 +247,7 @@ export function transformHoistInlineDirective( if (runtimeHoists.length > 0) { // Define hoisted runtime wrappers after leading directives. - output.prependLeft(getDirectivePrologueEnd(ast), runtimeHoists.join('')) + output.prependLeft(getRuntimeHoistPosition(ast), runtimeHoists.join('')) } // Expose the canonical generated names. They identify the moved functions by @@ -260,6 +259,21 @@ 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/server-action.test.ts b/packages/plugin-rsc/src/transforms/server-action.test.ts index 9d7e90a8d..ff6b343cb 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) => `register(${value})`, + runtime: (value) => value, }) } @@ -18,14 +18,6 @@ test('normalizes top-level server reference names', async () => { exportNames: ['action'], referenceNames: ['action'], }) - expect(result.output.toString()).toMatchInlineSnapshot( - ` - "'use server'; async function action() {} - register(action); - export { action }; - " - `, - ) }) test('normalizes inline server reference names', async () => { diff --git a/packages/plugin-rsc/src/transforms/utils.ts b/packages/plugin-rsc/src/transforms/utils.ts index 49fab8bbc..3affcbdfc 100644 --- a/packages/plugin-rsc/src/transforms/utils.ts +++ b/packages/plugin-rsc/src/transforms/utils.ts @@ -16,17 +16,6 @@ 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 7c744e4bc770e4e4c10c8ed0c9700fb069fb9772 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:50:02 +0900 Subject: [PATCH 82/82] refactor(rsc): unify module export metadata Co-authored-by: OpenCode --- packages/plugin-rsc/src/plugin.ts | 2 +- .../transforms/module-export-effect.test.ts | 32 ++++----- .../src/transforms/module-export-scan.test.ts | 8 +-- .../src/transforms/module-export-scan.ts | 8 +-- .../src/transforms/wrap-export.test.ts | 3 +- .../plugin-rsc/src/transforms/wrap-export.ts | 65 ++++--------------- 6 files changed, 40 insertions(+), 78 deletions(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index bed192ded..682af5e68 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -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)) ) diff --git a/packages/plugin-rsc/src/transforms/module-export-effect.test.ts b/packages/plugin-rsc/src/transforms/module-export-effect.test.ts index 756accd47..c59181da0 100644 --- a/packages/plugin-rsc/src/transforms/module-export-effect.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-effect.test.ts @@ -130,7 +130,7 @@ export default async function Page() {} `export function Fn() {}`, [ { - localName: 'Fn', + declName: 'Fn', isFunction: true, }, ], @@ -139,7 +139,7 @@ export default async function Page() {} `export class Cls {}`, [ { - localName: 'Cls', + declName: 'Cls', isFunction: false, }, ], @@ -148,7 +148,7 @@ export default async function Page() {} `export const Arrow = () => {}`, [ { - localName: 'Arrow', + declName: 'Arrow', isFunction: true, }, ], @@ -157,7 +157,7 @@ export default async function Page() {} `export const FnExpression = function () {}`, [ { - localName: 'FnExpression', + declName: 'FnExpression', isFunction: true, }, ], @@ -166,7 +166,7 @@ export default async function Page() {} `export const Literal = 1`, [ { - localName: 'Literal', + declName: 'Literal', isFunction: false, }, ], @@ -175,7 +175,7 @@ export default async function Page() {} `export const ObjectValue = {}`, [ { - localName: 'ObjectValue', + declName: 'ObjectValue', isFunction: false, }, ], @@ -184,7 +184,7 @@ export default async function Page() {} `export const ArrayValue = []`, [ { - localName: 'ArrayValue', + declName: 'ArrayValue', isFunction: false, }, ], @@ -193,33 +193,33 @@ export default async function Page() {} `export const ClassValue = class {}`, [ { - localName: 'ClassValue', + declName: 'ClassValue', isFunction: false, }, ], ], - [`export const Unknown = getValue()`, [{ localName: 'Unknown' }]], - [`export const { id } = getValue()`, [{ localName: 'id' }]], - [`export const [a, b] = []`, [{ localName: 'a' }, { localName: 'b' }]], + [`export const Unknown = getValue()`, [{ declName: 'Unknown' }]], + [`export const { id } = getValue()`, [{ declName: 'id' }]], + [`export const [a, b] = []`, [{ declName: 'a' }, { declName: 'b' }]], [ `export const MultiFn = () => {}, MultiValue = 1, MultiUnknown = getValue()`, [ { - localName: 'MultiFn', + declName: 'MultiFn', isFunction: true, }, { - localName: 'MultiValue', + declName: 'MultiValue', isFunction: false, }, - { localName: 'MultiUnknown' }, + { declName: 'MultiUnknown' }, ], ], [ `export default function Page() {}`, [ { - localName: 'Page', + declName: 'Page', isFunction: true, }, ], @@ -229,7 +229,7 @@ export default async function Page() {} `export default class Page {}`, [ { - localName: 'Page', + declName: 'Page', isFunction: false, }, ], 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 8b81dd977..f46c7a9c0 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.test.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.test.ts @@ -28,7 +28,7 @@ export * from './all' localName: 'action', exportName: 'action', meta: { - localName: 'action', + declName: 'action', isFunction: true, valueNode: { type: 'FunctionDeclaration' }, }, @@ -49,7 +49,7 @@ export * from './all' localName: 'loader', exportName: 'loader', meta: { - localName: 'loader', + declName: 'loader', isFunction: true, valueNode: { type: 'ArrowFunctionExpression' }, }, @@ -63,7 +63,7 @@ export * from './all' localName: 'value', exportName: 'value', meta: { - localName: 'value', + declName: 'value', isFunction: false, valueNode: { type: 'Literal' }, }, @@ -82,7 +82,7 @@ export * from './all' localName: 'item', exportName: 'item', meta: { - localName: 'item', + declName: 'item', isFunction: undefined, valueNode: { type: 'Identifier', name: 'source' }, }, diff --git a/packages/plugin-rsc/src/transforms/module-export-scan.ts b/packages/plugin-rsc/src/transforms/module-export-scan.ts index 45d50ee8c..3c7c23868 100644 --- a/packages/plugin-rsc/src/transforms/module-export-scan.ts +++ b/packages/plugin-rsc/src/transforms/module-export-scan.ts @@ -54,7 +54,7 @@ export type ModuleExportMeta = { * - `undefined` for `export default () => {}` * - `undefined` for `export { Page }` */ - localName?: string + declName?: string /** * Whether the exported value is statically known to be a function. * @@ -185,7 +185,7 @@ export function scanModuleExports( localName: name, exportName: name, meta: { - localName: name, + declName: name, isFunction, valueNode: declarator.init ?? undefined, }, @@ -211,7 +211,7 @@ export function scanModuleExports( localName: name, exportName: name, meta: { - localName: name, + declName: name, isFunction: getIsFunction(node.declaration), valueNode: node.declaration, }, @@ -262,7 +262,7 @@ export function scanModuleExports( kind = 'named-declaration' localName = node.declaration.id.name meta = { - localName: node.declaration.id.name, + declName: node.declaration.id.name, isFunction: getIsFunction(node.declaration), valueNode: node.declaration, } diff --git a/packages/plugin-rsc/src/transforms/wrap-export.test.ts b/packages/plugin-rsc/src/transforms/wrap-export.test.ts index 69a726c0d..c245774cc 100644 --- a/packages/plugin-rsc/src/transforms/wrap-export.test.ts +++ b/packages/plugin-rsc/src/transforms/wrap-export.test.ts @@ -465,7 +465,8 @@ export default cached; const ast = await parseAstAsync(input) transformWrapExport(input, ast, { runtime(value, _name, meta) { - actual.push(meta) + const { valueNode: _, ...rest } = meta + actual.push(rest) return value }, }) diff --git a/packages/plugin-rsc/src/transforms/wrap-export.ts b/packages/plugin-rsc/src/transforms/wrap-export.ts index a1a835afb..e94977c78 100644 --- a/packages/plugin-rsc/src/transforms/wrap-export.ts +++ b/packages/plugin-rsc/src/transforms/wrap-export.ts @@ -8,44 +8,13 @@ import { } from './module-export-scan' import { validateNonAsyncFunction } from './utils' -type ExportMeta = { - /** - * The local declaration name when statically available. - * - * - `"Page"` for `export function Page() {}` - * - `"Page"` for `export const Page = () => {}` - * - `undefined` for `export default () => {}` - * - `undefined` for `export { Page }` - */ - declName?: string - /** - * Whether the exported value is statically known to be a function. - * - * - `true` for `export const Page = () => {}` - * - `false` for `export const value = 1` - * - `undefined` for `export const value = getValue()` - * - `undefined` for `export default Page` - */ - isFunction?: boolean - /** - * The local identifier referenced by a default export. - * The RSC CSS transform uses this to detect a component by its capitalized - * local name and preserve that name on the generated wrapper. - * - * - `"Page"` for `const Page = () => {}; export default Page` - * - `undefined` for `export default function Page() {}` - * - `undefined` for `export default () => {}` - */ - defaultExportIdentifierName?: string -} - export type TransformWrapExportFilter = ( name: string, - meta: ExportMeta, + meta: ModuleExportMeta, ) => boolean export type TransformWrapExportOptions = { - runtime: (value: string, name: string, meta: ExportMeta) => string + runtime: (value: string, name: string, meta: ModuleExportMeta) => string ignoreExportAllDeclaration?: boolean rejectNonAsyncFunction?: boolean filter?: TransformWrapExportFilter @@ -74,7 +43,7 @@ export function transformWrapExport( exports: ModuleExportEntry[], ) { const filteredExports = exports.map((item) => { - const meta = getExportMeta(item.meta) + const meta = item.meta return { ...item, meta, @@ -112,7 +81,11 @@ export function transformWrapExport( output.move(start, end, input.length) } - function wrapExport(name: string, exportName: string, meta: ExportMeta = {}) { + function wrapExport( + name: string, + exportName: string, + meta: ModuleExportMeta = {}, + ) { if (!filter(exportName, meta)) { toAppend.push(`export { ${name} as ${exportName} }`) return @@ -132,7 +105,7 @@ export function transformWrapExport( for (const group of scanModuleExports(viteAst)) { if (group.type === 'declaration') { const [entry] = group.exports - if (filter(entry.exportName, getExportMeta(entry.meta))) { + if (filter(entry.exportName, entry.meta)) { validateNonAsyncFunction(options, group.declaration) } wrapSimple(group.node.start, group.declaration.start, group.exports) @@ -150,7 +123,7 @@ export function transformWrapExport( if ( declarator.node.init && declarator.exports.some(({ exportName, meta }) => - filter(exportName, getExportMeta(meta)), + filter(exportName, meta), ) ) { validateNonAsyncFunction(options, declarator.node.init) @@ -174,7 +147,7 @@ export function transformWrapExport( wrapExport( `$$import_${entry.localName}`, entry.exportName, - getExportMeta(entry.meta), + entry.meta, ) } } else { @@ -187,11 +160,7 @@ export function transformWrapExport( { pos: entry.node.exported.start }, ) } - wrapExport( - entry.localName, - entry.exportName, - getExportMeta(entry.meta), - ) + wrapExport(entry.localName, entry.exportName, entry.meta) } } } else if (group.type === 'export-all') { @@ -227,7 +196,7 @@ export function transformWrapExport( 'const $$default = ', ) } - const meta = getExportMeta(group.meta) + const meta = group.meta if (filter('default', meta)) { validateNonAsyncFunction(options, group.node.declaration) } @@ -241,11 +210,3 @@ export function transformWrapExport( return { exportNames, output } } - -function getExportMeta({ - localName, - valueNode: _, - ...meta -}: ModuleExportMeta): ExportMeta { - return { ...meta, ...(localName && { declName: localName }) } -}