create-payload-app 4.0.0-internal.e7d4ebc → 4.0.0-internal.f11981a
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/README.md +5 -0
- package/dist/commands.d.ts +4 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +5 -0
- package/dist/commands.js.map +1 -0
- package/dist/lib/ast/package-json.d.ts +9 -0
- package/dist/lib/ast/package-json.d.ts.map +1 -1
- package/dist/lib/ast/package-json.js +34 -8
- package/dist/lib/ast/package-json.js.map +1 -1
- package/dist/lib/ast/package-json.spec.js +73 -1
- package/dist/lib/ast/package-json.spec.js.map +1 -1
- package/dist/lib/configure-payload-tsconfig.d.ts +5 -0
- package/dist/lib/configure-payload-tsconfig.d.ts.map +1 -0
- package/dist/lib/configure-payload-tsconfig.js +26 -0
- package/dist/lib/configure-payload-tsconfig.js.map +1 -0
- package/dist/lib/configure-payload-tsconfig.spec.js +135 -0
- package/dist/lib/configure-payload-tsconfig.spec.js.map +1 -0
- package/dist/lib/create-project.spec.js +9 -0
- package/dist/lib/create-project.spec.js.map +1 -1
- package/dist/lib/init-next.d.ts.map +1 -1
- package/dist/lib/init-next.js +5 -34
- package/dist/lib/init-next.js.map +1 -1
- package/dist/lib/init-tanstack-default-template.spec.js +119 -0
- package/dist/lib/init-tanstack-default-template.spec.js.map +1 -0
- package/dist/lib/init-tanstack.d.ts +18 -0
- package/dist/lib/init-tanstack.d.ts.map +1 -0
- package/dist/lib/init-tanstack.js +150 -0
- package/dist/lib/init-tanstack.js.map +1 -0
- package/dist/lib/init-tanstack.spec.js +394 -0
- package/dist/lib/init-tanstack.spec.js.map +1 -0
- package/dist/lib/tanstack/detect.d.ts +5 -0
- package/dist/lib/tanstack/detect.d.ts.map +1 -0
- package/dist/lib/tanstack/detect.js +131 -0
- package/dist/lib/tanstack/detect.js.map +1 -0
- package/dist/lib/tanstack/detect.spec.js +227 -0
- package/dist/lib/tanstack/detect.spec.js.map +1 -0
- package/dist/lib/tanstack/prepare.d.ts +23 -0
- package/dist/lib/tanstack/prepare.d.ts.map +1 -0
- package/dist/lib/tanstack/prepare.js +114 -0
- package/dist/lib/tanstack/prepare.js.map +1 -0
- package/dist/lib/tanstack/prepare.spec.js +288 -0
- package/dist/lib/tanstack/prepare.spec.js.map +1 -0
- package/dist/lib/tanstack/template-files.d.ts +50 -0
- package/dist/lib/tanstack/template-files.d.ts.map +1 -0
- package/dist/lib/tanstack/template-files.js +64 -0
- package/dist/lib/tanstack/template-files.js.map +1 -0
- package/dist/lib/tanstack/transform-root-route.d.ts +7 -0
- package/dist/lib/tanstack/transform-root-route.d.ts.map +1 -0
- package/dist/lib/tanstack/transform-root-route.js +697 -0
- package/dist/lib/tanstack/transform-root-route.js.map +1 -0
- package/dist/lib/tanstack/transform-root-route.spec.js +448 -0
- package/dist/lib/tanstack/transform-root-route.spec.js.map +1 -0
- package/dist/lib/tanstack/transform-router.d.ts +5 -0
- package/dist/lib/tanstack/transform-router.d.ts.map +1 -0
- package/dist/lib/tanstack/transform-router.js +301 -0
- package/dist/lib/tanstack/transform-router.js.map +1 -0
- package/dist/lib/tanstack/transform-router.spec.js +264 -0
- package/dist/lib/tanstack/transform-router.spec.js.map +1 -0
- package/dist/lib/tanstack/transform-vite-config.d.ts +14 -0
- package/dist/lib/tanstack/transform-vite-config.d.ts.map +1 -0
- package/dist/lib/tanstack/transform-vite-config.js +533 -0
- package/dist/lib/tanstack/transform-vite-config.js.map +1 -0
- package/dist/lib/tanstack/transform-vite-config.spec.js +450 -0
- package/dist/lib/tanstack/transform-vite-config.spec.js.map +1 -0
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +6 -0
- package/dist/lib/templates.js.map +1 -1
- package/dist/lib/update-payload-in-project.d.ts +18 -3
- package/dist/lib/update-payload-in-project.d.ts.map +1 -1
- package/dist/lib/update-payload-in-project.js +93 -18
- package/dist/lib/update-payload-in-project.js.map +1 -1
- package/dist/lib/update-payload-in-project.spec.js +258 -0
- package/dist/lib/update-payload-in-project.spec.js.map +1 -0
- package/dist/main.d.ts +20 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +120 -15
- package/dist/main.js.map +1 -1
- package/dist/main.spec.js +102 -0
- package/dist/main.spec.js.map +1 -0
- package/dist/scripts/pack-template-files.js +18 -0
- package/dist/scripts/pack-template-files.js.map +1 -1
- package/dist/template/src/app/(frontend)/styles.css +1 -1
- package/dist/template/src/app/(payload)/layout.tsx +1 -1
- package/dist/template-tanstack/routes/_payload/admin.$.tsx +8 -0
- package/dist/template-tanstack/routes/_payload/admin.index.tsx +8 -0
- package/dist/template-tanstack/routes/_payload/api.$.ts +10 -0
- package/dist/template-tanstack/routes/_payload/importMap.js +32 -0
- package/dist/template-tanstack/routes/_payload/server.functions.ts +49 -0
- package/dist/template-tanstack/routes/_payload.tsx +13 -0
- package/dist/template-tanstack/src/collections/Folders.ts +16 -0
- package/dist/template-tanstack/src/collections/Media.ts +20 -0
- package/dist/template-tanstack/src/collections/Tags.ts +16 -0
- package/dist/template-tanstack/src/collections/Users.ts +14 -0
- package/dist/template-tanstack/src/payload-foundation.css +10 -0
- package/dist/template-tanstack/src/payload.config.ts +40 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/messages.d.ts +1 -0
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +7 -1
- package/dist/utils/messages.js.map +1 -1
- package/package.json +4 -4
- /package/dist/template/src/app/(payload)/{custom.scss → custom.css} +0 -0
package/dist/lib/init-next.js
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
|
-
import { parse, stringify } from 'comment-json';
|
|
3
2
|
import fs from 'fs';
|
|
4
3
|
import fse from 'fs-extra';
|
|
5
4
|
import globby from 'globby';
|
|
6
5
|
import { fileURLToPath } from 'node:url';
|
|
7
6
|
import path from 'path';
|
|
8
|
-
import { promisify } from 'util';
|
|
9
7
|
import { copyRecursiveSync } from '../utils/copy-recursive-sync.js';
|
|
10
8
|
import { debug as origDebug, warning } from '../utils/log.js';
|
|
11
9
|
import { moveMessage } from '../utils/messages.js';
|
|
12
10
|
import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
11
|
+
import { configurePayloadTsConfig } from './configure-payload-tsconfig.js';
|
|
13
12
|
import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
|
|
14
13
|
import { installPackages } from './install-packages.js';
|
|
15
14
|
import { wrapNextConfig } from './wrap-next-config.js';
|
|
16
|
-
const readFile = promisify(fs.readFile);
|
|
17
|
-
const writeFile = promisify(fs.writeFile);
|
|
18
15
|
const filename = fileURLToPath(import.meta.url);
|
|
19
16
|
const dirname = path.dirname(filename);
|
|
20
17
|
export async function initNext(args) {
|
|
@@ -81,8 +78,10 @@ export async function initNext(args) {
|
|
|
81
78
|
success: false
|
|
82
79
|
};
|
|
83
80
|
}
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
await configurePayloadTsConfig({
|
|
82
|
+
configPath: path.resolve(projectDir, 'tsconfig.json'),
|
|
83
|
+
payloadConfigPath: configurationResult.payloadConfigPath
|
|
84
|
+
});
|
|
86
85
|
installSpinner.stop('Successfully installed Payload and dependencies');
|
|
87
86
|
return {
|
|
88
87
|
...configurationResult,
|
|
@@ -91,34 +90,6 @@ export async function initNext(args) {
|
|
|
91
90
|
success: true
|
|
92
91
|
};
|
|
93
92
|
}
|
|
94
|
-
async function addPayloadConfigToTsConfig(projectDir, isSrcDir) {
|
|
95
|
-
const tsConfigPath = path.resolve(projectDir, 'tsconfig.json');
|
|
96
|
-
// Check if tsconfig.json exists
|
|
97
|
-
if (!fs.existsSync(tsConfigPath)) {
|
|
98
|
-
warning(`Could not find tsconfig.json to add @payload-config path.`);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const userTsConfigContent = await readFile(tsConfigPath, {
|
|
102
|
-
encoding: 'utf8'
|
|
103
|
-
});
|
|
104
|
-
const userTsConfig = parse(userTsConfigContent);
|
|
105
|
-
const hasBaseUrl = userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.';
|
|
106
|
-
const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './';
|
|
107
|
-
if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {
|
|
108
|
-
userTsConfig.compilerOptions = {};
|
|
109
|
-
}
|
|
110
|
-
if (!userTsConfig.compilerOptions?.paths?.['@payload-config'] && userTsConfig.compilerOptions?.paths) {
|
|
111
|
-
userTsConfig.compilerOptions.paths = {
|
|
112
|
-
...userTsConfig.compilerOptions.paths || {},
|
|
113
|
-
'@payload-config': [
|
|
114
|
-
`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`
|
|
115
|
-
]
|
|
116
|
-
};
|
|
117
|
-
await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), {
|
|
118
|
-
encoding: 'utf8'
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
93
|
async function installAndConfigurePayload(args) {
|
|
123
94
|
const { '--debug': debug, nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {}, nextConfigType, projectDir, useDistFiles } = args;
|
|
124
95
|
if (!nextAppDir || !nextConfigPath) {
|
|
@@ -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 {\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
|
+
{"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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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import fse from 'fs-extra';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
6
|
+
import { initTanStack } from './init-tanstack.js';
|
|
7
|
+
const dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const mocks = vi.hoisted(()=>({
|
|
9
|
+
resolvePackageVersion: vi.fn()
|
|
10
|
+
}));
|
|
11
|
+
vi.mock('../utils/resolvePackageVersion.js', async (importOriginal)=>({
|
|
12
|
+
...await importOriginal(),
|
|
13
|
+
resolvePackageVersion: mocks.resolvePackageVersion
|
|
14
|
+
}));
|
|
15
|
+
const routerContent = `import { createRouter } from '@tanstack/react-router'
|
|
16
|
+
|
|
17
|
+
import { routeTree } from './routeTree.gen'
|
|
18
|
+
|
|
19
|
+
export function getRouter() {
|
|
20
|
+
return createRouter({ routeTree })
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
const rootRouteContent = `import { createRootRoute, HeadContent, Scripts } from '@tanstack/react-router'
|
|
24
|
+
import appCss from '../styles.css?url'
|
|
25
|
+
|
|
26
|
+
export const Route = createRootRoute({
|
|
27
|
+
head: () => ({ links: [{ rel: 'stylesheet', href: appCss }] }),
|
|
28
|
+
shellComponent: RootDocument,
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
function RootDocument({ children }: { children: React.ReactNode }) {
|
|
32
|
+
return (
|
|
33
|
+
<html lang="en">
|
|
34
|
+
<head><HeadContent /></head>
|
|
35
|
+
<body>{children}<Scripts /></body>
|
|
36
|
+
</html>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
const viteConfigContent = `import { tanstackStart } from '@tanstack/react-start/plugin/vite'
|
|
41
|
+
import viteReact from '@vitejs/plugin-react'
|
|
42
|
+
import { defineConfig } from 'vite'
|
|
43
|
+
|
|
44
|
+
export default defineConfig({
|
|
45
|
+
plugins: [tanstackStart(), viteReact()],
|
|
46
|
+
})
|
|
47
|
+
`;
|
|
48
|
+
describe('initTanStack default template', ()=>{
|
|
49
|
+
let appDetails;
|
|
50
|
+
let projectDir;
|
|
51
|
+
beforeEach(()=>{
|
|
52
|
+
vi.clearAllMocks();
|
|
53
|
+
mocks.resolvePackageVersion.mockResolvedValue('4.2.0');
|
|
54
|
+
projectDir = fse.mkdtempSync(path.join(os.tmpdir(), 'cpa-init-tanstack-default-'));
|
|
55
|
+
writeFiles({
|
|
56
|
+
files: {
|
|
57
|
+
'package.json': JSON.stringify({
|
|
58
|
+
dependencies: {
|
|
59
|
+
'@tanstack/react-router': '^1.200.0',
|
|
60
|
+
'@tanstack/react-start': '^1.200.0'
|
|
61
|
+
},
|
|
62
|
+
name: 'start-app'
|
|
63
|
+
}),
|
|
64
|
+
'src/router.tsx': routerContent,
|
|
65
|
+
'src/routes/__root.tsx': rootRouteContent,
|
|
66
|
+
'tsconfig.json': '{"compilerOptions":{"baseUrl":"."}}\n',
|
|
67
|
+
'vite.config.ts': viteConfigContent
|
|
68
|
+
},
|
|
69
|
+
root: projectDir
|
|
70
|
+
});
|
|
71
|
+
appDetails = {
|
|
72
|
+
isPayloadInstalled: false,
|
|
73
|
+
kind: 'start',
|
|
74
|
+
projectDir,
|
|
75
|
+
rootRoutePath: path.join(projectDir, 'src/routes/__root.tsx'),
|
|
76
|
+
routerPath: path.join(projectDir, 'src/router.tsx'),
|
|
77
|
+
routesDir: path.join(projectDir, 'src/routes'),
|
|
78
|
+
sourceDir: path.join(projectDir, 'src'),
|
|
79
|
+
viteConfigPath: path.join(projectDir, 'vite.config.ts')
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
afterEach(()=>{
|
|
83
|
+
fse.removeSync(projectDir);
|
|
84
|
+
});
|
|
85
|
+
it('should initialize from the raw source template without a templateRoot override', async ()=>{
|
|
86
|
+
const rawPayloadLayoutPath = path.resolve(dirname, '../../../../templates/blank-tanstack/src/app/_payload.tsx');
|
|
87
|
+
const result = await initTanStack({
|
|
88
|
+
'--no-deps': true,
|
|
89
|
+
appDetails,
|
|
90
|
+
dbType: 'mongodb',
|
|
91
|
+
packageManager: 'pnpm',
|
|
92
|
+
projectDir
|
|
93
|
+
});
|
|
94
|
+
expect(result).toEqual({
|
|
95
|
+
payloadConfigPath: path.join(projectDir, 'src/payload.config.ts'),
|
|
96
|
+
success: true
|
|
97
|
+
});
|
|
98
|
+
expect(fse.readFileSync(path.join(projectDir, 'src/routes/_payload.tsx'), 'utf8')).toBe(fse.readFileSync(rawPayloadLayoutPath, 'utf8'));
|
|
99
|
+
});
|
|
100
|
+
it('should copy a Payload layout whose foundation CSS import does not require a host alias', async ()=>{
|
|
101
|
+
const result = await initTanStack({
|
|
102
|
+
'--no-deps': true,
|
|
103
|
+
'--payload-version': '4.2.0',
|
|
104
|
+
appDetails,
|
|
105
|
+
dbType: 'mongodb',
|
|
106
|
+
packageManager: 'pnpm',
|
|
107
|
+
projectDir
|
|
108
|
+
});
|
|
109
|
+
expect(result.success).toBe(true);
|
|
110
|
+
expect(fse.readFileSync(path.join(projectDir, 'src/routes/_payload.tsx'), 'utf8')).toContain("import '../payload-foundation.css'");
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
function writeFiles({ files, root }) {
|
|
114
|
+
for (const [relativePath, content] of Object.entries(files)){
|
|
115
|
+
fse.outputFileSync(path.join(root, relativePath), content);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=init-tanstack-default-template.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/init-tanstack-default-template.spec.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { TanStackAppDetails } from '../types.js'\n\nimport { initTanStack } from './init-tanstack.js'\n\nconst dirname = path.dirname(fileURLToPath(import.meta.url))\n\nconst mocks = vi.hoisted(() => ({ resolvePackageVersion: vi.fn() }))\n\nvi.mock('../utils/resolvePackageVersion.js', async (importOriginal) => ({\n ...(await importOriginal()),\n resolvePackageVersion: mocks.resolvePackageVersion,\n}))\n\nconst routerContent = `import { createRouter } from '@tanstack/react-router'\n\nimport { routeTree } from './routeTree.gen'\n\nexport function getRouter() {\n return createRouter({ routeTree })\n}\n`\n\nconst rootRouteContent = `import { createRootRoute, HeadContent, Scripts } from '@tanstack/react-router'\nimport appCss from '../styles.css?url'\n\nexport const Route = createRootRoute({\n head: () => ({ links: [{ rel: 'stylesheet', href: appCss }] }),\n shellComponent: RootDocument,\n})\n\nfunction RootDocument({ children }: { children: React.ReactNode }) {\n return (\n <html lang=\"en\">\n <head><HeadContent /></head>\n <body>{children}<Scripts /></body>\n </html>\n )\n}\n`\n\nconst viteConfigContent = `import { tanstackStart } from '@tanstack/react-start/plugin/vite'\nimport viteReact from '@vitejs/plugin-react'\nimport { defineConfig } from 'vite'\n\nexport default defineConfig({\n plugins: [tanstackStart(), viteReact()],\n})\n`\n\ndescribe('initTanStack default template', () => {\n let appDetails: TanStackAppDetails\n let projectDir: string\n\n beforeEach(() => {\n vi.clearAllMocks()\n mocks.resolvePackageVersion.mockResolvedValue('4.2.0')\n projectDir = fse.mkdtempSync(path.join(os.tmpdir(), 'cpa-init-tanstack-default-'))\n writeFiles({\n files: {\n 'package.json': JSON.stringify({\n dependencies: {\n '@tanstack/react-router': '^1.200.0',\n '@tanstack/react-start': '^1.200.0',\n },\n name: 'start-app',\n }),\n 'src/router.tsx': routerContent,\n 'src/routes/__root.tsx': rootRouteContent,\n 'tsconfig.json': '{\"compilerOptions\":{\"baseUrl\":\".\"}}\\n',\n 'vite.config.ts': viteConfigContent,\n },\n root: projectDir,\n })\n appDetails = {\n isPayloadInstalled: false,\n kind: 'start',\n projectDir,\n rootRoutePath: path.join(projectDir, 'src/routes/__root.tsx'),\n routerPath: path.join(projectDir, 'src/router.tsx'),\n routesDir: path.join(projectDir, 'src/routes'),\n sourceDir: path.join(projectDir, 'src'),\n viteConfigPath: path.join(projectDir, 'vite.config.ts'),\n }\n })\n\n afterEach(() => {\n fse.removeSync(projectDir)\n })\n\n it('should initialize from the raw source template without a templateRoot override', async () => {\n const rawPayloadLayoutPath = path.resolve(\n dirname,\n '../../../../templates/blank-tanstack/src/app/_payload.tsx',\n )\n\n const result = await initTanStack({\n '--no-deps': true,\n appDetails,\n dbType: 'mongodb',\n packageManager: 'pnpm',\n projectDir,\n })\n\n expect(result).toEqual({\n payloadConfigPath: path.join(projectDir, 'src/payload.config.ts'),\n success: true,\n })\n expect(fse.readFileSync(path.join(projectDir, 'src/routes/_payload.tsx'), 'utf8')).toBe(\n fse.readFileSync(rawPayloadLayoutPath, 'utf8'),\n )\n })\n\n it('should copy a Payload layout whose foundation CSS import does not require a host alias', async () => {\n const result = await initTanStack({\n '--no-deps': true,\n '--payload-version': '4.2.0',\n appDetails,\n dbType: 'mongodb',\n packageManager: 'pnpm',\n projectDir,\n })\n\n expect(result.success).toBe(true)\n expect(fse.readFileSync(path.join(projectDir, 'src/routes/_payload.tsx'), 'utf8')).toContain(\n \"import '../payload-foundation.css'\",\n )\n })\n})\n\nfunction writeFiles({ files, root }: { files: Record<string, string>; root: string }): void {\n for (const [relativePath, content] of Object.entries(files)) {\n fse.outputFileSync(path.join(root, relativePath), content)\n }\n}\n"],"names":["fse","os","path","fileURLToPath","afterEach","beforeEach","describe","expect","it","vi","initTanStack","dirname","url","mocks","hoisted","resolvePackageVersion","fn","mock","importOriginal","routerContent","rootRouteContent","viteConfigContent","appDetails","projectDir","clearAllMocks","mockResolvedValue","mkdtempSync","join","tmpdir","writeFiles","files","JSON","stringify","dependencies","name","root","isPayloadInstalled","kind","rootRoutePath","routerPath","routesDir","sourceDir","viteConfigPath","removeSync","rawPayloadLayoutPath","resolve","result","dbType","packageManager","toEqual","payloadConfigPath","success","readFileSync","toBe","toContain","relativePath","content","Object","entries","outputFileSync"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CliArgs, DbType, PackageManager, TanStackAppDetails } from '../types.js';
|
|
2
|
+
type InitTanStackArgs = {
|
|
3
|
+
appDetails?: TanStackAppDetails;
|
|
4
|
+
dbType: DbType;
|
|
5
|
+
packageManager: PackageManager;
|
|
6
|
+
projectDir: string;
|
|
7
|
+
templateRoot?: string;
|
|
8
|
+
} & Pick<CliArgs, '--debug' | '--no-deps' | '--payload-version'>;
|
|
9
|
+
type InitTanStackResult = {
|
|
10
|
+
payloadConfigPath: string;
|
|
11
|
+
success: true;
|
|
12
|
+
} | {
|
|
13
|
+
reason: string;
|
|
14
|
+
success: false;
|
|
15
|
+
};
|
|
16
|
+
export declare function initTanStack(args: InitTanStackArgs): Promise<InitTanStackResult>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=init-tanstack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-tanstack.d.ts","sourceRoot":"","sources":["../../src/lib/init-tanstack.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAkBtF,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,kBAAkB,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,mBAAmB,CAAC,CAAA;AAEhE,KAAK,kBAAkB,GACnB;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAA;AAEtC,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqFtF"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { debug } from '../utils/log.js';
|
|
4
|
+
import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
5
|
+
import { getDbPackageName } from './ast/adapter-config.js';
|
|
6
|
+
import { preparePackageJson } from './ast/package-json.js';
|
|
7
|
+
import { configurePayloadTsConfig } from './configure-payload-tsconfig.js';
|
|
8
|
+
import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
|
|
9
|
+
import { installPackages } from './install-packages.js';
|
|
10
|
+
import { getTanStackAppDetails } from './tanstack/detect.js';
|
|
11
|
+
import { applyPreparedWrites, prepareTanStackInit } from './tanstack/prepare.js';
|
|
12
|
+
const filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const dirname = path.dirname(filename);
|
|
14
|
+
export async function initTanStack(args) {
|
|
15
|
+
const appDetailsResult = args.appDetails ? {
|
|
16
|
+
details: args.appDetails,
|
|
17
|
+
success: true
|
|
18
|
+
} : await detectAppDetails({
|
|
19
|
+
projectDir: args.projectDir
|
|
20
|
+
});
|
|
21
|
+
if (!appDetailsResult.success) {
|
|
22
|
+
return appDetailsResult;
|
|
23
|
+
}
|
|
24
|
+
const { details: appDetails } = appDetailsResult;
|
|
25
|
+
const templateRoot = args.templateRoot ?? resolveTemplateRoot();
|
|
26
|
+
if (args['--debug']) {
|
|
27
|
+
debug(`Using TanStack template files from: ${templateRoot}`);
|
|
28
|
+
}
|
|
29
|
+
const prepared = await prepareTanStackInit({
|
|
30
|
+
appDetails,
|
|
31
|
+
templateRoot
|
|
32
|
+
});
|
|
33
|
+
if (!prepared.success) {
|
|
34
|
+
return prepared;
|
|
35
|
+
}
|
|
36
|
+
const payloadVersion = await resolvePackageVersion({
|
|
37
|
+
debug: args['--debug'],
|
|
38
|
+
packageName: 'payload',
|
|
39
|
+
versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG
|
|
40
|
+
});
|
|
41
|
+
const requiredDependencies = getRequiredDependencies({
|
|
42
|
+
appDetails,
|
|
43
|
+
dbType: args.dbType,
|
|
44
|
+
payloadVersion
|
|
45
|
+
});
|
|
46
|
+
let writes = prepared.writes;
|
|
47
|
+
if (appDetails.kind === 'router-only' || args['--no-deps']) {
|
|
48
|
+
try {
|
|
49
|
+
const packageJsonWrite = preparePackageJson({
|
|
50
|
+
filePath: path.join(args.projectDir, 'package.json'),
|
|
51
|
+
options: {
|
|
52
|
+
addDependencies: args['--no-deps'] ? requiredDependencies : undefined,
|
|
53
|
+
removeDependencies: appDetails.kind === 'router-only' ? [
|
|
54
|
+
'@tanstack/router-plugin'
|
|
55
|
+
] : undefined
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
writes = [
|
|
59
|
+
...writes,
|
|
60
|
+
packageJsonWrite
|
|
61
|
+
];
|
|
62
|
+
} catch (error) {
|
|
63
|
+
return {
|
|
64
|
+
reason: `Could not prepare package.json: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
65
|
+
success: false
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
await applyPreparedWrites({
|
|
70
|
+
writes
|
|
71
|
+
});
|
|
72
|
+
if (!args['--no-deps']) {
|
|
73
|
+
const packagesToInstall = Object.entries(requiredDependencies).map(([packageName, version])=>`${packageName}@${version}`);
|
|
74
|
+
await ensurePnpmBuildApprovals({
|
|
75
|
+
packageManager: args.packageManager,
|
|
76
|
+
projectDir: args.projectDir
|
|
77
|
+
});
|
|
78
|
+
let installation;
|
|
79
|
+
try {
|
|
80
|
+
installation = await installPackages({
|
|
81
|
+
packageManager: args.packageManager,
|
|
82
|
+
packagesToInstall,
|
|
83
|
+
projectDir: args.projectDir
|
|
84
|
+
});
|
|
85
|
+
} catch {
|
|
86
|
+
return {
|
|
87
|
+
reason: 'Failed to install dependencies',
|
|
88
|
+
success: false
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (!installation.success) {
|
|
92
|
+
return {
|
|
93
|
+
reason: 'Failed to install dependencies',
|
|
94
|
+
success: false
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const payloadConfigPath = path.join(appDetails.sourceDir, 'payload.config.ts');
|
|
99
|
+
await configurePayloadTsConfig({
|
|
100
|
+
configPath: path.join(args.projectDir, 'tsconfig.json'),
|
|
101
|
+
payloadConfigPath
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
payloadConfigPath,
|
|
105
|
+
success: true
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async function detectAppDetails({ projectDir }) {
|
|
109
|
+
const detection = await getTanStackAppDetails({
|
|
110
|
+
projectDir
|
|
111
|
+
});
|
|
112
|
+
if (!detection.detected) {
|
|
113
|
+
return {
|
|
114
|
+
reason: `Could not detect a TanStack application in ${projectDir}.`,
|
|
115
|
+
success: false
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (!detection.compatible) {
|
|
119
|
+
return {
|
|
120
|
+
reason: detection.reason,
|
|
121
|
+
success: false
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
details: detection.details,
|
|
126
|
+
success: true
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function getRequiredDependencies({ appDetails, dbType, payloadVersion }) {
|
|
130
|
+
const dependencies = {
|
|
131
|
+
'@payloadcms/plugin-mcp': payloadVersion,
|
|
132
|
+
'@payloadcms/richtext-lexical': payloadVersion,
|
|
133
|
+
'@payloadcms/tanstack-start': payloadVersion,
|
|
134
|
+
'@payloadcms/ui': payloadVersion,
|
|
135
|
+
'@vitejs/plugin-rsc': '^0.5.21',
|
|
136
|
+
[getDbPackageName(dbType)]: payloadVersion,
|
|
137
|
+
graphql: '^16.8.1',
|
|
138
|
+
payload: payloadVersion,
|
|
139
|
+
sharp: '0.34.2'
|
|
140
|
+
};
|
|
141
|
+
if (appDetails.kind === 'router-only') {
|
|
142
|
+
dependencies['@tanstack/react-start'] = '^1.168.26';
|
|
143
|
+
}
|
|
144
|
+
return dependencies;
|
|
145
|
+
}
|
|
146
|
+
function resolveTemplateRoot() {
|
|
147
|
+
return path.basename(path.dirname(dirname)) === 'dist' ? path.resolve(dirname, '../template-tanstack') : path.resolve(dirname, '../../../../templates/blank-tanstack/src');
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
//# sourceMappingURL=init-tanstack.js.map
|
|
@@ -0,0 +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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"}
|