create-payload-app 3.0.0-canary.c13f9ba → 3.0.0-canary.c696728
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/dist/index.js.map +1 -1
- package/dist/lib/configure-payload-config.d.ts +8 -2
- package/dist/lib/configure-payload-config.d.ts.map +1 -1
- package/dist/lib/configure-payload-config.js +74 -25
- package/dist/lib/configure-payload-config.js.map +1 -1
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +9 -4
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/create-project.spec.js +24 -24
- package/dist/lib/create-project.spec.js.map +1 -1
- package/dist/lib/download-template.d.ts +10 -0
- package/dist/lib/download-template.d.ts.map +1 -0
- package/dist/lib/download-template.js +21 -0
- package/dist/lib/download-template.js.map +1 -0
- package/dist/lib/generate-secret.js.map +1 -1
- package/dist/lib/get-package-manager.js +25 -4
- package/dist/lib/get-package-manager.js.map +1 -1
- package/dist/lib/init-next.d.ts +2 -2
- package/dist/lib/init-next.d.ts.map +1 -1
- package/dist/lib/init-next.js +53 -11
- package/dist/lib/init-next.js.map +1 -1
- package/dist/lib/install-packages.js.map +1 -1
- package/dist/lib/parse-project-name.d.ts.map +1 -1
- package/dist/lib/parse-project-name.js +9 -3
- package/dist/lib/parse-project-name.js.map +1 -1
- package/dist/lib/parse-template.d.ts.map +1 -1
- package/dist/lib/parse-template.js +3 -1
- package/dist/lib/parse-template.js.map +1 -1
- package/dist/lib/replacements.d.ts +27 -0
- package/dist/lib/replacements.d.ts.map +1 -0
- package/dist/lib/replacements.js +92 -0
- package/dist/lib/replacements.js.map +1 -0
- package/dist/lib/select-db.d.ts.map +1 -1
- package/dist/lib/select-db.js +22 -13
- package/dist/lib/select-db.js.map +1 -1
- package/dist/lib/templates.js +7 -1
- package/dist/lib/templates.js.map +1 -1
- package/dist/lib/update-payload-in-project.d.ts.map +1 -1
- package/dist/lib/update-payload-in-project.js +7 -5
- package/dist/lib/update-payload-in-project.js.map +1 -1
- package/dist/lib/wrap-next-config.d.ts +5 -5
- package/dist/lib/wrap-next-config.d.ts.map +1 -1
- package/dist/lib/wrap-next-config.js +120 -61
- package/dist/lib/wrap-next-config.js.map +1 -1
- package/dist/lib/wrap-next-config.spec.js +85 -34
- package/dist/lib/wrap-next-config.spec.js.map +1 -1
- package/dist/lib/write-env-file.d.ts.map +1 -1
- package/dist/lib/write-env-file.js +27 -25
- package/dist/lib/write-env-file.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -4
- package/dist/main.js.map +1 -1
- package/dist/scripts/pack-template-files.js +3 -3
- package/dist/scripts/pack-template-files.js.map +1 -1
- package/dist/template/src/app/(payload)/admin/[[...segments]]/not-found.tsx +3 -1
- package/dist/template/src/app/(payload)/admin/[[...segments]]/page.tsx +3 -1
- package/dist/template/src/app/(payload)/admin/importMap.js +1 -0
- package/dist/template/src/app/(payload)/layout.tsx +6 -1
- package/dist/template/src/collections/Media.ts +16 -0
- package/dist/template/src/collections/Users.ts +1 -1
- package/dist/template/src/payload-types.ts +127 -0
- package/dist/template/src/payload.config.ts +13 -15
- package/dist/types.d.ts +6 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/copy-recursive-sync.d.ts +3 -1
- package/dist/utils/copy-recursive-sync.d.ts.map +1 -1
- package/dist/utils/copy-recursive-sync.js +3 -1
- package/dist/utils/copy-recursive-sync.js.map +1 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/log.js +1 -1
- package/dist/utils/log.js.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/package.json +26 -8
- package/dist/lib/packages.d.ts +0 -9
- package/dist/lib/packages.d.ts.map +0 -1
- package/dist/lib/packages.js +0 -27
- package/dist/lib/packages.js.map +0 -1
package/dist/lib/init-next.js
CHANGED
@@ -26,7 +26,7 @@ export async function initNext(args) {
|
|
26
26
|
});
|
27
27
|
nextAppDetails.nextAppDir = createdAppDir;
|
28
28
|
}
|
29
|
-
const { hasTopLevelLayout,
|
29
|
+
const { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigType } = nextAppDetails;
|
30
30
|
if (!nextConfigType) {
|
31
31
|
return {
|
32
32
|
isSrcDir,
|
@@ -50,7 +50,7 @@ export async function initNext(args) {
|
|
50
50
|
}
|
51
51
|
const installSpinner = p.spinner();
|
52
52
|
installSpinner.start('Installing Payload and dependencies...');
|
53
|
-
const configurationResult = installAndConfigurePayload({
|
53
|
+
const configurationResult = await installAndConfigurePayload({
|
54
54
|
...args,
|
55
55
|
nextAppDetails,
|
56
56
|
nextConfigType,
|
@@ -112,7 +112,7 @@ async function addPayloadConfigToTsConfig(projectDir, isSrcDir) {
|
|
112
112
|
});
|
113
113
|
}
|
114
114
|
}
|
115
|
-
function installAndConfigurePayload(args) {
|
115
|
+
async function installAndConfigurePayload(args) {
|
116
116
|
const { '--debug': debug, nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {}, nextConfigType, projectDir, useDistFiles } = args;
|
117
117
|
if (!nextAppDir || !nextConfigPath) {
|
118
118
|
return {
|
@@ -121,7 +121,9 @@ function installAndConfigurePayload(args) {
|
|
121
121
|
};
|
122
122
|
}
|
123
123
|
const logDebug = (message)=>{
|
124
|
-
if (debug)
|
124
|
+
if (debug) {
|
125
|
+
origDebug(message);
|
126
|
+
}
|
125
127
|
};
|
126
128
|
if (!fs.existsSync(projectDir)) {
|
127
129
|
return {
|
@@ -129,7 +131,7 @@ function installAndConfigurePayload(args) {
|
|
129
131
|
success: false
|
130
132
|
};
|
131
133
|
}
|
132
|
-
const templateFilesPath = dirname.endsWith('dist') || useDistFiles ? path.resolve(dirname, '../..', 'dist/template') : path.resolve(dirname, '../../../../templates/blank
|
134
|
+
const templateFilesPath = dirname.endsWith('dist') || useDistFiles ? path.resolve(dirname, '../..', 'dist/template') : path.resolve(dirname, '../../../../templates/blank');
|
133
135
|
logDebug(`Using template files from: ${templateFilesPath}`);
|
134
136
|
if (!fs.existsSync(templateFilesPath)) {
|
135
137
|
return {
|
@@ -148,9 +150,9 @@ function installAndConfigurePayload(args) {
|
|
148
150
|
logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`);
|
149
151
|
logDebug(`isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`);
|
150
152
|
// This is a little clunky and needs to account for isSrcDir
|
151
|
-
copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath)
|
153
|
+
copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath));
|
152
154
|
// Wrap next.config.js with withPayload
|
153
|
-
wrapNextConfig({
|
155
|
+
await wrapNextConfig({
|
154
156
|
nextConfigPath,
|
155
157
|
nextConfigType
|
156
158
|
});
|
@@ -177,7 +179,8 @@ async function installDeps(projectDir, packageManager, dbType) {
|
|
177
179
|
}
|
178
180
|
export async function getNextAppDetails(projectDir) {
|
179
181
|
const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'));
|
180
|
-
|
182
|
+
// Match next.config.js, next.config.ts, next.config.mjs, next.config.cjs
|
183
|
+
const nextConfigPath = (await globby('next.config.(\\w)?(t|j)s', {
|
181
184
|
absolute: true,
|
182
185
|
cwd: projectDir
|
183
186
|
}))?.[0];
|
@@ -185,16 +188,50 @@ export async function getNextAppDetails(projectDir) {
|
|
185
188
|
return {
|
186
189
|
hasTopLevelLayout: false,
|
187
190
|
isSrcDir,
|
188
|
-
|
191
|
+
isSupportedNextVersion: false,
|
192
|
+
nextConfigPath: undefined,
|
193
|
+
nextVersion: null
|
189
194
|
};
|
190
195
|
}
|
191
196
|
const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'));
|
197
|
+
// Check if Next.js version is new enough
|
198
|
+
let nextVersion = null;
|
199
|
+
if (packageObj.dependencies?.next) {
|
200
|
+
nextVersion = packageObj.dependencies.next;
|
201
|
+
// Match versions using regex matching groups
|
202
|
+
const versionMatch = /(?<major>\d+)/.exec(nextVersion);
|
203
|
+
if (!versionMatch) {
|
204
|
+
p.log.warn(`Could not determine Next.js version from ${nextVersion}`);
|
205
|
+
return {
|
206
|
+
hasTopLevelLayout: false,
|
207
|
+
isSrcDir,
|
208
|
+
isSupportedNextVersion: false,
|
209
|
+
nextConfigPath,
|
210
|
+
nextVersion
|
211
|
+
};
|
212
|
+
}
|
213
|
+
const { major } = versionMatch.groups;
|
214
|
+
const majorVersion = parseInt(major);
|
215
|
+
if (majorVersion < 15) {
|
216
|
+
return {
|
217
|
+
hasTopLevelLayout: false,
|
218
|
+
isSrcDir,
|
219
|
+
isSupportedNextVersion: false,
|
220
|
+
nextConfigPath,
|
221
|
+
nextVersion
|
222
|
+
};
|
223
|
+
}
|
224
|
+
}
|
225
|
+
const isSupportedNextVersion = true;
|
226
|
+
// Check if Payload already installed
|
192
227
|
if (packageObj.dependencies?.payload) {
|
193
228
|
return {
|
194
229
|
hasTopLevelLayout: false,
|
195
230
|
isPayloadInstalled: true,
|
196
231
|
isSrcDir,
|
197
|
-
|
232
|
+
isSupportedNextVersion,
|
233
|
+
nextConfigPath,
|
234
|
+
nextVersion
|
198
235
|
};
|
199
236
|
}
|
200
237
|
let nextAppDir = (await globby([
|
@@ -218,13 +255,18 @@ export async function getNextAppDetails(projectDir) {
|
|
218
255
|
return {
|
219
256
|
hasTopLevelLayout,
|
220
257
|
isSrcDir,
|
258
|
+
isSupportedNextVersion,
|
221
259
|
nextAppDir,
|
222
260
|
nextConfigPath,
|
223
|
-
nextConfigType: configType
|
261
|
+
nextConfigType: configType,
|
262
|
+
nextVersion
|
224
263
|
};
|
225
264
|
}
|
226
265
|
function getProjectType(args) {
|
227
266
|
const { nextConfigPath, packageObj } = args;
|
267
|
+
if (nextConfigPath.endsWith('.ts')) {
|
268
|
+
return 'ts';
|
269
|
+
}
|
228
270
|
if (nextConfigPath.endsWith('.mjs')) {
|
229
271
|
return 'esm';
|
230
272
|
}
|
@@ -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 execa from 'execa'\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 = Pick<CliArgs, '--debug'> & {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n}\n\ntype InitNextResult =\n | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\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, isPayloadInstalled, isSrcDir, nextAppDir, nextConfigType } =\n 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 = 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\nfunction installAndConfigurePayload(\n args: InitNextArgs & {\n nextAppDetails: NextAppDetails\n nextConfigType: NextConfigType\n useDistFiles?: boolean\n },\n):\n | { payloadConfigPath: string; success: true }\n | { payloadConfigPath?: string; reason: string; success: false } {\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) origDebug(message)\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-3.0')\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), debug)\n\n // Wrap next.config.js with withPayload\n 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 packagesToInstall = [\n 'payload',\n '@payloadcms/next',\n '@payloadcms/richtext-lexical',\n '@payloadcms/plugin-cloud',\n ].map((pkg) => `${pkg}@beta`)\n\n packagesToInstall.push(`@payloadcms/db-${dbType}@beta`)\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 const nextConfigPath: string | undefined = (\n await globby('next.config.*js', { absolute: true, cwd: projectDir })\n )?.[0]\n\n if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n nextConfigPath: undefined,\n }\n }\n\n const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'))\n if (packageObj.dependencies?.payload) {\n return {\n hasTopLevelLayout: false,\n isPayloadInstalled: true,\n isSrcDir,\n nextConfigPath,\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 { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigPath, nextConfigType: configType }\n}\n\nfunction getProjectType(args: {\n nextConfigPath: string\n packageObj: Record<string, unknown>\n}): 'cjs' | 'esm' {\n const { nextConfigPath, packageObj } = args\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","isPayloadInstalled","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","packagesToInstall","map","pkg","push","absolute","cwd","length","undefined","packageObj","readJson","dependencies","payload","ignore","onlyDirectories","configType","getProjectType","packageJsonType","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,YAAYA,OAAO,iBAAgB;AACnC,SAASC,KAAK,EAAEC,SAAS,QAAQ,eAAc;AAE/C,OAAOC,QAAQ,KAAI;AACnB,OAAOC,SAAS,WAAU;AAC1B,OAAOC,YAAY,SAAQ;AAC3B,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,UAAU,OAAM;AACvB,SAASC,SAAS,QAAQ,OAAM;AAIhC,SAASC,iBAAiB,QAAQ,kCAAiC;AACnE,SAASC,SAASC,SAAS,EAAEC,OAAO,QAAQ,kBAAiB;AAC7D,SAASC,WAAW,QAAQ,uBAAsB;AAClD,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,cAAc,QAAQ,wBAAuB;AAEtD,MAAMC,WAAWR,UAAUL,GAAGa,QAAQ;AACtC,MAAMC,YAAYT,UAAUL,GAAGc,SAAS;AAExC,MAAMC,WAAWZ,cAAc,YAAYa,GAAG;AAC9C,MAAMC,UAAUb,KAAKa,OAAO,CAACF;AAmB7B,OAAO,eAAeG,SAASC,IAAkB;IAC/C,MAAM,EAAEC,QAAQA,MAAM,EAAEC,cAAc,EAAEC,UAAU,EAAE,GAAGH;IAEvD,MAAMI,iBAAiBJ,KAAKI,cAAc,IAAK,MAAMC,kBAAkBF;IAEvE,IAAI,CAACC,eAAeE,UAAU,EAAE;QAC9BhB,QAAQ,CAAC,gCAAgC,EAAEa,WAAW,aAAa,CAAC;QACpE,MAAMI,gBAAgBtB,KAAKuB,OAAO,CAACL,YAAYC,eAAeK,QAAQ,GAAG,YAAY;QACrF3B,IAAI4B,SAAS,CAACH,eAAe;YAAEI,WAAW;QAAK;QAC/CP,eAAeE,UAAU,GAAGC;IAC9B;IAEA,MAAM,EAAEK,iBAAiB,EAAEC,kBAAkB,EAAEJ,QAAQ,EAAEH,UAAU,EAAEQ,cAAc,EAAE,GACnFV;IAEF,IAAI,CAACU,gBAAgB;QACnB,OAAO;YACLL;YACAH;YACAS,QAAQ,CAAC,wCAAwC,EAAEZ,WAAW,6EAA6E,CAAC;YAC5Ia,SAAS;QACX;IACF;IAEA,IAAIJ,mBAAmB;QACrB,6FAA6F;QAC7FlC,EAAEuC,GAAG,CAACC,IAAI,CAAC3B,YAAY;YAAEe;YAAYH;QAAW;QAChD,OAAO;YACLM;YACAH;YACAS,QAAQ;YACRC,SAAS;QACX;IACF;IAEA,MAAMG,iBAAiBzC,EAAE0C,OAAO;IAChCD,eAAeE,KAAK,CAAC;IAErB,MAAMC,sBAAsBC,2BAA2B;QACrD,GAAGvB,IAAI;QACPI;QACAU;QACAU,cAAc;IAChB;IAEA,IAAIF,oBAAoBN,OAAO,KAAK,OAAO;QACzCG,eAAeM,IAAI,CAACH,oBAAoBP,MAAM,EAAE;QAChD,OAAO;YAAE,GAAGO,mBAAmB;YAAEb;YAAUO,SAAS;QAAM;IAC5D;IAEA,MAAM,EAAEA,SAASU,cAAc,EAAE,GAAG,MAAMC,YAAYxB,YAAYD,gBAAgBD;IAClF,IAAI,CAACyB,gBAAgB;QACnBP,eAAeM,IAAI,CAAC,kCAAkC;QACtD,OAAO;YACL,GAAGH,mBAAmB;YACtBb;YACAM,QAAQ;YACRC,SAAS;QACX;IACF;IAEA,iDAAiD;IACjD,MAAMY,2BAA2BzB,YAAYM;IAC7CU,eAAeM,IAAI,CAAC;IACpB,OAAO;QAAE,GAAGH,mBAAmB;QAAEb;QAAUH;QAAYU,SAAS;IAAK;AACvE;AAEA,eAAeY,2BAA2BzB,UAAkB,EAAEM,QAAiB;IAC7E,MAAMoB,eAAe5C,KAAKuB,OAAO,CAACL,YAAY;IAE9C,gCAAgC;IAChC,IAAI,CAACtB,GAAGiD,UAAU,CAACD,eAAe;QAChCvC,QAAQ,CAAC,yDAAyD,CAAC;QACnE;IACF;IACA,MAAMyC,sBAAsB,MAAMrC,SAASmC,cAAc;QACvDG,UAAU;IACZ;IACA,MAAMC,eAAetD,MAAMoD;IAI3B,MAAMG,aACJD,cAAcE,iBAAiBC,WAAWH,cAAcE,iBAAiBC,YAAY;IACvF,MAAMA,UAAUF,aAAaD,cAAcE,iBAAiBC,UAAU;IAEtE,IAAI,CAACH,aAAaE,eAAe,IAAI,CAAE,CAAA,aAAaF,YAAW,GAAI;QACjEA,aAAaE,eAAe,GAAG,CAAC;IAClC;IAEA,IACE,CAACF,aAAaE,eAAe,EAAEE,OAAO,CAAC,kBAAkB,IACzDJ,aAAaE,eAAe,EAAEE,OAC9B;QACAJ,aAAaE,eAAe,CAACE,KAAK,GAAG;YACnC,GAAIJ,aAAaE,eAAe,CAACE,KAAK,IAAI,CAAC,CAAC;YAC5C,mBAAmB;gBAAC,CAAC,EAAED,QAAQ,EAAE3B,WAAW,SAAS,GAAG,iBAAiB,CAAC;aAAC;QAC7E;QACA,MAAMd,UAAUkC,cAAcjD,UAAUqD,cAAc,MAAM,IAAI;YAAED,UAAU;QAAO;IACrF;AACF;AAEA,SAAST,2BACPvB,IAIC;IAID,MAAM,EACJ,WAAWZ,KAAK,EAChBgB,gBAAgB,EAAEK,QAAQ,EAAEH,UAAU,EAAEgC,cAAc,EAAE,GAAG,CAAC,CAAC,EAC7DxB,cAAc,EACdX,UAAU,EACVqB,YAAY,EACb,GAAGxB;IAEJ,IAAI,CAACM,cAAc,CAACgC,gBAAgB;QAClC,OAAO;YACLvB,QAAQ;YACRC,SAAS;QACX;IACF;IAEA,MAAMuB,WAAW,CAACC;QAChB,IAAIpD,OAAOC,UAAUmD;IACvB;IAEA,IAAI,CAAC3D,GAAGiD,UAAU,CAAC3B,aAAa;QAC9B,OAAO;YACLY,QAAQ,CAAC,8CAA8C,EAAEZ,WAAW,CAAC;YACrEa,SAAS;QACX;IACF;IAEA,MAAMyB,oBACJ3C,QAAQ4C,QAAQ,CAAC,WAAWlB,eACxBvC,KAAKuB,OAAO,CAACV,SAAS,SAAS,mBAC/Bb,KAAKuB,OAAO,CAACV,SAAS;IAE5ByC,SAAS,CAAC,2BAA2B,EAAEE,kBAAkB,CAAC;IAE1D,IAAI,CAAC5D,GAAGiD,UAAU,CAACW,oBAAoB;QACrC,OAAO;YACL1B,QAAQ,CAAC,0CAA0C,EAAE0B,kBAAkB,CAAC;YACxEzB,SAAS;QACX;IACF,OAAO;QACLuB,SAAS;IACX;IAEAA,SAAS,CAAC,4BAA4B,EAAEE,kBAAkB,IAAI,EAAEnC,WAAW,CAAC;IAE5E,MAAMqC,iBAAiB1D,KAAKuB,OAAO,CAACiC,mBAAmBhC,WAAW,KAAK;IAEvE8B,SAAS,CAAC,gBAAgB,EAAEI,eAAe,CAAC;IAC5CJ,SAAS,CAAC,YAAY,EAAEjC,WAAW,CAAC;IACpCiC,SAAS,CAAC,YAAY,EAAEpC,WAAW,CAAC;IACpCoC,SAAS,CAAC,gBAAgB,EAAED,eAAe,CAAC;IAC5CC,SAAS,CAAC,mBAAmB,EAAEtD,KAAKuB,OAAO,CAACL,YAAY,qBAAqB,CAAC;IAE9EoC,SACE,CAAC,UAAU,EAAE9B,SAAS,UAAU,EAAEkC,eAAe,QAAQ,EAAE1D,KAAKa,OAAO,CAACwC,gBAAgB,CAAC;IAG3F,4DAA4D;IAC5DnD,kBAAkBwD,gBAAgB1D,KAAKa,OAAO,CAACwC,iBAAiBlD;IAEhE,uCAAuC;IACvCK,eAAe;QAAE6C;QAAgBxB;IAAe;IAEhD,OAAO;QACL8B,mBAAmB3D,KAAKuB,OAAO,CAACF,YAAY;QAC5CU,SAAS;IACX;AACF;AAEA,eAAeW,YAAYxB,UAAkB,EAAED,cAA8B,EAAED,MAAc;IAC3F,MAAM4C,oBAAoB;QACxB;QACA;QACA;QACA;KACD,CAACC,GAAG,CAAC,CAACC,MAAQ,CAAC,EAAEA,IAAI,KAAK,CAAC;IAE5BF,kBAAkBG,IAAI,CAAC,CAAC,eAAe,EAAE/C,OAAO,KAAK,CAAC;IAEtD,4CAA4C;IAC5C4C,kBAAkBG,IAAI,CAAC;IAEvB,OAAO,MAAMxD,gBAAgB;QAAEU;QAAgB2C;QAAmB1C;IAAW;AAC/E;AAEA,OAAO,eAAeE,kBAAkBF,UAAkB;IACxD,MAAMM,WAAW5B,GAAGiD,UAAU,CAAC7C,KAAKuB,OAAO,CAACL,YAAY;IAExD,MAAMmC,iBACJ,CAAA,MAAMvD,OAAO,mBAAmB;QAAEkE,UAAU;QAAMC,KAAK/C;IAAW,EAAC,GAClE,CAAC,EAAE;IAEN,IAAI,CAACmC,kBAAkBA,eAAea,MAAM,KAAK,GAAG;QAClD,OAAO;YACLvC,mBAAmB;YACnBH;YACA6B,gBAAgBc;QAClB;IACF;IAEA,MAAMC,aAAa,MAAMvE,IAAIwE,QAAQ,CAACrE,KAAKuB,OAAO,CAACL,YAAY;IAC/D,IAAIkD,WAAWE,YAAY,EAAEC,SAAS;QACpC,OAAO;YACL5C,mBAAmB;YACnBC,oBAAoB;YACpBJ;YACA6B;QACF;IACF;IAEA,IAAIhC,aACF,CAAA,MAAMvB,OAAO;QAAC;KAAS,EAAE;QACvBkE,UAAU;QACVC,KAAK/C;QACLsD,QAAQ;YAAC;SAAqB;QAC9BC,iBAAiB;IACnB,EAAC,GACA,CAAC,EAAE;IAEN,IAAI,CAACpD,cAAcA,WAAW6C,MAAM,KAAK,GAAG;QAC1C7C,aAAa8C;IACf;IAEA,MAAMO,aAAaC,eAAe;QAAEtB;QAAgBe;IAAW;IAE/D,MAAMzC,oBAAoBN,aACtBzB,GAAGiD,UAAU,CAAC7C,KAAKuB,OAAO,CAACF,YAAY,iBACvC;IAEJ,OAAO;QAAEM;QAAmBH;QAAUH;QAAYgC;QAAgBxB,gBAAgB6C;IAAW;AAC/F;AAEA,SAASC,eAAe5D,IAGvB;IACC,MAAM,EAAEsC,cAAc,EAAEe,UAAU,EAAE,GAAGrD;IACvC,IAAIsC,eAAeI,QAAQ,CAAC,SAAS;QACnC,OAAO;IACT;IACA,IAAIJ,eAAeI,QAAQ,CAAC,SAAS;QACnC,OAAO;IACT;IAEA,MAAMmB,kBAAkBR,WAAWS,IAAI;IACvC,IAAID,oBAAoB,UAAU;QAChC,OAAO;IACT;IACA,IAAIA,oBAAoB,YAAY;QAClC,OAAO;IACT;IAEA,OAAO;AACT"}
|
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 | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\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 packagesToInstall = [\n 'payload',\n '@payloadcms/next',\n '@payloadcms/richtext-lexical',\n '@payloadcms/plugin-cloud',\n ].map((pkg) => `${pkg}@beta`)\n\n packagesToInstall.push(`@payloadcms/db-${dbType}@beta`)\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","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 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/install-packages.ts"],"sourcesContent":["import execa from 'execa'\n\nimport type { PackageManager } from '../types.js'\n\nimport { error, warning } from '../utils/log.js'\n\nexport async function installPackages(args: {\n packageManager: PackageManager\n packagesToInstall: string[]\n projectDir: string\n}) {\n const { packageManager, packagesToInstall, projectDir } = args\n\n let exitCode = 0\n let stderr = ''\n\n switch (packageManager) {\n case 'npm': {\n ;({ exitCode, stderr } = await execa('npm', ['install', '--save', ...packagesToInstall], {\n cwd: projectDir,\n }))\n break\n }\n case 'yarn':\n case 'pnpm':\n case 'bun': {\n if (packageManager === 'bun') {\n warning('Bun support is untested.')\n }\n ;({ exitCode, stderr } = await execa(packageManager, ['add', ...packagesToInstall], {\n cwd: projectDir,\n }))\n break\n }\n }\n\n if (exitCode !== 0) {\n error(`Unable to install packages. Error: ${stderr}`)\n }\n\n return { success: exitCode === 0 }\n}\n"],"names":["execa","error","warning","installPackages","args","packageManager","packagesToInstall","projectDir","exitCode","stderr","cwd","success"],"
|
1
|
+
{"version":3,"sources":["../../src/lib/install-packages.ts"],"sourcesContent":["import execa from 'execa'\n\nimport type { PackageManager } from '../types.js'\n\nimport { error, warning } from '../utils/log.js'\n\nexport async function installPackages(args: {\n packageManager: PackageManager\n packagesToInstall: string[]\n projectDir: string\n}) {\n const { packageManager, packagesToInstall, projectDir } = args\n\n let exitCode = 0\n let stderr = ''\n\n switch (packageManager) {\n case 'npm': {\n ;({ exitCode, stderr } = await execa('npm', ['install', '--save', ...packagesToInstall], {\n cwd: projectDir,\n }))\n break\n }\n case 'yarn':\n case 'pnpm':\n case 'bun': {\n if (packageManager === 'bun') {\n warning('Bun support is untested.')\n }\n ;({ exitCode, stderr } = await execa(packageManager, ['add', ...packagesToInstall], {\n cwd: projectDir,\n }))\n break\n }\n }\n\n if (exitCode !== 0) {\n error(`Unable to install packages. Error: ${stderr}`)\n }\n\n return { success: exitCode === 0 }\n}\n"],"names":["execa","error","warning","installPackages","args","packageManager","packagesToInstall","projectDir","exitCode","stderr","cwd","success"],"mappings":"AAAA,OAAOA,WAAW,QAAO;AAIzB,SAASC,KAAK,EAAEC,OAAO,QAAQ,kBAAiB;AAEhD,OAAO,eAAeC,gBAAgBC,IAIrC;IACC,MAAM,EAAEC,cAAc,EAAEC,iBAAiB,EAAEC,UAAU,EAAE,GAAGH;IAE1D,IAAII,WAAW;IACf,IAAIC,SAAS;IAEb,OAAQJ;QACN,KAAK;YAAO;gBACR,CAAA,EAAEG,QAAQ,EAAEC,MAAM,EAAE,GAAG,MAAMT,MAAM,OAAO;oBAAC;oBAAW;uBAAaM;iBAAkB,EAAE;oBACvFI,KAAKH;gBACP,EAAC;gBACD;YACF;QACA,KAAK;QACL,KAAK;QACL,KAAK;YAAO;gBACV,IAAIF,mBAAmB,OAAO;oBAC5BH,QAAQ;gBACV;gBACE,CAAA,EAAEM,QAAQ,EAAEC,MAAM,EAAE,GAAG,MAAMT,MAAMK,gBAAgB;oBAAC;uBAAUC;iBAAkB,EAAE;oBAClFI,KAAKH;gBACP,EAAC;gBACD;YACF;IACF;IAEA,IAAIC,aAAa,GAAG;QAClBP,MAAM,CAAC,mCAAmC,EAAEQ,OAAO,CAAC;IACtD;IAEA,OAAO;QAAEE,SAASH,aAAa;IAAE;AACnC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"parse-project-name.d.ts","sourceRoot":"","sources":["../../src/lib/parse-project-name.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"parse-project-name.d.ts","sourceRoot":"","sources":["../../src/lib/parse-project-name.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBrE"}
|
@@ -1,12 +1,18 @@
|
|
1
1
|
import * as p from '@clack/prompts';
|
2
2
|
import slugify from '@sindresorhus/slugify';
|
3
3
|
export async function parseProjectName(args) {
|
4
|
-
if (args['--name'])
|
5
|
-
|
4
|
+
if (args['--name']) {
|
5
|
+
return slugify(args['--name']);
|
6
|
+
}
|
7
|
+
if (args._[0]) {
|
8
|
+
return slugify(args._[0]);
|
9
|
+
}
|
6
10
|
const projectName = await p.text({
|
7
11
|
message: 'Project name?',
|
8
12
|
validate: (value)=>{
|
9
|
-
if (!value)
|
13
|
+
if (!value) {
|
14
|
+
return 'Please enter a project name.';
|
15
|
+
}
|
10
16
|
}
|
11
17
|
});
|
12
18
|
if (p.isCancel(projectName)) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/parse-project-name.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\n\nimport type { CliArgs } from '../types.js'\n\nexport async function parseProjectName(args: CliArgs): Promise<string> {\n if (args['--name']) return slugify(args['--name'])\n if (args._[0]) return slugify(args._[0])\n\n const projectName = await p.text({\n message: 'Project name?',\n validate: (value) => {\n if (!value) return 'Please enter a project name.'\n },\n })\n if (p.isCancel(projectName)) {\n process.exit(0)\n }\n return slugify(projectName)\n}\n"],"names":["p","slugify","parseProjectName","args","_","projectName","text","message","validate","value","isCancel","process","exit"],"
|
1
|
+
{"version":3,"sources":["../../src/lib/parse-project-name.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\n\nimport type { CliArgs } from '../types.js'\n\nexport async function parseProjectName(args: CliArgs): Promise<string> {\n if (args['--name']) {\n return slugify(args['--name'])\n }\n if (args._[0]) {\n return slugify(args._[0])\n }\n\n const projectName = await p.text({\n message: 'Project name?',\n validate: (value) => {\n if (!value) {\n return 'Please enter a project name.'\n }\n },\n })\n if (p.isCancel(projectName)) {\n process.exit(0)\n }\n return slugify(projectName)\n}\n"],"names":["p","slugify","parseProjectName","args","_","projectName","text","message","validate","value","isCancel","process","exit"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AACnC,OAAOC,aAAa,wBAAuB;AAI3C,OAAO,eAAeC,iBAAiBC,IAAa;IAClD,IAAIA,IAAI,CAAC,SAAS,EAAE;QAClB,OAAOF,QAAQE,IAAI,CAAC,SAAS;IAC/B;IACA,IAAIA,KAAKC,CAAC,CAAC,EAAE,EAAE;QACb,OAAOH,QAAQE,KAAKC,CAAC,CAAC,EAAE;IAC1B;IAEA,MAAMC,cAAc,MAAML,EAAEM,IAAI,CAAC;QAC/BC,SAAS;QACTC,UAAU,CAACC;YACT,IAAI,CAACA,OAAO;gBACV,OAAO;YACT;QACF;IACF;IACA,IAAIT,EAAEU,QAAQ,CAACL,cAAc;QAC3BM,QAAQC,IAAI,CAAC;IACf;IACA,OAAOX,QAAQI;AACjB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"parse-template.d.ts","sourceRoot":"","sources":["../../src/lib/parse-template.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE3D,wBAAsB,aAAa,CACjC,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,eAAe,EAAE,GAChC,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,
|
1
|
+
{"version":3,"file":"parse-template.d.ts","sourceRoot":"","sources":["../../src/lib/parse-template.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE3D,wBAAsB,aAAa,CACjC,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,eAAe,EAAE,GAChC,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CA0BtC"}
|
@@ -3,7 +3,9 @@ export async function parseTemplate(args, validTemplates) {
|
|
3
3
|
if (args['--template']) {
|
4
4
|
const templateName = args['--template'];
|
5
5
|
const template = validTemplates.find((t)=>t.name === templateName);
|
6
|
-
if (!template)
|
6
|
+
if (!template) {
|
7
|
+
throw new Error('Invalid template given');
|
8
|
+
}
|
7
9
|
return template;
|
8
10
|
}
|
9
11
|
const response = await p.select({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/parse-template.ts"],"sourcesContent":["import * as p from '@clack/prompts'\n\nimport type { CliArgs, ProjectTemplate } from '../types.js'\n\nexport async function parseTemplate(\n args: CliArgs,\n validTemplates: ProjectTemplate[],\n): Promise<ProjectTemplate | undefined> {\n if (args['--template']) {\n const templateName = args['--template']\n const template = validTemplates.find((t) => t.name === templateName)\n if (!template) throw new Error('Invalid template given')\n return template\n }\n\n const response = await p.select<{ label: string; value: string }[], string>({\n message: 'Choose project template',\n options: validTemplates.map((p) => {\n return {\n label: p.name,\n value: p.name,\n }\n }),\n })\n if (p.isCancel(response)) {\n process.exit(0)\n }\n\n const template = validTemplates.find((t) => t.name === response)\n\n return template\n}\n"],"names":["p","parseTemplate","args","validTemplates","templateName","template","find","t","name","Error","response","select","message","options","map","label","value","isCancel","process","exit"],"
|
1
|
+
{"version":3,"sources":["../../src/lib/parse-template.ts"],"sourcesContent":["import * as p from '@clack/prompts'\n\nimport type { CliArgs, ProjectTemplate } from '../types.js'\n\nexport async function parseTemplate(\n args: CliArgs,\n validTemplates: ProjectTemplate[],\n): Promise<ProjectTemplate | undefined> {\n if (args['--template']) {\n const templateName = args['--template']\n const template = validTemplates.find((t) => t.name === templateName)\n if (!template) {\n throw new Error('Invalid template given')\n }\n return template\n }\n\n const response = await p.select<{ label: string; value: string }[], string>({\n message: 'Choose project template',\n options: validTemplates.map((p) => {\n return {\n label: p.name,\n value: p.name,\n }\n }),\n })\n if (p.isCancel(response)) {\n process.exit(0)\n }\n\n const template = validTemplates.find((t) => t.name === response)\n\n return template\n}\n"],"names":["p","parseTemplate","args","validTemplates","templateName","template","find","t","name","Error","response","select","message","options","map","label","value","isCancel","process","exit"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AAInC,OAAO,eAAeC,cACpBC,IAAa,EACbC,cAAiC;IAEjC,IAAID,IAAI,CAAC,aAAa,EAAE;QACtB,MAAME,eAAeF,IAAI,CAAC,aAAa;QACvC,MAAMG,WAAWF,eAAeG,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ;QACvD,IAAI,CAACC,UAAU;YACb,MAAM,IAAII,MAAM;QAClB;QACA,OAAOJ;IACT;IAEA,MAAMK,WAAW,MAAMV,EAAEW,MAAM,CAA6C;QAC1EC,SAAS;QACTC,SAASV,eAAeW,GAAG,CAAC,CAACd;YAC3B,OAAO;gBACLe,OAAOf,EAAEQ,IAAI;gBACbQ,OAAOhB,EAAEQ,IAAI;YACf;QACF;IACF;IACA,IAAIR,EAAEiB,QAAQ,CAACP,WAAW;QACxBQ,QAAQC,IAAI,CAAC;IACf;IAEA,MAAMd,WAAWF,eAAeG,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKE;IAEvD,OAAOL;AACT"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import type { DbType, StorageAdapterType } from '../types.js';
|
2
|
+
type DbAdapterReplacement = {
|
3
|
+
configReplacement: (envName?: string) => string[];
|
4
|
+
importReplacement: string;
|
5
|
+
packageName: string;
|
6
|
+
};
|
7
|
+
export declare const dbReplacements: Record<DbType, DbAdapterReplacement>;
|
8
|
+
type StorageAdapterReplacement = {
|
9
|
+
configReplacement: string[];
|
10
|
+
importReplacement?: string;
|
11
|
+
packageName?: string;
|
12
|
+
};
|
13
|
+
export declare const storageReplacements: Record<StorageAdapterType, StorageAdapterReplacement>;
|
14
|
+
/**
|
15
|
+
* Generic config replacement
|
16
|
+
*/
|
17
|
+
type ConfigReplacement = {
|
18
|
+
configReplacement: {
|
19
|
+
match: string;
|
20
|
+
replacement: string;
|
21
|
+
};
|
22
|
+
importReplacement: string;
|
23
|
+
packageName: string;
|
24
|
+
};
|
25
|
+
export declare const configReplacements: Record<string, ConfigReplacement>;
|
26
|
+
export {};
|
27
|
+
//# sourceMappingURL=replacements.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"replacements.d.ts","sourceRoot":"","sources":["../../src/lib/replacements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAE7D,KAAK,oBAAoB,GAAG;IAC1B,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;IACjD,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAiDD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAK/D,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AA4BD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,CAIrF,CAAA;AAED;;GAEG;AACH,KAAK,iBAAiB,GAAG;IACvB,iBAAiB,EAAE;QACjB,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAUhE,CAAA"}
|
@@ -0,0 +1,92 @@
|
|
1
|
+
const mongodbReplacement = {
|
2
|
+
// Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`
|
3
|
+
configReplacement: (envName = 'DATABASE_URI')=>[
|
4
|
+
' db: mongooseAdapter({',
|
5
|
+
` url: process.env.${envName} || '',`,
|
6
|
+
' }),'
|
7
|
+
],
|
8
|
+
importReplacement: "import { mongooseAdapter } from '@payloadcms/db-mongodb'",
|
9
|
+
packageName: '@payloadcms/db-mongodb'
|
10
|
+
};
|
11
|
+
const postgresReplacement = {
|
12
|
+
configReplacement: (envName = 'DATABASE_URI')=>[
|
13
|
+
' db: postgresAdapter({',
|
14
|
+
' pool: {',
|
15
|
+
` connectionString: process.env.${envName} || '',`,
|
16
|
+
' },',
|
17
|
+
' }),'
|
18
|
+
],
|
19
|
+
importReplacement: "import { postgresAdapter } from '@payloadcms/db-postgres'",
|
20
|
+
packageName: '@payloadcms/db-postgres'
|
21
|
+
};
|
22
|
+
const vercelPostgresReplacement = {
|
23
|
+
configReplacement: (envName = 'POSTGRES_URL')=>[
|
24
|
+
' db: vercelPostgresAdapter({',
|
25
|
+
' pool: {',
|
26
|
+
` connectionString: process.env.${envName} || '',`,
|
27
|
+
' },',
|
28
|
+
' }),'
|
29
|
+
],
|
30
|
+
importReplacement: "import { vercelPostgresAdapter } from '@payloadcms/db-vercel-postgres'",
|
31
|
+
packageName: '@payloadcms/db-vercel-postgres'
|
32
|
+
};
|
33
|
+
const sqliteReplacement = {
|
34
|
+
configReplacement: (envName = 'DATABASE_URI')=>[
|
35
|
+
' db: sqliteAdapter({',
|
36
|
+
' client: {',
|
37
|
+
` url: process.env.${envName} || '',`,
|
38
|
+
' },',
|
39
|
+
' }),'
|
40
|
+
],
|
41
|
+
importReplacement: "import { sqliteAdapter } from '@payloadcms/db-sqlite'",
|
42
|
+
packageName: '@payloadcms/db-sqlite'
|
43
|
+
};
|
44
|
+
export const dbReplacements = {
|
45
|
+
mongodb: mongodbReplacement,
|
46
|
+
postgres: postgresReplacement,
|
47
|
+
sqlite: sqliteReplacement,
|
48
|
+
'vercel-postgres': vercelPostgresReplacement
|
49
|
+
};
|
50
|
+
const vercelBlobStorageReplacement = {
|
51
|
+
// Replacement of `// storage-adapter-placeholder`
|
52
|
+
configReplacement: [
|
53
|
+
' vercelBlobStorage({',
|
54
|
+
' collections: {',
|
55
|
+
' [Media.slug]: true,',
|
56
|
+
' },',
|
57
|
+
" token: process.env.BLOB_READ_WRITE_TOKEN || '',",
|
58
|
+
' }),'
|
59
|
+
],
|
60
|
+
importReplacement: "import { vercelBlobStorage } from '@payloadcms/storage-vercel-blob'",
|
61
|
+
packageName: '@payloadcms/storage-vercel-blob'
|
62
|
+
};
|
63
|
+
const payloadCloudReplacement = {
|
64
|
+
configReplacement: [
|
65
|
+
' payloadCloudPlugin(),'
|
66
|
+
],
|
67
|
+
importReplacement: "import { payloadCloudPlugin } from '@payloadcms/plugin-cloud'",
|
68
|
+
packageName: '@payloadcms/plugin-cloud'
|
69
|
+
};
|
70
|
+
// Removes placeholders
|
71
|
+
const diskReplacement = {
|
72
|
+
configReplacement: [],
|
73
|
+
importReplacement: ''
|
74
|
+
};
|
75
|
+
export const storageReplacements = {
|
76
|
+
localDisk: diskReplacement,
|
77
|
+
payloadCloud: payloadCloudReplacement,
|
78
|
+
vercelBlobStorage: vercelBlobStorageReplacement
|
79
|
+
};
|
80
|
+
export const configReplacements = {
|
81
|
+
sharp: {
|
82
|
+
// Replacement of `sharp, // Now optional`
|
83
|
+
configReplacement: {
|
84
|
+
match: 'sharp,',
|
85
|
+
replacement: ' // sharp,'
|
86
|
+
},
|
87
|
+
importReplacement: "import sharp from 'sharp'",
|
88
|
+
packageName: 'sharp'
|
89
|
+
}
|
90
|
+
};
|
91
|
+
|
92
|
+
//# sourceMappingURL=replacements.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/lib/replacements.ts"],"sourcesContent":["import type { DbType, StorageAdapterType } from '../types.js'\n\ntype DbAdapterReplacement = {\n configReplacement: (envName?: string) => string[]\n importReplacement: string\n packageName: string\n}\n\nconst mongodbReplacement: DbAdapterReplacement = {\n // Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`\n configReplacement: (envName = 'DATABASE_URI') => [\n ' db: mongooseAdapter({',\n ` url: process.env.${envName} || '',`,\n ' }),',\n ],\n importReplacement: \"import { mongooseAdapter } from '@payloadcms/db-mongodb'\",\n packageName: '@payloadcms/db-mongodb',\n}\n\nconst postgresReplacement: DbAdapterReplacement = {\n configReplacement: (envName = 'DATABASE_URI') => [\n ' db: postgresAdapter({',\n ' pool: {',\n ` connectionString: process.env.${envName} || '',`,\n ' },',\n ' }),',\n ],\n importReplacement: \"import { postgresAdapter } from '@payloadcms/db-postgres'\",\n packageName: '@payloadcms/db-postgres',\n}\n\nconst vercelPostgresReplacement: DbAdapterReplacement = {\n configReplacement: (envName = 'POSTGRES_URL') => [\n ' db: vercelPostgresAdapter({',\n ' pool: {',\n ` connectionString: process.env.${envName} || '',`,\n ' },',\n ' }),',\n ],\n importReplacement: \"import { vercelPostgresAdapter } from '@payloadcms/db-vercel-postgres'\",\n packageName: '@payloadcms/db-vercel-postgres',\n}\n\nconst sqliteReplacement: DbAdapterReplacement = {\n configReplacement: (envName = 'DATABASE_URI') => [\n ' db: sqliteAdapter({',\n ' client: {',\n ` url: process.env.${envName} || '',`,\n ' },',\n ' }),',\n ],\n importReplacement: \"import { sqliteAdapter } from '@payloadcms/db-sqlite'\",\n packageName: '@payloadcms/db-sqlite',\n}\n\nexport const dbReplacements: Record<DbType, DbAdapterReplacement> = {\n mongodb: mongodbReplacement,\n postgres: postgresReplacement,\n sqlite: sqliteReplacement,\n 'vercel-postgres': vercelPostgresReplacement,\n}\n\ntype StorageAdapterReplacement = {\n configReplacement: string[]\n importReplacement?: string\n packageName?: string\n}\n\nconst vercelBlobStorageReplacement: StorageAdapterReplacement = {\n // Replacement of `// storage-adapter-placeholder`\n configReplacement: [\n ' vercelBlobStorage({',\n ' collections: {',\n ' [Media.slug]: true,',\n ' },',\n \" token: process.env.BLOB_READ_WRITE_TOKEN || '',\",\n ' }),',\n ],\n importReplacement: \"import { vercelBlobStorage } from '@payloadcms/storage-vercel-blob'\",\n packageName: '@payloadcms/storage-vercel-blob',\n}\n\nconst payloadCloudReplacement: StorageAdapterReplacement = {\n configReplacement: [' payloadCloudPlugin(),'],\n importReplacement: \"import { payloadCloudPlugin } from '@payloadcms/plugin-cloud'\",\n packageName: '@payloadcms/plugin-cloud',\n}\n\n// Removes placeholders\nconst diskReplacement: StorageAdapterReplacement = {\n configReplacement: [],\n importReplacement: '',\n}\n\nexport const storageReplacements: Record<StorageAdapterType, StorageAdapterReplacement> = {\n localDisk: diskReplacement,\n payloadCloud: payloadCloudReplacement,\n vercelBlobStorage: vercelBlobStorageReplacement,\n}\n\n/**\n * Generic config replacement\n */\ntype ConfigReplacement = {\n configReplacement: {\n match: string\n replacement: string\n }\n importReplacement: string\n packageName: string\n}\n\nexport const configReplacements: Record<string, ConfigReplacement> = {\n sharp: {\n // Replacement of `sharp, // Now optional`\n configReplacement: {\n match: 'sharp,',\n replacement: ' // sharp,',\n },\n importReplacement: \"import sharp from 'sharp'\",\n packageName: 'sharp',\n },\n}\n"],"names":["mongodbReplacement","configReplacement","envName","importReplacement","packageName","postgresReplacement","vercelPostgresReplacement","sqliteReplacement","dbReplacements","mongodb","postgres","sqlite","vercelBlobStorageReplacement","payloadCloudReplacement","diskReplacement","storageReplacements","localDisk","payloadCloud","vercelBlobStorage","configReplacements","sharp","match","replacement"],"mappings":"AAQA,MAAMA,qBAA2C;IAC/C,8FAA8F;IAC9FC,mBAAmB,CAACC,UAAU,cAAc,GAAK;YAC/C;YACA,CAAC,qBAAqB,EAAEA,QAAQ,OAAO,CAAC;YACxC;SACD;IACDC,mBAAmB;IACnBC,aAAa;AACf;AAEA,MAAMC,sBAA4C;IAChDJ,mBAAmB,CAACC,UAAU,cAAc,GAAK;YAC/C;YACA;YACA,CAAC,oCAAoC,EAAEA,QAAQ,OAAO,CAAC;YACvD;YACA;SACD;IACDC,mBAAmB;IACnBC,aAAa;AACf;AAEA,MAAME,4BAAkD;IACtDL,mBAAmB,CAACC,UAAU,cAAc,GAAK;YAC/C;YACA;YACA,CAAC,oCAAoC,EAAEA,QAAQ,OAAO,CAAC;YACvD;YACA;SACD;IACDC,mBAAmB;IACnBC,aAAa;AACf;AAEA,MAAMG,oBAA0C;IAC9CN,mBAAmB,CAACC,UAAU,cAAc,GAAK;YAC/C;YACA;YACA,CAAC,uBAAuB,EAAEA,QAAQ,OAAO,CAAC;YAC1C;YACA;SACD;IACDC,mBAAmB;IACnBC,aAAa;AACf;AAEA,OAAO,MAAMI,iBAAuD;IAClEC,SAAST;IACTU,UAAUL;IACVM,QAAQJ;IACR,mBAAmBD;AACrB,EAAC;AAQD,MAAMM,+BAA0D;IAC9D,kDAAkD;IAClDX,mBAAmB;QACjB;QACA;QACA;QACA;QACA;QACA;KACD;IACDE,mBAAmB;IACnBC,aAAa;AACf;AAEA,MAAMS,0BAAqD;IACzDZ,mBAAmB;QAAC;KAA4B;IAChDE,mBAAmB;IACnBC,aAAa;AACf;AAEA,uBAAuB;AACvB,MAAMU,kBAA6C;IACjDb,mBAAmB,EAAE;IACrBE,mBAAmB;AACrB;AAEA,OAAO,MAAMY,sBAA6E;IACxFC,WAAWF;IACXG,cAAcJ;IACdK,mBAAmBN;AACrB,EAAC;AAcD,OAAO,MAAMO,qBAAwD;IACnEC,OAAO;QACL,0CAA0C;QAC1CnB,mBAAmB;YACjBoB,OAAO;YACPC,aAAa;QACf;QACAnB,mBAAmB;QACnBC,aAAa;IACf;AACF,EAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"select-db.d.ts","sourceRoot":"","sources":["../../src/lib/select-db.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAU,MAAM,aAAa,CAAA;
|
1
|
+
{"version":3,"file":"select-db.d.ts","sourceRoot":"","sources":["../../src/lib/select-db.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAU,MAAM,aAAa,CAAA;AAiC7D,wBAAsB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAkDrF"}
|
package/dist/lib/select-db.js
CHANGED
@@ -10,6 +10,17 @@ const dbChoiceRecord = {
|
|
10
10
|
dbConnectionPrefix: 'postgres://postgres:<password>@127.0.0.1:5432/',
|
11
11
|
title: 'PostgreSQL (beta)',
|
12
12
|
value: 'postgres'
|
13
|
+
},
|
14
|
+
sqlite: {
|
15
|
+
dbConnectionPrefix: 'file:./',
|
16
|
+
dbConnectionSuffix: '.db',
|
17
|
+
title: 'SQLite (beta)',
|
18
|
+
value: 'sqlite'
|
19
|
+
},
|
20
|
+
'vercel-postgres': {
|
21
|
+
dbConnectionPrefix: 'postgres://postgres:<password>@127.0.0.1:5432/',
|
22
|
+
title: 'Vercel Postgres (beta)',
|
23
|
+
value: 'vercel-postgres'
|
13
24
|
}
|
14
25
|
};
|
15
26
|
export async function selectDb(args, projectName) {
|
@@ -23,22 +34,18 @@ export async function selectDb(args, projectName) {
|
|
23
34
|
dbType = await p.select({
|
24
35
|
initialValue: 'mongodb',
|
25
36
|
message: `Select a database`,
|
26
|
-
options:
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
},
|
31
|
-
{
|
32
|
-
label: 'Postgres',
|
33
|
-
value: 'postgres'
|
34
|
-
}
|
35
|
-
]
|
37
|
+
options: Object.values(dbChoiceRecord).map((dbChoice)=>({
|
38
|
+
label: dbChoice.title,
|
39
|
+
value: dbChoice.value
|
40
|
+
}))
|
36
41
|
});
|
37
|
-
if (p.isCancel(dbType))
|
42
|
+
if (p.isCancel(dbType)) {
|
43
|
+
process.exit(0);
|
44
|
+
}
|
38
45
|
}
|
39
46
|
const dbChoice = dbChoiceRecord[dbType];
|
40
47
|
let dbUri = undefined;
|
41
|
-
const initialDbUri = `${dbChoice.dbConnectionPrefix}${projectName === '.' ? `payload-${getRandomDigitSuffix()}` : slugify(projectName)}`;
|
48
|
+
const initialDbUri = `${dbChoice.dbConnectionPrefix}${projectName === '.' ? `payload-${getRandomDigitSuffix()}` : slugify(projectName)}${dbChoice.dbConnectionSuffix || ''}`;
|
42
49
|
if (args['--db-accept-recommended']) {
|
43
50
|
dbUri = initialDbUri;
|
44
51
|
} else if (args['--db-connection-string']) {
|
@@ -48,7 +55,9 @@ export async function selectDb(args, projectName) {
|
|
48
55
|
initialValue: initialDbUri,
|
49
56
|
message: `Enter ${dbChoice.title.split(' ')[0]} connection string`
|
50
57
|
});
|
51
|
-
if (p.isCancel(dbUri))
|
58
|
+
if (p.isCancel(dbUri)) {
|
59
|
+
process.exit(0);
|
60
|
+
}
|
52
61
|
}
|
53
62
|
return {
|
54
63
|
type: dbChoice.value,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/select-db.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\n\nimport type { CliArgs, DbDetails, DbType } from '../types.js'\n\ntype DbChoice = {\n dbConnectionPrefix: `${string}/`\n title: string\n value: DbType\n}\n\nconst dbChoiceRecord: Record<DbType, DbChoice> = {\n mongodb: {\n dbConnectionPrefix: 'mongodb://127.0.0.1/',\n title: 'MongoDB',\n value: 'mongodb',\n },\n postgres: {\n dbConnectionPrefix: 'postgres://postgres:<password>@127.0.0.1:5432/',\n title: 'PostgreSQL (beta)',\n value: 'postgres',\n },\n}\n\nexport async function selectDb(args: CliArgs, projectName: string): Promise<DbDetails> {\n let dbType: DbType | symbol | undefined = undefined\n if (args['--db']) {\n if (!Object.values(dbChoiceRecord).some((dbChoice) => dbChoice.value === args['--db'])) {\n throw new Error(\n `Invalid database type given. Valid types are: ${Object.values(dbChoiceRecord)\n .map((dbChoice) => dbChoice.value)\n .join(', ')}`,\n )\n }\n dbType = args['--db'] as DbType\n } else {\n dbType = await p.select<{ label: string; value: DbType }[], DbType>({\n initialValue: 'mongodb',\n message: `Select a database`,\n options:
|
1
|
+
{"version":3,"sources":["../../src/lib/select-db.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\n\nimport type { CliArgs, DbDetails, DbType } from '../types.js'\n\ntype DbChoice = {\n dbConnectionPrefix: `${string}/`\n dbConnectionSuffix?: string\n title: string\n value: DbType\n}\n\nconst dbChoiceRecord: Record<DbType, DbChoice> = {\n mongodb: {\n dbConnectionPrefix: 'mongodb://127.0.0.1/',\n title: 'MongoDB',\n value: 'mongodb',\n },\n postgres: {\n dbConnectionPrefix: 'postgres://postgres:<password>@127.0.0.1:5432/',\n title: 'PostgreSQL (beta)',\n value: 'postgres',\n },\n sqlite: {\n dbConnectionPrefix: 'file:./',\n dbConnectionSuffix: '.db',\n title: 'SQLite (beta)',\n value: 'sqlite',\n },\n 'vercel-postgres': {\n dbConnectionPrefix: 'postgres://postgres:<password>@127.0.0.1:5432/',\n title: 'Vercel Postgres (beta)',\n value: 'vercel-postgres',\n },\n}\n\nexport async function selectDb(args: CliArgs, projectName: string): Promise<DbDetails> {\n let dbType: DbType | symbol | undefined = undefined\n if (args['--db']) {\n if (!Object.values(dbChoiceRecord).some((dbChoice) => dbChoice.value === args['--db'])) {\n throw new Error(\n `Invalid database type given. Valid types are: ${Object.values(dbChoiceRecord)\n .map((dbChoice) => dbChoice.value)\n .join(', ')}`,\n )\n }\n dbType = args['--db'] as DbType\n } else {\n dbType = await p.select<{ label: string; value: DbType }[], DbType>({\n initialValue: 'mongodb',\n message: `Select a database`,\n options: Object.values(dbChoiceRecord).map((dbChoice) => ({\n label: dbChoice.title,\n value: dbChoice.value,\n })),\n })\n if (p.isCancel(dbType)) {\n process.exit(0)\n }\n }\n\n const dbChoice = dbChoiceRecord[dbType]\n\n let dbUri: string | symbol | undefined = undefined\n const initialDbUri = `${dbChoice.dbConnectionPrefix}${\n projectName === '.' ? `payload-${getRandomDigitSuffix()}` : slugify(projectName)\n }${dbChoice.dbConnectionSuffix || ''}`\n\n if (args['--db-accept-recommended']) {\n dbUri = initialDbUri\n } else if (args['--db-connection-string']) {\n dbUri = args['--db-connection-string']\n } else {\n dbUri = await p.text({\n initialValue: initialDbUri,\n message: `Enter ${dbChoice.title.split(' ')[0]} connection string`, // strip beta from title\n })\n if (p.isCancel(dbUri)) {\n process.exit(0)\n }\n }\n\n return {\n type: dbChoice.value,\n dbUri,\n }\n}\n\nfunction getRandomDigitSuffix(): string {\n return (Math.random() * Math.pow(10, 6)).toFixed(0)\n}\n"],"names":["p","slugify","dbChoiceRecord","mongodb","dbConnectionPrefix","title","value","postgres","sqlite","dbConnectionSuffix","selectDb","args","projectName","dbType","undefined","Object","values","some","dbChoice","Error","map","join","select","initialValue","message","options","label","isCancel","process","exit","dbUri","initialDbUri","getRandomDigitSuffix","text","split","type","Math","random","pow","toFixed"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AACnC,OAAOC,aAAa,wBAAuB;AAW3C,MAAMC,iBAA2C;IAC/CC,SAAS;QACPC,oBAAoB;QACpBC,OAAO;QACPC,OAAO;IACT;IACAC,UAAU;QACRH,oBAAoB;QACpBC,OAAO;QACPC,OAAO;IACT;IACAE,QAAQ;QACNJ,oBAAoB;QACpBK,oBAAoB;QACpBJ,OAAO;QACPC,OAAO;IACT;IACA,mBAAmB;QACjBF,oBAAoB;QACpBC,OAAO;QACPC,OAAO;IACT;AACF;AAEA,OAAO,eAAeI,SAASC,IAAa,EAAEC,WAAmB;IAC/D,IAAIC,SAAsCC;IAC1C,IAAIH,IAAI,CAAC,OAAO,EAAE;QAChB,IAAI,CAACI,OAAOC,MAAM,CAACd,gBAAgBe,IAAI,CAAC,CAACC,WAAaA,SAASZ,KAAK,KAAKK,IAAI,CAAC,OAAO,GAAG;YACtF,MAAM,IAAIQ,MACR,CAAC,8CAA8C,EAAEJ,OAAOC,MAAM,CAACd,gBAC5DkB,GAAG,CAAC,CAACF,WAAaA,SAASZ,KAAK,EAChCe,IAAI,CAAC,MAAM,CAAC;QAEnB;QACAR,SAASF,IAAI,CAAC,OAAO;IACvB,OAAO;QACLE,SAAS,MAAMb,EAAEsB,MAAM,CAA6C;YAClEC,cAAc;YACdC,SAAS,CAAC,iBAAiB,CAAC;YAC5BC,SAASV,OAAOC,MAAM,CAACd,gBAAgBkB,GAAG,CAAC,CAACF,WAAc,CAAA;oBACxDQ,OAAOR,SAASb,KAAK;oBACrBC,OAAOY,SAASZ,KAAK;gBACvB,CAAA;QACF;QACA,IAAIN,EAAE2B,QAAQ,CAACd,SAAS;YACtBe,QAAQC,IAAI,CAAC;QACf;IACF;IAEA,MAAMX,WAAWhB,cAAc,CAACW,OAAO;IAEvC,IAAIiB,QAAqChB;IACzC,MAAMiB,eAAe,CAAC,EAAEb,SAASd,kBAAkB,CAAC,EAClDQ,gBAAgB,MAAM,CAAC,QAAQ,EAAEoB,uBAAuB,CAAC,GAAG/B,QAAQW,aACrE,EAAEM,SAAST,kBAAkB,IAAI,GAAG,CAAC;IAEtC,IAAIE,IAAI,CAAC,0BAA0B,EAAE;QACnCmB,QAAQC;IACV,OAAO,IAAIpB,IAAI,CAAC,yBAAyB,EAAE;QACzCmB,QAAQnB,IAAI,CAAC,yBAAyB;IACxC,OAAO;QACLmB,QAAQ,MAAM9B,EAAEiC,IAAI,CAAC;YACnBV,cAAcQ;YACdP,SAAS,CAAC,MAAM,EAAEN,SAASb,KAAK,CAAC6B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC;QACpE;QACA,IAAIlC,EAAE2B,QAAQ,CAACG,QAAQ;YACrBF,QAAQC,IAAI,CAAC;QACf;IACF;IAEA,OAAO;QACLM,MAAMjB,SAASZ,KAAK;QACpBwB;IACF;AACF;AAEA,SAASE;IACP,OAAO,AAACI,CAAAA,KAAKC,MAAM,KAAKD,KAAKE,GAAG,CAAC,IAAI,EAAC,EAAGC,OAAO,CAAC;AACnD"}
|
package/dist/lib/templates.js
CHANGED
@@ -14,7 +14,13 @@ export function getValidTemplates() {
|
|
14
14
|
name: 'blank',
|
15
15
|
type: 'starter',
|
16
16
|
description: 'Blank 3.0 Template',
|
17
|
-
url: 'https://github.com/payloadcms/payload/templates/blank
|
17
|
+
url: 'https://github.com/payloadcms/payload/templates/blank#beta'
|
18
|
+
},
|
19
|
+
{
|
20
|
+
name: 'website',
|
21
|
+
type: 'starter',
|
22
|
+
description: 'Website Template',
|
23
|
+
url: 'https://github.com/payloadcms/payload/templates/website#beta'
|
18
24
|
}
|
19
25
|
];
|
20
26
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/templates.ts"],"sourcesContent":["import type { ProjectTemplate } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport function validateTemplate(templateName: string): boolean {\n const validTemplates = getValidTemplates()\n if (!validTemplates.map((t) => t.name).includes(templateName)) {\n error(`'${templateName}' is not a valid template.`)\n info(`Valid templates: ${validTemplates.map((t) => t.name).join(', ')}`)\n return false\n }\n return true\n}\n\nexport function getValidTemplates(): ProjectTemplate[] {\n return [\n {\n name: 'blank',\n type: 'starter',\n description: 'Blank 3.0 Template',\n url: 'https://github.com/payloadcms/payload/templates/blank
|
1
|
+
{"version":3,"sources":["../../src/lib/templates.ts"],"sourcesContent":["import type { ProjectTemplate } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport function validateTemplate(templateName: string): boolean {\n const validTemplates = getValidTemplates()\n if (!validTemplates.map((t) => t.name).includes(templateName)) {\n error(`'${templateName}' is not a valid template.`)\n info(`Valid templates: ${validTemplates.map((t) => t.name).join(', ')}`)\n return false\n }\n return true\n}\n\nexport function getValidTemplates(): ProjectTemplate[] {\n return [\n {\n name: 'blank',\n type: 'starter',\n description: 'Blank 3.0 Template',\n url: 'https://github.com/payloadcms/payload/templates/blank#beta',\n },\n {\n name: 'website',\n type: 'starter',\n description: 'Website Template',\n url: 'https://github.com/payloadcms/payload/templates/website#beta',\n },\n\n // Remove these until they have been updated for 3.0\n\n // {\n // name: 'blank',\n // type: 'starter',\n // description: 'Blank Template',\n // url: 'https://github.com/payloadcms/payload/templates/blank',\n // },\n // {\n // name: 'ecommerce',\n // type: 'starter',\n // description: 'E-commerce Template',\n // url: 'https://github.com/payloadcms/payload/templates/ecommerce',\n // },\n // {\n // name: 'plugin',\n // type: 'plugin',\n // description: 'Template for creating a Payload plugin',\n // url: 'https://github.com/payloadcms/payload-plugin-template#beta',\n // },\n // {\n // name: 'payload-demo',\n // type: 'starter',\n // description: 'Payload demo site at https://demo.payloadcms.com',\n // url: 'https://github.com/payloadcms/public-demo',\n // },\n // {\n // name: 'payload-website',\n // type: 'starter',\n // description: 'Payload website CMS at https://payloadcms.com',\n // url: 'https://github.com/payloadcms/website-cms',\n // },\n ]\n}\n"],"names":["error","info","validateTemplate","templateName","validTemplates","getValidTemplates","map","t","name","includes","join","type","description","url"],"mappings":"AAEA,SAASA,KAAK,EAAEC,IAAI,QAAQ,kBAAiB;AAE7C,OAAO,SAASC,iBAAiBC,YAAoB;IACnD,MAAMC,iBAAiBC;IACvB,IAAI,CAACD,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEC,QAAQ,CAACN,eAAe;QAC7DH,MAAM,CAAC,CAAC,EAAEG,aAAa,0BAA0B,CAAC;QAClDF,KAAK,CAAC,iBAAiB,EAAEG,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEE,IAAI,CAAC,MAAM,CAAC;QACvE,OAAO;IACT;IACA,OAAO;AACT;AAEA,OAAO,SAASL;IACd,OAAO;QACL;YACEG,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;KAkCD;AACH"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"update-payload-in-project.d.ts","sourceRoot":"","sources":["../../src/lib/update-payload-in-project.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAOjD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,
|
1
|
+
{"version":3,"file":"update-payload-in-project.d.ts","sourceRoot":"","sources":["../../src/lib/update-payload-in-project.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAOjD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA2EhD"}
|
@@ -9,10 +9,12 @@ import { info } from '../utils/log.js';
|
|
9
9
|
import { getPackageManager } from './get-package-manager.js';
|
10
10
|
import { installPackages } from './install-packages.js';
|
11
11
|
export async function updatePayloadInProject(appDetails) {
|
12
|
-
if (!appDetails.nextConfigPath)
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
if (!appDetails.nextConfigPath) {
|
13
|
+
return {
|
14
|
+
message: 'No Next.js config found',
|
15
|
+
success: false
|
16
|
+
};
|
17
|
+
}
|
16
18
|
const projectDir = path.dirname(appDetails.nextConfigPath);
|
17
19
|
const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'));
|
18
20
|
if (!packageObj?.dependencies) {
|
@@ -59,7 +61,7 @@ export async function updatePayloadInProject(appDetails) {
|
|
59
61
|
}
|
60
62
|
info('Payload packages updated successfully.');
|
61
63
|
info(`Updating Payload Next.js files...`);
|
62
|
-
const templateFilesPath =
|
64
|
+
const templateFilesPath = process.env.JEST_WORKER_ID !== undefined ? path.resolve(dirname, '../../../../templates/blank') : path.resolve(dirname, '../..', 'dist/template');
|
63
65
|
const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)');
|
64
66
|
copyRecursiveSync(templateSrcDir, path.resolve(projectDir, appDetails.isSrcDir ? 'src/app' : 'app', '(payload)'));
|
65
67
|
return {
|