create-payload-app 4.0.0-internal.b8e7c89 → 4.0.0-internal.bf4bcce

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.
Files changed (82) hide show
  1. package/dist/lib/agent-config.d.ts +2 -5
  2. package/dist/lib/agent-config.d.ts.map +1 -1
  3. package/dist/lib/agent-config.js +1 -8
  4. package/dist/lib/agent-config.js.map +1 -1
  5. package/dist/lib/init-next.d.ts +5 -0
  6. package/dist/lib/init-next.d.ts.map +1 -1
  7. package/dist/lib/init-next.js +14 -3
  8. package/dist/lib/init-next.js.map +1 -1
  9. package/dist/lib/init-tanstack.js +2 -3
  10. package/dist/lib/init-tanstack.js.map +1 -1
  11. package/dist/lib/tanstack/template-files.d.ts +4 -4
  12. package/dist/lib/tanstack/template-files.d.ts.map +1 -1
  13. package/dist/lib/tanstack/template-files.js +5 -5
  14. package/dist/lib/tanstack/template-files.js.map +1 -1
  15. package/dist/lib/update-payload-in-project.js +3 -3
  16. package/dist/lib/update-payload-in-project.js.map +1 -1
  17. package/dist/main.d.ts.map +1 -1
  18. package/dist/main.js +2 -3
  19. package/dist/main.js.map +1 -1
  20. package/dist/template/src/app/(frontend)/styles.css +7 -0
  21. package/dist/template/src/app/(payload)/admin/[[...segments]]/not-found.tsx +1 -2
  22. package/dist/template/src/app/(payload)/admin/[[...segments]]/page.tsx +1 -2
  23. package/dist/template/src/app/(payload)/admin/importMap.js +15 -0
  24. package/dist/template/src/app/(payload)/api/[...slug]/route.ts +1 -2
  25. package/dist/template/src/app/(payload)/api/graphql/route.ts +1 -2
  26. package/dist/template/src/app/(payload)/api/graphql-playground/route.ts +1 -2
  27. package/dist/template/src/app/(payload)/layout.tsx +1 -2
  28. package/dist/template/src/payload.config.ts +5 -3
  29. package/dist/template-tanstack/routes/_payload/admin.$.tsx +20 -3
  30. package/dist/template-tanstack/routes/_payload/admin.index.tsx +20 -3
  31. package/dist/template-tanstack/routes/_payload/api.$.ts +1 -0
  32. package/dist/template-tanstack/routes/_payload/custom.css +0 -0
  33. package/dist/template-tanstack/routes/_payload/server.functions.ts +1 -0
  34. package/dist/template-tanstack/routes/_payload.tsx +1 -2
  35. package/dist/template-tanstack/src/payload.config.ts +1 -3
  36. package/dist/utils/messages.d.ts.map +1 -1
  37. package/dist/utils/messages.js +3 -2
  38. package/dist/utils/messages.js.map +1 -1
  39. package/dist/utils/resolvePackageVersion.d.ts +10 -4
  40. package/dist/utils/resolvePackageVersion.d.ts.map +1 -1
  41. package/dist/utils/resolvePackageVersion.js +24 -3
  42. package/dist/utils/resolvePackageVersion.js.map +1 -1
  43. package/package.json +3 -3
  44. package/dist/ast-integration.spec.js +0 -132
  45. package/dist/ast-integration.spec.js.map +0 -1
  46. package/dist/lib/agent-config.spec.js +0 -23
  47. package/dist/lib/agent-config.spec.js.map +0 -1
  48. package/dist/lib/ast/package-json.spec.js +0 -139
  49. package/dist/lib/ast/package-json.spec.js.map +0 -1
  50. package/dist/lib/ast/payload-config.spec.js +0 -369
  51. package/dist/lib/ast/payload-config.spec.js.map +0 -1
  52. package/dist/lib/ast/utils.spec.js +0 -226
  53. package/dist/lib/ast/utils.spec.js.map +0 -1
  54. package/dist/lib/configure-payload-tsconfig.spec.js +0 -135
  55. package/dist/lib/configure-payload-tsconfig.spec.js.map +0 -1
  56. package/dist/lib/create-project.spec.js +0 -199
  57. package/dist/lib/create-project.spec.js.map +0 -1
  58. package/dist/lib/init-tanstack-default-template.spec.js +0 -121
  59. package/dist/lib/init-tanstack-default-template.spec.js.map +0 -1
  60. package/dist/lib/init-tanstack.spec.js +0 -394
  61. package/dist/lib/init-tanstack.spec.js.map +0 -1
  62. package/dist/lib/manage-env-files.spec.js +0 -118
  63. package/dist/lib/manage-env-files.spec.js.map +0 -1
  64. package/dist/lib/tanstack/detect.spec.js +0 -227
  65. package/dist/lib/tanstack/detect.spec.js.map +0 -1
  66. package/dist/lib/tanstack/prepare.spec.js +0 -288
  67. package/dist/lib/tanstack/prepare.spec.js.map +0 -1
  68. package/dist/lib/tanstack/transform-root-route.spec.js +0 -484
  69. package/dist/lib/tanstack/transform-root-route.spec.js.map +0 -1
  70. package/dist/lib/tanstack/transform-router.spec.js +0 -264
  71. package/dist/lib/tanstack/transform-router.spec.js.map +0 -1
  72. package/dist/lib/tanstack/transform-vite-config.spec.js +0 -456
  73. package/dist/lib/tanstack/transform-vite-config.spec.js.map +0 -1
  74. package/dist/lib/update-payload-in-project.spec.js +0 -262
  75. package/dist/lib/update-payload-in-project.spec.js.map +0 -1
  76. package/dist/lib/wrap-next-config.spec.js +0 -167
  77. package/dist/lib/wrap-next-config.spec.js.map +0 -1
  78. package/dist/main.spec.js +0 -102
  79. package/dist/main.spec.js.map +0 -1
  80. package/dist/template-tanstack/src/payload.css +0 -1
  81. package/dist/utils/resolvePackageVersion.spec.js +0 -77
  82. package/dist/utils/resolvePackageVersion.spec.js.map +0 -1
@@ -1,14 +1,11 @@
1
1
  type AgentConfigFile = {
2
2
  content: string;
3
- fileName: 'AGENTS.md' | 'CLAUDE.md';
3
+ fileName: 'AGENTS.md';
4
4
  };
5
5
  /**
6
6
  * Builds the agent config files written at project root. They point agents at the skill
7
7
  * bundled with the installed `payload` package, so guidance always matches the installed
8
- * version.
9
- *
10
- * `AGENTS.md` holds the instructions. Claude Code reads only `CLAUDE.md`, so that file
11
- * imports `AGENTS.md` rather than duplicating it.
8
+ * version. `AGENTS.md` is the single source read by Claude Code, Cursor, and Copilot.
12
9
  */
13
10
  export declare function buildAgentConfigFiles(): AgentConfigFile[];
