create-payload-app 3.0.0-beta.11 → 3.0.0-beta.111
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 +96 -21
- 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 +17 -5
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/create-project.spec.js +27 -31
- 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.d.ts +6 -0
- package/dist/lib/get-package-manager.d.ts.map +1 -0
- package/dist/lib/get-package-manager.js +50 -0
- package/dist/lib/get-package-manager.js.map +1 -0
- package/dist/lib/init-next.d.ts +3 -11
- package/dist/lib/init-next.d.ts.map +1 -1
- package/dist/lib/init-next.js +84 -59
- package/dist/lib/init-next.js.map +1 -1
- package/dist/lib/install-packages.d.ts +9 -0
- package/dist/lib/install-packages.d.ts.map +1 -0
- package/dist/lib/install-packages.js +43 -0
- package/dist/lib/install-packages.js.map +1 -0
- 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 +23 -14
- package/dist/lib/select-db.js.map +1 -1
- package/dist/lib/templates.js +8 -2
- package/dist/lib/templates.js.map +1 -1
- package/dist/lib/update-payload-in-project.d.ts +6 -0
- package/dist/lib/update-payload-in-project.d.ts.map +1 -0
- package/dist/lib/update-payload-in-project.js +73 -0
- package/dist/lib/update-payload-in-project.js.map +1 -0
- 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 +35 -22
- 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 +24 -0
- package/dist/template/src/app/(payload)/admin/[[...segments]]/page.tsx +14 -7
- package/dist/template/src/app/(payload)/admin/importMap.js +1 -0
- package/dist/template/src/app/(payload)/api/[...slug]/route.ts +3 -2
- package/dist/template/src/app/(payload)/api/graphql/route.ts +1 -1
- package/dist/template/src/app/(payload)/api/graphql-playground/route.ts +1 -1
- package/dist/template/src/app/(payload)/layout.tsx +7 -2
- 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 +15 -1
- 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.d.ts +4 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +46 -0
- package/dist/utils/git.js.map +1 -0
- 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 +39 -23
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/get-package-manager.ts"],"sourcesContent":["import execa from 'execa'\nimport fse from 'fs-extra'\n\nimport type { CliArgs, PackageManager } from '../types.js'\n\nexport async function getPackageManager(args: {\n cliArgs?: CliArgs\n projectDir: string\n}): Promise<PackageManager> {\n const { cliArgs, projectDir } = args\n\n try {\n // Check for flag or lockfile\n let detected: PackageManager = 'npm'\n if (cliArgs?.['--use-pnpm'] || fse.existsSync(`${projectDir}/pnpm-lock.yaml`)) {\n detected = 'pnpm'\n } else if (cliArgs?.['--use-yarn'] || fse.existsSync(`${projectDir}/yarn.lock`)) {\n detected = 'yarn'\n } else if (cliArgs?.['--use-npm'] || fse.existsSync(`${projectDir}/package-lock.json`)) {\n detected = 'npm'\n } else if (cliArgs?.['--use-bun'] || fse.existsSync(`${projectDir}/bun.lockb`)) {\n detected = 'bun'\n } else if (await commandExists('pnpm')) {\n // Prefer pnpm if it's installed\n detected = 'pnpm'\n } else {\n // Otherwise check the execution environment\n detected = getEnvironmentPackageManager()\n }\n\n return detected\n } catch (ignore) {\n return 'npm'\n }\n}\n\nfunction getEnvironmentPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent || ''\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn'\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm'\n }\n\n if (userAgent.startsWith('bun')) {\n return 'bun'\n }\n\n return 'npm'\n}\n\nasync function commandExists(command: string): Promise<boolean> {\n try {\n await execa.command(`command -v ${command}`)\n return true\n } catch {\n return false\n }\n}\n"],"names":["execa","fse","getPackageManager","args","cliArgs","projectDir","detected","existsSync","commandExists","getEnvironmentPackageManager","ignore","userAgent","process","env","npm_config_user_agent","startsWith","command"],"mappings":"AAAA,OAAOA,WAAW,QAAO;AACzB,OAAOC,SAAS,WAAU;AAI1B,OAAO,eAAeC,kBAAkBC,IAGvC;IACC,MAAM,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAGF;IAEhC,IAAI;QACF,6BAA6B;QAC7B,IAAIG,WAA2B;QAC/B,IAAIF,SAAS,CAAC,aAAa,IAAIH,IAAIM,UAAU,CAAC,CAAC,EAAEF,WAAW,eAAe,CAAC,GAAG;YAC7EC,WAAW;QACb,OAAO,IAAIF,SAAS,CAAC,aAAa,IAAIH,IAAIM,UAAU,CAAC,CAAC,EAAEF,WAAW,UAAU,CAAC,GAAG;YAC/EC,WAAW;QACb,OAAO,IAAIF,SAAS,CAAC,YAAY,IAAIH,IAAIM,UAAU,CAAC,CAAC,EAAEF,WAAW,kBAAkB,CAAC,GAAG;YACtFC,WAAW;QACb,OAAO,IAAIF,SAAS,CAAC,YAAY,IAAIH,IAAIM,UAAU,CAAC,CAAC,EAAEF,WAAW,UAAU,CAAC,GAAG;YAC9EC,WAAW;QACb,OAAO,IAAI,MAAME,cAAc,SAAS;YACtC,gCAAgC;YAChCF,WAAW;QACb,OAAO;YACL,4CAA4C;YAC5CA,WAAWG;QACb;QAEA,OAAOH;IACT,EAAE,OAAOI,QAAQ;QACf,OAAO;IACT;AACF;AAEA,SAASD;IACP,MAAME,YAAYC,QAAQC,GAAG,CAACC,qBAAqB,IAAI;IAEvD,IAAIH,UAAUI,UAAU,CAAC,SAAS;QAChC,OAAO;IACT;IAEA,IAAIJ,UAAUI,UAAU,CAAC,SAAS;QAChC,OAAO;IACT;IAEA,IAAIJ,UAAUI,UAAU,CAAC,QAAQ;QAC/B,OAAO;IACT;IAEA,OAAO;AACT;AAEA,eAAeP,cAAcQ,OAAe;IAC1C,IAAI;QACF,MAAMhB,MAAMgB,OAAO,CAAC,CAAC,WAAW,EAAEA,QAAQ,CAAC;QAC3C,OAAO;IACT,EAAE,OAAM;QACN,OAAO;IACT;AACF"}
|
package/dist/lib/init-next.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import type { CliArgs, DbType, PackageManager } from '../types.js';
|
|
2
|
-
type InitNextArgs =
|
|
1
|
+
import type { CliArgs, DbType, NextAppDetails, PackageManager } from '../types.js';
|
|
2
|
+
type InitNextArgs = {
|
|
3
3
|
dbType: DbType;
|
|
4
4
|
nextAppDetails?: NextAppDetails;
|
|
5
5
|
packageManager: PackageManager;
|
|
6
6
|
projectDir: string;
|
|
7
7
|
useDistFiles?: boolean;
|
|
8
|
-
}
|
|
9
|
-
type NextConfigType = 'cjs' | 'esm';
|
|
8
|
+
} & Pick<CliArgs, '--debug'>;
|
|
10
9
|
type InitNextResult = {
|
|
11
10
|
isSrcDir: boolean;
|
|
12
11
|
nextAppDir: string;
|
|
@@ -19,13 +18,6 @@ type InitNextResult = {
|
|
|
19
18
|
success: false;
|
|
20
19
|
};
|
|
21
20
|
export declare function initNext(args: InitNextArgs): Promise<InitNextResult>;
|
|
22
|
-
type NextAppDetails = {
|
|
23
|
-
hasTopLevelLayout: boolean;
|
|
24
|
-
isSrcDir: boolean;
|
|
25
|
-
nextAppDir?: string;
|
|
26
|
-
nextConfigPath?: string;
|
|
27
|
-
nextConfigType?: NextConfigType;
|
|
28
|
-
};
|
|
29
21
|
export declare function getNextAppDetails(projectDir: string): Promise<NextAppDetails>;
|
|
30
22
|
export {};
|
|
31
23
|
//# sourceMappingURL=init-next.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AAclG,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAE5B,KAAK,cAAc,GACf;IACE,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,IAAI,CAAA;CACd,GACD;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAA;AAE9E,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAgE1E;AAqID,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2FnF"}
|
package/dist/lib/init-next.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
2
|
import { parse, stringify } from 'comment-json';
|
|
3
|
-
import execa from 'execa';
|
|
4
3
|
import fs from 'fs';
|
|
5
4
|
import fse from 'fs-extra';
|
|
6
5
|
import globby from 'globby';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
7
|
import path from 'path';
|
|
8
8
|
import { promisify } from 'util';
|
|
9
|
-
const readFile = promisify(fs.readFile);
|
|
10
|
-
const writeFile = promisify(fs.writeFile);
|
|
11
|
-
const filename = fileURLToPath(import.meta.url);
|
|
12
|
-
const dirname = path.dirname(filename);
|
|
13
|
-
import { fileURLToPath } from 'node:url';
|
|
14
9
|
import { copyRecursiveSync } from '../utils/copy-recursive-sync.js';
|
|
15
10
|
import { debug as origDebug, warning } from '../utils/log.js';
|
|
16
11
|
import { moveMessage } from '../utils/messages.js';
|
|
12
|
+
import { installPackages } from './install-packages.js';
|
|
17
13
|
import { wrapNextConfig } from './wrap-next-config.js';
|
|
14
|
+
const readFile = promisify(fs.readFile);
|
|
15
|
+
const writeFile = promisify(fs.writeFile);
|
|
16
|
+
const filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const dirname = path.dirname(filename);
|
|
18
18
|
export async function initNext(args) {
|
|
19
19
|
const { dbType: dbType, packageManager, projectDir } = args;
|
|
20
20
|
const nextAppDetails = args.nextAppDetails || await getNextAppDetails(projectDir);
|
|
@@ -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,
|
|
@@ -95,6 +95,8 @@ async function addPayloadConfigToTsConfig(projectDir, isSrcDir) {
|
|
|
95
95
|
encoding: 'utf8'
|
|
96
96
|
});
|
|
97
97
|
const userTsConfig = parse(userTsConfigContent);
|
|
98
|
+
const hasBaseUrl = userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.';
|
|
99
|
+
const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './';
|
|
98
100
|
if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {
|
|
99
101
|
userTsConfig.compilerOptions = {};
|
|
100
102
|
}
|
|
@@ -102,7 +104,7 @@ async function addPayloadConfigToTsConfig(projectDir, isSrcDir) {
|
|
|
102
104
|
userTsConfig.compilerOptions.paths = {
|
|
103
105
|
...userTsConfig.compilerOptions.paths || {},
|
|
104
106
|
'@payload-config': [
|
|
105
|
-
|
|
107
|
+
`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`
|
|
106
108
|
]
|
|
107
109
|
};
|
|
108
110
|
await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), {
|
|
@@ -110,7 +112,7 @@ async function addPayloadConfigToTsConfig(projectDir, isSrcDir) {
|
|
|
110
112
|
});
|
|
111
113
|
}
|
|
112
114
|
}
|
|
113
|
-
function installAndConfigurePayload(args) {
|
|
115
|
+
async function installAndConfigurePayload(args) {
|
|
114
116
|
const { '--debug': debug, nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {}, nextConfigType, projectDir, useDistFiles } = args;
|
|
115
117
|
if (!nextAppDir || !nextConfigPath) {
|
|
116
118
|
return {
|
|
@@ -119,7 +121,9 @@ function installAndConfigurePayload(args) {
|
|
|
119
121
|
};
|
|
120
122
|
}
|
|
121
123
|
const logDebug = (message)=>{
|
|
122
|
-
if (debug)
|
|
124
|
+
if (debug) {
|
|
125
|
+
origDebug(message);
|
|
126
|
+
}
|
|
123
127
|
};
|
|
124
128
|
if (!fs.existsSync(projectDir)) {
|
|
125
129
|
return {
|
|
@@ -127,7 +131,7 @@ function installAndConfigurePayload(args) {
|
|
|
127
131
|
success: false
|
|
128
132
|
};
|
|
129
133
|
}
|
|
130
|
-
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');
|
|
131
135
|
logDebug(`Using template files from: ${templateFilesPath}`);
|
|
132
136
|
if (!fs.existsSync(templateFilesPath)) {
|
|
133
137
|
return {
|
|
@@ -146,9 +150,9 @@ function installAndConfigurePayload(args) {
|
|
|
146
150
|
logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`);
|
|
147
151
|
logDebug(`isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`);
|
|
148
152
|
// This is a little clunky and needs to account for isSrcDir
|
|
149
|
-
copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath)
|
|
153
|
+
copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath));
|
|
150
154
|
// Wrap next.config.js with withPayload
|
|
151
|
-
wrapNextConfig({
|
|
155
|
+
await wrapNextConfig({
|
|
152
156
|
nextConfigPath,
|
|
153
157
|
nextConfigType
|
|
154
158
|
});
|
|
@@ -161,52 +165,22 @@ async function installDeps(projectDir, packageManager, dbType) {
|
|
|
161
165
|
const packagesToInstall = [
|
|
162
166
|
'payload',
|
|
163
167
|
'@payloadcms/next',
|
|
164
|
-
'@payloadcms/richtext-lexical'
|
|
168
|
+
'@payloadcms/richtext-lexical',
|
|
169
|
+
'@payloadcms/plugin-cloud'
|
|
165
170
|
].map((pkg)=>`${pkg}@beta`);
|
|
166
171
|
packagesToInstall.push(`@payloadcms/db-${dbType}@beta`);
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
...packagesToInstall
|
|
175
|
-
], {
|
|
176
|
-
cwd: projectDir
|
|
177
|
-
}));
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
case 'yarn':
|
|
181
|
-
case 'pnpm':
|
|
182
|
-
{
|
|
183
|
-
({ exitCode } = await execa(packageManager, [
|
|
184
|
-
'add',
|
|
185
|
-
...packagesToInstall
|
|
186
|
-
], {
|
|
187
|
-
cwd: projectDir
|
|
188
|
-
}));
|
|
189
|
-
break;
|
|
190
|
-
}
|
|
191
|
-
case 'bun':
|
|
192
|
-
{
|
|
193
|
-
warning('Bun support is untested.');
|
|
194
|
-
({ exitCode } = await execa('bun', [
|
|
195
|
-
'add',
|
|
196
|
-
...packagesToInstall
|
|
197
|
-
], {
|
|
198
|
-
cwd: projectDir
|
|
199
|
-
}));
|
|
200
|
-
break;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return {
|
|
204
|
-
success: exitCode === 0
|
|
205
|
-
};
|
|
172
|
+
// Match graphql version of @payloadcms/next
|
|
173
|
+
packagesToInstall.push('graphql@^16.8.1');
|
|
174
|
+
return await installPackages({
|
|
175
|
+
packageManager,
|
|
176
|
+
packagesToInstall,
|
|
177
|
+
projectDir
|
|
178
|
+
});
|
|
206
179
|
}
|
|
207
180
|
export async function getNextAppDetails(projectDir) {
|
|
208
181
|
const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'));
|
|
209
|
-
|
|
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', {
|
|
210
184
|
absolute: true,
|
|
211
185
|
cwd: projectDir
|
|
212
186
|
}))?.[0];
|
|
@@ -214,7 +188,50 @@ export async function getNextAppDetails(projectDir) {
|
|
|
214
188
|
return {
|
|
215
189
|
hasTopLevelLayout: false,
|
|
216
190
|
isSrcDir,
|
|
217
|
-
|
|
191
|
+
isSupportedNextVersion: false,
|
|
192
|
+
nextConfigPath: undefined,
|
|
193
|
+
nextVersion: null
|
|
194
|
+
};
|
|
195
|
+
}
|
|
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
|
|
227
|
+
if (packageObj.dependencies?.payload) {
|
|
228
|
+
return {
|
|
229
|
+
hasTopLevelLayout: false,
|
|
230
|
+
isPayloadInstalled: true,
|
|
231
|
+
isSrcDir,
|
|
232
|
+
isSupportedNextVersion,
|
|
233
|
+
nextConfigPath,
|
|
234
|
+
nextVersion
|
|
218
235
|
};
|
|
219
236
|
}
|
|
220
237
|
let nextAppDir = (await globby([
|
|
@@ -230,24 +247,32 @@ export async function getNextAppDetails(projectDir) {
|
|
|
230
247
|
if (!nextAppDir || nextAppDir.length === 0) {
|
|
231
248
|
nextAppDir = undefined;
|
|
232
249
|
}
|
|
233
|
-
const configType =
|
|
250
|
+
const configType = getProjectType({
|
|
251
|
+
nextConfigPath,
|
|
252
|
+
packageObj
|
|
253
|
+
});
|
|
234
254
|
const hasTopLevelLayout = nextAppDir ? fs.existsSync(path.resolve(nextAppDir, 'layout.tsx')) : false;
|
|
235
255
|
return {
|
|
236
256
|
hasTopLevelLayout,
|
|
237
257
|
isSrcDir,
|
|
258
|
+
isSupportedNextVersion,
|
|
238
259
|
nextAppDir,
|
|
239
260
|
nextConfigPath,
|
|
240
|
-
nextConfigType: configType
|
|
261
|
+
nextConfigType: configType,
|
|
262
|
+
nextVersion
|
|
241
263
|
};
|
|
242
264
|
}
|
|
243
|
-
|
|
265
|
+
function getProjectType(args) {
|
|
266
|
+
const { nextConfigPath, packageObj } = args;
|
|
267
|
+
if (nextConfigPath.endsWith('.ts')) {
|
|
268
|
+
return 'ts';
|
|
269
|
+
}
|
|
244
270
|
if (nextConfigPath.endsWith('.mjs')) {
|
|
245
271
|
return 'esm';
|
|
246
272
|
}
|
|
247
273
|
if (nextConfigPath.endsWith('.cjs')) {
|
|
248
274
|
return 'cjs';
|
|
249
275
|
}
|
|
250
|
-
const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'));
|
|
251
276
|
const packageJsonType = packageObj.type;
|
|
252
277
|
if (packageJsonType === 'module') {
|
|
253
278
|
return 'esm';
|
|
@@ -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 path from 'path'\nimport { promisify } from 'util'\n\nconst readFile = promisify(fs.readFile)\nconst writeFile = promisify(fs.writeFile)\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport { fileURLToPath } from 'node:url'\n\nimport type { CliArgs, DbType, 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 { wrapNextConfig } from './wrap-next-config.js'\n\ntype InitNextArgs = Pick<CliArgs, '--debug'> & {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n}\n\ntype NextConfigType = 'cjs' | 'esm'\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 = 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\n const userTsConfigContent = await readFile(tsConfigPath, {\n encoding: 'utf8',\n })\n const userTsConfig = parse(userTsConfigContent) as {\n compilerOptions?: CompilerOptions\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': [`./${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 = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@beta`,\n )\n\n packagesToInstall.push(`@payloadcms/db-${dbType}@beta`)\n\n let exitCode = 0\n switch (packageManager) {\n case 'npm': {\n ;({ exitCode } = await execa('npm', ['install', '--save', ...packagesToInstall], {\n cwd: projectDir,\n }))\n break\n }\n case 'yarn':\n case 'pnpm': {\n ;({ exitCode } = await execa(packageManager, ['add', ...packagesToInstall], {\n cwd: projectDir,\n }))\n break\n }\n case 'bun': {\n warning('Bun support is untested.')\n ;({ exitCode } = await execa('bun', ['add', ...packagesToInstall], { cwd: projectDir }))\n break\n }\n }\n\n return { success: exitCode === 0 }\n}\n\ntype NextAppDetails = {\n hasTopLevelLayout: boolean\n isSrcDir: boolean\n nextAppDir?: string\n nextConfigPath?: string\n nextConfigType?: NextConfigType\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 if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n nextConfigPath: undefined,\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 = await getProjectType(projectDir, nextConfigPath)\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\nasync function getProjectType(projectDir: string, nextConfigPath: string): Promise<'cjs' | 'esm'> {\n if (nextConfigPath.endsWith('.mjs')) {\n return 'esm'\n }\n if (nextConfigPath.endsWith('.cjs')) {\n return 'cjs'\n }\n\n const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'))\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","execa","fs","fse","globby","path","promisify","readFile","writeFile","filename","fileURLToPath","url","dirname","copyRecursiveSync","debug","origDebug","warning","moveMessage","wrapNextConfig","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","compilerOptions","paths","nextConfigPath","logDebug","message","templateFilesPath","endsWith","templateSrcDir","payloadConfigPath","packagesToInstall","map","pkg","push","exitCode","cwd","absolute","length","undefined","ignore","onlyDirectories","configType","getProjectType","packageObj","readJson","packageJsonType","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import type { CompilerOptions } from 'typescript'\n\nimport * as p from '@clack/prompts'\nimport { parse, stringify } from 'comment-json'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\nimport { promisify } from 'util'\n\nimport type { CliArgs, DbType, NextAppDetails, NextConfigType, PackageManager } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { debug as origDebug, warning } from '../utils/log.js'\nimport { moveMessage } from '../utils/messages.js'\nimport { 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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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PackageManager } from '../types.js';
|
|
2
|
+
export declare function installPackages(args: {
|
|
3
|
+
packageManager: PackageManager;
|
|
4
|
+
packagesToInstall: string[];
|
|
5
|
+
projectDir: string;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
success: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=install-packages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-packages.d.ts","sourceRoot":"","sources":["../../src/lib/install-packages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;CACnB;;GA+BA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import execa from 'execa';
|
|
2
|
+
import { error, warning } from '../utils/log.js';
|
|
3
|
+
export async function installPackages(args) {
|
|
4
|
+
const { packageManager, packagesToInstall, projectDir } = args;
|
|
5
|
+
let exitCode = 0;
|
|
6
|
+
let stderr = '';
|
|
7
|
+
switch(packageManager){
|
|
8
|
+
case 'npm':
|
|
9
|
+
{
|
|
10
|
+
({ exitCode, stderr } = await execa('npm', [
|
|
11
|
+
'install',
|
|
12
|
+
'--save',
|
|
13
|
+
...packagesToInstall
|
|
14
|
+
], {
|
|
15
|
+
cwd: projectDir
|
|
16
|
+
}));
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
case 'yarn':
|
|
20
|
+
case 'pnpm':
|
|
21
|
+
case 'bun':
|
|
22
|
+
{
|
|
23
|
+
if (packageManager === 'bun') {
|
|
24
|
+
warning('Bun support is untested.');
|
|
25
|
+
}
|
|
26
|
+
({ exitCode, stderr } = await execa(packageManager, [
|
|
27
|
+
'add',
|
|
28
|
+
...packagesToInstall
|
|
29
|
+
], {
|
|
30
|
+
cwd: projectDir
|
|
31
|
+
}));
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (exitCode !== 0) {
|
|
36
|
+
error(`Unable to install packages. Error: ${stderr}`);
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
success: exitCode === 0
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=install-packages.js.map
|
|
@@ -0,0 +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"],"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
|