From dcb86ae806b9cc3694d57730f0b644335fbab5ac Mon Sep 17 00:00:00 2001 From: Tanner Linsley Date: Wed, 12 Feb 2025 16:43:30 -0700 Subject: [PATCH 1/2] fix: file-wide `use server` now handles export const var --- .../src/compilers.ts | 18 ++++++ .../tests/compiler.test.ts | 62 +++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/packages/directive-functions-plugin/src/compilers.ts b/packages/directive-functions-plugin/src/compilers.ts index b359616a7b4..7be7d71e76e 100644 --- a/packages/directive-functions-plugin/src/compilers.ts +++ b/packages/directive-functions-plugin/src/compilers.ts @@ -260,6 +260,24 @@ export function findDirectives( compileDirective(path.get('declaration') as SupportedFunctionPath) } }, + ExportDeclaration(path) { + if ( + babel.types.isExportNamedDeclaration(path.node) && + babel.types.isVariableDeclaration(path.node.declaration) && + (babel.types.isFunctionExpression( + path.node.declaration.declarations[0]?.init, + ) || + babel.types.isArrowFunctionExpression( + path.node.declaration.declarations[0]?.init, + )) + ) { + compileDirective( + path.get( + 'declaration.declarations.0.init', + ) as SupportedFunctionPath, + ) + } + }, }) } else { // Find all directives diff --git a/packages/directive-functions-plugin/tests/compiler.test.ts b/packages/directive-functions-plugin/tests/compiler.test.ts index 28f5bc657b8..ffc2819f228 100644 --- a/packages/directive-functions-plugin/tests/compiler.test.ts +++ b/packages/directive-functions-plugin/tests/compiler.test.ts @@ -648,4 +648,66 @@ describe('server function compilation', () => { export { bytesSignupServerFn_1 };" `) }) + + test.only('file-wide use server directive', () => { + const code = ` + 'use server' + + import { imported } from 'imported' + + export const serverFnConstWithImport = async () => { + return imported + } + + export function serverFnNamedWithImport () { + return imported + } + ` + + const client = compileDirectives({ ...clientConfig, code }) + const ssr = compileDirectives({ ...ssrConfig, code }) + const server = compileDirectives({ + ...serverConfig, + code, + filename: + ssr.directiveFnsById[Object.keys(ssr.directiveFnsById)[0]!]! + .extractedFilename, + }) + + console.log(ssr.directiveFnsById) + + expect(client.compiledResult.code).toMatchInlineSnapshot(` + "'use server'; + + import { createClientRpc } from "my-rpc-lib-client"; + const serverFnConstWithImport_1 = createClientRpc("test_ts--serverFnConstWithImport_1"); + export const serverFnConstWithImport = serverFnConstWithImport_1; + const serverFnNamedWithImport_1 = createClientRpc("test_ts--serverFnNamedWithImport_1"); + export const serverFnNamedWithImport = serverFnNamedWithImport_1;" + `) + + expect(ssr.compiledResult.code).toMatchInlineSnapshot(` + "'use server'; + + import { createSsrRpc } from "my-rpc-lib-server"; + const serverFnConstWithImport_1 = createSsrRpc("test_ts--serverFnConstWithImport_1"); + export const serverFnConstWithImport = serverFnConstWithImport_1; + const serverFnNamedWithImport_1 = createSsrRpc("test_ts--serverFnNamedWithImport_1"); + export const serverFnNamedWithImport = serverFnNamedWithImport_1;" + `) + + expect(server.compiledResult.code).toMatchInlineSnapshot(` + "'use server'; + + import { createServerRpc } from "my-rpc-lib-server"; + import { imported } from 'imported'; + const serverFnConstWithImport_1 = createServerRpc("test_ts--serverFnConstWithImport_1", async () => { + return imported; + }); + const serverFnNamedWithImport_1 = createServerRpc("test_ts--serverFnNamedWithImport_1", function serverFnNamedWithImport() { + return imported; + }); + export { serverFnConstWithImport_1, serverFnNamedWithImport_1 };" + `) + }) }) From 20b6de201f84043b41bd8056490b46748eb99d19 Mon Sep 17 00:00:00 2001 From: Tanner Linsley Date: Thu, 13 Feb 2025 10:49:14 -0700 Subject: [PATCH 2/2] no only --- packages/directive-functions-plugin/tests/compiler.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/directive-functions-plugin/tests/compiler.test.ts b/packages/directive-functions-plugin/tests/compiler.test.ts index ffc2819f228..6aca7f1df6f 100644 --- a/packages/directive-functions-plugin/tests/compiler.test.ts +++ b/packages/directive-functions-plugin/tests/compiler.test.ts @@ -649,7 +649,7 @@ describe('server function compilation', () => { `) }) - test.only('file-wide use server directive', () => { + test('file-wide use server directive', () => { const code = ` 'use server'