create-payload-app 4.0.0-internal.5f0cd13 → 4.0.0-internal.656159a
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.
- package/LICENSE.md +1 -1
- package/dist/lib/ast/adapter-config.d.ts.map +1 -1
- package/dist/lib/ast/adapter-config.js +0 -10
- package/dist/lib/ast/adapter-config.js.map +1 -1
- package/dist/lib/ast/types.d.ts +2 -2
- package/dist/lib/ast/types.d.ts.map +1 -1
- package/dist/lib/ast/types.js +0 -1
- package/dist/lib/ast/types.js.map +1 -1
- package/dist/lib/configure-plugin-project.d.ts.map +1 -1
- package/dist/lib/configure-pnpm-builds.d.ts +20 -0
- package/dist/lib/configure-pnpm-builds.d.ts.map +1 -0
- package/dist/lib/configure-pnpm-builds.js +100 -0
- package/dist/lib/configure-pnpm-builds.js.map +1 -0
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +13 -50
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/init-next.d.ts +1 -1
- package/dist/lib/init-next.d.ts.map +1 -1
- package/dist/lib/init-next.js +20 -4
- package/dist/lib/init-next.js.map +1 -1
- package/dist/lib/update-payload-in-project.d.ts +1 -1
- package/dist/lib/update-payload-in-project.d.ts.map +1 -1
- package/dist/lib/update-payload-in-project.js +6 -5
- package/dist/lib/update-payload-in-project.js.map +1 -1
- package/dist/lib/wrap-next-config.d.ts.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -5
- package/dist/main.js.map +1 -1
- package/dist/template/src/app/(frontend)/page.tsx +5 -2
- package/dist/template/src/app/(payload)/admin/importMap.js +15 -2
- package/dist/template/src/app/(payload)/layout.tsx +7 -1
- package/dist/template/src/collections/Folders.ts +16 -0
- package/dist/template/src/collections/Media.ts +4 -0
- package/dist/template/src/collections/Tags.ts +16 -0
- package/dist/template/src/collections/Users.ts +1 -0
- package/dist/template/src/payload-types.ts +63 -9
- package/dist/template/src/payload.config.ts +10 -2
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/casing.d.ts.map +1 -1
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +1 -0
- package/dist/utils/messages.js.map +1 -1
- package/dist/utils/resolvePackageVersion.d.ts +29 -0
- package/dist/utils/resolvePackageVersion.d.ts.map +1 -0
- package/dist/utils/resolvePackageVersion.js +41 -0
- package/dist/utils/resolvePackageVersion.js.map +1 -0
- package/dist/utils/resolvePackageVersion.spec.js +77 -0
- package/dist/utils/resolvePackageVersion.spec.js.map +1 -0
- package/package.json +2 -2
- package/dist/utils/getLatestPackageVersion.d.ts +0 -17
- package/dist/utils/getLatestPackageVersion.d.ts.map +0 -1
- package/dist/utils/getLatestPackageVersion.js +0 -20
- package/dist/utils/getLatestPackageVersion.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import type { CompilerOptions } from 'typescript'\n\nimport * as p from '@clack/prompts'\nimport { parse, stringify } from 'comment-json'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\nimport { promisify } from 'util'\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 { installPackages } from './install-packages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\nconst readFile = promisify(fs.readFile)\nconst writeFile = promisify(fs.writeFile)\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'>\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(projectDir, packageManager, dbType)\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 // Add `@payload-config` to tsconfig.json `paths`\n await addPayloadConfigToTsConfig(projectDir, isSrcDir)\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) {\n const tsConfigPath = path.resolve(projectDir, 'tsconfig.json')\n\n // Check if tsconfig.json exists\n if (!fs.existsSync(tsConfigPath)) {\n warning(`Could not find tsconfig.json to add @payload-config path.`)\n return\n }\n const userTsConfigContent = await readFile(tsConfigPath, {\n encoding: 'utf8',\n })\n const userTsConfig = parse(userTsConfigContent) as {\n compilerOptions?: CompilerOptions\n }\n\n const hasBaseUrl =\n userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.'\n const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './'\n\n if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {\n userTsConfig.compilerOptions = {}\n }\n\n if (\n !userTsConfig.compilerOptions?.paths?.['@payload-config'] &&\n userTsConfig.compilerOptions?.paths\n ) {\n userTsConfig.compilerOptions.paths = {\n ...(userTsConfig.compilerOptions.paths || {}),\n '@payload-config': [`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`],\n }\n await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), { encoding: 'utf8' })\n }\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(projectDir: string, packageManager: PackageManager, dbType: DbType) {\n const { getDbPackageName } = await import('./ast/adapter-config.js')\n\n const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@latest`,\n )\n\n packagesToInstall.push(`${getDbPackageName(dbType)}@latest`)\n\n // Match graphql version of @payloadcms/next\n packagesToInstall.push('graphql@^16.8.1')\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","parse","stringify","fs","fse","globby","fileURLToPath","path","promisify","copyRecursiveSync","debug","origDebug","warning","moveMessage","installPackages","wrapNextConfig","readFile","writeFile","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","addPayloadConfigToTsConfig","tsConfigPath","existsSync","userTsConfigContent","encoding","userTsConfig","hasBaseUrl","compilerOptions","baseUrl","paths","nextConfigPath","logDebug","message","templateFilesPath","endsWith","templateSrcDir","payloadConfigPath","getDbPackageName","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 type { CompilerOptions } from 'typescript'\n\nimport * as p from '@clack/prompts'\nimport { parse, stringify } from 'comment-json'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\nimport { promisify } from 'util'\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 { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\nconst readFile = promisify(fs.readFile)\nconst writeFile = promisify(fs.writeFile)\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 // Add `@payload-config` to tsconfig.json `paths`\n await addPayloadConfigToTsConfig(projectDir, isSrcDir)\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) {\n const tsConfigPath = path.resolve(projectDir, 'tsconfig.json')\n\n // Check if tsconfig.json exists\n if (!fs.existsSync(tsConfigPath)) {\n warning(`Could not find tsconfig.json to add @payload-config path.`)\n return\n }\n const userTsConfigContent = await readFile(tsConfigPath, {\n encoding: 'utf8',\n })\n const userTsConfig = parse(userTsConfigContent) as {\n compilerOptions?: CompilerOptions\n }\n\n const hasBaseUrl =\n userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.'\n const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './'\n\n if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {\n userTsConfig.compilerOptions = {}\n }\n\n if (\n !userTsConfig.compilerOptions?.paths?.['@payload-config'] &&\n userTsConfig.compilerOptions?.paths\n ) {\n userTsConfig.compilerOptions.paths = {\n ...(userTsConfig.compilerOptions.paths || {}),\n '@payload-config': [`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`],\n }\n await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), { encoding: 'utf8' })\n }\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","parse","stringify","fs","fse","globby","fileURLToPath","path","promisify","copyRecursiveSync","debug","origDebug","warning","moveMessage","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","ensurePnpmBuildApprovals","installPackages","wrapNextConfig","readFile","writeFile","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","addPayloadConfigToTsConfig","tsConfigPath","existsSync","userTsConfigContent","encoding","userTsConfig","hasBaseUrl","compilerOptions","baseUrl","paths","nextConfigPath","logDebug","message","templateFilesPath","endsWith","templateSrcDir","payloadConfigPath","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,5 +1,5 @@
|
|
|
1
1
|
import type { NextAppDetails } from '../types.js';
|
|
2
|
-
export declare function updatePayloadInProject(appDetails: NextAppDetails): Promise<{
|
|
2
|
+
export declare function updatePayloadInProject(appDetails: NextAppDetails, versionOrTag?: string): Promise<{
|
|
3
3
|
message: string;
|
|
4
4
|
success: boolean;
|
|
5
5
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-payload-in-project.d.ts","sourceRoot":"","sources":["../../src/lib/update-payload-in-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQjD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"update-payload-in-project.d.ts","sourceRoot":"","sources":["../../src/lib/update-payload-in-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQjD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,cAAc,EAC1B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAqEhD"}
|
|
@@ -4,11 +4,11 @@ import path from 'path';
|
|
|
4
4
|
const filename = fileURLToPath(import.meta.url);
|
|
5
5
|
const dirname = path.dirname(filename);
|
|
6
6
|
import { copyRecursiveSync } from '../utils/copy-recursive-sync.js';
|
|
7
|
-
import { getLatestPackageVersion } from '../utils/getLatestPackageVersion.js';
|
|
8
7
|
import { info } from '../utils/log.js';
|
|
8
|
+
import { resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
9
9
|
import { getPackageManager } from './get-package-manager.js';
|
|
10
10
|
import { installPackages } from './install-packages.js';
|
|
11
|
-
export async function updatePayloadInProject(appDetails) {
|
|
11
|
+
export async function updatePayloadInProject(appDetails, versionOrTag) {
|
|
12
12
|
if (!appDetails.nextConfigPath) {
|
|
13
13
|
return {
|
|
14
14
|
message: 'No Next.js config found',
|
|
@@ -27,9 +27,10 @@ export async function updatePayloadInProject(appDetails) {
|
|
|
27
27
|
const packageManager = await getPackageManager({
|
|
28
28
|
projectDir
|
|
29
29
|
});
|
|
30
|
-
//
|
|
31
|
-
const latestPayloadVersion = await
|
|
32
|
-
packageName: 'payload'
|
|
30
|
+
// Resolve the requested Payload version (dist-tag or explicit version)
|
|
31
|
+
const latestPayloadVersion = await resolvePackageVersion({
|
|
32
|
+
packageName: 'payload',
|
|
33
|
+
versionOrTag
|
|
33
34
|
});
|
|
34
35
|
if (payloadVersion === latestPayloadVersion) {
|
|
35
36
|
return {
|
|
@@ -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\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport type { NextAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport {
|
|
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\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport type { NextAppDetails } 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'\n\nexport async function updatePayloadInProject(\n appDetails: NextAppDetails,\n versionOrTag?: string,\n): Promise<{ message: string; success: boolean }> {\n if (!appDetails.nextConfigPath) {\n return { message: 'No Next.js config found', success: false }\n }\n\n const projectDir = path.dirname(appDetails.nextConfigPath)\n\n const packageObj = (await fse.readJson(path.resolve(projectDir, 'package.json'))) as {\n dependencies?: Record<string, string>\n }\n if (!packageObj?.dependencies) {\n throw new Error('No package.json found in this project')\n }\n\n const payloadVersion = packageObj.dependencies?.payload\n if (!payloadVersion) {\n throw new Error('Payload is not installed in this project')\n }\n\n const packageManager = await getPackageManager({ projectDir })\n\n // Resolve the requested Payload version (dist-tag or explicit version)\n const latestPayloadVersion = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n if (payloadVersion === latestPayloadVersion) {\n return { message: `Payload v${payloadVersion} is already up to date.`, success: true }\n }\n\n // Update all existing Payload packages\n const payloadPackages = Object.keys(packageObj.dependencies).filter((dep) =>\n dep.startsWith('@payloadcms/'),\n )\n\n const packageNames = ['payload', ...payloadPackages]\n\n const packagesToUpdate = packageNames.map((pkg) => `${pkg}@${latestPayloadVersion}`)\n\n info(`Using ${packageManager}.\\n`)\n info(\n `Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\\n\\n${packageNames.map((p) => ` - ${p}`).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 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\n copyRecursiveSync(\n templateSrcDir,\n path.resolve(projectDir, appDetails.isSrcDir ? 'src/app' : 'app', '(payload)'),\n ['custom.scss$'], // Do not overwrite user's custom.scss\n )\n\n return { message: 'Payload updated successfully.', success: true }\n}\n"],"names":["fse","fileURLToPath","path","filename","url","dirname","copyRecursiveSync","info","resolvePackageVersion","getPackageManager","installPackages","updatePayloadInProject","appDetails","versionOrTag","nextConfigPath","message","success","projectDir","packageObj","readJson","resolve","dependencies","Error","payloadVersion","payload","packageManager","latestPayloadVersion","packageName","payloadPackages","Object","keys","filter","dep","startsWith","packageNames","packagesToUpdate","map","pkg","length","p","join","updateSuccess","packagesToInstall","templateFilesPath","process","env","JEST_WORKER_ID","undefined","templateSrcDir","isSrcDir"],"mappings":"AAAA,OAAOA,SAAS,WAAU;AAC1B,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,UAAU,OAAM;AAEvB,MAAMC,WAAWF,cAAc,YAAYG,GAAG;AAC9C,MAAMC,UAAUH,KAAKG,OAAO,CAACF;AAI7B,SAASG,iBAAiB,QAAQ,kCAAiC;AACnE,SAASC,IAAI,QAAQ,kBAAiB;AACtC,SAASC,qBAAqB,QAAQ,oCAAmC;AACzE,SAASC,iBAAiB,QAAQ,2BAA0B;AAC5D,SAASC,eAAe,QAAQ,wBAAuB;AAEvD,OAAO,eAAeC,uBACpBC,UAA0B,EAC1BC,YAAqB;IAErB,IAAI,CAACD,WAAWE,cAAc,EAAE;QAC9B,OAAO;YAAEC,SAAS;YAA2BC,SAAS;QAAM;IAC9D;IAEA,MAAMC,aAAaf,KAAKG,OAAO,CAACO,WAAWE,cAAc;IAEzD,MAAMI,aAAc,MAAMlB,IAAImB,QAAQ,CAACjB,KAAKkB,OAAO,CAACH,YAAY;IAGhE,IAAI,CAACC,YAAYG,cAAc;QAC7B,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,iBAAiBL,WAAWG,YAAY,EAAEG;IAChD,IAAI,CAACD,gBAAgB;QACnB,MAAM,IAAID,MAAM;IAClB;IAEA,MAAMG,iBAAiB,MAAMhB,kBAAkB;QAAEQ;IAAW;IAE5D,uEAAuE;IACvE,MAAMS,uBAAuB,MAAMlB,sBAAsB;QAAEmB,aAAa;QAAWd;IAAa;IAEhG,IAAIU,mBAAmBG,sBAAsB;QAC3C,OAAO;YAAEX,SAAS,CAAC,SAAS,EAAEQ,eAAe,uBAAuB,CAAC;YAAEP,SAAS;QAAK;IACvF;IAEA,uCAAuC;IACvC,MAAMY,kBAAkBC,OAAOC,IAAI,CAACZ,WAAWG,YAAY,EAAEU,MAAM,CAAC,CAACC,MACnEA,IAAIC,UAAU,CAAC;IAGjB,MAAMC,eAAe;QAAC;WAAcN;KAAgB;IAEpD,MAAMO,mBAAmBD,aAAaE,GAAG,CAAC,CAACC,MAAQ,GAAGA,IAAI,CAAC,EAAEX,sBAAsB;IAEnFnB,KAAK,CAAC,MAAM,EAAEkB,eAAe,GAAG,CAAC;IACjClB,KACE,CAAC,SAAS,EAAE4B,iBAAiBG,MAAM,CAAC,sBAAsB,EAAEZ,qBAAqB,OAAO,EAAEQ,aAAaE,GAAG,CAAC,CAACG,IAAM,CAAC,IAAI,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO;IAG5I,MAAM,EAAExB,SAASyB,aAAa,EAAE,GAAG,MAAM/B,gBAAgB;QACvDe;QACAiB,mBAAmBP;QACnBlB;IACF;IAEA,IAAI,CAACwB,eAAe;QAClB,MAAM,IAAInB,MAAM;IAClB;IACAf,KAAK;IAELA,KAAK,CAAC,iCAAiC,CAAC;IAExC,MAAMoC,oBACJC,QAAQC,GAAG,CAACC,cAAc,KAAKC,YAC3B7C,KAAKkB,OAAO,CAACf,SAAS,iCACtBH,KAAKkB,OAAO,CAACf,SAAS,SAAS;IAErC,MAAM2C,iBAAiB9C,KAAKkB,OAAO,CAACuB,mBAAmB;IAEvDrC,kBACE0C,gBACA9C,KAAKkB,OAAO,CAACH,YAAYL,WAAWqC,QAAQ,GAAG,YAAY,OAAO,cAClE;QAAC;KAAe;IAGlB,OAAO;QAAElC,SAAS;QAAiCC,SAAS;IAAK;AACnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap-next-config.d.ts","sourceRoot":"","sources":["../../src/lib/wrap-next-config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"wrap-next-config.d.ts","sourceRoot":"","sources":["../../src/lib/wrap-next-config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,oBAAoB;IAC/B,GAAG;IACH,GAAG;IACH,EAAE;CACH,CAAA;AAED,eAAO,MAAM,cAAc,SAAgB;IACzC,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,cAAc,CAAA;CAC/B,kBAaA,CAAA;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC;IAAE,qBAAqB,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA4H9D"}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AA4BzC,qBAAa,IAAI;IACf,IAAI,EAAE,OAAO,CAAA;IAEb,cAgDC;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA8N1B;CACF"}
|
package/dist/main.js
CHANGED
|
@@ -17,9 +17,9 @@ import { selectAgent } from './lib/select-agent.js';
|
|
|
17
17
|
import { selectDb } from './lib/select-db.js';
|
|
18
18
|
import { getValidTemplates, validateTemplate } from './lib/templates.js';
|
|
19
19
|
import { updatePayloadInProject } from './lib/update-payload-in-project.js';
|
|
20
|
-
import { getLatestPackageVersion } from './utils/getLatestPackageVersion.js';
|
|
21
20
|
import { debug, error, info } from './utils/log.js';
|
|
22
21
|
import { feedbackOutro, helpMessage, moveMessage, successfulNextInit, successMessage } from './utils/messages.js';
|
|
22
|
+
import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from './utils/resolvePackageVersion.js';
|
|
23
23
|
export class Main {
|
|
24
24
|
args;
|
|
25
25
|
constructor(){
|
|
@@ -34,9 +34,9 @@ export class Main {
|
|
|
34
34
|
'--help': Boolean,
|
|
35
35
|
'--local-template': String,
|
|
36
36
|
'--name': String,
|
|
37
|
+
'--payload-version': String,
|
|
37
38
|
'--secret': String,
|
|
38
39
|
'--template': String,
|
|
39
|
-
'--version': String,
|
|
40
40
|
// Next.js
|
|
41
41
|
'--init-next': Boolean,
|
|
42
42
|
// Agent
|
|
@@ -71,9 +71,10 @@ export class Main {
|
|
|
71
71
|
if (debugFlag) {
|
|
72
72
|
process.env.DEBUG = 'true';
|
|
73
73
|
}
|
|
74
|
-
const LATEST_VERSION = await
|
|
74
|
+
const LATEST_VERSION = await resolvePackageVersion({
|
|
75
75
|
debug: debugFlag,
|
|
76
|
-
packageName: 'payload'
|
|
76
|
+
packageName: 'payload',
|
|
77
|
+
versionOrTag: this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG
|
|
77
78
|
});
|
|
78
79
|
if (this.args['--help']) {
|
|
79
80
|
helpMessage();
|
|
@@ -99,7 +100,7 @@ export class Main {
|
|
|
99
100
|
message: chalk.bold(`Upgrade Payload in this project?`)
|
|
100
101
|
});
|
|
101
102
|
if (!p.isCancel(shouldUpdate) && shouldUpdate) {
|
|
102
|
-
const { message, success: updateSuccess } = await updatePayloadInProject(nextAppDetails);
|
|
103
|
+
const { message, success: updateSuccess } = await updatePayloadInProject(nextAppDetails, this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG);
|
|
103
104
|
if (updateSuccess) {
|
|
104
105
|
info(message);
|
|
105
106
|
} else {
|
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 { CliArgs } 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 { manageEnvFiles } from './lib/manage-env-files.js'\nimport { parseProjectName } from './lib/parse-project-name.js'\nimport { parseTemplate } from './lib/parse-template.js'\nimport { selectAgent } from './lib/select-agent.js'\nimport { selectDb } from './lib/select-db.js'\nimport { getValidTemplates, validateTemplate } from './lib/templates.js'\nimport { updatePayloadInProject } from './lib/update-payload-in-project.js'\nimport { getLatestPackageVersion } from './utils/getLatestPackageVersion.js'\nimport { debug, error, info } from './utils/log.js'\nimport {\n feedbackOutro,\n helpMessage,\n moveMessage,\n successfulNextInit,\n successMessage,\n} from './utils/messages.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 '--secret': String,\n '--template': String,\n '--version': String, // Allows overriding the installed Payload version instead of installing the latest\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 '-a': '--agent',\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 getLatestPackageVersion({\n debug: debugFlag,\n packageName: 'payload',\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 // Detect if inside Next.js project\n const nextAppDetails = await getNextAppDetails(process.cwd())\n const {\n hasTopLevelLayout,\n isPayloadInstalled,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextVersion,\n } = nextAppDetails\n\n if (nextConfigPath && !isSupportedNextVersion) {\n p.log.warn(\n `Next.js v${nextVersion} is unsupported. Next.js >= 15 is required to use Payload.`,\n )\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n // Upgrade Payload in existing project\n if (isPayloadInstalled && nextConfigPath) {\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 { message, success: updateSuccess } = await updatePayloadInProject(nextAppDetails)\n if (updateSuccess) {\n info(message)\n } else {\n error(message)\n }\n }\n\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n if (nextConfigPath) {\n this.args['--name'] = slugify(path.basename(path.dirname(nextConfigPath)))\n }\n\n const projectName = await parseProjectName(this.args)\n const projectDir = nextConfigPath\n ? path.dirname(nextConfigPath)\n : path.resolve(process.cwd(), slugify(projectName))\n\n const packageManager = await getPackageManager({ cliArgs: this.args, projectDir })\n\n if (nextConfigPath) {\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,\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 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 const agentType = await selectAgent({ cliArgs: this.args })\n\n await createProject({\n agentType,\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 const agentType = await selectAgent({ cliArgs: this.args })\n await createProject({\n agentType,\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 const agentType = await selectAgent({ cliArgs: this.args })\n\n await createProject({\n agentType,\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"],"names":["p","slugify","arg","chalk","figures","path","configurePayloadConfig","createProject","parseExample","generateSecret","getPackageManager","getNextAppDetails","initNext","manageEnvFiles","parseProjectName","parseTemplate","selectAgent","selectDb","getValidTemplates","validateTemplate","updatePayloadInProject","getLatestPackageVersion","debug","error","info","feedbackOutro","helpMessage","moveMessage","successfulNextInit","successMessage","Main","args","String","Boolean","permissive","init","debugFlag","process","env","DEBUG","LATEST_VERSION","packageName","exit","console","log","intro","bgCyan","black","note","nextAppDetails","cwd","hasTopLevelLayout","isPayloadInstalled","isSupportedNextVersion","nextAppDir","nextConfigPath","nextVersion","warn","outro","shouldUpdate","confirm","initialValue","message","bold","isCancel","success","updateSuccess","basename","dirname","projectName","projectDir","resolve","packageManager","cliArgs","step","bgBlack","triangleUp","proceed","green","dbDetails","result","dbType","type","projectDirOrConfigPath","payloadConfigPath","databaseType","databaseUri","dbUri","payloadSecret","bgGreen","templateArg","valid","templateName","exampleArg","example","name","branch","agentType","validTemplates","template","err","Error"],"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 { CliArgs } 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 { manageEnvFiles } from './lib/manage-env-files.js'\nimport { parseProjectName } from './lib/parse-project-name.js'\nimport { parseTemplate } from './lib/parse-template.js'\nimport { selectAgent } from './lib/select-agent.js'\nimport { selectDb } from './lib/select-db.js'\nimport { getValidTemplates, validateTemplate } from './lib/templates.js'\nimport { updatePayloadInProject } 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 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 '-a': '--agent',\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 // Detect if inside Next.js project\n const nextAppDetails = await getNextAppDetails(process.cwd())\n const {\n hasTopLevelLayout,\n isPayloadInstalled,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextVersion,\n } = nextAppDetails\n\n if (nextConfigPath && !isSupportedNextVersion) {\n p.log.warn(\n `Next.js v${nextVersion} is unsupported. Next.js >= 15 is required to use Payload.`,\n )\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n // Upgrade Payload in existing project\n if (isPayloadInstalled && nextConfigPath) {\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 { message, success: updateSuccess } = await updatePayloadInProject(\n nextAppDetails,\n this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n )\n if (updateSuccess) {\n info(message)\n } else {\n error(message)\n }\n }\n\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n if (nextConfigPath) {\n this.args['--name'] = slugify(path.basename(path.dirname(nextConfigPath)))\n }\n\n const projectName = await parseProjectName(this.args)\n const projectDir = nextConfigPath\n ? path.dirname(nextConfigPath)\n : path.resolve(process.cwd(), slugify(projectName))\n\n const packageManager = await getPackageManager({ cliArgs: this.args, projectDir })\n\n if (nextConfigPath) {\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,\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 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 const agentType = await selectAgent({ cliArgs: this.args })\n\n await createProject({\n agentType,\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 const agentType = await selectAgent({ cliArgs: this.args })\n await createProject({\n agentType,\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 const agentType = await selectAgent({ cliArgs: this.args })\n\n await createProject({\n agentType,\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"],"names":["p","slugify","arg","chalk","figures","path","configurePayloadConfig","createProject","parseExample","generateSecret","getPackageManager","getNextAppDetails","initNext","manageEnvFiles","parseProjectName","parseTemplate","selectAgent","selectDb","getValidTemplates","validateTemplate","updatePayloadInProject","debug","error","info","feedbackOutro","helpMessage","moveMessage","successfulNextInit","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","nextAppDetails","cwd","hasTopLevelLayout","isPayloadInstalled","isSupportedNextVersion","nextAppDir","nextConfigPath","nextVersion","warn","outro","shouldUpdate","confirm","initialValue","message","bold","isCancel","success","updateSuccess","basename","dirname","projectName","projectDir","resolve","packageManager","cliArgs","step","bgBlack","triangleUp","proceed","green","dbDetails","result","dbType","type","projectDirOrConfigPath","payloadConfigPath","databaseType","databaseUri","dbUri","payloadSecret","bgGreen","templateArg","valid","templateName","exampleArg","example","name","branch","agentType","validTemplates","template","err","Error"],"mappings":"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"}
|
|
@@ -27,8 +27,11 @@ export default async function HomePage() {
|
|
|
27
27
|
width={65}
|
|
28
28
|
/>
|
|
29
29
|
</picture>
|
|
30
|
-
{!user
|
|
31
|
-
|
|
30
|
+
{!user || !('email' in user) ? (
|
|
31
|
+
<h1>Welcome to your new project.</h1>
|
|
32
|
+
) : (
|
|
33
|
+
<h1>Welcome back, {user.email}</h1>
|
|
34
|
+
)}
|
|
32
35
|
<div className="links">
|
|
33
36
|
<a
|
|
34
37
|
className="admin"
|
|
@@ -1,6 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NullField as NullField_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui'
|
|
2
|
+
import { HierarchyField as HierarchyField_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc'
|
|
3
|
+
import { HierarchyButton as HierarchyButton_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc'
|
|
4
|
+
import { FolderIcon as FolderIcon_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui'
|
|
5
|
+
import { HierarchySidebarTabServer as HierarchySidebarTabServer_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc'
|
|
6
|
+
import { TagIcon as TagIcon_3817bf644402e67bfe6577f60ef982de } from '@payloadcms/ui'
|
|
7
|
+
import { CollectionCards as CollectionCards_ab83ff7e88da8d3530831f296ec4756a } from '@payloadcms/ui/rsc'
|
|
2
8
|
|
|
3
9
|
/** @type import('payload').ImportMap */
|
|
4
10
|
export const importMap = {
|
|
5
|
-
'@payloadcms/
|
|
11
|
+
'@payloadcms/ui#NullField': NullField_3817bf644402e67bfe6577f60ef982de,
|
|
12
|
+
'@payloadcms/ui/rsc#HierarchyField': HierarchyField_ab83ff7e88da8d3530831f296ec4756a,
|
|
13
|
+
'@payloadcms/ui/rsc#HierarchyButton': HierarchyButton_ab83ff7e88da8d3530831f296ec4756a,
|
|
14
|
+
'@payloadcms/ui#FolderIcon': FolderIcon_3817bf644402e67bfe6577f60ef982de,
|
|
15
|
+
'@payloadcms/ui/rsc#HierarchySidebarTabServer':
|
|
16
|
+
HierarchySidebarTabServer_ab83ff7e88da8d3530831f296ec4756a,
|
|
17
|
+
'@payloadcms/ui#TagIcon': TagIcon_3817bf644402e67bfe6577f60ef982de,
|
|
18
|
+
'@payloadcms/ui/rsc#CollectionCards': CollectionCards_ab83ff7e88da8d3530831f296ec4756a,
|
|
6
19
|
}
|
|
@@ -3,12 +3,18 @@
|
|
|
3
3
|
import config from '@payload-config'
|
|
4
4
|
import '@payloadcms/next/css'
|
|
5
5
|
import type { ServerFunctionClient } from 'payload'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
generatePayloadViewport,
|
|
8
|
+
handleServerFunctions,
|
|
9
|
+
RootLayout,
|
|
10
|
+
} from '@payloadcms/next/layouts'
|
|
7
11
|
import React from 'react'
|
|
8
12
|
|
|
9
13
|
import { importMap } from './admin/importMap.js'
|
|
10
14
|
import './custom.scss'
|
|
11
15
|
|
|
16
|
+
export const generateViewport = generatePayloadViewport
|
|
17
|
+
|
|
12
18
|
type Args = {
|
|
13
19
|
children: React.ReactNode
|
|
14
20
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CollectionConfig } from 'payload'
|
|
2
|
+
|
|
3
|
+
export const Folders: CollectionConfig = {
|
|
4
|
+
slug: 'folders',
|
|
5
|
+
admin: {
|
|
6
|
+
useAsTitle: 'name',
|
|
7
|
+
},
|
|
8
|
+
folders: true,
|
|
9
|
+
fields: [
|
|
10
|
+
{
|
|
11
|
+
name: 'name',
|
|
12
|
+
type: 'text',
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { CollectionConfig } from 'payload'
|
|
2
2
|
|
|
3
|
+
import { createFolderField, createTagField } from 'payload'
|
|
4
|
+
|
|
3
5
|
export const Media: CollectionConfig = {
|
|
4
6
|
slug: 'media',
|
|
5
7
|
access: {
|
|
@@ -11,6 +13,8 @@ export const Media: CollectionConfig = {
|
|
|
11
13
|
type: 'text',
|
|
12
14
|
required: true,
|
|
13
15
|
},
|
|
16
|
+
createFolderField({ relationTo: 'folders' }),
|
|
17
|
+
createTagField({ relationTo: 'tags' }),
|
|
14
18
|
],
|
|
15
19
|
upload: true,
|
|
16
20
|
}
|
|
@@ -69,6 +69,8 @@ export interface Config {
|
|
|
69
69
|
collections: {
|
|
70
70
|
users: User;
|
|
71
71
|
media: Media;
|
|
72
|
+
folders: Folder;
|
|
73
|
+
tags: Tag;
|
|
72
74
|
'payload-kv': PayloadKv;
|
|
73
75
|
'payload-locked-documents': PayloadLockedDocument;
|
|
74
76
|
'payload-preferences': PayloadPreference;
|
|
@@ -78,6 +80,8 @@ export interface Config {
|
|
|
78
80
|
collectionsSelect: {
|
|
79
81
|
users: UsersSelect<false> | UsersSelect<true>;
|
|
80
82
|
media: MediaSelect<false> | MediaSelect<true>;
|
|
83
|
+
folders: FoldersSelect<false> | FoldersSelect<true>;
|
|
84
|
+
tags: TagsSelect<false> | TagsSelect<true>;
|
|
81
85
|
'payload-kv': PayloadKvSelect<false> | PayloadKvSelect<true>;
|
|
82
86
|
'payload-locked-documents': PayloadLockedDocumentsSelect<false> | PayloadLockedDocumentsSelect<true>;
|
|
83
87
|
'payload-preferences': PayloadPreferencesSelect<false> | PayloadPreferencesSelect<true>;
|
|
@@ -86,10 +90,10 @@ export interface Config {
|
|
|
86
90
|
db: {
|
|
87
91
|
defaultIDType: string;
|
|
88
92
|
};
|
|
89
|
-
fallbackLocale: null;
|
|
93
|
+
fallbackLocale: ('false' | 'none' | 'null') | false | null | 'en' | 'en'[];
|
|
90
94
|
globals: {};
|
|
91
95
|
globalsSelect: {};
|
|
92
|
-
locale:
|
|
96
|
+
locale: 'en';
|
|
93
97
|
widgets: {
|
|
94
98
|
collections: CollectionsWidget;
|
|
95
99
|
};
|
|
@@ -117,10 +121,6 @@ export interface UserAuthOperations {
|
|
|
117
121
|
password: string;
|
|
118
122
|
};
|
|
119
123
|
}
|
|
120
|
-
/**
|
|
121
|
-
* This interface was referenced by `Config`'s JSON-Schema
|
|
122
|
-
* via the `definition` "users".
|
|
123
|
-
*/
|
|
124
124
|
export interface User {
|
|
125
125
|
id: string;
|
|
126
126
|
updatedAt: string;
|
|
@@ -149,6 +149,8 @@ export interface User {
|
|
|
149
149
|
export interface Media {
|
|
150
150
|
id: string;
|
|
151
151
|
alt: string;
|
|
152
|
+
_h_folders?: (string | null) | Folder;
|
|
153
|
+
_h_tags?: (string | Tag)[] | null;
|
|
152
154
|
updatedAt: string;
|
|
153
155
|
createdAt: string;
|
|
154
156
|
url?: string | null;
|
|
@@ -163,8 +165,30 @@ export interface Media {
|
|
|
163
165
|
}
|
|
164
166
|
/**
|
|
165
167
|
* This interface was referenced by `Config`'s JSON-Schema
|
|
166
|
-
* via the `definition` "
|
|
168
|
+
* via the `definition` "folders".
|
|
167
169
|
*/
|
|
170
|
+
export interface Folder {
|
|
171
|
+
id: string;
|
|
172
|
+
_h_folders?: (string | null) | Folder;
|
|
173
|
+
name: string;
|
|
174
|
+
updatedAt: string;
|
|
175
|
+
createdAt: string;
|
|
176
|
+
_h_slugPath?: string | null;
|
|
177
|
+
_h_titlePath?: string | null;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* This interface was referenced by `Config`'s JSON-Schema
|
|
181
|
+
* via the `definition` "tags".
|
|
182
|
+
*/
|
|
183
|
+
export interface Tag {
|
|
184
|
+
id: string;
|
|
185
|
+
_h_tags?: (string | null) | Tag;
|
|
186
|
+
name: string;
|
|
187
|
+
updatedAt: string;
|
|
188
|
+
createdAt: string;
|
|
189
|
+
_h_slugPath?: string | null;
|
|
190
|
+
_h_titlePath?: string | null;
|
|
191
|
+
}
|
|
168
192
|
export interface PayloadKv {
|
|
169
193
|
id: string;
|
|
170
194
|
key: string;
|
|
@@ -192,6 +216,14 @@ export interface PayloadLockedDocument {
|
|
|
192
216
|
| ({
|
|
193
217
|
relationTo: 'media';
|
|
194
218
|
value: string | Media;
|
|
219
|
+
} | null)
|
|
220
|
+
| ({
|
|
221
|
+
relationTo: 'folders';
|
|
222
|
+
value: string | Folder;
|
|
223
|
+
} | null)
|
|
224
|
+
| ({
|
|
225
|
+
relationTo: 'tags';
|
|
226
|
+
value: string | Tag;
|
|
195
227
|
} | null);
|
|
196
228
|
globalSlug?: string | null;
|
|
197
229
|
user: {
|
|
@@ -263,6 +295,8 @@ export interface UsersSelect<T extends boolean = true> {
|
|
|
263
295
|
*/
|
|
264
296
|
export interface MediaSelect<T extends boolean = true> {
|
|
265
297
|
alt?: T;
|
|
298
|
+
_h_folders?: T;
|
|
299
|
+
_h_tags?: T;
|
|
266
300
|
updatedAt?: T;
|
|
267
301
|
createdAt?: T;
|
|
268
302
|
url?: T;
|
|
@@ -277,8 +311,28 @@ export interface MediaSelect<T extends boolean = true> {
|
|
|
277
311
|
}
|
|
278
312
|
/**
|
|
279
313
|
* This interface was referenced by `Config`'s JSON-Schema
|
|
280
|
-
* via the `definition` "
|
|
314
|
+
* via the `definition` "folders_select".
|
|
281
315
|
*/
|
|
316
|
+
export interface FoldersSelect<T extends boolean = true> {
|
|
317
|
+
_h_folders?: T;
|
|
318
|
+
name?: T;
|
|
319
|
+
updatedAt?: T;
|
|
320
|
+
createdAt?: T;
|
|
321
|
+
_h_slugPath?: T;
|
|
322
|
+
_h_titlePath?: T;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* This interface was referenced by `Config`'s JSON-Schema
|
|
326
|
+
* via the `definition` "tags_select".
|
|
327
|
+
*/
|
|
328
|
+
export interface TagsSelect<T extends boolean = true> {
|
|
329
|
+
_h_tags?: T;
|
|
330
|
+
name?: T;
|
|
331
|
+
updatedAt?: T;
|
|
332
|
+
createdAt?: T;
|
|
333
|
+
_h_slugPath?: T;
|
|
334
|
+
_h_titlePath?: T;
|
|
335
|
+
}
|
|
282
336
|
export interface PayloadKvSelect<T extends boolean = true> {
|
|
283
337
|
key?: T;
|
|
284
338
|
data?: T;
|
|
@@ -336,4 +390,4 @@ export interface Auth {
|
|
|
336
390
|
|
|
337
391
|
declare module 'payload' {
|
|
338
392
|
export interface GeneratedTypes extends Config {}
|
|
339
|
-
}
|
|
393
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { mongooseAdapter } from '@payloadcms/db-mongodb'
|
|
2
|
+
import { mcpPlugin } from '@payloadcms/plugin-mcp'
|
|
2
3
|
import { lexicalEditor } from '@payloadcms/richtext-lexical'
|
|
3
4
|
import path from 'path'
|
|
4
5
|
import { buildConfig } from 'payload'
|
|
@@ -7,6 +8,8 @@ import sharp from 'sharp'
|
|
|
7
8
|
|
|
8
9
|
import { Users } from './collections/Users'
|
|
9
10
|
import { Media } from './collections/Media'
|
|
11
|
+
import { Folders } from './collections/Folders'
|
|
12
|
+
import { Tags } from './collections/Tags'
|
|
10
13
|
|
|
11
14
|
const filename = fileURLToPath(import.meta.url)
|
|
12
15
|
const dirname = path.dirname(filename)
|
|
@@ -18,7 +21,7 @@ export default buildConfig({
|
|
|
18
21
|
baseDir: path.resolve(dirname),
|
|
19
22
|
},
|
|
20
23
|
},
|
|
21
|
-
collections: [Users, Media],
|
|
24
|
+
collections: [Users, Media, Folders, Tags],
|
|
22
25
|
editor: lexicalEditor(),
|
|
23
26
|
secret: process.env.PAYLOAD_SECRET || '',
|
|
24
27
|
typescript: {
|
|
@@ -28,5 +31,10 @@ export default buildConfig({
|
|
|
28
31
|
url: process.env.DATABASE_URL || '',
|
|
29
32
|
}),
|
|
30
33
|
sharp,
|
|
31
|
-
|
|
34
|
+
localization: {
|
|
35
|
+
locales: ['en'],
|
|
36
|
+
fallback: true,
|
|
37
|
+
defaultLocale: 'en',
|
|
38
|
+
},
|
|
39
|
+
plugins: [mcpPlugin({})],
|
|
32
40
|
})
|
package/dist/types.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export interface Args extends arg.Spec {
|
|
|
18
18
|
'--no-agent': BooleanConstructor;
|
|
19
19
|
'--no-deps': BooleanConstructor;
|
|
20
20
|
'--no-git': BooleanConstructor;
|
|
21
|
+
'--payload-version': StringConstructor;
|
|
21
22
|
'--secret': StringConstructor;
|
|
22
23
|
'--template': StringConstructor;
|
|
23
24
|
'--use-bun': BooleanConstructor;
|