diff --git a/packages/create-payload-app/src/lib/wrap-next-config.spec.ts b/packages/create-payload-app/src/lib/wrap-next-config.spec.ts index 745e8d341..fcee72ffc 100644 --- a/packages/create-payload-app/src/lib/wrap-next-config.spec.ts +++ b/packages/create-payload-app/src/lib/wrap-next-config.spec.ts @@ -1,4 +1,4 @@ -import { parseAndInsertWithPayload } from './wrap-next-config' +import { parseAndInsertWithPayload, withPayloadImportStatement } from './wrap-next-config' const defaultNextConfig = `/** @type {import('next').NextConfig} */ const nextConfig = {}; @@ -30,22 +30,25 @@ export { wrapped as default } describe('parseAndInsertWithPayload', () => { it('should parse the default next config', () => { - const modifiedConfig = parseAndInsertWithPayload(defaultNextConfig) - expect(modifiedConfig).toMatch(/withPayload\(nextConfig\)/) + const { modifiedConfigContent } = parseAndInsertWithPayload(defaultNextConfig) + expect(modifiedConfigContent).toContain(withPayloadImportStatement) + expect(modifiedConfigContent).toContain('withPayload(nextConfig)') }) it('should parse the config with a function', () => { - const modifiedConfig = parseAndInsertWithPayload(nextConfigWithFunc) - expect(modifiedConfig).toMatch(/withPayload\(someFunc\(nextConfig\)\)/) + const { modifiedConfigContent } = parseAndInsertWithPayload(nextConfigWithFunc) + expect(modifiedConfigContent).toContain('withPayload(someFunc(nextConfig))') }) it('should parse the config with a function on a new line', () => { - const modifiedConfig = parseAndInsertWithPayload(nextConfigWithFuncMultiline) - expect(modifiedConfig).toMatch(/withPayload\(someFunc\(\n nextConfig\n\)\)/) + const { modifiedConfigContent } = parseAndInsertWithPayload(nextConfigWithFuncMultiline) + expect(modifiedConfigContent).toContain(withPayloadImportStatement) + expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n nextConfig\n\)\)/) }) // Unsupported: export { wrapped as default } it('should give warning with a named export as default', () => { - const modifiedConfig = parseAndInsertWithPayload(nextConfigExportNamedDefault) - expect(modifiedConfig).toHaveProperty('error') + const { modifiedConfigContent, error } = parseAndInsertWithPayload(nextConfigExportNamedDefault) + expect(modifiedConfigContent).toContain(withPayloadImportStatement) + expect(error).toBeTruthy() }) }) diff --git a/packages/create-payload-app/src/lib/wrap-next-config.ts b/packages/create-payload-app/src/lib/wrap-next-config.ts index d65c74e45..fd9062781 100644 --- a/packages/create-payload-app/src/lib/wrap-next-config.ts +++ b/packages/create-payload-app/src/lib/wrap-next-config.ts @@ -3,6 +3,8 @@ import fs from 'fs' import globby from 'globby' import path from 'path' +export const withPayloadImportStatement = `import { withPayload } from '@payloadcms/next/withPayload'\n` + export const wrapNextConfig = async (args: { projectDir: string }): Promise => { const foundConfig = (await globby('next.config.*js', { cwd: args.projectDir }))?.[0] @@ -11,14 +13,18 @@ export const wrapNextConfig = async (args: { projectDir: string }): Promise p.type === 'ExportDefaultDeclaration') as | Directive @@ -33,7 +39,11 @@ export function parseAndInsertWithPayload(content: string): { error: string } | } if (exportDefaultDeclaration) { - return insertBeforeAndAfter(content, exportDefaultDeclaration.declaration?.loc) + const modifiedConfigContent = insertBeforeAndAfter( + content, + exportDefaultDeclaration.declaration?.loc, + ) + return { modifiedConfigContent } } else if (exportNamedDeclaration) { const exportSpecifier = exportNamedDeclaration.specifiers.find( (s) => @@ -48,13 +58,12 @@ export function parseAndInsertWithPayload(content: string): { error: string } | return { error: `Automatic wrapping of named exports as default not supported yet. Please manually wrap your Next config with the withPayload function`, + modifiedConfigContent: content, } } } else { throw new Error('Could not automatically wrap next.config.js with withPayload') } - - return insertBeforeAndAfter(content, exportDefaultDeclaration.declaration?.loc) } type Directive = {