create-payload-app 3.21.0 → 3.23.0-canary.597254e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"manage-env-files.d.ts","sourceRoot":"","sources":["../../src/lib/manage-env-files.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAkEnE,wDAAwD;AACxD,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDhB"}
1
+ {"version":3,"file":"manage-env-files.d.ts","sourceRoot":"","sources":["../../src/lib/manage-env-files.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAmEnE,wDAAwD;AACxD,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDhB"}
@@ -29,6 +29,7 @@ const generateEnvContent = (existingEnv, databaseType, databaseUri, payloadSecre
29
29
  const envVars = {};
30
30
  existingEnv.split('\n').filter((line)=>line.includes('=') && !line.startsWith('#')).forEach((line)=>{
31
31
  const [key, value] = line.split('=');
32
+ // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
32
33
  envVars[key] = value;
33
34
  });
34
35
  // Override specific keys
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/manage-env-files.ts"],"sourcesContent":["import fs from 'fs-extra'\nimport path from 'path'\n\nimport type { CliArgs, DbType, ProjectTemplate } from '../types.js'\n\nimport { debug, error } from '../utils/log.js'\nimport { dbChoiceRecord } from './select-db.js'\n\nconst updateEnvExampleVariables = (contents: string, databaseType: DbType | undefined): string => {\n return contents\n .split('\\n')\n .map((line) => {\n if (line.startsWith('#') || !line.includes('=')) {\n return line // Preserve comments and unrelated lines\n }\n\n const [key] = line.split('=')\n\n if (key === 'DATABASE_URI' || key === 'POSTGRES_URL' || key === 'MONGODB_URI') {\n const dbChoice = databaseType ? dbChoiceRecord[databaseType] : null\n\n if (dbChoice) {\n const placeholderUri = `${dbChoice.dbConnectionPrefix}your-database-name${\n dbChoice.dbConnectionSuffix || ''\n }`\n return databaseType === 'vercel-postgres'\n ? `POSTGRES_URL=${placeholderUri}`\n : `DATABASE_URI=${placeholderUri}`\n }\n\n return `DATABASE_URI=your-database-connection-here` // Fallback\n }\n\n if (key === 'PAYLOAD_SECRET' || key === 'PAYLOAD_SECRET_KEY') {\n return `PAYLOAD_SECRET=YOUR_SECRET_HERE`\n }\n\n return line\n })\n .join('\\n')\n}\n\nconst generateEnvContent = (\n existingEnv: string,\n databaseType: DbType | undefined,\n databaseUri: string,\n payloadSecret: string,\n): string => {\n const dbKey = databaseType === 'vercel-postgres' ? 'POSTGRES_URL' : 'DATABASE_URI'\n\n const envVars: Record<string, string> = {}\n existingEnv\n .split('\\n')\n .filter((line) => line.includes('=') && !line.startsWith('#'))\n .forEach((line) => {\n const [key, value] = line.split('=')\n envVars[key] = value\n })\n\n // Override specific keys\n envVars[dbKey] = databaseUri\n envVars['PAYLOAD_SECRET'] = payloadSecret\n\n // Rebuild content\n return Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')\n}\n\n/** Parse and swap .env.example values and write .env */\nexport async function manageEnvFiles(args: {\n cliArgs: CliArgs\n databaseType?: DbType\n databaseUri: string\n payloadSecret: string\n projectDir: string\n template?: ProjectTemplate\n}): Promise<void> {\n const { cliArgs, databaseType, databaseUri, payloadSecret, projectDir, template } = args\n\n const debugFlag = cliArgs['--debug']\n\n if (cliArgs['--dry-run']) {\n debug(`DRY RUN: Environment files managed`)\n return\n }\n\n const envExamplePath = path.join(projectDir, '.env.example')\n const envPath = path.join(projectDir, '.env')\n\n try {\n let updatedExampleContents: string\n\n // Update .env.example\n if (template?.type === 'starter') {\n if (!fs.existsSync(envExamplePath)) {\n error(`.env.example file not found at ${envExamplePath}`)\n process.exit(1)\n }\n\n const envExampleContents = await fs.readFile(envExamplePath, 'utf8')\n updatedExampleContents = updateEnvExampleVariables(envExampleContents, databaseType)\n\n await fs.writeFile(envExamplePath, updatedExampleContents.trimEnd() + '\\n')\n\n if (debugFlag) {\n debug(`.env.example file successfully updated`)\n }\n } else {\n updatedExampleContents = `# Added by Payload\\nDATABASE_URI=your-connection-string-here\\nPAYLOAD_SECRET=YOUR_SECRET_HERE\\n`\n await fs.writeFile(envExamplePath, updatedExampleContents.trimEnd() + '\\n')\n }\n\n // Merge existing variables and create or update .env\n const envExampleContents = await fs.readFile(envExamplePath, 'utf8')\n const envContent = generateEnvContent(\n envExampleContents,\n databaseType,\n databaseUri,\n payloadSecret,\n )\n await fs.writeFile(envPath, `# Added by Payload\\n${envContent.trimEnd()}\\n`)\n\n if (debugFlag) {\n debug(`.env file successfully created or updated`)\n }\n } catch (err: unknown) {\n error('Unable to manage environment files')\n if (err instanceof Error) {\n error(err.message)\n }\n process.exit(1)\n }\n}\n"],"names":["fs","path","debug","error","dbChoiceRecord","updateEnvExampleVariables","contents","databaseType","split","map","line","startsWith","includes","key","dbChoice","placeholderUri","dbConnectionPrefix","dbConnectionSuffix","join","generateEnvContent","existingEnv","databaseUri","payloadSecret","dbKey","envVars","filter","forEach","value","Object","entries","manageEnvFiles","args","cliArgs","projectDir","template","debugFlag","envExamplePath","envPath","updatedExampleContents","type","existsSync","process","exit","envExampleContents","readFile","writeFile","trimEnd","envContent","err","Error","message"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/manage-env-files.ts"],"sourcesContent":["import fs from 'fs-extra'\nimport path from 'path'\n\nimport type { CliArgs, DbType, ProjectTemplate } from '../types.js'\n\nimport { debug, error } from '../utils/log.js'\nimport { dbChoiceRecord } from './select-db.js'\n\nconst updateEnvExampleVariables = (contents: string, databaseType: DbType | undefined): string => {\n return contents\n .split('\\n')\n .map((line) => {\n if (line.startsWith('#') || !line.includes('=')) {\n return line // Preserve comments and unrelated lines\n }\n\n const [key] = line.split('=')\n\n if (key === 'DATABASE_URI' || key === 'POSTGRES_URL' || key === 'MONGODB_URI') {\n const dbChoice = databaseType ? dbChoiceRecord[databaseType] : null\n\n if (dbChoice) {\n const placeholderUri = `${dbChoice.dbConnectionPrefix}your-database-name${\n dbChoice.dbConnectionSuffix || ''\n }`\n return databaseType === 'vercel-postgres'\n ? `POSTGRES_URL=${placeholderUri}`\n : `DATABASE_URI=${placeholderUri}`\n }\n\n return `DATABASE_URI=your-database-connection-here` // Fallback\n }\n\n if (key === 'PAYLOAD_SECRET' || key === 'PAYLOAD_SECRET_KEY') {\n return `PAYLOAD_SECRET=YOUR_SECRET_HERE`\n }\n\n return line\n })\n .join('\\n')\n}\n\nconst generateEnvContent = (\n existingEnv: string,\n databaseType: DbType | undefined,\n databaseUri: string,\n payloadSecret: string,\n): string => {\n const dbKey = databaseType === 'vercel-postgres' ? 'POSTGRES_URL' : 'DATABASE_URI'\n\n const envVars: Record<string, string> = {}\n existingEnv\n .split('\\n')\n .filter((line) => line.includes('=') && !line.startsWith('#'))\n .forEach((line) => {\n const [key, value] = line.split('=')\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n envVars[key] = value\n })\n\n // Override specific keys\n envVars[dbKey] = databaseUri\n envVars['PAYLOAD_SECRET'] = payloadSecret\n\n // Rebuild content\n return Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')\n}\n\n/** Parse and swap .env.example values and write .env */\nexport async function manageEnvFiles(args: {\n cliArgs: CliArgs\n databaseType?: DbType\n databaseUri: string\n payloadSecret: string\n projectDir: string\n template?: ProjectTemplate\n}): Promise<void> {\n const { cliArgs, databaseType, databaseUri, payloadSecret, projectDir, template } = args\n\n const debugFlag = cliArgs['--debug']\n\n if (cliArgs['--dry-run']) {\n debug(`DRY RUN: Environment files managed`)\n return\n }\n\n const envExamplePath = path.join(projectDir, '.env.example')\n const envPath = path.join(projectDir, '.env')\n\n try {\n let updatedExampleContents: string\n\n // Update .env.example\n if (template?.type === 'starter') {\n if (!fs.existsSync(envExamplePath)) {\n error(`.env.example file not found at ${envExamplePath}`)\n process.exit(1)\n }\n\n const envExampleContents = await fs.readFile(envExamplePath, 'utf8')\n updatedExampleContents = updateEnvExampleVariables(envExampleContents, databaseType)\n\n await fs.writeFile(envExamplePath, updatedExampleContents.trimEnd() + '\\n')\n\n if (debugFlag) {\n debug(`.env.example file successfully updated`)\n }\n } else {\n updatedExampleContents = `# Added by Payload\\nDATABASE_URI=your-connection-string-here\\nPAYLOAD_SECRET=YOUR_SECRET_HERE\\n`\n await fs.writeFile(envExamplePath, updatedExampleContents.trimEnd() + '\\n')\n }\n\n // Merge existing variables and create or update .env\n const envExampleContents = await fs.readFile(envExamplePath, 'utf8')\n const envContent = generateEnvContent(\n envExampleContents,\n databaseType,\n databaseUri,\n payloadSecret,\n )\n await fs.writeFile(envPath, `# Added by Payload\\n${envContent.trimEnd()}\\n`)\n\n if (debugFlag) {\n debug(`.env file successfully created or updated`)\n }\n } catch (err: unknown) {\n error('Unable to manage environment files')\n if (err instanceof Error) {\n error(err.message)\n }\n process.exit(1)\n }\n}\n"],"names":["fs","path","debug","error","dbChoiceRecord","updateEnvExampleVariables","contents","databaseType","split","map","line","startsWith","includes","key","dbChoice","placeholderUri","dbConnectionPrefix","dbConnectionSuffix","join","generateEnvContent","existingEnv","databaseUri","payloadSecret","dbKey","envVars","filter","forEach","value","Object","entries","manageEnvFiles","args","cliArgs","projectDir","template","debugFlag","envExamplePath","envPath","updatedExampleContents","type","existsSync","process","exit","envExampleContents","readFile","writeFile","trimEnd","envContent","err","Error","message"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/wrap-next-config.ts"],"sourcesContent":["import type { ExportDefaultExpression, ModuleItem } from '@swc/core'\n\nimport { parse } from '@swc/core'\nimport chalk from 'chalk'\nimport { parseModule, Syntax } from 'esprima-next'\nimport fs from 'fs'\n\nimport type { NextConfigType } from '../types.js'\n\nimport { log, warning } from '../utils/log.js'\n\nexport const withPayloadStatement = {\n cjs: `const { withPayload } = require(\"@payloadcms/next/withPayload\");`,\n esm: `import { withPayload } from \"@payloadcms/next/withPayload\";`,\n ts: `import { withPayload } from \"@payloadcms/next/withPayload\";`,\n}\n\nexport const wrapNextConfig = async (args: {\n nextConfigPath: string\n nextConfigType: NextConfigType\n}) => {\n const { nextConfigPath, nextConfigType: configType } = args\n const configContent = fs.readFileSync(nextConfigPath, 'utf8')\n const { modifiedConfigContent: newConfig, success } = await parseAndModifyConfigContent(\n configContent,\n configType,\n )\n\n if (!success) {\n return\n }\n\n fs.writeFileSync(nextConfigPath, newConfig)\n}\n\n/**\n * Parses config content with AST and wraps it with withPayload function\n */\nexport async function parseAndModifyConfigContent(\n content: string,\n configType: NextConfigType,\n): Promise<{ modifiedConfigContent: string; success: boolean }> {\n content = withPayloadStatement[configType] + '\\n' + content\n\n if (configType === 'cjs' || configType === 'esm') {\n try {\n const ast = parseModule(content, { loc: true })\n\n if (configType === 'cjs') {\n // Find `module.exports = X`\n const moduleExports = ast.body.find(\n (p) =>\n p.type === Syntax.ExpressionStatement &&\n p.expression?.type === Syntax.AssignmentExpression &&\n p.expression.left?.type === Syntax.MemberExpression &&\n p.expression.left.object?.type === Syntax.Identifier &&\n p.expression.left.object.name === 'module' &&\n p.expression.left.property?.type === Syntax.Identifier &&\n p.expression.left.property.name === 'exports',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any\n\n if (moduleExports && moduleExports.expression.right?.loc) {\n const modifiedConfigContent = insertBeforeAndAfter(\n content,\n moduleExports.expression.right.loc,\n )\n return { modifiedConfigContent, success: true }\n }\n\n return Promise.resolve({\n modifiedConfigContent: content,\n success: false,\n })\n } else if (configType === 'esm') {\n const exportDefaultDeclaration = ast.body.find(\n (p) => p.type === Syntax.ExportDefaultDeclaration,\n ) as Directive | undefined\n\n const exportNamedDeclaration = ast.body.find(\n (p) => p.type === Syntax.ExportNamedDeclaration,\n ) as ExportNamedDeclaration | undefined\n\n if (!exportDefaultDeclaration && !exportNamedDeclaration) {\n throw new Error('Could not find ExportDefaultDeclaration in next.config.js')\n }\n\n if (exportDefaultDeclaration && exportDefaultDeclaration.declaration?.loc) {\n const modifiedConfigContent = insertBeforeAndAfter(\n content,\n exportDefaultDeclaration.declaration.loc,\n )\n return { modifiedConfigContent, success: true }\n } else if (exportNamedDeclaration) {\n const exportSpecifier = exportNamedDeclaration.specifiers.find(\n (s) =>\n s.type === 'ExportSpecifier' &&\n s.exported?.name === 'default' &&\n s.local?.type === 'Identifier' &&\n s.local?.name,\n )\n\n if (exportSpecifier) {\n warning('Could not automatically wrap next.config.js with withPayload.')\n warning('Automatic wrapping of named exports as default not supported yet.')\n\n warnUserWrapNotSuccessful(configType)\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n }\n\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return Promise.resolve({\n modifiedConfigContent: content,\n success: false,\n })\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n warning(`Unable to parse Next config. Error: ${error.message} `)\n warnUserWrapNotSuccessful(configType)\n }\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n } else if (configType === 'ts') {\n const { moduleItems, parseOffset } = await compileTypeScriptFileToAST(content)\n\n const exportDefaultDeclaration = moduleItems.find(\n (m) =>\n m.type === 'ExportDefaultExpression' &&\n (m.expression.type === 'Identifier' || m.expression.type === 'CallExpression'),\n ) as ExportDefaultExpression | undefined\n\n if (exportDefaultDeclaration) {\n if (!('span' in exportDefaultDeclaration.expression)) {\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return Promise.resolve({\n modifiedConfigContent: content,\n success: false,\n })\n }\n\n const modifiedConfigContent = insertBeforeAndAfterSWC(\n content,\n exportDefaultDeclaration.expression.span,\n parseOffset,\n )\n return { modifiedConfigContent, success: true }\n }\n }\n\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return Promise.resolve({\n modifiedConfigContent: content,\n success: false,\n })\n}\n\nfunction warnUserWrapNotSuccessful(configType: NextConfigType) {\n // Output directions for user to update next.config.js\n const withPayloadMessage = `\n\n ${chalk.bold(`Please manually wrap your existing Next config with the withPayload function. Here is an example:`)}\n\n ${withPayloadStatement[configType]}\n\n const nextConfig = {\n // Your Next.js config here\n }\n\n ${configType === 'cjs' ? 'module.exports = withPayload(nextConfig)' : 'export default withPayload(nextConfig)'}\n\n`\n\n log(withPayloadMessage)\n}\n\ntype Directive = {\n declaration?: {\n loc: Loc\n }\n}\n\ntype ExportNamedDeclaration = {\n declaration: null\n loc: Loc\n specifiers: {\n exported: {\n loc: Loc\n name: string\n type: string\n }\n loc: Loc\n local: {\n loc: Loc\n name: string\n type: string\n }\n type: string\n }[]\n type: string\n}\n\ntype Loc = {\n end: { column: number; line: number }\n start: { column: number; line: number }\n}\n\nfunction insertBeforeAndAfter(content: string, loc: Loc): string {\n const { end, start } = loc\n const lines = content.split('\\n')\n\n const insert = (line: string, column: number, text: string) => {\n return line.slice(0, column) + text + line.slice(column)\n }\n\n // insert ) after end\n lines[end.line - 1] = insert(lines[end.line - 1], end.column, ')')\n // insert withPayload before start\n if (start.line === end.line) {\n lines[end.line - 1] = insert(lines[end.line - 1], start.column, 'withPayload(')\n } else {\n lines[start.line - 1] = insert(lines[start.line - 1], start.column, 'withPayload(')\n }\n\n return lines.join('\\n')\n}\n\nfunction insertBeforeAndAfterSWC(\n content: string,\n span: ModuleItem['span'],\n /**\n * WARNING: This is ONLY for unit tests. Defaults to 0 otherwise.\n *\n * @see compileTypeScriptFileToAST\n */\n parseOffset: number,\n): string {\n const { end: preOffsetEnd, start: preOffsetStart } = span\n\n const start = preOffsetStart - parseOffset\n const end = preOffsetEnd - parseOffset\n\n const insert = (pos: number, text: string): string => {\n return content.slice(0, pos) + text + content.slice(pos)\n }\n\n // insert ) after end\n content = insert(end - 1, ')')\n // insert withPayload before start\n content = insert(start - 1, 'withPayload(')\n\n return content\n}\n\n/**\n * Compile typescript to AST using the swc compiler\n */\nasync function compileTypeScriptFileToAST(\n fileContent: string,\n): Promise<{ moduleItems: ModuleItem[]; parseOffset: number }> {\n let parseOffset = 0\n\n /**\n * WARNING: This is ONLY for unit tests.\n *\n * Multiple instances of swc DO NOT reset the .span.end value.\n * During unit tests, the .spawn.end value is read and accounted for.\n *\n * https://github.com/swc-project/swc/issues/1366\n */\n if (process.env.NODE_ENV === 'test') {\n parseOffset = (await parse('')).span.end\n }\n\n const module = await parse(fileContent, {\n syntax: 'typescript',\n })\n\n return { moduleItems: module.body, parseOffset }\n}\n"],"names":["parse","chalk","parseModule","Syntax","fs","log","warning","withPayloadStatement","cjs","esm","ts","wrapNextConfig","args","nextConfigPath","nextConfigType","configType","configContent","readFileSync","modifiedConfigContent","newConfig","success","parseAndModifyConfigContent","writeFileSync","content","ast","loc","moduleExports","body","find","p","type","ExpressionStatement","expression","AssignmentExpression","left","MemberExpression","object","Identifier","name","property","right","insertBeforeAndAfter","Promise","resolve","exportDefaultDeclaration","ExportDefaultDeclaration","exportNamedDeclaration","ExportNamedDeclaration","Error","declaration","exportSpecifier","specifiers","s","exported","local","warnUserWrapNotSuccessful","error","message","moduleItems","parseOffset","compileTypeScriptFileToAST","m","insertBeforeAndAfterSWC","span","withPayloadMessage","bold","end","start","lines","split","insert","line","column","text","slice","join","preOffsetEnd","preOffsetStart","pos","fileContent","process","env","NODE_ENV","module","syntax"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/wrap-next-config.ts"],"sourcesContent":["import type { ExportDefaultExpression, ModuleItem } from '@swc/core'\n\nimport { parse } from '@swc/core'\nimport chalk from 'chalk'\nimport { parseModule, Syntax } from 'esprima-next'\nimport fs from 'fs'\n\nimport type { NextConfigType } from '../types.js'\n\nimport { log, warning } from '../utils/log.js'\n\nexport const withPayloadStatement = {\n cjs: `const { withPayload } = require(\"@payloadcms/next/withPayload\");`,\n esm: `import { withPayload } from \"@payloadcms/next/withPayload\";`,\n ts: `import { withPayload } from \"@payloadcms/next/withPayload\";`,\n}\n\nexport const wrapNextConfig = async (args: {\n nextConfigPath: string\n nextConfigType: NextConfigType\n}) => {\n const { nextConfigPath, nextConfigType: configType } = args\n const configContent = fs.readFileSync(nextConfigPath, 'utf8')\n const { modifiedConfigContent: newConfig, success } = await parseAndModifyConfigContent(\n configContent,\n configType,\n )\n\n if (!success) {\n return\n }\n\n fs.writeFileSync(nextConfigPath, newConfig)\n}\n\n/**\n * Parses config content with AST and wraps it with withPayload function\n */\nexport async function parseAndModifyConfigContent(\n content: string,\n configType: NextConfigType,\n): Promise<{ modifiedConfigContent: string; success: boolean }> {\n content = withPayloadStatement[configType] + '\\n' + content\n\n if (configType === 'cjs' || configType === 'esm') {\n try {\n const ast = parseModule(content, { loc: true })\n\n if (configType === 'cjs') {\n // Find `module.exports = X`\n const moduleExports = ast.body.find(\n (p) =>\n p.type === Syntax.ExpressionStatement &&\n p.expression?.type === Syntax.AssignmentExpression &&\n p.expression.left?.type === Syntax.MemberExpression &&\n p.expression.left.object?.type === Syntax.Identifier &&\n p.expression.left.object.name === 'module' &&\n p.expression.left.property?.type === Syntax.Identifier &&\n p.expression.left.property.name === 'exports',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any\n\n if (moduleExports && moduleExports.expression.right?.loc) {\n const modifiedConfigContent = insertBeforeAndAfter(\n content,\n moduleExports.expression.right.loc,\n )\n return { modifiedConfigContent, success: true }\n }\n\n return Promise.resolve({\n modifiedConfigContent: content,\n success: false,\n })\n } else if (configType === 'esm') {\n const exportDefaultDeclaration = ast.body.find(\n (p) => p.type === Syntax.ExportDefaultDeclaration,\n ) as Directive | undefined\n\n const exportNamedDeclaration = ast.body.find(\n (p) => p.type === Syntax.ExportNamedDeclaration,\n ) as ExportNamedDeclaration | undefined\n\n if (!exportDefaultDeclaration && !exportNamedDeclaration) {\n throw new Error('Could not find ExportDefaultDeclaration in next.config.js')\n }\n\n if (exportDefaultDeclaration && exportDefaultDeclaration.declaration?.loc) {\n const modifiedConfigContent = insertBeforeAndAfter(\n content,\n exportDefaultDeclaration.declaration.loc,\n )\n return { modifiedConfigContent, success: true }\n } else if (exportNamedDeclaration) {\n const exportSpecifier = exportNamedDeclaration.specifiers.find(\n (s) =>\n s.type === 'ExportSpecifier' &&\n s.exported?.name === 'default' &&\n s.local?.type === 'Identifier' &&\n s.local?.name,\n )\n\n if (exportSpecifier) {\n warning('Could not automatically wrap next.config.js with withPayload.')\n warning('Automatic wrapping of named exports as default not supported yet.')\n\n warnUserWrapNotSuccessful(configType)\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n }\n\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return Promise.resolve({\n modifiedConfigContent: content,\n success: false,\n })\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n warning(`Unable to parse Next config. Error: ${error.message} `)\n warnUserWrapNotSuccessful(configType)\n }\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n } else if (configType === 'ts') {\n const { moduleItems, parseOffset } = await compileTypeScriptFileToAST(content)\n\n const exportDefaultDeclaration = moduleItems.find(\n (m) =>\n m.type === 'ExportDefaultExpression' &&\n (m.expression.type === 'Identifier' || m.expression.type === 'CallExpression'),\n ) as ExportDefaultExpression | undefined\n\n if (exportDefaultDeclaration) {\n if (!('span' in exportDefaultDeclaration.expression)) {\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return Promise.resolve({\n modifiedConfigContent: content,\n success: false,\n })\n }\n\n const modifiedConfigContent = insertBeforeAndAfterSWC(\n content,\n exportDefaultDeclaration.expression.span,\n parseOffset,\n )\n return { modifiedConfigContent, success: true }\n }\n }\n\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return Promise.resolve({\n modifiedConfigContent: content,\n success: false,\n })\n}\n\nfunction warnUserWrapNotSuccessful(configType: NextConfigType) {\n // Output directions for user to update next.config.js\n const withPayloadMessage = `\n\n ${chalk.bold(`Please manually wrap your existing Next config with the withPayload function. Here is an example:`)}\n\n ${withPayloadStatement[configType]}\n\n const nextConfig = {\n // Your Next.js config here\n }\n\n ${configType === 'cjs' ? 'module.exports = withPayload(nextConfig)' : 'export default withPayload(nextConfig)'}\n\n`\n\n log(withPayloadMessage)\n}\n\ntype Directive = {\n declaration?: {\n loc: Loc\n }\n}\n\ntype ExportNamedDeclaration = {\n declaration: null\n loc: Loc\n specifiers: {\n exported: {\n loc: Loc\n name: string\n type: string\n }\n loc: Loc\n local: {\n loc: Loc\n name: string\n type: string\n }\n type: string\n }[]\n type: string\n}\n\ntype Loc = {\n end: { column: number; line: number }\n start: { column: number; line: number }\n}\n\nfunction insertBeforeAndAfter(content: string, loc: Loc): string {\n const { end, start } = loc\n const lines = content.split('\\n')\n\n const insert = (line: string, column: number, text: string) => {\n return line.slice(0, column) + text + line.slice(column)\n }\n\n // insert ) after end\n lines[end.line - 1] = insert(lines[end.line - 1]!, end.column, ')')\n // insert withPayload before start\n if (start.line === end.line) {\n lines[end.line - 1] = insert(lines[end.line - 1]!, start.column, 'withPayload(')\n } else {\n lines[start.line - 1] = insert(lines[start.line - 1]!, start.column, 'withPayload(')\n }\n\n return lines.join('\\n')\n}\n\nfunction insertBeforeAndAfterSWC(\n content: string,\n span: ModuleItem['span'],\n /**\n * WARNING: This is ONLY for unit tests. Defaults to 0 otherwise.\n *\n * @see compileTypeScriptFileToAST\n */\n parseOffset: number,\n): string {\n const { end: preOffsetEnd, start: preOffsetStart } = span\n\n const start = preOffsetStart - parseOffset\n const end = preOffsetEnd - parseOffset\n\n const insert = (pos: number, text: string): string => {\n return content.slice(0, pos) + text + content.slice(pos)\n }\n\n // insert ) after end\n content = insert(end - 1, ')')\n // insert withPayload before start\n content = insert(start - 1, 'withPayload(')\n\n return content\n}\n\n/**\n * Compile typescript to AST using the swc compiler\n */\nasync function compileTypeScriptFileToAST(\n fileContent: string,\n): Promise<{ moduleItems: ModuleItem[]; parseOffset: number }> {\n let parseOffset = 0\n\n /**\n * WARNING: This is ONLY for unit tests.\n *\n * Multiple instances of swc DO NOT reset the .span.end value.\n * During unit tests, the .spawn.end value is read and accounted for.\n *\n * https://github.com/swc-project/swc/issues/1366\n */\n if (process.env.NODE_ENV === 'test') {\n parseOffset = (await parse('')).span.end\n }\n\n const module = await parse(fileContent, {\n syntax: 'typescript',\n })\n\n return { moduleItems: module.body, parseOffset }\n}\n"],"names":["parse","chalk","parseModule","Syntax","fs","log","warning","withPayloadStatement","cjs","esm","ts","wrapNextConfig","args","nextConfigPath","nextConfigType","configType","configContent","readFileSync","modifiedConfigContent","newConfig","success","parseAndModifyConfigContent","writeFileSync","content","ast","loc","moduleExports","body","find","p","type","ExpressionStatement","expression","AssignmentExpression","left","MemberExpression","object","Identifier","name","property","right","insertBeforeAndAfter","Promise","resolve","exportDefaultDeclaration","ExportDefaultDeclaration","exportNamedDeclaration","ExportNamedDeclaration","Error","declaration","exportSpecifier","specifiers","s","exported","local","warnUserWrapNotSuccessful","error","message","moduleItems","parseOffset","compileTypeScriptFileToAST","m","insertBeforeAndAfterSWC","span","withPayloadMessage","bold","end","start","lines","split","insert","line","column","text","slice","join","preOffsetEnd","preOffsetStart","pos","fileContent","process","env","NODE_ENV","module","syntax"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-payload-app",
3
- "version": "3.21.0",
3
+ "version": "3.23.0-canary.597254e",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",