14
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../../src/lib/agent-config.ts"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,WAAW,GAAG,WAAW,CAAA;CACpC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,EAAE,CAWzD"}
1
+ {"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../../src/lib/agent-config.ts"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,WAAW,CAAA;CACtB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,EAAE,CAOzD"}
@@ -2,19 +2,12 @@
2
2
  /**
3
3
  * Builds the agent config files written at project root. They point agents at the skill
4
4
  * bundled with the installed `payload` package, so guidance always matches the installed
5
- * version.
6
- *
7
- * `AGENTS.md` holds the instructions. Claude Code reads only `CLAUDE.md`, so that file
8
- * imports `AGENTS.md` rather than duplicating it.
5
+ * version. `AGENTS.md` is the single source read by Claude Code, Cursor, and Copilot.
9
6
  */ export function buildAgentConfigFiles() {
10
7
  return [
11
8
  {
12
9
  content: `# AI Agent\n\nFor any Payload-related work, reference the skill at \`${SKILL_PATH}/SKILL.md\`.\n`,
13
10
  fileName: 'AGENTS.md'
14
- },
15
- {
16
- content: `@AGENTS.md\n`,
17
- fileName: 'CLAUDE.md'
18
11
  }
19
12
  ];
20
13
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/agent-config.ts"],"sourcesContent":["/** Where the skill ships inside a consumer's installed dependencies. */\nconst SKILL_PATH = 'node_modules/payload/skills/payload'\n\ntype AgentConfigFile = {\n content: string\n fileName: 'AGENTS.md' | 'CLAUDE.md'\n}\n\n/**\n * Builds the agent config files written at project root. They point agents at the skill\n * bundled with the installed `payload` package, so guidance always matches the installed\n * version.\n *\n * `AGENTS.md` holds the instructions. Claude Code reads only `CLAUDE.md`, so that file\n * imports `AGENTS.md` rather than duplicating it.\n */\nexport function buildAgentConfigFiles(): AgentConfigFile[] {\n return [\n {\n content: `# AI Agent\\n\\nFor any Payload-related work, reference the skill at \\`${SKILL_PATH}/SKILL.md\\`.\\n`,\n fileName: 'AGENTS.md',\n },\n {\n content: `@AGENTS.md\\n`,\n fileName: 'CLAUDE.md',\n },\n ]\n}\n"],"names":["SKILL_PATH","buildAgentConfigFiles","content","fileName"],"mappings":"AAAA,sEAAsE,GACtE,MAAMA,aAAa;AAOnB;;;;;;;CAOC,GACD,OAAO,SAASC;IACd,OAAO;QACL;YACEC,SAAS,CAAC,qEAAqE,EAAEF,WAAW,cAAc,CAAC;YAC3GG,UAAU;QACZ;QACA;YACED,SAAS,CAAC,YAAY,CAAC;YACvBC,UAAU;QACZ;KACD;AACH"}
1
+ {"version":3,"sources":["../../src/lib/agent-config.ts"],"sourcesContent":["/** Where the skill ships inside a consumer's installed dependencies. */\nconst SKILL_PATH = 'node_modules/payload/skills/payload'\n\ntype AgentConfigFile = {\n content: string\n fileName: 'AGENTS.md'\n}\n\n/**\n * Builds the agent config files written at project root. They point agents at the skill\n * bundled with the installed `payload` package, so guidance always matches the installed\n * version. `AGENTS.md` is the single source read by Claude Code, Cursor, and Copilot.\n */\nexport function buildAgentConfigFiles(): AgentConfigFile[] {\n return [\n {\n content: `# AI Agent\\n\\nFor any Payload-related work, reference the skill at \\`${SKILL_PATH}/SKILL.md\\`.\\n`,\n fileName: 'AGENTS.md',\n },\n ]\n}\n"],"names":["SKILL_PATH","buildAgentConfigFiles","content","fileName"],"mappings":"AAAA,sEAAsE,GACtE,MAAMA,aAAa;AAOnB;;;;CAIC,GACD,OAAO,SAASC;IACd,OAAO;QACL;YACEC,SAAS,CAAC,qEAAqE,EAAEF,WAAW,cAAc,CAAC;YAC3GG,UAAU;QACZ;KACD;AACH"}
@@ -1,4 +1,9 @@
1
1
  import type { CliArgs, DbType, NextAppDetails, PackageManager } from '../types.js';
2
+ /** Keep in sync with the `next` peer dependency range of `@payloadcms/next`. */
3
+ export declare const minimumNextVersion: {
4
+ major: number;
5
+ minor: number;
6
+ };
2
7
  type InitNextArgs = {
3
8
  dbType: DbType;
4
9
  nextAppDetails?: NextAppDetails;
@@ -1 +1 @@
1
- {"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AAiBlG,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,mBAAmB,CAAC,CAAA;AAElD,KAAK,cAAc,GACf;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC1E;IACE,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,IAAI,CAAA;CACd,CAAA;AAEL,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAuE1E;AA2GD,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2FnF"}
1
+ {"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AAiBlG,gFAAgF;AAChF,eAAO,MAAM,kBAAkB;IAAK,KAAK;IAAM,KAAK;CAAK,CAAA;AAEzD,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,mBAAmB,CAAC,CAAA;AAElD,KAAK,cAAc,GACf;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC1E;IACE,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,IAAI,CAAA;CACd,CAAA;AAEL,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAuE1E;AA2GD,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwGnF"}
@@ -14,6 +14,10 @@ import { installPackages } from './install-packages.js';
14
14
  import { wrapNextConfig } from './wrap-next-config.js';
15
15
  const filename = fileURLToPath(import.meta.url);
16
16
  const dirname = path.dirname(filename);
17
+ /** Keep in sync with the `next` peer dependency range of `@payloadcms/next`. */ export const minimumNextVersion = {
18
+ major: 16,
19
+ minor: 4
20
+ };
17
21
  export async function initNext(args) {
18
22
  const { dbType: dbType, packageManager, projectDir } = args;
19
23
  const nextAppDetails = args.nextAppDetails || await getNextAppDetails(projectDir);
@@ -186,7 +190,7 @@ export async function getNextAppDetails(projectDir) {
186
190
  if (packageObj.dependencies?.next) {
187
191
  nextVersion = packageObj.dependencies.next;
188
192
  // Match versions using regex matching groups
189
- const versionMatch = /(?<major>\d+)/.exec(nextVersion);
193
+ const versionMatch = /(?<major>\d+)(?:\.(?<minor>\d+))?/.exec(nextVersion);
190
194
  if (!versionMatch) {
191
195
  p.log.warn(`Could not determine Next.js version from ${nextVersion}`);
192
196
  return {
@@ -197,9 +201,9 @@ export async function getNextAppDetails(projectDir) {
197
201
  nextVersion
198
202
  };
199
203
  }
200
- const { major } = versionMatch.groups;
204
+ const { major, minor } = versionMatch.groups;
201
205
  const majorVersion = parseInt(major);
202
- if (majorVersion < 15) {
206
+ if (majorVersion < minimumNextVersion.major) {
203
207
  return {
204
208
  hasTopLevelLayout: false,
205
209
  isSrcDir,
@@ -208,6 +212,13 @@ export async function getNextAppDetails(projectDir) {
208
212
  nextVersion
209
213
  };
210
214
  }
215
+ // TODO: Older minor versions of the minimum major are only warned about, not rejected, to make
216
+ // migrating easier. This can be turned into a hard requirement in the future.
217
+ // A specifier without a minor version (e.g. `^16`) can resolve to any minor, so it is not warned about.
218
+ const isBelowMinimumMinor = majorVersion === minimumNextVersion.major && minor !== undefined && parseInt(minor) < minimumNextVersion.minor;
219
+ if (isBelowMinimumMinor) {
220
+ p.log.warn(`Next.js v${nextVersion} is not supported. Upgrade to Next.js >= ${minimumNextVersion.major}.${minimumNextVersion.minor} to use Payload.`);
221
+ }
211
222
  }
212
223
  const isSupportedNextVersion = true;
213
224
  // Check if Payload already installed
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { CliArgs, DbType, NextAppDetails, NextConfigType, PackageManager } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { debug as origDebug, warning } from '../utils/log.js'\nimport { moveMessage } from '../utils/messages.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { configurePayloadTsConfig } from './configure-payload-tsconfig.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype InitNextArgs = {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n} & Pick<CliArgs, '--debug' | '--payload-version'>\n\ntype InitNextResult =\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\n | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n\nexport async function initNext(args: InitNextArgs): Promise<InitNextResult> {\n const { dbType: dbType, packageManager, projectDir } = args\n\n const nextAppDetails = args.nextAppDetails || (await getNextAppDetails(projectDir))\n\n if (!nextAppDetails.nextAppDir) {\n warning(`Could not find app directory in ${projectDir}, creating...`)\n const createdAppDir = path.resolve(projectDir, nextAppDetails.isSrcDir ? 'src/app' : 'app')\n fse.mkdirSync(createdAppDir, { recursive: true })\n nextAppDetails.nextAppDir = createdAppDir\n }\n\n const { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigType } = nextAppDetails\n\n if (!nextConfigType) {\n return {\n isSrcDir,\n nextAppDir,\n reason: `Could not determine Next Config type in ${projectDir}. Possibly try renaming next.config.js to next.config.cjs or next.config.mjs.`,\n success: false,\n }\n }\n\n if (hasTopLevelLayout) {\n // Output directions for user to move all files from app to top-level directory named `(app)`\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n return {\n isSrcDir,\n nextAppDir,\n reason: 'Found existing layout.tsx in app directory',\n success: false,\n }\n }\n\n const installSpinner = p.spinner()\n installSpinner.start('Installing Payload and dependencies...')\n\n const configurationResult = await installAndConfigurePayload({\n ...args,\n nextAppDetails,\n nextConfigType,\n useDistFiles: true, // Requires running 'pnpm pack-template-files' in cpa\n })\n\n if (configurationResult.success === false) {\n installSpinner.stop(configurationResult.reason, 1)\n return { ...configurationResult, isSrcDir, success: false }\n }\n\n const { success: installSuccess } = await installDeps({\n dbType,\n packageManager,\n projectDir,\n versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n if (!installSuccess) {\n installSpinner.stop('Failed to install dependencies', 1)\n return {\n ...configurationResult,\n isSrcDir,\n reason: 'Failed to install dependencies',\n success: false,\n }\n }\n\n await configurePayloadTsConfig({\n configPath: path.resolve(projectDir, 'tsconfig.json'),\n payloadConfigPath: configurationResult.payloadConfigPath,\n })\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function installAndConfigurePayload(\n args: {\n nextAppDetails: NextAppDetails\n nextConfigType: NextConfigType\n useDistFiles?: boolean\n } & InitNextArgs,\n): Promise<\n | { payloadConfigPath: string; success: true }\n | { payloadConfigPath?: string; reason: string; success: false }\n> {\n const {\n '--debug': debug,\n nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {},\n nextConfigType,\n projectDir,\n useDistFiles,\n } = args\n\n if (!nextAppDir || !nextConfigPath) {\n return {\n reason: 'Could not find app directory or next.config.js',\n success: false,\n }\n }\n\n const logDebug = (message: string) => {\n if (debug) {\n origDebug(message)\n }\n }\n\n if (!fs.existsSync(projectDir)) {\n return {\n reason: `Could not find specified project directory at ${projectDir}`,\n success: false,\n }\n }\n\n const templateFilesPath =\n dirname.endsWith('dist') || useDistFiles\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank')\n\n logDebug(`Using template files from: ${templateFilesPath}`)\n\n if (!fs.existsSync(templateFilesPath)) {\n return {\n reason: `Could not find template source files from ${templateFilesPath}`,\n success: false,\n }\n } else {\n logDebug('Found template source files')\n }\n\n logDebug(`Copying template files from ${templateFilesPath} to ${nextAppDir}`)\n\n const templateSrcDir = path.resolve(templateFilesPath, isSrcDir ? '' : 'src')\n\n logDebug(`templateSrcDir: ${templateSrcDir}`)\n logDebug(`nextAppDir: ${nextAppDir}`)\n logDebug(`projectDir: ${projectDir}`)\n logDebug(`nextConfigPath: ${nextConfigPath}`)\n logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`)\n\n logDebug(\n `isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`,\n )\n\n // This is a little clunky and needs to account for isSrcDir\n copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath))\n\n // Wrap next.config.js with withPayload\n await wrapNextConfig({ nextConfigPath, nextConfigType })\n\n return {\n payloadConfigPath: path.resolve(nextAppDir, '../payload.config.ts'),\n success: true,\n }\n}\n\nasync function installDeps(args: {\n dbType: DbType\n packageManager: PackageManager\n projectDir: string\n versionOrTag?: string\n}) {\n const { dbType, packageManager, projectDir, versionOrTag } = args\n const { getDbPackageName } = await import('./ast/adapter-config.js')\n\n const version = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@${version}`,\n )\n\n packagesToInstall.push(`${getDbPackageName(dbType)}@${version}`)\n\n // Match graphql version of @payloadcms/next\n packagesToInstall.push('graphql@^16.8.1')\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n return await installPackages({ packageManager, packagesToInstall, projectDir })\n}\n\nexport async function getNextAppDetails(projectDir: string): Promise<NextAppDetails> {\n const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'))\n\n // Match next.config.js, next.config.ts, next.config.mjs, next.config.cjs\n const nextConfigPath: string | undefined = (\n await globby('next.config.(\\\\w)?(t|j)s', { absolute: true, cwd: projectDir })\n )?.[0]\n\n if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath: undefined,\n nextVersion: null,\n }\n }\n\n const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'))\n // Check if Next.js version is new enough\n let nextVersion = null\n if (packageObj.dependencies?.next) {\n nextVersion = packageObj.dependencies.next\n // Match versions using regex matching groups\n const versionMatch = /(?<major>\\d+)/.exec(nextVersion)\n if (!versionMatch) {\n p.log.warn(`Could not determine Next.js version from ${nextVersion}`)\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n\n const { major } = versionMatch.groups as { major: string }\n const majorVersion = parseInt(major)\n if (majorVersion < 15) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n }\n\n const isSupportedNextVersion = true\n\n // Check if Payload already installed\n if (packageObj.dependencies?.payload) {\n return {\n hasTopLevelLayout: false,\n isPayloadInstalled: true,\n isSrcDir,\n isSupportedNextVersion,\n nextConfigPath,\n nextVersion,\n }\n }\n\n let nextAppDir: string | undefined = (\n await globby(['**/app'], {\n absolute: true,\n cwd: projectDir,\n ignore: ['**/node_modules/**'],\n onlyDirectories: true,\n })\n )?.[0]\n\n if (!nextAppDir || nextAppDir.length === 0) {\n nextAppDir = undefined\n }\n\n const configType = getProjectType({ nextConfigPath, packageObj })\n\n const hasTopLevelLayout = nextAppDir\n ? fs.existsSync(path.resolve(nextAppDir, 'layout.tsx'))\n : false\n\n return {\n hasTopLevelLayout,\n isSrcDir,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextConfigType: configType,\n nextVersion,\n }\n}\n\nfunction getProjectType(args: {\n nextConfigPath: string\n packageObj: Record<string, unknown>\n}): NextConfigType {\n const { nextConfigPath, packageObj } = args\n\n if (nextConfigPath.endsWith('.ts')) {\n return 'ts'\n }\n\n if (nextConfigPath.endsWith('.mjs')) {\n return 'esm'\n }\n if (nextConfigPath.endsWith('.cjs')) {\n return 'cjs'\n }\n\n const packageJsonType = packageObj.type\n if (packageJsonType === 'module') {\n return 'esm'\n }\n if (packageJsonType === 'commonjs') {\n return 'cjs'\n }\n\n return 'cjs'\n}\n"],"names":["p","fs","fse","globby","fileURLToPath","path","copyRecursiveSync","debug","origDebug","warning","moveMessage","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","configurePayloadTsConfig","ensurePnpmBuildApprovals","installPackages","wrapNextConfig","filename","url","dirname","initNext","args","dbType","packageManager","projectDir","nextAppDetails","getNextAppDetails","nextAppDir","createdAppDir","resolve","isSrcDir","mkdirSync","recursive","hasTopLevelLayout","nextConfigType","reason","success","log","warn","installSpinner","spinner","start","configurationResult","installAndConfigurePayload","useDistFiles","stop","installSuccess","installDeps","versionOrTag","configPath","payloadConfigPath","nextConfigPath","logDebug","message","existsSync","templateFilesPath","endsWith","templateSrcDir","getDbPackageName","version","packageName","packagesToInstall","map","pkg","push","absolute","cwd","length","isSupportedNextVersion","undefined","nextVersion","packageObj","readJson","dependencies","next","versionMatch","exec","major","groups","majorVersion","parseInt","payload","isPayloadInstalled","ignore","onlyDirectories","configType","getProjectType","packageJsonType","type"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { CliArgs, DbType, NextAppDetails, NextConfigType, PackageManager } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { debug as origDebug, warning } from '../utils/log.js'\nimport { moveMessage } from '../utils/messages.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { configurePayloadTsConfig } from './configure-payload-tsconfig.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\n/** Keep in sync with the `next` peer dependency range of `@payloadcms/next`. */\nexport const minimumNextVersion = { major: 16, minor: 4 }\n\ntype InitNextArgs = {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n} & Pick<CliArgs, '--debug' | '--payload-version'>\n\ntype InitNextResult =\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\n | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n\nexport async function initNext(args: InitNextArgs): Promise<InitNextResult> {\n const { dbType: dbType, packageManager, projectDir } = args\n\n const nextAppDetails = args.nextAppDetails || (await getNextAppDetails(projectDir))\n\n if (!nextAppDetails.nextAppDir) {\n warning(`Could not find app directory in ${projectDir}, creating...`)\n const createdAppDir = path.resolve(projectDir, nextAppDetails.isSrcDir ? 'src/app' : 'app')\n fse.mkdirSync(createdAppDir, { recursive: true })\n nextAppDetails.nextAppDir = createdAppDir\n }\n\n const { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigType } = nextAppDetails\n\n if (!nextConfigType) {\n return {\n isSrcDir,\n nextAppDir,\n reason: `Could not determine Next Config type in ${projectDir}. Possibly try renaming next.config.js to next.config.cjs or next.config.mjs.`,\n success: false,\n }\n }\n\n if (hasTopLevelLayout) {\n // Output directions for user to move all files from app to top-level directory named `(app)`\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n return {\n isSrcDir,\n nextAppDir,\n reason: 'Found existing layout.tsx in app directory',\n success: false,\n }\n }\n\n const installSpinner = p.spinner()\n installSpinner.start('Installing Payload and dependencies...')\n\n const configurationResult = await installAndConfigurePayload({\n ...args,\n nextAppDetails,\n nextConfigType,\n useDistFiles: true, // Requires running 'pnpm pack-template-files' in cpa\n })\n\n if (configurationResult.success === false) {\n installSpinner.stop(configurationResult.reason, 1)\n return { ...configurationResult, isSrcDir, success: false }\n }\n\n const { success: installSuccess } = await installDeps({\n dbType,\n packageManager,\n projectDir,\n versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n if (!installSuccess) {\n installSpinner.stop('Failed to install dependencies', 1)\n return {\n ...configurationResult,\n isSrcDir,\n reason: 'Failed to install dependencies',\n success: false,\n }\n }\n\n await configurePayloadTsConfig({\n configPath: path.resolve(projectDir, 'tsconfig.json'),\n payloadConfigPath: configurationResult.payloadConfigPath,\n })\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function installAndConfigurePayload(\n args: {\n nextAppDetails: NextAppDetails\n nextConfigType: NextConfigType\n useDistFiles?: boolean\n } & InitNextArgs,\n): Promise<\n | { payloadConfigPath: string; success: true }\n | { payloadConfigPath?: string; reason: string; success: false }\n> {\n const {\n '--debug': debug,\n nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {},\n nextConfigType,\n projectDir,\n useDistFiles,\n } = args\n\n if (!nextAppDir || !nextConfigPath) {\n return {\n reason: 'Could not find app directory or next.config.js',\n success: false,\n }\n }\n\n const logDebug = (message: string) => {\n if (debug) {\n origDebug(message)\n }\n }\n\n if (!fs.existsSync(projectDir)) {\n return {\n reason: `Could not find specified project directory at ${projectDir}`,\n success: false,\n }\n }\n\n const templateFilesPath =\n dirname.endsWith('dist') || useDistFiles\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank')\n\n logDebug(`Using template files from: ${templateFilesPath}`)\n\n if (!fs.existsSync(templateFilesPath)) {\n return {\n reason: `Could not find template source files from ${templateFilesPath}`,\n success: false,\n }\n } else {\n logDebug('Found template source files')\n }\n\n logDebug(`Copying template files from ${templateFilesPath} to ${nextAppDir}`)\n\n const templateSrcDir = path.resolve(templateFilesPath, isSrcDir ? '' : 'src')\n\n logDebug(`templateSrcDir: ${templateSrcDir}`)\n logDebug(`nextAppDir: ${nextAppDir}`)\n logDebug(`projectDir: ${projectDir}`)\n logDebug(`nextConfigPath: ${nextConfigPath}`)\n logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`)\n\n logDebug(\n `isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`,\n )\n\n // This is a little clunky and needs to account for isSrcDir\n copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath))\n\n // Wrap next.config.js with withPayload\n await wrapNextConfig({ nextConfigPath, nextConfigType })\n\n return {\n payloadConfigPath: path.resolve(nextAppDir, '../payload.config.ts'),\n success: true,\n }\n}\n\nasync function installDeps(args: {\n dbType: DbType\n packageManager: PackageManager\n projectDir: string\n versionOrTag?: string\n}) {\n const { dbType, packageManager, projectDir, versionOrTag } = args\n const { getDbPackageName } = await import('./ast/adapter-config.js')\n\n const version = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@${version}`,\n )\n\n packagesToInstall.push(`${getDbPackageName(dbType)}@${version}`)\n\n // Match graphql version of @payloadcms/next\n packagesToInstall.push('graphql@^16.8.1')\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n return await installPackages({ packageManager, packagesToInstall, projectDir })\n}\n\nexport async function getNextAppDetails(projectDir: string): Promise<NextAppDetails> {\n const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'))\n\n // Match next.config.js, next.config.ts, next.config.mjs, next.config.cjs\n const nextConfigPath: string | undefined = (\n await globby('next.config.(\\\\w)?(t|j)s', { absolute: true, cwd: projectDir })\n )?.[0]\n\n if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath: undefined,\n nextVersion: null,\n }\n }\n\n const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'))\n // Check if Next.js version is new enough\n let nextVersion = null\n if (packageObj.dependencies?.next) {\n nextVersion = packageObj.dependencies.next\n // Match versions using regex matching groups\n const versionMatch = /(?<major>\\d+)(?:\\.(?<minor>\\d+))?/.exec(nextVersion)\n if (!versionMatch) {\n p.log.warn(`Could not determine Next.js version from ${nextVersion}`)\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n\n const { major, minor } = versionMatch.groups as { major: string; minor?: string }\n const majorVersion = parseInt(major)\n if (majorVersion < minimumNextVersion.major) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n\n // TODO: Older minor versions of the minimum major are only warned about, not rejected, to make\n // migrating easier. This can be turned into a hard requirement in the future.\n // A specifier without a minor version (e.g. `^16`) can resolve to any minor, so it is not warned about.\n const isBelowMinimumMinor =\n majorVersion === minimumNextVersion.major &&\n minor !== undefined &&\n parseInt(minor) < minimumNextVersion.minor\n if (isBelowMinimumMinor) {\n p.log.warn(\n `Next.js v${nextVersion} is not supported. Upgrade to Next.js >= ${minimumNextVersion.major}.${minimumNextVersion.minor} to use Payload.`,\n )\n }\n }\n\n const isSupportedNextVersion = true\n\n // Check if Payload already installed\n if (packageObj.dependencies?.payload) {\n return {\n hasTopLevelLayout: false,\n isPayloadInstalled: true,\n isSrcDir,\n isSupportedNextVersion,\n nextConfigPath,\n nextVersion,\n }\n }\n\n let nextAppDir: string | undefined = (\n await globby(['**/app'], {\n absolute: true,\n cwd: projectDir,\n ignore: ['**/node_modules/**'],\n onlyDirectories: true,\n })\n )?.[0]\n\n if (!nextAppDir || nextAppDir.length === 0) {\n nextAppDir = undefined\n }\n\n const configType = getProjectType({ nextConfigPath, packageObj })\n\n const hasTopLevelLayout = nextAppDir\n ? fs.existsSync(path.resolve(nextAppDir, 'layout.tsx'))\n : false\n\n return {\n hasTopLevelLayout,\n isSrcDir,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextConfigType: configType,\n nextVersion,\n }\n}\n\nfunction getProjectType(args: {\n nextConfigPath: string\n packageObj: Record<string, unknown>\n}): NextConfigType {\n const { nextConfigPath, packageObj } = args\n\n if (nextConfigPath.endsWith('.ts')) {\n return 'ts'\n }\n\n if (nextConfigPath.endsWith('.mjs')) {\n return 'esm'\n }\n if (nextConfigPath.endsWith('.cjs')) {\n return 'cjs'\n }\n\n const packageJsonType = packageObj.type\n if (packageJsonType === 'module') {\n return 'esm'\n }\n if (packageJsonType === 'commonjs') {\n return 'cjs'\n }\n\n return 'cjs'\n}\n"],"names":["p","fs","fse","globby","fileURLToPath","path","copyRecursiveSync","debug","origDebug","warning","moveMessage","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","configurePayloadTsConfig","ensurePnpmBuildApprovals","installPackages","wrapNextConfig","filename","url","dirname","minimumNextVersion","major","minor","initNext","args","dbType","packageManager","projectDir","nextAppDetails","getNextAppDetails","nextAppDir","createdAppDir","resolve","isSrcDir","mkdirSync","recursive","hasTopLevelLayout","nextConfigType","reason","success","log","warn","installSpinner","spinner","start","configurationResult","installAndConfigurePayload","useDistFiles","stop","installSuccess","installDeps","versionOrTag","configPath","payloadConfigPath","nextConfigPath","logDebug","message","existsSync","templateFilesPath","endsWith","templateSrcDir","getDbPackageName","version","packageName","packagesToInstall","map","pkg","push","absolute","cwd","length","isSupportedNextVersion","undefined","nextVersion","packageObj","readJson","dependencies","next","versionMatch","exec","groups","majorVersion","parseInt","isBelowMinimumMinor","payload","isPayloadInstalled","ignore","onlyDirectories","configType","getProjectType","packageJsonType","type"],"mappings":"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"}
@@ -135,11 +135,10 @@ function getRequiredDependencies({ appDetails, dbType, payloadVersion }) {
135
135
  '@vitejs/plugin-rsc': '^0.5.21',
136
136
  [getDbPackageName(dbType)]: payloadVersion,
137
137
  graphql: '^16.8.1',
138
- payload: payloadVersion,
139
- sharp: '0.34.2'
138
+ payload: payloadVersion
140
139
  };
141
140
  if (appDetails.kind === 'router-only') {
142
- dependencies['@tanstack/react-start'] = '^1.168.26';
141
+ dependencies['@tanstack/react-start'] = '^1.169.1';
143
142
  }
144
143
  return dependencies;
145
144
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/init-tanstack.ts"],"sourcesContent":["import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport type { CliArgs, DbType, PackageManager, TanStackAppDetails } from '../types.js'\n\nimport { debug } from '../utils/log.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { getDbPackageName } from './ast/adapter-config.js'\nimport { preparePackageJson } from './ast/package-json.js'\nimport { configurePayloadTsConfig } from './configure-payload-tsconfig.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { getTanStackAppDetails } from './tanstack/detect.js'\nimport { applyPreparedWrites, prepareTanStackInit } from './tanstack/prepare.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype InitTanStackArgs = {\n appDetails?: TanStackAppDetails\n dbType: DbType\n packageManager: PackageManager\n projectDir: string\n templateRoot?: string\n} & Pick<CliArgs, '--debug' | '--no-deps' | '--payload-version'>\n\ntype InitTanStackResult =\n | { payloadConfigPath: string; success: true }\n | { reason: string; success: false }\n\nexport async function initTanStack(args: InitTanStackArgs): Promise<InitTanStackResult> {\n const appDetailsResult = args.appDetails\n ? { details: args.appDetails, success: true as const }\n : await detectAppDetails({ projectDir: args.projectDir })\n\n if (!appDetailsResult.success) {\n return appDetailsResult\n }\n\n const { details: appDetails } = appDetailsResult\n const templateRoot = args.templateRoot ?? resolveTemplateRoot()\n\n if (args['--debug']) {\n debug(`Using TanStack template files from: ${templateRoot}`)\n }\n\n const prepared = await prepareTanStackInit({ appDetails, templateRoot })\n if (!prepared.success) {\n return prepared\n }\n\n const payloadVersion = await resolvePackageVersion({\n debug: args['--debug'],\n packageName: 'payload',\n versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n const requiredDependencies = getRequiredDependencies({\n appDetails,\n dbType: args.dbType,\n payloadVersion,\n })\n let writes = prepared.writes\n if (appDetails.kind === 'router-only' || args['--no-deps']) {\n try {\n const packageJsonWrite = preparePackageJson({\n filePath: path.join(args.projectDir, 'package.json'),\n options: {\n addDependencies: args['--no-deps'] ? requiredDependencies : undefined,\n removeDependencies:\n appDetails.kind === 'router-only' ? ['@tanstack/router-plugin'] : undefined,\n },\n })\n writes = [...writes, packageJsonWrite]\n } catch (error) {\n return {\n reason: `Could not prepare package.json: ${error instanceof Error ? error.message : 'Unknown error'}`,\n success: false,\n }\n }\n }\n\n await applyPreparedWrites({ writes })\n\n if (!args['--no-deps']) {\n const packagesToInstall = Object.entries(requiredDependencies).map(\n ([packageName, version]) => `${packageName}@${version}`,\n )\n\n await ensurePnpmBuildApprovals({\n packageManager: args.packageManager,\n projectDir: args.projectDir,\n })\n\n let installation: { success: boolean }\n try {\n installation = await installPackages({\n packageManager: args.packageManager,\n packagesToInstall,\n projectDir: args.projectDir,\n })\n } catch {\n return { reason: 'Failed to install dependencies', success: false }\n }\n if (!installation.success) {\n return { reason: 'Failed to install dependencies', success: false }\n }\n }\n\n const payloadConfigPath = path.join(appDetails.sourceDir, 'payload.config.ts')\n await configurePayloadTsConfig({\n configPath: path.join(args.projectDir, 'tsconfig.json'),\n payloadConfigPath,\n })\n\n return { payloadConfigPath, success: true }\n}\n\nasync function detectAppDetails({\n projectDir,\n}: {\n projectDir: string\n}): Promise<{ details: TanStackAppDetails; success: true } | { reason: string; success: false }> {\n const detection = await getTanStackAppDetails({ projectDir })\n\n if (!detection.detected) {\n return {\n reason: `Could not detect a TanStack application in ${projectDir}.`,\n success: false,\n }\n }\n\n if (!detection.compatible) {\n return { reason: detection.reason, success: false }\n }\n\n return { details: detection.details, success: true }\n}\n\nfunction getRequiredDependencies({\n appDetails,\n dbType,\n payloadVersion,\n}: {\n appDetails: TanStackAppDetails\n dbType: DbType\n payloadVersion: string\n}): Record<string, string> {\n const dependencies: Record<string, string> = {\n '@payloadcms/plugin-mcp': payloadVersion,\n '@payloadcms/richtext-lexical': payloadVersion,\n '@payloadcms/tanstack-start': payloadVersion,\n '@payloadcms/ui': payloadVersion,\n '@vitejs/plugin-rsc': '^0.5.21',\n [getDbPackageName(dbType)]: payloadVersion,\n graphql: '^16.8.1',\n payload: payloadVersion,\n sharp: '0.34.2',\n }\n\n if (appDetails.kind === 'router-only') {\n dependencies['@tanstack/react-start'] = '^1.168.26'\n }\n\n return dependencies\n}\n\nfunction resolveTemplateRoot(): string {\n return path.basename(path.dirname(dirname)) === 'dist'\n ? path.resolve(dirname, '../template-tanstack')\n : path.resolve(dirname, '../../../../templates/blank-tanstack/src')\n}\n"],"names":["path","fileURLToPath","debug","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","getDbPackageName","preparePackageJson","configurePayloadTsConfig","ensurePnpmBuildApprovals","installPackages","getTanStackAppDetails","applyPreparedWrites","prepareTanStackInit","filename","url","dirname","initTanStack","args","appDetailsResult","appDetails","details","success","detectAppDetails","projectDir","templateRoot","resolveTemplateRoot","prepared","payloadVersion","packageName","versionOrTag","requiredDependencies","getRequiredDependencies","dbType","writes","kind","packageJsonWrite","filePath","join","options","addDependencies","undefined","removeDependencies","error","reason","Error","message","packagesToInstall","Object","entries","map","version","packageManager","installation","payloadConfigPath","sourceDir","configPath","detection","detected","compatible","dependencies","graphql","payload","sharp","basename","resolve"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/init-tanstack.ts"],"sourcesContent":["import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport type { CliArgs, DbType, PackageManager, TanStackAppDetails } from '../types.js'\n\nimport { debug } from '../utils/log.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { getDbPackageName } from './ast/adapter-config.js'\nimport { preparePackageJson } from './ast/package-json.js'\nimport { configurePayloadTsConfig } from './configure-payload-tsconfig.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { getTanStackAppDetails } from './tanstack/detect.js'\nimport { applyPreparedWrites, prepareTanStackInit } from './tanstack/prepare.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype InitTanStackArgs = {\n appDetails?: TanStackAppDetails\n dbType: DbType\n packageManager: PackageManager\n projectDir: string\n templateRoot?: string\n} & Pick<CliArgs, '--debug' | '--no-deps' | '--payload-version'>\n\ntype InitTanStackResult =\n | { payloadConfigPath: string; success: true }\n | { reason: string; success: false }\n\nexport async function initTanStack(args: InitTanStackArgs): Promise<InitTanStackResult> {\n const appDetailsResult = args.appDetails\n ? { details: args.appDetails, success: true as const }\n : await detectAppDetails({ projectDir: args.projectDir })\n\n if (!appDetailsResult.success) {\n return appDetailsResult\n }\n\n const { details: appDetails } = appDetailsResult\n const templateRoot = args.templateRoot ?? resolveTemplateRoot()\n\n if (args['--debug']) {\n debug(`Using TanStack template files from: ${templateRoot}`)\n }\n\n const prepared = await prepareTanStackInit({ appDetails, templateRoot })\n if (!prepared.success) {\n return prepared\n }\n\n const payloadVersion = await resolvePackageVersion({\n debug: args['--debug'],\n packageName: 'payload',\n versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n const requiredDependencies = getRequiredDependencies({\n appDetails,\n dbType: args.dbType,\n payloadVersion,\n })\n let writes = prepared.writes\n if (appDetails.kind === 'router-only' || args['--no-deps']) {\n try {\n const packageJsonWrite = preparePackageJson({\n filePath: path.join(args.projectDir, 'package.json'),\n options: {\n addDependencies: args['--no-deps'] ? requiredDependencies : undefined,\n removeDependencies:\n appDetails.kind === 'router-only' ? ['@tanstack/router-plugin'] : undefined,\n },\n })\n writes = [...writes, packageJsonWrite]\n } catch (error) {\n return {\n reason: `Could not prepare package.json: ${error instanceof Error ? error.message : 'Unknown error'}`,\n success: false,\n }\n }\n }\n\n await applyPreparedWrites({ writes })\n\n if (!args['--no-deps']) {\n const packagesToInstall = Object.entries(requiredDependencies).map(\n ([packageName, version]) => `${packageName}@${version}`,\n )\n\n await ensurePnpmBuildApprovals({\n packageManager: args.packageManager,\n projectDir: args.projectDir,\n })\n\n let installation: { success: boolean }\n try {\n installation = await installPackages({\n packageManager: args.packageManager,\n packagesToInstall,\n projectDir: args.projectDir,\n })\n } catch {\n return { reason: 'Failed to install dependencies', success: false }\n }\n if (!installation.success) {\n return { reason: 'Failed to install dependencies', success: false }\n }\n }\n\n const payloadConfigPath = path.join(appDetails.sourceDir, 'payload.config.ts')\n await configurePayloadTsConfig({\n configPath: path.join(args.projectDir, 'tsconfig.json'),\n payloadConfigPath,\n })\n\n return { payloadConfigPath, success: true }\n}\n\nasync function detectAppDetails({\n projectDir,\n}: {\n projectDir: string\n}): Promise<{ details: TanStackAppDetails; success: true } | { reason: string; success: false }> {\n const detection = await getTanStackAppDetails({ projectDir })\n\n if (!detection.detected) {\n return {\n reason: `Could not detect a TanStack application in ${projectDir}.`,\n success: false,\n }\n }\n\n if (!detection.compatible) {\n return { reason: detection.reason, success: false }\n }\n\n return { details: detection.details, success: true }\n}\n\nfunction getRequiredDependencies({\n appDetails,\n dbType,\n payloadVersion,\n}: {\n appDetails: TanStackAppDetails\n dbType: DbType\n payloadVersion: string\n}): Record<string, string> {\n const dependencies: Record<string, string> = {\n '@payloadcms/plugin-mcp': payloadVersion,\n '@payloadcms/richtext-lexical': payloadVersion,\n '@payloadcms/tanstack-start': payloadVersion,\n '@payloadcms/ui': payloadVersion,\n '@vitejs/plugin-rsc': '^0.5.21',\n [getDbPackageName(dbType)]: payloadVersion,\n graphql: '^16.8.1',\n payload: payloadVersion,\n }\n\n if (appDetails.kind === 'router-only') {\n dependencies['@tanstack/react-start'] = '^1.169.1'\n }\n\n return dependencies\n}\n\nfunction resolveTemplateRoot(): string {\n return path.basename(path.dirname(dirname)) === 'dist'\n ? path.resolve(dirname, '../template-tanstack')\n : path.resolve(dirname, '../../../../templates/blank-tanstack/src')\n}\n"],"names":["path","fileURLToPath","debug","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","getDbPackageName","preparePackageJson","configurePayloadTsConfig","ensurePnpmBuildApprovals","installPackages","getTanStackAppDetails","applyPreparedWrites","prepareTanStackInit","filename","url","dirname","initTanStack","args","appDetailsResult","appDetails","details","success","detectAppDetails","projectDir","templateRoot","resolveTemplateRoot","prepared","payloadVersion","packageName","versionOrTag","requiredDependencies","getRequiredDependencies","dbType","writes","kind","packageJsonWrite","filePath","join","options","addDependencies","undefined","removeDependencies","error","reason","Error","message","packagesToInstall","Object","entries","map","version","packageManager","installation","payloadConfigPath","sourceDir","configPath","detection","detected","compatible","dependencies","graphql","payload","basename","resolve"],"mappings":"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"}
@@ -14,6 +14,10 @@ export declare const TANSTACK_TEMPLATE_FILES: readonly [{
14
14
  readonly destination: 'routes';
15
15
  readonly relativePath: '_payload/api.$.ts';
16
16
  readonly sourcePath: 'app/_payload/api.$.ts';
17
+ }, {
18
+ readonly destination: 'routes';
19
+ readonly relativePath: '_payload/custom.css';
20
+ readonly sourcePath: 'app/_payload/custom.css';
17
21
  }, {
18
22
  readonly destination: 'routes';
19
23
  readonly relativePath: '_payload/importMap.js';
@@ -38,10 +42,6 @@ export declare const TANSTACK_TEMPLATE_FILES: readonly [{
38
42
  readonly destination: 'src';
39
43
  readonly relativePath: 'collections/Users.ts';
40
44
  readonly sourcePath: 'collections/Users.ts';
41
- }, {
42
- readonly destination: 'src';
43
- readonly relativePath: 'payload.css';
44
- readonly sourcePath: 'payload.css';
45
45
  }, {
46
46
  readonly destination: 'src';
47
47
  readonly relativePath: 'payload.config.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"template-files.d.ts","sourceRoot":"","sources":["../../../src/lib/tanstack/template-files.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB;aAEhC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,cAAc;aAC5B,UAAU,EAAE,kBAAkB;;aAG9B,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,sBAAsB;aACpC,UAAU,EAAE,0BAA0B;;aAGtC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,0BAA0B;aACxC,UAAU,EAAE,8BAA8B;;aAG1C,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,mBAAmB;aACjC,UAAU,EAAE,uBAAuB;;aAGnC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,uBAAuB;aACrC,UAAU,EAAE,2BAA2B;;aAGvC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,8BAA8B;aAC5C,UAAU,EAAE,kCAAkC;;aAG9C,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,wBAAwB;aACtC,UAAU,EAAE,wBAAwB;;aAGpC,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,sBAAsB;aACpC,UAAU,EAAE,sBAAsB;;aAGlC,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,qBAAqB;aACnC,UAAU,EAAE,qBAAqB;;aAGjC,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,sBAAsB;aACpC,UAAU,EAAE,sBAAsB;;aAGlC,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,aAAa;aAC3B,UAAU,EAAE,aAAa;;aAGzB,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,mBAAmB;aACjC,UAAU,EAAE,mBAAmB;EAEzB,CAAA"}
1
+ {"version":3,"file":"template-files.d.ts","sourceRoot":"","sources":["../../../src/lib/tanstack/template-files.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB;aAEhC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,cAAc;aAC5B,UAAU,EAAE,kBAAkB;;aAG9B,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,sBAAsB;aACpC,UAAU,EAAE,0BAA0B;;aAGtC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,0BAA0B;aACxC,UAAU,EAAE,8BAA8B;;aAG1C,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,mBAAmB;aACjC,UAAU,EAAE,uBAAuB;;aAGnC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,qBAAqB;aACnC,UAAU,EAAE,yBAAyB;;aAGrC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,uBAAuB;aACrC,UAAU,EAAE,2BAA2B;;aAGvC,WAAW,EAAE,QAAQ;aACrB,YAAY,EAAE,8BAA8B;aAC5C,UAAU,EAAE,kCAAkC;;aAG9C,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,wBAAwB;aACtC,UAAU,EAAE,wBAAwB;;aAGpC,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,sBAAsB;aACpC,UAAU,EAAE,sBAAsB;;aAGlC,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,qBAAqB;aACnC,UAAU,EAAE,qBAAqB;;aAGjC,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,sBAAsB;aACpC,UAAU,EAAE,sBAAsB;;aAGlC,WAAW,EAAE,KAAK;aAClB,YAAY,EAAE,mBAAmB;aACjC,UAAU,EAAE,mBAAmB;EAEzB,CAAA"}
@@ -19,6 +19,11 @@ export const TANSTACK_TEMPLATE_FILES = [
19
19
  relativePath: '_payload/api.$.ts',
20
20
  sourcePath: 'app/_payload/api.$.ts'
21
21
  },
22
+ {
23
+ destination: 'routes',
24
+ relativePath: '_payload/custom.css',
25
+ sourcePath: 'app/_payload/custom.css'
26
+ },
22
27
  {
23
28
  destination: 'routes',
24
29
  relativePath: '_payload/importMap.js',
@@ -49,11 +54,6 @@ export const TANSTACK_TEMPLATE_FILES = [
49
54
  relativePath: 'collections/Users.ts',
50
55
  sourcePath: 'collections/Users.ts'
51
56
  },
52
- {
53
- destination: 'src',
54
- relativePath: 'payload.css',
55
- sourcePath: 'payload.css'
56
- },
57
57
  {
58
58
  destination: 'src',
59
59
  relativePath: 'payload.config.ts',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/tanstack/template-files.ts"],"sourcesContent":["export const TANSTACK_TEMPLATE_FILES = [\n {\n destination: 'routes',\n relativePath: '_payload.tsx',\n sourcePath: 'app/_payload.tsx',\n },\n {\n destination: 'routes',\n relativePath: '_payload/admin.$.tsx',\n sourcePath: 'app/_payload/admin.$.tsx',\n },\n {\n destination: 'routes',\n relativePath: '_payload/admin.index.tsx',\n sourcePath: 'app/_payload/admin.index.tsx',\n },\n {\n destination: 'routes',\n relativePath: '_payload/api.$.ts',\n sourcePath: 'app/_payload/api.$.ts',\n },\n {\n destination: 'routes',\n relativePath: '_payload/importMap.js',\n sourcePath: 'app/_payload/importMap.js',\n },\n {\n destination: 'routes',\n relativePath: '_payload/server.functions.ts',\n sourcePath: 'app/_payload/server.functions.ts',\n },\n {\n destination: 'src',\n relativePath: 'collections/Folders.ts',\n sourcePath: 'collections/Folders.ts',\n },\n {\n destination: 'src',\n relativePath: 'collections/Media.ts',\n sourcePath: 'collections/Media.ts',\n },\n {\n destination: 'src',\n relativePath: 'collections/Tags.ts',\n sourcePath: 'collections/Tags.ts',\n },\n {\n destination: 'src',\n relativePath: 'collections/Users.ts',\n sourcePath: 'collections/Users.ts',\n },\n {\n destination: 'src',\n relativePath: 'payload.css',\n sourcePath: 'payload.css',\n },\n {\n destination: 'src',\n relativePath: 'payload.config.ts',\n sourcePath: 'payload.config.ts',\n },\n] as const\n"],"names":["TANSTACK_TEMPLATE_FILES","destination","relativePath","sourcePath"],"mappings":"AAAA,OAAO,MAAMA,0BAA0B;IACrC;QACEC,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;CACD,CAAS"}
1
+ {"version":3,"sources":["../../../src/lib/tanstack/template-files.ts"],"sourcesContent":["export const TANSTACK_TEMPLATE_FILES = [\n {\n destination: 'routes',\n relativePath: '_payload.tsx',\n sourcePath: 'app/_payload.tsx',\n },\n {\n destination: 'routes',\n relativePath: '_payload/admin.$.tsx',\n sourcePath: 'app/_payload/admin.$.tsx',\n },\n {\n destination: 'routes',\n relativePath: '_payload/admin.index.tsx',\n sourcePath: 'app/_payload/admin.index.tsx',\n },\n {\n destination: 'routes',\n relativePath: '_payload/api.$.ts',\n sourcePath: 'app/_payload/api.$.ts',\n },\n {\n destination: 'routes',\n relativePath: '_payload/custom.css',\n sourcePath: 'app/_payload/custom.css',\n },\n {\n destination: 'routes',\n relativePath: '_payload/importMap.js',\n sourcePath: 'app/_payload/importMap.js',\n },\n {\n destination: 'routes',\n relativePath: '_payload/server.functions.ts',\n sourcePath: 'app/_payload/server.functions.ts',\n },\n {\n destination: 'src',\n relativePath: 'collections/Folders.ts',\n sourcePath: 'collections/Folders.ts',\n },\n {\n destination: 'src',\n relativePath: 'collections/Media.ts',\n sourcePath: 'collections/Media.ts',\n },\n {\n destination: 'src',\n relativePath: 'collections/Tags.ts',\n sourcePath: 'collections/Tags.ts',\n },\n {\n destination: 'src',\n relativePath: 'collections/Users.ts',\n sourcePath: 'collections/Users.ts',\n },\n {\n destination: 'src',\n relativePath: 'payload.config.ts',\n sourcePath: 'payload.config.ts',\n },\n] as const\n"],"names":["TANSTACK_TEMPLATE_FILES","destination","relativePath","sourcePath"],"mappings":"AAAA,OAAO,MAAMA,0BAA0B;IACrC;QACEC,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;IACA;QACEF,aAAa;QACbC,cAAc;QACdC,YAAY;IACd;CACD,CAAS"}
@@ -70,12 +70,12 @@ export async function updatePayloadInTanStackProject({ appDetails, templateRoot
70
70
  const hasPackedTemplateLayout = fse.existsSync(path.join(templateRoot, 'routes'));
71
71
  for (const { destination, relativePath, sourcePath } of TANSTACK_TEMPLATE_FILES){
72
72
  const isPayloadRoute = destination === 'routes' && relativePath.startsWith('_payload');
73
- const isPayloadStyles = destination === 'src' && relativePath === 'payload.css';
74
- if (!isPayloadRoute && !isPayloadStyles) {
73
+ const isCustomStyles = destination === 'routes' && relativePath === '_payload/custom.css';
74
+ if (!isPayloadRoute) {
75
75
  continue;
76
76
  }
77
77
  const destinationPath = path.join(destination === 'routes' ? appDetails.routesDir : appDetails.sourceDir, relativePath);
78
- if (isPayloadStyles && fse.existsSync(destinationPath)) {
78
+ if (isCustomStyles && fse.existsSync(destinationPath)) {
79
79
  continue;
80
80
  }
81
81
  const templatePath = hasPackedTemplateLayout ? path.join(templateRoot, destination, relativePath) : path.join(templateRoot, sourcePath);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/update-payload-in-project.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { NextAppDetails, TanStackAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { info } from '../utils/log.js'\nimport { resolvePackageVersion } from '../utils/resolvePackageVersion.js'\nimport { getPackageManager } from './get-package-manager.js'\nimport { installPackages } from './install-packages.js'\nimport { TANSTACK_TEMPLATE_FILES } from './tanstack/template-files.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype UpdateResult = { message: string; success: boolean }\n\ntype PackageUpdateResult = { isUpdated: boolean } & UpdateResult\n\nexport async function updatePayloadPackages({\n projectDir,\n versionOrTag,\n}: {\n projectDir: string\n versionOrTag?: string\n}): Promise<UpdateResult> {\n const result = await performPayloadPackageUpdate({ projectDir, versionOrTag })\n\n return { message: result.message, success: result.success }\n}\n\nexport async function updatePayloadInNextProject({\n appDetails,\n versionOrTag,\n}: {\n appDetails: NextAppDetails\n versionOrTag?: string\n}): Promise<UpdateResult> {\n if (!appDetails.nextConfigPath) {\n return { message: 'No Next.js config found', success: false }\n }\n\n const projectDir = path.dirname(appDetails.nextConfigPath)\n const packageUpdate = await performPayloadPackageUpdate({ projectDir, versionOrTag })\n\n if (!packageUpdate.isUpdated) {\n return { message: packageUpdate.message, success: packageUpdate.success }\n }\n\n info(`Updating Payload Next.js files...`)\n\n const templateFilesPath =\n process.env.JEST_WORKER_ID !== undefined\n ? path.resolve(dirname, '../../../../templates/blank')\n : path.resolve(dirname, '../..', 'dist/template')\n\n const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)')\n const payloadDirPath = path.resolve(\n projectDir,\n appDetails.isSrcDir ? 'src/app' : 'app',\n '(payload)',\n )\n\n const legacyCustomStylesPath = path.resolve(payloadDirPath, 'custom.scss')\n const customCssPath = path.resolve(payloadDirPath, 'custom.css')\n\n if (fse.existsSync(legacyCustomStylesPath) && !fse.existsSync(customCssPath)) {\n fse.renameSync(legacyCustomStylesPath, customCssPath)\n info(\n 'Renamed `(payload)/custom.scss` to `custom.css`. If it contained Sass syntax (nesting, `$variables`, `@mixin`, etc.), convert it to plain CSS — it is no longer transpiled.',\n )\n }\n\n copyRecursiveSync(templateSrcDir, payloadDirPath, ['custom.css$'])\n\n return { message: packageUpdate.message, success: packageUpdate.success }\n}\n\nexport async function updatePayloadInTanStackProject({\n appDetails,\n templateRoot = resolveTanStackTemplateRoot(),\n versionOrTag,\n}: {\n appDetails: TanStackAppDetails\n templateRoot?: string\n versionOrTag?: string\n}): Promise<UpdateResult> {\n const packageUpdate = await performPayloadPackageUpdate({\n projectDir: appDetails.projectDir,\n versionOrTag,\n })\n\n if (!packageUpdate.isUpdated) {\n return { message: packageUpdate.message, success: packageUpdate.success }\n }\n\n info(`Updating Payload TanStack files...`)\n const hasPackedTemplateLayout = fse.existsSync(path.join(templateRoot, 'routes'))\n\n for (const { destination, relativePath, sourcePath } of TANSTACK_TEMPLATE_FILES) {\n const isPayloadRoute = destination === 'routes' && relativePath.startsWith('_payload')\n const isPayloadStyles = destination === 'src' && relativePath === 'payload.css'\n\n if (!isPayloadRoute && !isPayloadStyles) {\n continue\n }\n\n const destinationPath = path.join(\n destination === 'routes' ? appDetails.routesDir : appDetails.sourceDir,\n relativePath,\n )\n if (isPayloadStyles && fse.existsSync(destinationPath)) {\n continue\n }\n\n const templatePath = hasPackedTemplateLayout\n ? path.join(templateRoot, destination, relativePath)\n : path.join(templateRoot, sourcePath)\n fse.ensureDirSync(path.dirname(destinationPath))\n fse.copyFileSync(templatePath, destinationPath)\n }\n\n return { message: packageUpdate.message, success: packageUpdate.success }\n}\n\nexport async function updatePayloadInProject(\n appDetails: NextAppDetails,\n versionOrTag?: string,\n): Promise<UpdateResult> {\n return updatePayloadInNextProject({ appDetails, versionOrTag })\n}\n\nasync function performPayloadPackageUpdate({\n projectDir,\n versionOrTag,\n}: {\n projectDir: string\n versionOrTag?: string\n}): Promise<PackageUpdateResult> {\n const packageObj = (await fse.readJson(path.resolve(projectDir, 'package.json'))) as {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n }\n if (!packageObj.dependencies && !packageObj.devDependencies) {\n throw new Error('No package.json found in this project')\n }\n\n const dependencyGroups = [packageObj.dependencies, packageObj.devDependencies].filter(\n (dependencies): dependencies is Record<string, string> => Boolean(dependencies),\n )\n const payloadPackageEntries = dependencyGroups.flatMap((dependencies) =>\n Object.entries(dependencies).filter(\n ([packageName]) => packageName === 'payload' || packageName.startsWith('@payloadcms/'),\n ),\n )\n const payloadVersion = payloadPackageEntries.find(\n ([packageName]) => packageName === 'payload',\n )?.[1]\n if (!payloadVersion) {\n throw new Error('Payload is not installed in this project')\n }\n\n const packageManager = await getPackageManager({ projectDir })\n const latestPayloadVersion = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n if (payloadPackageEntries.every(([, version]) => version === latestPayloadVersion)) {\n return {\n isUpdated: false,\n message: `Payload v${payloadVersion} is already up to date.`,\n success: true,\n }\n }\n\n const payloadPackages = payloadPackageEntries\n .map(([packageName]) => packageName)\n .filter((packageName) => packageName.startsWith('@payloadcms/'))\n const packageNames = ['payload', ...new Set(payloadPackages)]\n const packagesToUpdate = packageNames.map(\n (packageName) => `${packageName}@${latestPayloadVersion}`,\n )\n\n info(`Using ${packageManager}.\\n`)\n info(\n `Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\\n\\n${packageNames.map((packageName) => ` - ${packageName}`).join('\\n')}`,\n )\n\n const { success: updateSuccess } = await installPackages({\n packageManager,\n packagesToInstall: packagesToUpdate,\n projectDir,\n })\n\n if (!updateSuccess) {\n throw new Error('Failed to update Payload packages')\n }\n info('Payload packages updated successfully.')\n\n return { isUpdated: true, message: 'Payload updated successfully.', success: true }\n}\n\nfunction resolveTanStackTemplateRoot(): string {\n return path.basename(path.dirname(dirname)) === 'dist'\n ? path.resolve(dirname, '../template-tanstack')\n : path.resolve(dirname, '../../../../templates/blank-tanstack/src')\n}\n"],"names":["fse","fileURLToPath","path","copyRecursiveSync","info","resolvePackageVersion","getPackageManager","installPackages","TANSTACK_TEMPLATE_FILES","filename","url","dirname","updatePayloadPackages","projectDir","versionOrTag","result","performPayloadPackageUpdate","message","success","updatePayloadInNextProject","appDetails","nextConfigPath","packageUpdate","isUpdated","templateFilesPath","process","env","JEST_WORKER_ID","undefined","resolve","templateSrcDir","payloadDirPath","isSrcDir","legacyCustomStylesPath","customCssPath","existsSync","renameSync","updatePayloadInTanStackProject","templateRoot","resolveTanStackTemplateRoot","hasPackedTemplateLayout","join","destination","relativePath","sourcePath","isPayloadRoute","startsWith","isPayloadStyles","destinationPath","routesDir","sourceDir","templatePath","ensureDirSync","copyFileSync","updatePayloadInProject","packageObj","readJson","dependencies","devDependencies","Error","dependencyGroups","filter","Boolean","payloadPackageEntries","flatMap","Object","entries","packageName","payloadVersion","find","packageManager","latestPayloadVersion","every","version","payloadPackages","map","packageNames","Set","packagesToUpdate","length","updateSuccess","packagesToInstall","basename"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/update-payload-in-project.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { NextAppDetails, TanStackAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { info } from '../utils/log.js'\nimport { resolvePackageVersion } from '../utils/resolvePackageVersion.js'\nimport { getPackageManager } from './get-package-manager.js'\nimport { installPackages } from './install-packages.js'\nimport { TANSTACK_TEMPLATE_FILES } from './tanstack/template-files.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype UpdateResult = { message: string; success: boolean }\n\ntype PackageUpdateResult = { isUpdated: boolean } & UpdateResult\n\nexport async function updatePayloadPackages({\n projectDir,\n versionOrTag,\n}: {\n projectDir: string\n versionOrTag?: string\n}): Promise<UpdateResult> {\n const result = await performPayloadPackageUpdate({ projectDir, versionOrTag })\n\n return { message: result.message, success: result.success }\n}\n\nexport async function updatePayloadInNextProject({\n appDetails,\n versionOrTag,\n}: {\n appDetails: NextAppDetails\n versionOrTag?: string\n}): Promise<UpdateResult> {\n if (!appDetails.nextConfigPath) {\n return { message: 'No Next.js config found', success: false }\n }\n\n const projectDir = path.dirname(appDetails.nextConfigPath)\n const packageUpdate = await performPayloadPackageUpdate({ projectDir, versionOrTag })\n\n if (!packageUpdate.isUpdated) {\n return { message: packageUpdate.message, success: packageUpdate.success }\n }\n\n info(`Updating Payload Next.js files...`)\n\n const templateFilesPath =\n process.env.JEST_WORKER_ID !== undefined\n ? path.resolve(dirname, '../../../../templates/blank')\n : path.resolve(dirname, '../..', 'dist/template')\n\n const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)')\n const payloadDirPath = path.resolve(\n projectDir,\n appDetails.isSrcDir ? 'src/app' : 'app',\n '(payload)',\n )\n\n const legacyCustomStylesPath = path.resolve(payloadDirPath, 'custom.scss')\n const customCssPath = path.resolve(payloadDirPath, 'custom.css')\n\n if (fse.existsSync(legacyCustomStylesPath) && !fse.existsSync(customCssPath)) {\n fse.renameSync(legacyCustomStylesPath, customCssPath)\n info(\n 'Renamed `(payload)/custom.scss` to `custom.css`. If it contained Sass syntax (nesting, `$variables`, `@mixin`, etc.), convert it to plain CSS — it is no longer transpiled.',\n )\n }\n\n copyRecursiveSync(templateSrcDir, payloadDirPath, ['custom.css$'])\n\n return { message: packageUpdate.message, success: packageUpdate.success }\n}\n\nexport async function updatePayloadInTanStackProject({\n appDetails,\n templateRoot = resolveTanStackTemplateRoot(),\n versionOrTag,\n}: {\n appDetails: TanStackAppDetails\n templateRoot?: string\n versionOrTag?: string\n}): Promise<UpdateResult> {\n const packageUpdate = await performPayloadPackageUpdate({\n projectDir: appDetails.projectDir,\n versionOrTag,\n })\n\n if (!packageUpdate.isUpdated) {\n return { message: packageUpdate.message, success: packageUpdate.success }\n }\n\n info(`Updating Payload TanStack files...`)\n const hasPackedTemplateLayout = fse.existsSync(path.join(templateRoot, 'routes'))\n\n for (const { destination, relativePath, sourcePath } of TANSTACK_TEMPLATE_FILES) {\n const isPayloadRoute = destination === 'routes' && relativePath.startsWith('_payload')\n const isCustomStyles = destination === 'routes' && relativePath === '_payload/custom.css'\n\n if (!isPayloadRoute) {\n continue\n }\n\n const destinationPath = path.join(\n destination === 'routes' ? appDetails.routesDir : appDetails.sourceDir,\n relativePath,\n )\n if (isCustomStyles && fse.existsSync(destinationPath)) {\n continue\n }\n\n const templatePath = hasPackedTemplateLayout\n ? path.join(templateRoot, destination, relativePath)\n : path.join(templateRoot, sourcePath)\n fse.ensureDirSync(path.dirname(destinationPath))\n fse.copyFileSync(templatePath, destinationPath)\n }\n\n return { message: packageUpdate.message, success: packageUpdate.success }\n}\n\nexport async function updatePayloadInProject(\n appDetails: NextAppDetails,\n versionOrTag?: string,\n): Promise<UpdateResult> {\n return updatePayloadInNextProject({ appDetails, versionOrTag })\n}\n\nasync function performPayloadPackageUpdate({\n projectDir,\n versionOrTag,\n}: {\n projectDir: string\n versionOrTag?: string\n}): Promise<PackageUpdateResult> {\n const packageObj = (await fse.readJson(path.resolve(projectDir, 'package.json'))) as {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n }\n if (!packageObj.dependencies && !packageObj.devDependencies) {\n throw new Error('No package.json found in this project')\n }\n\n const dependencyGroups = [packageObj.dependencies, packageObj.devDependencies].filter(\n (dependencies): dependencies is Record<string, string> => Boolean(dependencies),\n )\n const payloadPackageEntries = dependencyGroups.flatMap((dependencies) =>\n Object.entries(dependencies).filter(\n ([packageName]) => packageName === 'payload' || packageName.startsWith('@payloadcms/'),\n ),\n )\n const payloadVersion = payloadPackageEntries.find(\n ([packageName]) => packageName === 'payload',\n )?.[1]\n if (!payloadVersion) {\n throw new Error('Payload is not installed in this project')\n }\n\n const packageManager = await getPackageManager({ projectDir })\n const latestPayloadVersion = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n if (payloadPackageEntries.every(([, version]) => version === latestPayloadVersion)) {\n return {\n isUpdated: false,\n message: `Payload v${payloadVersion} is already up to date.`,\n success: true,\n }\n }\n\n const payloadPackages = payloadPackageEntries\n .map(([packageName]) => packageName)\n .filter((packageName) => packageName.startsWith('@payloadcms/'))\n const packageNames = ['payload', ...new Set(payloadPackages)]\n const packagesToUpdate = packageNames.map(\n (packageName) => `${packageName}@${latestPayloadVersion}`,\n )\n\n info(`Using ${packageManager}.\\n`)\n info(\n `Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\\n\\n${packageNames.map((packageName) => ` - ${packageName}`).join('\\n')}`,\n )\n\n const { success: updateSuccess } = await installPackages({\n packageManager,\n packagesToInstall: packagesToUpdate,\n projectDir,\n })\n\n if (!updateSuccess) {\n throw new Error('Failed to update Payload packages')\n }\n info('Payload packages updated successfully.')\n\n return { isUpdated: true, message: 'Payload updated successfully.', success: true }\n}\n\nfunction resolveTanStackTemplateRoot(): string {\n return path.basename(path.dirname(dirname)) === 'dist'\n ? path.resolve(dirname, '../template-tanstack')\n : path.resolve(dirname, '../../../../templates/blank-tanstack/src')\n}\n"],"names":["fse","fileURLToPath","path","copyRecursiveSync","info","resolvePackageVersion","getPackageManager","installPackages","TANSTACK_TEMPLATE_FILES","filename","url","dirname","updatePayloadPackages","projectDir","versionOrTag","result","performPayloadPackageUpdate","message","success","updatePayloadInNextProject","appDetails","nextConfigPath","packageUpdate","isUpdated","templateFilesPath","process","env","JEST_WORKER_ID","undefined","resolve","templateSrcDir","payloadDirPath","isSrcDir","legacyCustomStylesPath","customCssPath","existsSync","renameSync","updatePayloadInTanStackProject","templateRoot","resolveTanStackTemplateRoot","hasPackedTemplateLayout","join","destination","relativePath","sourcePath","isPayloadRoute","startsWith","isCustomStyles","destinationPath","routesDir","sourceDir","templatePath","ensureDirSync","copyFileSync","updatePayloadInProject","packageObj","readJson","dependencies","devDependencies","Error","dependencyGroups","filter","Boolean","payloadPackageEntries","flatMap","Object","entries","packageName","payloadVersion","find","packageManager","latestPayloadVersion","every","version","payloadPackages","map","packageNames","Set","packagesToUpdate","length","updateSuccess","packagesToInstall","basename"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAiCnB,qBAAa,IAAI;IACf,IAAI,EAAE,OAAO,CAAA;IAEb,cA+CC;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAwS1B;CACF;AAED,KAAK,YAAY,GACb;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,wBAAgB,mBAAmB,CAAC,EAClC,cAAc,EACd,iBAAiB,GAClB,EAAE;IACD,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,uBAAuB,CAAA;CAC3C,GAAG,YAAY,CAkBf"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAiCnB,qBAAa,IAAI;IACf,IAAI,EAAE,OAAO,CAAA;IAEb,cA8CC;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAwS1B;CACF;AAED,KAAK,YAAY,GACb;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,wBAAgB,mBAAmB,CAAC,EAClC,cAAc,EACd,iBAAiB,GAClB,EAAE;IACD,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,uBAAuB,CAAA;CAC3C,GAAG,YAAY,CAkBf"}
package/dist/main.js CHANGED
@@ -9,7 +9,7 @@ import { createProject } from './lib/create-project.js';
9
9
  import { parseExample } from './lib/examples.js';
10
10
  import { generateSecret } from './lib/generate-secret.js';
11
11
  import { getPackageManager } from './lib/get-package-manager.js';
12
- import { getNextAppDetails, initNext } from './lib/init-next.js';
12
+ import { getNextAppDetails, initNext, minimumNextVersion } from './lib/init-next.js';
13
13
  import { initTanStack } from './lib/init-tanstack.js';
14
14
  import { manageEnvFiles } from './lib/manage-env-files.js';
15
15
  import { parseProjectName } from './lib/parse-project-name.js';
@@ -26,7 +26,6 @@ export class Main {
26
26
  constructor(){
27
27
  // @ts-expect-error bad typings
28
28
  this.args = arg({
29
- '--agent': String,
30
29
  '--branch': String,
31
30
  '--db': String,
32
31
  '--db-accept-recommended': Boolean,
@@ -103,7 +102,7 @@ export class Main {
103
102
  return;
104
103
  }
105
104
  if (appFramework.kind === 'next' && !appFramework.appDetails.isSupportedNextVersion) {
106
- p.log.warn(`Next.js v${appFramework.appDetails.nextVersion} is unsupported. Next.js >= 15 is required to use Payload.`);
105
+ p.log.warn(`Next.js v${appFramework.appDetails.nextVersion} is unsupported. Next.js >= ${minimumNextVersion.major}.${minimumNextVersion.minor} is required to use Payload.`);
107
106
  p.outro(feedbackOutro());
108
107
  process.exit(0);
109
108
  }
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\nimport arg from 'arg'\nimport chalk from 'chalk'\nimport figures from 'figures'\nimport path from 'path'\n\nimport type {\n CliArgs,\n NextAppDetails,\n TanStackAppDetails,\n TanStackDetectionResult,\n} from './types.js'\n\nimport { configurePayloadConfig } from './lib/configure-payload-config.js'\nimport { createProject } from './lib/create-project.js'\nimport { parseExample } from './lib/examples.js'\nimport { generateSecret } from './lib/generate-secret.js'\nimport { getPackageManager } from './lib/get-package-manager.js'\nimport { getNextAppDetails, initNext } from './lib/init-next.js'\nimport { initTanStack } from './lib/init-tanstack.js'\nimport { manageEnvFiles } from './lib/manage-env-files.js'\nimport { parseProjectName } from './lib/parse-project-name.js'\nimport { parseTemplate } from './lib/parse-template.js'\nimport { selectDb } from './lib/select-db.js'\nimport { getTanStackAppDetails } from './lib/tanstack/detect.js'\nimport { getValidTemplates, validateTemplate } from './lib/templates.js'\nimport {\n updatePayloadInNextProject,\n updatePayloadInTanStackProject,\n} from './lib/update-payload-in-project.js'\nimport { debug, error, info } from './utils/log.js'\nimport {\n feedbackOutro,\n helpMessage,\n moveMessage,\n successfulNextInit,\n successfulTanStackInit,\n successMessage,\n} from './utils/messages.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from './utils/resolvePackageVersion.js'\n\nexport class Main {\n args: CliArgs\n\n constructor() {\n // @ts-expect-error bad typings\n this.args = arg(\n {\n '--agent': String,\n '--branch': String,\n '--db': String,\n '--db-accept-recommended': Boolean,\n '--db-connection-string': String,\n '--example': String,\n '--help': Boolean,\n '--local-template': String,\n '--name': String,\n '--payload-version': String, // Install a specific Payload version or npm dist-tag (e.g. 3.40.0 or canary; default: canary)\n '--secret': String,\n '--template': String,\n\n // Next.js\n '--init-next': Boolean, // TODO: Is this needed if we detect if inside Next.js project?\n\n // Agent\n '--no-agent': Boolean,\n\n // Package manager\n '--no-deps': Boolean,\n '--use-bun': Boolean,\n '--use-npm': Boolean,\n '--use-pnpm': Boolean,\n '--use-yarn': Boolean,\n\n // Other\n '--no-git': Boolean,\n\n // Flags\n '--beta': Boolean,\n '--debug': Boolean,\n '--dry-run': Boolean,\n\n // Aliases\n '-d': '--db',\n '-e': '--example',\n '-h': '--help',\n '-n': '--name',\n '-t': '--template',\n },\n { permissive: true },\n )\n }\n\n async init(): Promise<void> {\n try {\n const debugFlag = this.args['--debug']\n\n // Set DEBUG env var for logger utility\n if (debugFlag) {\n process.env.DEBUG = 'true'\n }\n\n const LATEST_VERSION = await resolvePackageVersion({\n debug: debugFlag,\n packageName: 'payload',\n versionOrTag: this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n\n if (this.args['--help']) {\n helpMessage()\n process.exit(0)\n }\n\n // eslint-disable-next-line no-console\n console.log('\\n')\n p.intro(chalk.bgCyan(chalk.black(' create-payload-app ')))\n p.note(\"Welcome to Payload. Let's create a project!\")\n\n const tanStackDetection = await getTanStackAppDetails({ projectDir: process.cwd() })\n const nextAppDetails = await getNextAppDetails(process.cwd())\n const appFramework = resolveAppFramework({ nextAppDetails, tanStackDetection })\n\n if (appFramework.kind === 'ambiguous') {\n p.log.warn(\n 'Both Next.js and TanStack project markers were detected. Remove one framework before installing Payload.',\n )\n p.outro(feedbackOutro())\n return\n }\n\n if (appFramework.kind === 'unsupported-tanstack') {\n p.log.warn(appFramework.reason)\n p.outro(feedbackOutro())\n return\n }\n\n if (appFramework.kind === 'next' && !appFramework.appDetails.isSupportedNextVersion) {\n p.log.warn(\n `Next.js v${appFramework.appDetails.nextVersion} is unsupported. Next.js >= 15 is required to use Payload.`,\n )\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n const hasPayload = appFramework.kind !== 'none' && appFramework.appDetails.isPayloadInstalled\n\n if (hasPayload) {\n p.log.warn(`Payload installation detected in current project.`)\n const shouldUpdate = await p.confirm({\n initialValue: false,\n message: chalk.bold(`Upgrade Payload in this project?`),\n })\n\n if (!p.isCancel(shouldUpdate) && shouldUpdate) {\n const versionOrTag = this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG\n const updateResult =\n appFramework.kind === 'next'\n ? await updatePayloadInNextProject({\n appDetails: appFramework.appDetails,\n versionOrTag,\n })\n : await updatePayloadInTanStackProject({\n appDetails: appFramework.appDetails,\n versionOrTag,\n })\n\n const { message, success: updateSuccess } = updateResult\n if (updateSuccess) {\n info(message)\n } else {\n error(message)\n }\n }\n\n p.outro(feedbackOutro())\n return\n }\n\n if (appFramework.kind === 'next') {\n this.args['--name'] = slugify(\n path.basename(path.dirname(appFramework.appDetails.nextConfigPath!)),\n )\n } else if (appFramework.kind === 'tanstack') {\n this.args['--name'] = slugify(path.basename(appFramework.appDetails.projectDir))\n }\n\n const projectName = await parseProjectName(this.args)\n let projectDir: string\n if (appFramework.kind === 'next') {\n projectDir = path.dirname(appFramework.appDetails.nextConfigPath!)\n } else if (appFramework.kind === 'tanstack') {\n projectDir = appFramework.appDetails.projectDir\n } else {\n projectDir = path.resolve(process.cwd(), slugify(projectName))\n }\n\n const packageManager = await getPackageManager({ cliArgs: this.args, projectDir })\n\n if (appFramework.kind === 'next') {\n const { hasTopLevelLayout, nextAppDir } = appFramework.appDetails\n\n p.log.step(\n chalk.bold(`${chalk.bgBlack(` ${figures.triangleUp} Next.js `)} project detected!`),\n )\n\n const proceed = await p.confirm({\n initialValue: true,\n message: chalk.bold(`Install ${chalk.green('Payload')} in this project?`),\n })\n if (p.isCancel(proceed) || !proceed) {\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n // Check for top-level layout.tsx\n if (nextAppDir && hasTopLevelLayout) {\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n const dbDetails = await selectDb(this.args, projectName)\n\n const result = await initNext({\n ...this.args,\n dbType: dbDetails.type,\n nextAppDetails: appFramework.appDetails,\n packageManager,\n projectDir,\n })\n\n if (result.success === false) {\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: {\n payloadConfigPath: result.payloadConfigPath,\n },\n })\n\n await manageEnvFiles({\n cliArgs: this.args,\n databaseType: dbDetails.type,\n databaseUri: dbDetails.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n })\n\n info('Payload project successfully initialized!')\n p.note(successfulNextInit(), chalk.bgGreen(chalk.black(' Documentation ')))\n p.outro(feedbackOutro())\n return\n }\n\n if (appFramework.kind === 'tanstack') {\n const frameworkName =\n appFramework.appDetails.kind === 'start' ? 'TanStack Start' : 'TanStack Router'\n p.log.step(chalk.bold(`${chalk.bgBlack(` ${frameworkName} `)} project detected!`))\n\n const proceed = await p.confirm({\n initialValue: true,\n message: chalk.bold(\n appFramework.appDetails.kind === 'start'\n ? 'Install Payload in this TanStack Start project?'\n : 'Convert this project to TanStack Start and install Payload?',\n ),\n })\n if (p.isCancel(proceed) || !proceed) {\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n const dbDetails = await selectDb(this.args, projectName)\n const result = await initTanStack({\n ...this.args,\n appDetails: appFramework.appDetails,\n dbType: dbDetails.type,\n packageManager,\n projectDir,\n })\n\n if (result.success === false) {\n p.log.error(result.reason)\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n await configurePayloadConfig({\n dbType: dbDetails.type,\n projectDirOrConfigPath: {\n payloadConfigPath: result.payloadConfigPath,\n },\n })\n\n await manageEnvFiles({\n cliArgs: this.args,\n databaseType: dbDetails.type,\n databaseUri: dbDetails.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n })\n\n info('Payload project successfully initialized!')\n p.note(successfulTanStackInit(), chalk.bgGreen(chalk.black(' TanStack Start initialized ')))\n p.outro(feedbackOutro())\n return\n }\n\n const templateArg = this.args['--template']\n if (templateArg) {\n const valid = validateTemplate({ templateName: templateArg })\n if (!valid) {\n helpMessage()\n process.exit(1)\n }\n }\n\n const exampleArg = this.args['--example']\n\n if (exampleArg) {\n const example = await parseExample({\n name: exampleArg,\n branch: this.args['--branch'] ?? 'main',\n })\n\n if (!example) {\n helpMessage()\n process.exit(1)\n }\n\n await createProject({\n cliArgs: this.args,\n example,\n packageManager,\n projectDir,\n projectName,\n })\n }\n\n if (debugFlag) {\n debug(`Using ${exampleArg ? 'examples' : 'templates'} from git tag: v${LATEST_VERSION}`)\n }\n\n if (!exampleArg) {\n const validTemplates = getValidTemplates()\n const template = await parseTemplate(this.args, validTemplates)\n if (!template) {\n p.log.error('Invalid template given')\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n switch (template.type) {\n case 'plugin': {\n await createProject({\n cliArgs: this.args,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n break\n }\n case 'starter': {\n const dbDetails = await selectDb(this.args, projectName, template)\n await createProject({\n cliArgs: this.args,\n dbDetails,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n\n break\n }\n }\n }\n\n info('Payload project successfully created!')\n p.log.step(chalk.bgGreen(chalk.black(' Next Steps ')))\n p.log.message(successMessage(projectDir, packageManager))\n p.outro(feedbackOutro())\n } catch (err: unknown) {\n error(err instanceof Error ? err.message : 'An error occurred')\n }\n }\n}\n\ntype AppFramework =\n | { appDetails: NextAppDetails; kind: 'next' }\n | { appDetails: TanStackAppDetails; kind: 'tanstack' }\n | { kind: 'ambiguous' }\n | { kind: 'none' }\n | { kind: 'unsupported-tanstack'; reason: string }\n\nexport function resolveAppFramework({\n nextAppDetails,\n tanStackDetection,\n}: {\n nextAppDetails: NextAppDetails\n tanStackDetection: TanStackDetectionResult\n}): AppFramework {\n if (nextAppDetails.nextConfigPath && tanStackDetection.detected) {\n return { kind: 'ambiguous' }\n }\n\n if (nextAppDetails.nextConfigPath) {\n return { appDetails: nextAppDetails, kind: 'next' }\n }\n\n if (!tanStackDetection.detected) {\n return { kind: 'none' }\n }\n\n if (!tanStackDetection.compatible) {\n return { kind: 'unsupported-tanstack', reason: tanStackDetection.reason }\n }\n\n return { appDetails: tanStackDetection.details, kind: 'tanstack' }\n}\n"],"names":["p","slugify","arg","chalk","figures","path","configurePayloadConfig","createProject","parseExample","generateSecret","getPackageManager","getNextAppDetails","initNext","initTanStack","manageEnvFiles","parseProjectName","parseTemplate","selectDb","getTanStackAppDetails","getValidTemplates","validateTemplate","updatePayloadInNextProject","updatePayloadInTanStackProject","debug","error","info","feedbackOutro","helpMessage","moveMessage","successfulNextInit","successfulTanStackInit","successMessage","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","Main","args","String","Boolean","permissive","init","debugFlag","process","env","DEBUG","LATEST_VERSION","packageName","versionOrTag","exit","console","log","intro","bgCyan","black","note","tanStackDetection","projectDir","cwd","nextAppDetails","appFramework","resolveAppFramework","kind","warn","outro","reason","appDetails","isSupportedNextVersion","nextVersion","hasPayload","isPayloadInstalled","shouldUpdate","confirm","initialValue","message","bold","isCancel","updateResult","success","updateSuccess","basename","dirname","nextConfigPath","projectName","resolve","packageManager","cliArgs","hasTopLevelLayout","nextAppDir","step","bgBlack","triangleUp","proceed","green","dbDetails","result","dbType","type","projectDirOrConfigPath","payloadConfigPath","databaseType","databaseUri","dbUri","payloadSecret","bgGreen","frameworkName","templateArg","valid","templateName","exampleArg","example","name","branch","validTemplates","template","err","Error","detected","compatible","details"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/main.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\nimport arg from 'arg'\nimport chalk from 'chalk'\nimport figures from 'figures'\nimport path from 'path'\n\nimport type {\n CliArgs,\n NextAppDetails,\n TanStackAppDetails,\n TanStackDetectionResult,\n} from './types.js'\n\nimport { configurePayloadConfig } from './lib/configure-payload-config.js'\nimport { createProject } from './lib/create-project.js'\nimport { parseExample } from './lib/examples.js'\nimport { generateSecret } from './lib/generate-secret.js'\nimport { getPackageManager } from './lib/get-package-manager.js'\nimport { getNextAppDetails, initNext, minimumNextVersion } from './lib/init-next.js'\nimport { initTanStack } from './lib/init-tanstack.js'\nimport { manageEnvFiles } from './lib/manage-env-files.js'\nimport { parseProjectName } from './lib/parse-project-name.js'\nimport { parseTemplate } from './lib/parse-template.js'\nimport { selectDb } from './lib/select-db.js'\nimport { getTanStackAppDetails } from './lib/tanstack/detect.js'\nimport { getValidTemplates, validateTemplate } from './lib/templates.js'\nimport {\n updatePayloadInNextProject,\n updatePayloadInTanStackProject,\n} from './lib/update-payload-in-project.js'\nimport { debug, error, info } from './utils/log.js'\nimport {\n feedbackOutro,\n helpMessage,\n moveMessage,\n successfulNextInit,\n successfulTanStackInit,\n successMessage,\n} from './utils/messages.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from './utils/resolvePackageVersion.js'\n\nexport class Main {\n args: CliArgs\n\n constructor() {\n // @ts-expect-error bad typings\n this.args = arg(\n {\n '--branch': String,\n '--db': String,\n '--db-accept-recommended': Boolean,\n '--db-connection-string': String,\n '--example': String,\n '--help': Boolean,\n '--local-template': String,\n '--name': String,\n '--payload-version': String, // Install a specific Payload version or npm dist-tag (e.g. 3.40.0 or beta; default: this CLI's own dist-tag)\n '--secret': String,\n '--template': String,\n\n // Next.js\n '--init-next': Boolean, // TODO: Is this needed if we detect if inside Next.js project?\n\n // Agent\n '--no-agent': Boolean,\n\n // Package manager\n '--no-deps': Boolean,\n '--use-bun': Boolean,\n '--use-npm': Boolean,\n '--use-pnpm': Boolean,\n '--use-yarn': Boolean,\n\n // Other\n '--no-git': Boolean,\n\n // Flags\n '--beta': Boolean,\n '--debug': Boolean,\n '--dry-run': Boolean,\n\n // Aliases\n '-d': '--db',\n '-e': '--example',\n '-h': '--help',\n '-n': '--name',\n '-t': '--template',\n },\n { permissive: true },\n )\n }\n\n async init(): Promise<void> {\n try {\n const debugFlag = this.args['--debug']\n\n // Set DEBUG env var for logger utility\n if (debugFlag) {\n process.env.DEBUG = 'true'\n }\n\n const LATEST_VERSION = await resolvePackageVersion({\n debug: debugFlag,\n packageName: 'payload',\n versionOrTag: this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n\n if (this.args['--help']) {\n helpMessage()\n process.exit(0)\n }\n\n // eslint-disable-next-line no-console\n console.log('\\n')\n p.intro(chalk.bgCyan(chalk.black(' create-payload-app ')))\n p.note(\"Welcome to Payload. Let's create a project!\")\n\n const tanStackDetection = await getTanStackAppDetails({ projectDir: process.cwd() })\n const nextAppDetails = await getNextAppDetails(process.cwd())\n const appFramework = resolveAppFramework({ nextAppDetails, tanStackDetection })\n\n if (appFramework.kind === 'ambiguous') {\n p.log.warn(\n 'Both Next.js and TanStack project markers were detected. Remove one framework before installing Payload.',\n )\n p.outro(feedbackOutro())\n return\n }\n\n if (appFramework.kind === 'unsupported-tanstack') {\n p.log.warn(appFramework.reason)\n p.outro(feedbackOutro())\n return\n }\n\n if (appFramework.kind === 'next' && !appFramework.appDetails.isSupportedNextVersion) {\n p.log.warn(\n `Next.js v${appFramework.appDetails.nextVersion} is unsupported. Next.js >= ${minimumNextVersion.major}.${minimumNextVersion.minor} is required to use Payload.`,\n )\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n const hasPayload = appFramework.kind !== 'none' && appFramework.appDetails.isPayloadInstalled\n\n if (hasPayload) {\n p.log.warn(`Payload installation detected in current project.`)\n const shouldUpdate = await p.confirm({\n initialValue: false,\n message: chalk.bold(`Upgrade Payload in this project?`),\n })\n\n if (!p.isCancel(shouldUpdate) && shouldUpdate) {\n const versionOrTag = this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG\n const updateResult =\n appFramework.kind === 'next'\n ? await updatePayloadInNextProject({\n appDetails: appFramework.appDetails,\n versionOrTag,\n })\n : await updatePayloadInTanStackProject({\n appDetails: appFramework.appDetails,\n versionOrTag,\n })\n\n const { message, success: updateSuccess } = updateResult\n if (updateSuccess) {\n info(message)\n } else {\n error(message)\n }\n }\n\n p.outro(feedbackOutro())\n return\n }\n\n if (appFramework.kind === 'next') {\n this.args['--name'] = slugify(\n path.basename(path.dirname(appFramework.appDetails.nextConfigPath!)),\n )\n } else if (appFramework.kind === 'tanstack') {\n this.args['--name'] = slugify(path.basename(appFramework.appDetails.projectDir))\n }\n\n const projectName = await parseProjectName(this.args)\n let projectDir: string\n if (appFramework.kind === 'next') {\n projectDir = path.dirname(appFramework.appDetails.nextConfigPath!)\n } else if (appFramework.kind === 'tanstack') {\n projectDir = appFramework.appDetails.projectDir\n } else {\n projectDir = path.resolve(process.cwd(), slugify(projectName))\n }\n\n const packageManager = await getPackageManager({ cliArgs: this.args, projectDir })\n\n if (appFramework.kind === 'next') {\n const { hasTopLevelLayout, nextAppDir } = appFramework.appDetails\n\n p.log.step(\n chalk.bold(`${chalk.bgBlack(` ${figures.triangleUp} Next.js `)} project detected!`),\n )\n\n const proceed = await p.confirm({\n initialValue: true,\n message: chalk.bold(`Install ${chalk.green('Payload')} in this project?`),\n })\n if (p.isCancel(proceed) || !proceed) {\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n // Check for top-level layout.tsx\n if (nextAppDir && hasTopLevelLayout) {\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n const dbDetails = await selectDb(this.args, projectName)\n\n const result = await initNext({\n ...this.args,\n dbType: dbDetails.type,\n nextAppDetails: appFramework.appDetails,\n packageManager,\n projectDir,\n })\n\n if (result.success === false) {\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: {\n payloadConfigPath: result.payloadConfigPath,\n },\n })\n\n await manageEnvFiles({\n cliArgs: this.args,\n databaseType: dbDetails.type,\n databaseUri: dbDetails.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n })\n\n info('Payload project successfully initialized!')\n p.note(successfulNextInit(), chalk.bgGreen(chalk.black(' Documentation ')))\n p.outro(feedbackOutro())\n return\n }\n\n if (appFramework.kind === 'tanstack') {\n const frameworkName =\n appFramework.appDetails.kind === 'start' ? 'TanStack Start' : 'TanStack Router'\n p.log.step(chalk.bold(`${chalk.bgBlack(` ${frameworkName} `)} project detected!`))\n\n const proceed = await p.confirm({\n initialValue: true,\n message: chalk.bold(\n appFramework.appDetails.kind === 'start'\n ? 'Install Payload in this TanStack Start project?'\n : 'Convert this project to TanStack Start and install Payload?',\n ),\n })\n if (p.isCancel(proceed) || !proceed) {\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n const dbDetails = await selectDb(this.args, projectName)\n const result = await initTanStack({\n ...this.args,\n appDetails: appFramework.appDetails,\n dbType: dbDetails.type,\n packageManager,\n projectDir,\n })\n\n if (result.success === false) {\n p.log.error(result.reason)\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n await configurePayloadConfig({\n dbType: dbDetails.type,\n projectDirOrConfigPath: {\n payloadConfigPath: result.payloadConfigPath,\n },\n })\n\n await manageEnvFiles({\n cliArgs: this.args,\n databaseType: dbDetails.type,\n databaseUri: dbDetails.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n })\n\n info('Payload project successfully initialized!')\n p.note(successfulTanStackInit(), chalk.bgGreen(chalk.black(' TanStack Start initialized ')))\n p.outro(feedbackOutro())\n return\n }\n\n const templateArg = this.args['--template']\n if (templateArg) {\n const valid = validateTemplate({ templateName: templateArg })\n if (!valid) {\n helpMessage()\n process.exit(1)\n }\n }\n\n const exampleArg = this.args['--example']\n\n if (exampleArg) {\n const example = await parseExample({\n name: exampleArg,\n branch: this.args['--branch'] ?? 'main',\n })\n\n if (!example) {\n helpMessage()\n process.exit(1)\n }\n\n await createProject({\n cliArgs: this.args,\n example,\n packageManager,\n projectDir,\n projectName,\n })\n }\n\n if (debugFlag) {\n debug(`Using ${exampleArg ? 'examples' : 'templates'} from git tag: v${LATEST_VERSION}`)\n }\n\n if (!exampleArg) {\n const validTemplates = getValidTemplates()\n const template = await parseTemplate(this.args, validTemplates)\n if (!template) {\n p.log.error('Invalid template given')\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n switch (template.type) {\n case 'plugin': {\n await createProject({\n cliArgs: this.args,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n break\n }\n case 'starter': {\n const dbDetails = await selectDb(this.args, projectName, template)\n await createProject({\n cliArgs: this.args,\n dbDetails,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n\n break\n }\n }\n }\n\n info('Payload project successfully created!')\n p.log.step(chalk.bgGreen(chalk.black(' Next Steps ')))\n p.log.message(successMessage(projectDir, packageManager))\n p.outro(feedbackOutro())\n } catch (err: unknown) {\n error(err instanceof Error ? err.message : 'An error occurred')\n }\n }\n}\n\ntype AppFramework =\n | { appDetails: NextAppDetails; kind: 'next' }\n | { appDetails: TanStackAppDetails; kind: 'tanstack' }\n | { kind: 'ambiguous' }\n | { kind: 'none' }\n | { kind: 'unsupported-tanstack'; reason: string }\n\nexport function resolveAppFramework({\n nextAppDetails,\n tanStackDetection,\n}: {\n nextAppDetails: NextAppDetails\n tanStackDetection: TanStackDetectionResult\n}): AppFramework {\n if (nextAppDetails.nextConfigPath && tanStackDetection.detected) {\n return { kind: 'ambiguous' }\n }\n\n if (nextAppDetails.nextConfigPath) {\n return { appDetails: nextAppDetails, kind: 'next' }\n }\n\n if (!tanStackDetection.detected) {\n return { kind: 'none' }\n }\n\n if (!tanStackDetection.compatible) {\n return { kind: 'unsupported-tanstack', reason: tanStackDetection.reason }\n }\n\n return { appDetails: tanStackDetection.details, kind: 'tanstack' }\n}\n"],"names":["p","slugify","arg","chalk","figures","path","configurePayloadConfig","createProject","parseExample","generateSecret","getPackageManager","getNextAppDetails","initNext","minimumNextVersion","initTanStack","manageEnvFiles","parseProjectName","parseTemplate","selectDb","getTanStackAppDetails","getValidTemplates","validateTemplate","updatePayloadInNextProject","updatePayloadInTanStackProject","debug","error","info","feedbackOutro","helpMessage","moveMessage","successfulNextInit","successfulTanStackInit","successMessage","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","Main","args","String","Boolean","permissive","init","debugFlag","process","env","DEBUG","LATEST_VERSION","packageName","versionOrTag","exit","console","log","intro","bgCyan","black","note","tanStackDetection","projectDir","cwd","nextAppDetails","appFramework","resolveAppFramework","kind","warn","outro","reason","appDetails","isSupportedNextVersion","nextVersion","major","minor","hasPayload","isPayloadInstalled","shouldUpdate","confirm","initialValue","message","bold","isCancel","updateResult","success","updateSuccess","basename","dirname","nextConfigPath","projectName","resolve","packageManager","cliArgs","hasTopLevelLayout","nextAppDir","step","bgBlack","triangleUp","proceed","green","dbDetails","result","dbType","type","projectDirOrConfigPath","payloadConfigPath","databaseType","databaseUri","dbUri","payloadSecret","bgGreen","frameworkName","templateArg","valid","templateName","exampleArg","example","name","branch","validTemplates","template","err","Error","detected","compatible","details"],"mappings":"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"}