create-payload-app 4.0.0-internal.5d5a2b2 → 4.0.0-internal.63f8536
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +1 -1
- package/dist/lib/configure-pnpm-builds.d.ts +20 -0
- package/dist/lib/configure-pnpm-builds.d.ts.map +1 -0
- package/dist/lib/configure-pnpm-builds.js +100 -0
- package/dist/lib/configure-pnpm-builds.js.map +1 -0
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +13 -50
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/init-next.d.ts +1 -1
- package/dist/lib/init-next.d.ts.map +1 -1
- package/dist/lib/init-next.js +20 -4
- package/dist/lib/init-next.js.map +1 -1
- package/dist/lib/update-payload-in-project.d.ts +1 -1
- package/dist/lib/update-payload-in-project.d.ts.map +1 -1
- package/dist/lib/update-payload-in-project.js +6 -5
- package/dist/lib/update-payload-in-project.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -5
- package/dist/main.js.map +1 -1
- package/dist/template/src/app/(payload)/admin/importMap.js +0 -2
- package/dist/template/src/payload-types.ts +10 -116
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +1 -0
- package/dist/utils/messages.js.map +1 -1
- package/dist/utils/resolvePackageVersion.d.ts +29 -0
- package/dist/utils/resolvePackageVersion.d.ts.map +1 -0
- package/dist/utils/resolvePackageVersion.js +41 -0
- package/dist/utils/resolvePackageVersion.js.map +1 -0
- package/dist/utils/resolvePackageVersion.spec.js +77 -0
- package/dist/utils/resolvePackageVersion.spec.js.map +1 -0
- package/package.json +2 -2
- package/dist/utils/getLatestPackageVersion.d.ts +0 -17
- package/dist/utils/getLatestPackageVersion.d.ts.map +0 -1
- package/dist/utils/getLatestPackageVersion.js +0 -20
- package/dist/utils/getLatestPackageVersion.js.map +0 -1
package/LICENSE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2018-
|
|
3
|
+
Copyright (c) 2018-2026 Payload CMS, LLC <info@payloadcms.com>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
6
|
a copy of this software and associated documentation files (the
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PackageManager } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* pnpm v11 fails installs that have unapproved dependency build scripts, reading approvals only from
|
|
4
|
+
* pnpm-workspace.yaml (the `pnpm` field in package.json is ignored). create-next-app now scaffolds a
|
|
5
|
+
* placeholder `allowBuilds` block (sharp/unrs-resolver left unset) plus an `ignoredBuiltDependencies`
|
|
6
|
+
* denylist, so we must merge rather than skip: force Payload's build scripts to `true` and remove them
|
|
7
|
+
* from the denylist. No-op for non-pnpm package managers.
|
|
8
|
+
*/
|
|
9
|
+
export declare function ensurePnpmBuildApprovals(args: {
|
|
10
|
+
packageManager: PackageManager;
|
|
11
|
+
projectDir: string;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Merges Payload's required build approvals into a pnpm-workspace.yaml string. Pure and idempotent:
|
|
15
|
+
* sets each required package to `true` under `allowBuilds` (adding the block if missing) and strips
|
|
16
|
+
* those packages from any `ignoredBuiltDependencies` denylist. Top-level keys are detected by a
|
|
17
|
+
* zero-indent `key:`, with their two-space children grouped beneath them.
|
|
18
|
+
*/
|
|
19
|
+
export declare function upsertBuildApprovals(content: string): string;
|
|
20
|
+
//# sourceMappingURL=configure-pnpm-builds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-pnpm-builds.d.ts","sourceRoot":"","sources":["../../src/lib/configure-pnpm-builds.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAWjD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhB;AAOD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkC5D"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import fse from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/*
|
|
4
|
+
* Build scripts pnpm v11 must be allowed to run for the projects create-payload-app scaffolds;
|
|
5
|
+
* otherwise the install fails with ERR_PNPM_IGNORED_BUILDS. esbuild/sharp/unrs-resolver cover the
|
|
6
|
+
* default templates; workerd is required by with-cloudflare-d1.
|
|
7
|
+
* TODO(follow-up): the CI drift guard only verifies the blank template — extend it across every
|
|
8
|
+
* getValidTemplates() entry so this single list can't drift per-template.
|
|
9
|
+
*/ const ALLOWED_BUILDS = [
|
|
10
|
+
'esbuild',
|
|
11
|
+
'sharp',
|
|
12
|
+
'unrs-resolver',
|
|
13
|
+
'workerd'
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* pnpm v11 fails installs that have unapproved dependency build scripts, reading approvals only from
|
|
17
|
+
* pnpm-workspace.yaml (the `pnpm` field in package.json is ignored). create-next-app now scaffolds a
|
|
18
|
+
* placeholder `allowBuilds` block (sharp/unrs-resolver left unset) plus an `ignoredBuiltDependencies`
|
|
19
|
+
* denylist, so we must merge rather than skip: force Payload's build scripts to `true` and remove them
|
|
20
|
+
* from the denylist. No-op for non-pnpm package managers.
|
|
21
|
+
*/ export async function ensurePnpmBuildApprovals(args) {
|
|
22
|
+
const { packageManager, projectDir } = args;
|
|
23
|
+
if (packageManager !== 'pnpm') {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const workspacePath = path.join(projectDir, 'pnpm-workspace.yaml');
|
|
27
|
+
const existing = await fse.pathExists(workspacePath) ? await fse.readFile(workspacePath, 'utf-8') : '';
|
|
28
|
+
await fse.writeFile(workspacePath, upsertBuildApprovals(existing));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Merges Payload's required build approvals into a pnpm-workspace.yaml string. Pure and idempotent:
|
|
32
|
+
* sets each required package to `true` under `allowBuilds` (adding the block if missing) and strips
|
|
33
|
+
* those packages from any `ignoredBuiltDependencies` denylist. Top-level keys are detected by a
|
|
34
|
+
* zero-indent `key:`, with their two-space children grouped beneath them.
|
|
35
|
+
*/ export function upsertBuildApprovals(content) {
|
|
36
|
+
const blocks = toTopLevelBlocks(content);
|
|
37
|
+
const ignored = blocks.find((block)=>block.key === 'ignoredBuiltDependencies');
|
|
38
|
+
if (ignored) {
|
|
39
|
+
ignored.lines = ignored.lines.filter((line, index)=>{
|
|
40
|
+
if (index === 0) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
const name = /^\s*-\s*'?([^'\s]+)'?\s*$/.exec(line)?.[1];
|
|
44
|
+
return !(name && ALLOWED_BUILDS.includes(name));
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const allow = blocks.find((block)=>block.key === 'allowBuilds');
|
|
48
|
+
if (allow) {
|
|
49
|
+
for (const name of ALLOWED_BUILDS){
|
|
50
|
+
const pattern = new RegExp(`^\\s+'?${escapeRegExp(name)}'?:`);
|
|
51
|
+
const index = allow.lines.findIndex((line)=>pattern.test(line));
|
|
52
|
+
if (index >= 0) {
|
|
53
|
+
allow.lines[index] = ` ${name}: true`;
|
|
54
|
+
} else {
|
|
55
|
+
allow.lines.push(` ${name}: true`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
blocks.push({
|
|
60
|
+
key: 'allowBuilds',
|
|
61
|
+
lines: [
|
|
62
|
+
'allowBuilds:',
|
|
63
|
+
...ALLOWED_BUILDS.map((name)=>` ${name}: true`)
|
|
64
|
+
]
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
const output = blocks.flatMap((block)=>block.lines).join('\n');
|
|
68
|
+
return output.endsWith('\n') ? output : `${output}\n`;
|
|
69
|
+
}
|
|
70
|
+
function toTopLevelBlocks(content) {
|
|
71
|
+
const lines = content.length ? content.replace(/\n$/, '').split('\n') : [];
|
|
72
|
+
const blocks = [];
|
|
73
|
+
for (const line of lines){
|
|
74
|
+
const key = /^[^\s#]/.test(line) ? /^([^:]+):/.exec(line)?.[1] : undefined;
|
|
75
|
+
const current = blocks[blocks.length - 1];
|
|
76
|
+
if (key !== undefined) {
|
|
77
|
+
blocks.push({
|
|
78
|
+
key,
|
|
79
|
+
lines: [
|
|
80
|
+
line
|
|
81
|
+
]
|
|
82
|
+
});
|
|
83
|
+
} else if (current) {
|
|
84
|
+
current.lines.push(line);
|
|
85
|
+
} else {
|
|
86
|
+
blocks.push({
|
|
87
|
+
key: null,
|
|
88
|
+
lines: [
|
|
89
|
+
line
|
|
90
|
+
]
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return blocks;
|
|
95
|
+
}
|
|
96
|
+
function escapeRegExp(value) {
|
|
97
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=configure-pnpm-builds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/configure-pnpm-builds.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport path from 'path'\n\nimport type { PackageManager } from '../types.js'\n\n/*\n * Build scripts pnpm v11 must be allowed to run for the projects create-payload-app scaffolds;\n * otherwise the install fails with ERR_PNPM_IGNORED_BUILDS. esbuild/sharp/unrs-resolver cover the\n * default templates; workerd is required by with-cloudflare-d1.\n * TODO(follow-up): the CI drift guard only verifies the blank template — extend it across every\n * getValidTemplates() entry so this single list can't drift per-template.\n */\nconst ALLOWED_BUILDS = ['esbuild', 'sharp', 'unrs-resolver', 'workerd']\n\n/**\n * pnpm v11 fails installs that have unapproved dependency build scripts, reading approvals only from\n * pnpm-workspace.yaml (the `pnpm` field in package.json is ignored). create-next-app now scaffolds a\n * placeholder `allowBuilds` block (sharp/unrs-resolver left unset) plus an `ignoredBuiltDependencies`\n * denylist, so we must merge rather than skip: force Payload's build scripts to `true` and remove them\n * from the denylist. No-op for non-pnpm package managers.\n */\nexport async function ensurePnpmBuildApprovals(args: {\n packageManager: PackageManager\n projectDir: string\n}): Promise<void> {\n const { packageManager, projectDir } = args\n if (packageManager !== 'pnpm') {\n return\n }\n\n const workspacePath = path.join(projectDir, 'pnpm-workspace.yaml')\n const existing = (await fse.pathExists(workspacePath))\n ? await fse.readFile(workspacePath, 'utf-8')\n : ''\n\n await fse.writeFile(workspacePath, upsertBuildApprovals(existing))\n}\n\ntype WorkspaceBlock = {\n key: null | string\n lines: string[]\n}\n\n/**\n * Merges Payload's required build approvals into a pnpm-workspace.yaml string. Pure and idempotent:\n * sets each required package to `true` under `allowBuilds` (adding the block if missing) and strips\n * those packages from any `ignoredBuiltDependencies` denylist. Top-level keys are detected by a\n * zero-indent `key:`, with their two-space children grouped beneath them.\n */\nexport function upsertBuildApprovals(content: string): string {\n const blocks = toTopLevelBlocks(content)\n\n const ignored = blocks.find((block) => block.key === 'ignoredBuiltDependencies')\n if (ignored) {\n ignored.lines = ignored.lines.filter((line, index) => {\n if (index === 0) {\n return true\n }\n const name = /^\\s*-\\s*'?([^'\\s]+)'?\\s*$/.exec(line)?.[1]\n return !(name && ALLOWED_BUILDS.includes(name))\n })\n }\n\n const allow = blocks.find((block) => block.key === 'allowBuilds')\n if (allow) {\n for (const name of ALLOWED_BUILDS) {\n const pattern = new RegExp(`^\\\\s+'?${escapeRegExp(name)}'?:`)\n const index = allow.lines.findIndex((line) => pattern.test(line))\n if (index >= 0) {\n allow.lines[index] = ` ${name}: true`\n } else {\n allow.lines.push(` ${name}: true`)\n }\n }\n } else {\n blocks.push({\n key: 'allowBuilds',\n lines: ['allowBuilds:', ...ALLOWED_BUILDS.map((name) => ` ${name}: true`)],\n })\n }\n\n const output = blocks.flatMap((block) => block.lines).join('\\n')\n return output.endsWith('\\n') ? output : `${output}\\n`\n}\n\nfunction toTopLevelBlocks(content: string): WorkspaceBlock[] {\n const lines = content.length ? content.replace(/\\n$/, '').split('\\n') : []\n const blocks: WorkspaceBlock[] = []\n\n for (const line of lines) {\n const key = /^[^\\s#]/.test(line) ? /^([^:]+):/.exec(line)?.[1] : undefined\n const current = blocks[blocks.length - 1]\n if (key !== undefined) {\n blocks.push({ key, lines: [line] })\n } else if (current) {\n current.lines.push(line)\n } else {\n blocks.push({ key: null, lines: [line] })\n }\n }\n\n return blocks\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n"],"names":["fse","path","ALLOWED_BUILDS","ensurePnpmBuildApprovals","args","packageManager","projectDir","workspacePath","join","existing","pathExists","readFile","writeFile","upsertBuildApprovals","content","blocks","toTopLevelBlocks","ignored","find","block","key","lines","filter","line","index","name","exec","includes","allow","pattern","RegExp","escapeRegExp","findIndex","test","push","map","output","flatMap","endsWith","length","replace","split","undefined","current","value"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;AA4DpB,KAAK,iBAAiB,GAClB;IACE,OAAO,EAAE,cAAc,CAAA;CACxB,GACD;IACE,QAAQ,EAAE,eAAe,CAAA;CAC1B,CAAA;AAEL,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,iBAAiB,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Hf;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,IAAI,CAiBP"}
|
|
@@ -6,8 +6,10 @@ import { fileURLToPath } from 'node:url';
|
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { tryInitRepoAndCommit } from '../utils/git.js';
|
|
8
8
|
import { debug, error, info, warning } from '../utils/log.js';
|
|
9
|
+
import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
9
10
|
import { configurePayloadConfig } from './configure-payload-config.js';
|
|
10
11
|
import { configurePluginProject } from './configure-plugin-project.js';
|
|
12
|
+
import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
|
|
11
13
|
import { downloadExample } from './download-example.js';
|
|
12
14
|
import { downloadSkill } from './download-skill.js';
|
|
13
15
|
import { downloadTemplate } from './download-template.js';
|
|
@@ -35,6 +37,10 @@ async function installDeps(args) {
|
|
|
35
37
|
} else if (packageManager === 'bun') {
|
|
36
38
|
installCmd = 'bun install';
|
|
37
39
|
}
|
|
40
|
+
await ensurePnpmBuildApprovals({
|
|
41
|
+
packageManager,
|
|
42
|
+
projectDir
|
|
43
|
+
});
|
|
38
44
|
try {
|
|
39
45
|
await execa.command(installCmd, {
|
|
40
46
|
cwd: path.resolve(projectDir)
|
|
@@ -82,23 +88,14 @@ export async function createProject(args) {
|
|
|
82
88
|
projectDir
|
|
83
89
|
});
|
|
84
90
|
}
|
|
91
|
+
const versionOrTag = cliArgs['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG;
|
|
85
92
|
const spinner = p.spinner();
|
|
86
|
-
spinner.start(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
version: versionFromCli
|
|
93
|
-
});
|
|
94
|
-
payloadVersion = versionFromCli;
|
|
95
|
-
spinner.stop(`Using provided version of Payload ${payloadVersion}`);
|
|
96
|
-
} else {
|
|
97
|
-
payloadVersion = await getLatestPackageVersion({
|
|
98
|
-
packageName: 'payload'
|
|
99
|
-
});
|
|
100
|
-
spinner.stop(`Found latest version of Payload ${payloadVersion}`);
|
|
101
|
-
}
|
|
93
|
+
spinner.start(`Resolving Payload version (${versionOrTag})...`);
|
|
94
|
+
const payloadVersion = await resolvePackageVersion({
|
|
95
|
+
packageName: 'payload',
|
|
96
|
+
versionOrTag
|
|
97
|
+
});
|
|
98
|
+
spinner.stop(`Using Payload version ${payloadVersion}`);
|
|
102
99
|
await updatePackageJSON({
|
|
103
100
|
latestVersion: payloadVersion,
|
|
104
101
|
projectDir,
|
|
@@ -211,39 +208,5 @@ export async function createProject(args) {
|
|
|
211
208
|
}, {});
|
|
212
209
|
packageJson.dependencies = updatedDependencies;
|
|
213
210
|
}
|
|
214
|
-
/**
|
|
215
|
-
* Fetches the latest version of a package from the NPM registry.
|
|
216
|
-
*
|
|
217
|
-
* Used in determining the latest version of Payload to use in the generated templates.
|
|
218
|
-
*/ async function getLatestPackageVersion({ packageName = 'payload' }) {
|
|
219
|
-
try {
|
|
220
|
-
const response = await fetch(`https://registry.npmjs.org/-/package/${packageName}/dist-tags`);
|
|
221
|
-
const data = await response.json();
|
|
222
|
-
// Monster chaining for type safety just checking for data.latest
|
|
223
|
-
const latestVersion = data && typeof data === 'object' && 'latest' in data && data.latest && typeof data.latest === 'string' ? data.latest : null;
|
|
224
|
-
if (!latestVersion) {
|
|
225
|
-
throw new Error(`No latest version found for package: ${packageName}`);
|
|
226
|
-
}
|
|
227
|
-
return latestVersion;
|
|
228
|
-
} catch (error) {
|
|
229
|
-
console.error('Error fetching Payload version:', error);
|
|
230
|
-
throw error;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Verifies that the specified version of a package exists on the NPM registry.
|
|
235
|
-
*
|
|
236
|
-
* Throws an error if the version does not exist.
|
|
237
|
-
*/ async function verifyVersionForPackage({ packageName = 'payload', version }) {
|
|
238
|
-
try {
|
|
239
|
-
const response = await fetch(`https://registry.npmjs.org/${packageName}/${version}`);
|
|
240
|
-
if (response.status !== 200) {
|
|
241
|
-
throw new Error(`No ${version} version found for package: ${packageName}`);
|
|
242
|
-
}
|
|
243
|
-
} catch (error) {
|
|
244
|
-
console.error('Error verifying Payload version:', error);
|
|
245
|
-
throw error;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
211
|
|
|
249
212
|
//# sourceMappingURL=create-project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/create-project.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type {\n AgentType,\n CliArgs,\n DbDetails,\n PackageManager,\n ProjectExample,\n ProjectTemplate,\n} from '../types.js'\n\nimport { tryInitRepoAndCommit } from '../utils/git.js'\nimport { debug, error, info, warning } from '../utils/log.js'\nimport { configurePayloadConfig } from './configure-payload-config.js'\nimport { configurePluginProject } from './configure-plugin-project.js'\nimport { downloadExample } from './download-example.js'\nimport { downloadSkill } from './download-skill.js'\nimport { downloadTemplate } from './download-template.js'\nimport { generateSecret } from './generate-secret.js'\nimport { manageEnvFiles } from './manage-env-files.js'\nimport { getAgentChoice } from './select-agent.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nasync function createOrFindProjectDir(projectDir: string): Promise<void> {\n const pathExists = await fse.pathExists(projectDir)\n if (!pathExists) {\n await fse.mkdir(projectDir)\n }\n}\n\nasync function installDeps(args: {\n cliArgs: CliArgs\n packageManager: PackageManager\n projectDir: string\n}): Promise<boolean> {\n const { cliArgs, packageManager, projectDir } = args\n if (cliArgs['--no-deps']) {\n return true\n }\n let installCmd = 'npm install --legacy-peer-deps'\n\n if (packageManager === 'yarn') {\n installCmd = 'yarn'\n } else if (packageManager === 'pnpm') {\n installCmd = 'pnpm install'\n } else if (packageManager === 'bun') {\n installCmd = 'bun install'\n }\n\n try {\n await execa.command(installCmd, {\n cwd: path.resolve(projectDir),\n })\n return true\n } catch (err: unknown) {\n error(`Error installing dependencies${err instanceof Error ? `: ${err.message}` : ''}.`)\n return false\n }\n}\n\ntype TemplateOrExample =\n | {\n example: ProjectExample\n }\n | {\n template: ProjectTemplate\n }\n\nexport async function createProject(\n args: {\n agentType?: AgentType\n cliArgs: CliArgs\n dbDetails?: DbDetails\n packageManager: PackageManager\n projectDir: string\n projectName: string\n } & TemplateOrExample,\n): Promise<void> {\n const { agentType, cliArgs, dbDetails, packageManager, projectDir, projectName } = args\n\n if (cliArgs['--dry-run']) {\n debug(`Dry run: Creating project in ${chalk.green(projectDir)}`)\n return\n }\n\n await createOrFindProjectDir(projectDir)\n\n if (cliArgs['--local-example']) {\n // Copy example from local path. For development purposes.\n const localExample = path.resolve(dirname, '../../../../examples/', cliArgs['--local-example'])\n await fse.copy(localExample, projectDir)\n }\n\n if (cliArgs['--local-template']) {\n // Copy template from local path. For development purposes.\n const localTemplate = path.resolve(\n dirname,\n '../../../../templates/',\n cliArgs['--local-template'],\n )\n await fse.copy(localTemplate, projectDir)\n } else if ('template' in args && 'url' in args.template) {\n const { template } = args\n if (cliArgs['--branch']) {\n template.url = `${template.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadTemplate({\n debug: cliArgs['--debug'],\n projectDir,\n template,\n })\n } else if ('example' in args && 'url' in args.example) {\n const { example } = args\n if (cliArgs['--branch']) {\n example.url = `${example.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadExample({\n debug: cliArgs['--debug'],\n example,\n projectDir,\n })\n }\n\n const spinner = p.spinner()\n spinner.start('Checking latest Payload version...')\n\n // Allows overriding the installed Payload version instead of installing the latest\n const versionFromCli = cliArgs['--version']\n\n let payloadVersion: string\n\n if (versionFromCli) {\n await verifyVersionForPackage({ version: versionFromCli })\n\n payloadVersion = versionFromCli\n\n spinner.stop(`Using provided version of Payload ${payloadVersion}`)\n } else {\n payloadVersion = await getLatestPackageVersion({ packageName: 'payload' })\n\n spinner.stop(`Found latest version of Payload ${payloadVersion}`)\n }\n\n await updatePackageJSON({ latestVersion: payloadVersion, projectDir, projectName })\n\n if ('template' in args) {\n if (args.template.type === 'plugin') {\n spinner.message('Configuring Plugin...')\n configurePluginProject({ projectDirPath: projectDir, projectName })\n } else {\n spinner.message('Configuring Payload...')\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: { projectDir },\n })\n }\n }\n\n await manageEnvFiles({\n cliArgs,\n databaseType: dbDetails?.type,\n databaseUri: dbDetails?.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n template: 'template' in args ? args.template : undefined,\n })\n\n if (agentType) {\n spinner.message('Installing agent skill...')\n try {\n await downloadSkill({\n agentType,\n branch: cliArgs['--branch'] || undefined,\n debug: cliArgs['--debug'],\n projectDir,\n })\n\n const { configFile, skillsDir } = getAgentChoice(agentType)\n const skillPath = `${skillsDir}/payload`\n const configContent =\n configFile === 'CLAUDE.md'\n ? `# Claude Code\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n : `# Agents\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n await fse.writeFile(path.resolve(projectDir, configFile), configContent)\n } catch (err) {\n if (cliArgs['--debug'] && err instanceof Error) {\n debug(`Failed to download skill: ${err.message}`)\n }\n warning('Could not download agent skill. You can install it manually later.')\n }\n }\n\n if (!cliArgs['--no-deps']) {\n info(`Using ${packageManager}.\\n`)\n spinner.message('Installing dependencies...')\n const result = await installDeps({ cliArgs, packageManager, projectDir })\n if (result) {\n spinner.stop('Successfully installed Payload and dependencies')\n } else {\n spinner.stop('Error installing dependencies', 1)\n }\n } else {\n spinner.stop('Dependency installation skipped')\n }\n\n if (!cliArgs['--no-git']) {\n tryInitRepoAndCommit({ cwd: projectDir })\n }\n}\n\n/**\n * Reads the package.json file into an object and then does the following:\n * - Sets the `name` property to the provided `projectName`.\n * - Bumps the payload packages from workspace:* to the latest version.\n * - Writes the updated object back to the package.json file.\n */\nexport async function updatePackageJSON(args: {\n /**\n * The latest version of Payload to use in the package.json.\n */\n latestVersion: string\n projectDir: string\n /**\n * The name of the project to set in package.json.\n */\n projectName: string\n}): Promise<void> {\n const { latestVersion, projectDir, projectName } = args\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n try {\n const packageObj = await fse.readJson(packageJsonPath)\n packageObj.name = projectName\n\n updatePackageJSONDependencies({\n latestVersion,\n packageJson: packageObj,\n })\n\n await fse.writeJson(packageJsonPath, packageObj, { spaces: 2 })\n } catch (err: unknown) {\n warning(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`)\n }\n}\n\n/**\n * Recursively updates a JSON object to replace all instances of `workspace:` with the latest version pinned.\n *\n * Does not return and instead modifies the `packageJson` object in place.\n */\nexport function updatePackageJSONDependencies(args: {\n latestVersion: string\n packageJson: Record<string, unknown>\n}): void {\n const { latestVersion, packageJson } = args\n\n const updatedDependencies = Object.entries(packageJson.dependencies || {}).reduce(\n (acc, [key, value]) => {\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n acc[key] = `${latestVersion}`\n } else if (key === 'payload' || key.startsWith('@payloadcms')) {\n acc[key] = `${latestVersion}`\n } else {\n acc[key] = value\n }\n return acc\n },\n {} as Record<string, string>,\n )\n packageJson.dependencies = updatedDependencies\n}\n\n/**\n * Fetches the latest version of a package from the NPM registry.\n *\n * Used in determining the latest version of Payload to use in the generated templates.\n */\nasync function getLatestPackageVersion({\n packageName = 'payload',\n}: {\n /**\n * Package name to fetch the latest version for based on the NPM registry URL\n *\n * Eg. for `'payload'`, it will fetch the version from `https://registry.npmjs.org/payload`\n *\n * @default 'payload'\n */\n packageName?: string\n}): Promise<string> {\n try {\n const response = await fetch(`https://registry.npmjs.org/-/package/${packageName}/dist-tags`)\n const data = await response.json()\n\n // Monster chaining for type safety just checking for data.latest\n const latestVersion =\n data &&\n typeof data === 'object' &&\n 'latest' in data &&\n data.latest &&\n typeof data.latest === 'string'\n ? data.latest\n : null\n\n if (!latestVersion) {\n throw new Error(`No latest version found for package: ${packageName}`)\n }\n\n return latestVersion\n } catch (error) {\n console.error('Error fetching Payload version:', error)\n throw error\n }\n}\n\n/**\n * Verifies that the specified version of a package exists on the NPM registry.\n *\n * Throws an error if the version does not exist.\n */\nasync function verifyVersionForPackage({\n packageName = 'payload',\n version,\n}: {\n /**\n * Package name to fetch the latest version for based on the NPM registry URL\n *\n * Eg. for `'payload'`, it will fetch the version from `https://registry.npmjs.org/payload`\n *\n * @default 'payload'\n */\n packageName?: string\n version: string\n}): Promise<void> {\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}/${version}`)\n\n if (response.status !== 200) {\n throw new Error(`No ${version} version found for package: ${packageName}`)\n }\n } catch (error) {\n console.error('Error verifying Payload version:', error)\n throw error\n }\n}\n"],"names":["p","chalk","execa","fse","fileURLToPath","path","tryInitRepoAndCommit","debug","error","info","warning","configurePayloadConfig","configurePluginProject","downloadExample","downloadSkill","downloadTemplate","generateSecret","manageEnvFiles","getAgentChoice","filename","url","dirname","createOrFindProjectDir","projectDir","pathExists","mkdir","installDeps","args","cliArgs","packageManager","installCmd","command","cwd","resolve","err","Error","message","createProject","agentType","dbDetails","projectName","green","localExample","copy","localTemplate","template","split","example","spinner","start","versionFromCli","payloadVersion","verifyVersionForPackage","version","stop","getLatestPackageVersion","packageName","updatePackageJSON","latestVersion","type","projectDirPath","dbType","projectDirOrConfigPath","databaseType","databaseUri","dbUri","payloadSecret","undefined","branch","configFile","skillsDir","skillPath","configContent","writeFile","result","packageJsonPath","packageObj","readJson","name","updatePackageJSONDependencies","packageJson","writeJson","spaces","updatedDependencies","Object","entries","dependencies","reduce","acc","key","value","startsWith","response","fetch","data","json","latest","console","status"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/create-project.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type {\n AgentType,\n CliArgs,\n DbDetails,\n PackageManager,\n ProjectExample,\n ProjectTemplate,\n} from '../types.js'\n\nimport { tryInitRepoAndCommit } from '../utils/git.js'\nimport { debug, error, info, warning } from '../utils/log.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { configurePayloadConfig } from './configure-payload-config.js'\nimport { configurePluginProject } from './configure-plugin-project.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { downloadExample } from './download-example.js'\nimport { downloadSkill } from './download-skill.js'\nimport { downloadTemplate } from './download-template.js'\nimport { generateSecret } from './generate-secret.js'\nimport { manageEnvFiles } from './manage-env-files.js'\nimport { getAgentChoice } from './select-agent.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nasync function createOrFindProjectDir(projectDir: string): Promise<void> {\n const pathExists = await fse.pathExists(projectDir)\n if (!pathExists) {\n await fse.mkdir(projectDir)\n }\n}\n\nasync function installDeps(args: {\n cliArgs: CliArgs\n packageManager: PackageManager\n projectDir: string\n}): Promise<boolean> {\n const { cliArgs, packageManager, projectDir } = args\n if (cliArgs['--no-deps']) {\n return true\n }\n let installCmd = 'npm install --legacy-peer-deps'\n\n if (packageManager === 'yarn') {\n installCmd = 'yarn'\n } else if (packageManager === 'pnpm') {\n installCmd = 'pnpm install'\n } else if (packageManager === 'bun') {\n installCmd = 'bun install'\n }\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n try {\n await execa.command(installCmd, {\n cwd: path.resolve(projectDir),\n })\n return true\n } catch (err: unknown) {\n error(`Error installing dependencies${err instanceof Error ? `: ${err.message}` : ''}.`)\n return false\n }\n}\n\ntype TemplateOrExample =\n | {\n example: ProjectExample\n }\n | {\n template: ProjectTemplate\n }\n\nexport async function createProject(\n args: {\n agentType?: AgentType\n cliArgs: CliArgs\n dbDetails?: DbDetails\n packageManager: PackageManager\n projectDir: string\n projectName: string\n } & TemplateOrExample,\n): Promise<void> {\n const { agentType, cliArgs, dbDetails, packageManager, projectDir, projectName } = args\n\n if (cliArgs['--dry-run']) {\n debug(`Dry run: Creating project in ${chalk.green(projectDir)}`)\n return\n }\n\n await createOrFindProjectDir(projectDir)\n\n if (cliArgs['--local-example']) {\n // Copy example from local path. For development purposes.\n const localExample = path.resolve(dirname, '../../../../examples/', cliArgs['--local-example'])\n await fse.copy(localExample, projectDir)\n }\n\n if (cliArgs['--local-template']) {\n // Copy template from local path. For development purposes.\n const localTemplate = path.resolve(\n dirname,\n '../../../../templates/',\n cliArgs['--local-template'],\n )\n await fse.copy(localTemplate, projectDir)\n } else if ('template' in args && 'url' in args.template) {\n const { template } = args\n if (cliArgs['--branch']) {\n template.url = `${template.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadTemplate({\n debug: cliArgs['--debug'],\n projectDir,\n template,\n })\n } else if ('example' in args && 'url' in args.example) {\n const { example } = args\n if (cliArgs['--branch']) {\n example.url = `${example.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadExample({\n debug: cliArgs['--debug'],\n example,\n projectDir,\n })\n }\n\n const versionOrTag = cliArgs['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG\n\n const spinner = p.spinner()\n spinner.start(`Resolving Payload version (${versionOrTag})...`)\n\n const payloadVersion = await resolvePackageVersion({\n packageName: 'payload',\n versionOrTag,\n })\n\n spinner.stop(`Using Payload version ${payloadVersion}`)\n\n await updatePackageJSON({ latestVersion: payloadVersion, projectDir, projectName })\n\n if ('template' in args) {\n if (args.template.type === 'plugin') {\n spinner.message('Configuring Plugin...')\n configurePluginProject({ projectDirPath: projectDir, projectName })\n } else {\n spinner.message('Configuring Payload...')\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: { projectDir },\n })\n }\n }\n\n await manageEnvFiles({\n cliArgs,\n databaseType: dbDetails?.type,\n databaseUri: dbDetails?.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n template: 'template' in args ? args.template : undefined,\n })\n\n if (agentType) {\n spinner.message('Installing agent skill...')\n try {\n await downloadSkill({\n agentType,\n branch: cliArgs['--branch'] || undefined,\n debug: cliArgs['--debug'],\n projectDir,\n })\n\n const { configFile, skillsDir } = getAgentChoice(agentType)\n const skillPath = `${skillsDir}/payload`\n const configContent =\n configFile === 'CLAUDE.md'\n ? `# Claude Code\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n : `# Agents\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n await fse.writeFile(path.resolve(projectDir, configFile), configContent)\n } catch (err) {\n if (cliArgs['--debug'] && err instanceof Error) {\n debug(`Failed to download skill: ${err.message}`)\n }\n warning('Could not download agent skill. You can install it manually later.')\n }\n }\n\n if (!cliArgs['--no-deps']) {\n info(`Using ${packageManager}.\\n`)\n spinner.message('Installing dependencies...')\n const result = await installDeps({ cliArgs, packageManager, projectDir })\n if (result) {\n spinner.stop('Successfully installed Payload and dependencies')\n } else {\n spinner.stop('Error installing dependencies', 1)\n }\n } else {\n spinner.stop('Dependency installation skipped')\n }\n\n if (!cliArgs['--no-git']) {\n tryInitRepoAndCommit({ cwd: projectDir })\n }\n}\n\n/**\n * Reads the package.json file into an object and then does the following:\n * - Sets the `name` property to the provided `projectName`.\n * - Bumps the payload packages from workspace:* to the latest version.\n * - Writes the updated object back to the package.json file.\n */\nexport async function updatePackageJSON(args: {\n /**\n * The latest version of Payload to use in the package.json.\n */\n latestVersion: string\n projectDir: string\n /**\n * The name of the project to set in package.json.\n */\n projectName: string\n}): Promise<void> {\n const { latestVersion, projectDir, projectName } = args\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n try {\n const packageObj = await fse.readJson(packageJsonPath)\n packageObj.name = projectName\n\n updatePackageJSONDependencies({\n latestVersion,\n packageJson: packageObj,\n })\n\n await fse.writeJson(packageJsonPath, packageObj, { spaces: 2 })\n } catch (err: unknown) {\n warning(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`)\n }\n}\n\n/**\n * Recursively updates a JSON object to replace all instances of `workspace:` with the latest version pinned.\n *\n * Does not return and instead modifies the `packageJson` object in place.\n */\nexport function updatePackageJSONDependencies(args: {\n latestVersion: string\n packageJson: Record<string, unknown>\n}): void {\n const { latestVersion, packageJson } = args\n\n const updatedDependencies = Object.entries(packageJson.dependencies || {}).reduce(\n (acc, [key, value]) => {\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n acc[key] = `${latestVersion}`\n } else if (key === 'payload' || key.startsWith('@payloadcms')) {\n acc[key] = `${latestVersion}`\n } else {\n acc[key] = value\n }\n return acc\n },\n {} as Record<string, string>,\n )\n packageJson.dependencies = updatedDependencies\n}\n"],"names":["p","chalk","execa","fse","fileURLToPath","path","tryInitRepoAndCommit","debug","error","info","warning","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","configurePayloadConfig","configurePluginProject","ensurePnpmBuildApprovals","downloadExample","downloadSkill","downloadTemplate","generateSecret","manageEnvFiles","getAgentChoice","filename","url","dirname","createOrFindProjectDir","projectDir","pathExists","mkdir","installDeps","args","cliArgs","packageManager","installCmd","command","cwd","resolve","err","Error","message","createProject","agentType","dbDetails","projectName","green","localExample","copy","localTemplate","template","split","example","versionOrTag","spinner","start","payloadVersion","packageName","stop","updatePackageJSON","latestVersion","type","projectDirPath","dbType","projectDirOrConfigPath","databaseType","databaseUri","dbUri","payloadSecret","undefined","branch","configFile","skillsDir","skillPath","configContent","writeFile","result","packageJsonPath","packageObj","readJson","name","updatePackageJSONDependencies","packageJson","writeJson","spaces","updatedDependencies","Object","entries","dependencies","reduce","acc","key","value","startsWith"],"mappings":"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"}
|
package/dist/lib/init-next.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAmBlG,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,mBAAmB,CAAC,CAAA;AAElD,KAAK,cAAc,GACf;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC1E;IACE,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,IAAI,CAAA;CACd,CAAA;AAEL,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAqE1E;AA8ID,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2FnF"}
|
package/dist/lib/init-next.js
CHANGED
|
@@ -9,6 +9,8 @@ import { promisify } from 'util';
|
|
|
9
9
|
import { copyRecursiveSync } from '../utils/copy-recursive-sync.js';
|
|
10
10
|
import { debug as origDebug, warning } from '../utils/log.js';
|
|
11
11
|
import { moveMessage } from '../utils/messages.js';
|
|
12
|
+
import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
13
|
+
import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
|
|
12
14
|
import { installPackages } from './install-packages.js';
|
|
13
15
|
import { wrapNextConfig } from './wrap-next-config.js';
|
|
14
16
|
const readFile = promisify(fs.readFile);
|
|
@@ -64,7 +66,12 @@ export async function initNext(args) {
|
|
|
64
66
|
success: false
|
|
65
67
|
};
|
|
66
68
|
}
|
|
67
|
-
const { success: installSuccess } = await installDeps(
|
|
69
|
+
const { success: installSuccess } = await installDeps({
|
|
70
|
+
dbType,
|
|
71
|
+
packageManager,
|
|
72
|
+
projectDir,
|
|
73
|
+
versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG
|
|
74
|
+
});
|
|
68
75
|
if (!installSuccess) {
|
|
69
76
|
installSpinner.stop('Failed to install dependencies', 1);
|
|
70
77
|
return {
|
|
@@ -161,16 +168,25 @@ async function installAndConfigurePayload(args) {
|
|
|
161
168
|
success: true
|
|
162
169
|
};
|
|
163
170
|
}
|
|
164
|
-
async function installDeps(
|
|
171
|
+
async function installDeps(args) {
|
|
172
|
+
const { dbType, packageManager, projectDir, versionOrTag } = args;
|
|
165
173
|
const { getDbPackageName } = await import('./ast/adapter-config.js');
|
|
174
|
+
const version = await resolvePackageVersion({
|
|
175
|
+
packageName: 'payload',
|
|
176
|
+
versionOrTag
|
|
177
|
+
});
|
|
166
178
|
const packagesToInstall = [
|
|
167
179
|
'payload',
|
|
168
180
|
'@payloadcms/next',
|
|
169
181
|
'@payloadcms/richtext-lexical'
|
|
170
|
-
].map((pkg)=>`${pkg}
|
|
171
|
-
packagesToInstall.push(`${getDbPackageName(dbType)}
|
|
182
|
+
].map((pkg)=>`${pkg}@${version}`);
|
|
183
|
+
packagesToInstall.push(`${getDbPackageName(dbType)}@${version}`);
|
|
172
184
|
// Match graphql version of @payloadcms/next
|
|
173
185
|
packagesToInstall.push('graphql@^16.8.1');
|
|
186
|
+
await ensurePnpmBuildApprovals({
|
|
187
|
+
packageManager,
|
|
188
|
+
projectDir
|
|
189
|
+
});
|
|
174
190
|
return await installPackages({
|
|
175
191
|
packageManager,
|
|
176
192
|
packagesToInstall,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import type { CompilerOptions } from 'typescript'\n\nimport * as p from '@clack/prompts'\nimport { parse, stringify } from 'comment-json'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\nimport { promisify } from 'util'\n\nimport type { CliArgs, DbType, NextAppDetails, NextConfigType, PackageManager } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { debug as origDebug, warning } from '../utils/log.js'\nimport { moveMessage } from '../utils/messages.js'\nimport { installPackages } from './install-packages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\nconst readFile = promisify(fs.readFile)\nconst writeFile = promisify(fs.writeFile)\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype InitNextArgs = {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n} & Pick<CliArgs, '--debug'>\n\ntype InitNextResult =\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\n | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n\nexport async function initNext(args: InitNextArgs): Promise<InitNextResult> {\n const { dbType: dbType, packageManager, projectDir } = args\n\n const nextAppDetails = args.nextAppDetails || (await getNextAppDetails(projectDir))\n\n if (!nextAppDetails.nextAppDir) {\n warning(`Could not find app directory in ${projectDir}, creating...`)\n const createdAppDir = path.resolve(projectDir, nextAppDetails.isSrcDir ? 'src/app' : 'app')\n fse.mkdirSync(createdAppDir, { recursive: true })\n nextAppDetails.nextAppDir = createdAppDir\n }\n\n const { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigType } = nextAppDetails\n\n if (!nextConfigType) {\n return {\n isSrcDir,\n nextAppDir,\n reason: `Could not determine Next Config type in ${projectDir}. Possibly try renaming next.config.js to next.config.cjs or next.config.mjs.`,\n success: false,\n }\n }\n\n if (hasTopLevelLayout) {\n // Output directions for user to move all files from app to top-level directory named `(app)`\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n return {\n isSrcDir,\n nextAppDir,\n reason: 'Found existing layout.tsx in app directory',\n success: false,\n }\n }\n\n const installSpinner = p.spinner()\n installSpinner.start('Installing Payload and dependencies...')\n\n const configurationResult = await installAndConfigurePayload({\n ...args,\n nextAppDetails,\n nextConfigType,\n useDistFiles: true, // Requires running 'pnpm pack-template-files' in cpa\n })\n\n if (configurationResult.success === false) {\n installSpinner.stop(configurationResult.reason, 1)\n return { ...configurationResult, isSrcDir, success: false }\n }\n\n const { success: installSuccess } = await installDeps(projectDir, packageManager, dbType)\n if (!installSuccess) {\n installSpinner.stop('Failed to install dependencies', 1)\n return {\n ...configurationResult,\n isSrcDir,\n reason: 'Failed to install dependencies',\n success: false,\n }\n }\n\n // Add `@payload-config` to tsconfig.json `paths`\n await addPayloadConfigToTsConfig(projectDir, isSrcDir)\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) {\n const tsConfigPath = path.resolve(projectDir, 'tsconfig.json')\n\n // Check if tsconfig.json exists\n if (!fs.existsSync(tsConfigPath)) {\n warning(`Could not find tsconfig.json to add @payload-config path.`)\n return\n }\n const userTsConfigContent = await readFile(tsConfigPath, {\n encoding: 'utf8',\n })\n const userTsConfig = parse(userTsConfigContent) as {\n compilerOptions?: CompilerOptions\n }\n\n const hasBaseUrl =\n userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.'\n const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './'\n\n if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {\n userTsConfig.compilerOptions = {}\n }\n\n if (\n !userTsConfig.compilerOptions?.paths?.['@payload-config'] &&\n userTsConfig.compilerOptions?.paths\n ) {\n userTsConfig.compilerOptions.paths = {\n ...(userTsConfig.compilerOptions.paths || {}),\n '@payload-config': [`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`],\n }\n await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), { encoding: 'utf8' })\n }\n}\n\nasync function installAndConfigurePayload(\n args: {\n nextAppDetails: NextAppDetails\n nextConfigType: NextConfigType\n useDistFiles?: boolean\n } & InitNextArgs,\n): Promise<\n | { payloadConfigPath: string; success: true }\n | { payloadConfigPath?: string; reason: string; success: false }\n> {\n const {\n '--debug': debug,\n nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {},\n nextConfigType,\n projectDir,\n useDistFiles,\n } = args\n\n if (!nextAppDir || !nextConfigPath) {\n return {\n reason: 'Could not find app directory or next.config.js',\n success: false,\n }\n }\n\n const logDebug = (message: string) => {\n if (debug) {\n origDebug(message)\n }\n }\n\n if (!fs.existsSync(projectDir)) {\n return {\n reason: `Could not find specified project directory at ${projectDir}`,\n success: false,\n }\n }\n\n const templateFilesPath =\n dirname.endsWith('dist') || useDistFiles\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank')\n\n logDebug(`Using template files from: ${templateFilesPath}`)\n\n if (!fs.existsSync(templateFilesPath)) {\n return {\n reason: `Could not find template source files from ${templateFilesPath}`,\n success: false,\n }\n } else {\n logDebug('Found template source files')\n }\n\n logDebug(`Copying template files from ${templateFilesPath} to ${nextAppDir}`)\n\n const templateSrcDir = path.resolve(templateFilesPath, isSrcDir ? '' : 'src')\n\n logDebug(`templateSrcDir: ${templateSrcDir}`)\n logDebug(`nextAppDir: ${nextAppDir}`)\n logDebug(`projectDir: ${projectDir}`)\n logDebug(`nextConfigPath: ${nextConfigPath}`)\n logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`)\n\n logDebug(\n `isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`,\n )\n\n // This is a little clunky and needs to account for isSrcDir\n copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath))\n\n // Wrap next.config.js with withPayload\n await wrapNextConfig({ nextConfigPath, nextConfigType })\n\n return {\n payloadConfigPath: path.resolve(nextAppDir, '../payload.config.ts'),\n success: true,\n }\n}\n\nasync function installDeps(projectDir: string, packageManager: PackageManager, dbType: DbType) {\n const { getDbPackageName } = await import('./ast/adapter-config.js')\n\n const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@latest`,\n )\n\n packagesToInstall.push(`${getDbPackageName(dbType)}@latest`)\n\n // Match graphql version of @payloadcms/next\n packagesToInstall.push('graphql@^16.8.1')\n\n return await installPackages({ packageManager, packagesToInstall, projectDir })\n}\n\nexport async function getNextAppDetails(projectDir: string): Promise<NextAppDetails> {\n const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'))\n\n // Match next.config.js, next.config.ts, next.config.mjs, next.config.cjs\n const nextConfigPath: string | undefined = (\n await globby('next.config.(\\\\w)?(t|j)s', { absolute: true, cwd: projectDir })\n )?.[0]\n\n if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath: undefined,\n nextVersion: null,\n }\n }\n\n const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'))\n // Check if Next.js version is new enough\n let nextVersion = null\n if (packageObj.dependencies?.next) {\n nextVersion = packageObj.dependencies.next\n // Match versions using regex matching groups\n const versionMatch = /(?<major>\\d+)/.exec(nextVersion)\n if (!versionMatch) {\n p.log.warn(`Could not determine Next.js version from ${nextVersion}`)\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n\n const { major } = versionMatch.groups as { major: string }\n const majorVersion = parseInt(major)\n if (majorVersion < 15) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n }\n\n const isSupportedNextVersion = true\n\n // Check if Payload already installed\n if (packageObj.dependencies?.payload) {\n return {\n hasTopLevelLayout: false,\n isPayloadInstalled: true,\n isSrcDir,\n isSupportedNextVersion,\n nextConfigPath,\n nextVersion,\n }\n }\n\n let nextAppDir: string | undefined = (\n await globby(['**/app'], {\n absolute: true,\n cwd: projectDir,\n ignore: ['**/node_modules/**'],\n onlyDirectories: true,\n })\n )?.[0]\n\n if (!nextAppDir || nextAppDir.length === 0) {\n nextAppDir = undefined\n }\n\n const configType = getProjectType({ nextConfigPath, packageObj })\n\n const hasTopLevelLayout = nextAppDir\n ? fs.existsSync(path.resolve(nextAppDir, 'layout.tsx'))\n : false\n\n return {\n hasTopLevelLayout,\n isSrcDir,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextConfigType: configType,\n nextVersion,\n }\n}\n\nfunction getProjectType(args: {\n nextConfigPath: string\n packageObj: Record<string, unknown>\n}): NextConfigType {\n const { nextConfigPath, packageObj } = args\n\n if (nextConfigPath.endsWith('.ts')) {\n return 'ts'\n }\n\n if (nextConfigPath.endsWith('.mjs')) {\n return 'esm'\n }\n if (nextConfigPath.endsWith('.cjs')) {\n return 'cjs'\n }\n\n const packageJsonType = packageObj.type\n if (packageJsonType === 'module') {\n return 'esm'\n }\n if (packageJsonType === 'commonjs') {\n return 'cjs'\n }\n\n return 'cjs'\n}\n"],"names":["p","parse","stringify","fs","fse","globby","fileURLToPath","path","promisify","copyRecursiveSync","debug","origDebug","warning","moveMessage","installPackages","wrapNextConfig","readFile","writeFile","filename","url","dirname","initNext","args","dbType","packageManager","projectDir","nextAppDetails","getNextAppDetails","nextAppDir","createdAppDir","resolve","isSrcDir","mkdirSync","recursive","hasTopLevelLayout","nextConfigType","reason","success","log","warn","installSpinner","spinner","start","configurationResult","installAndConfigurePayload","useDistFiles","stop","installSuccess","installDeps","addPayloadConfigToTsConfig","tsConfigPath","existsSync","userTsConfigContent","encoding","userTsConfig","hasBaseUrl","compilerOptions","baseUrl","paths","nextConfigPath","logDebug","message","templateFilesPath","endsWith","templateSrcDir","payloadConfigPath","getDbPackageName","packagesToInstall","map","pkg","push","absolute","cwd","length","isSupportedNextVersion","undefined","nextVersion","packageObj","readJson","dependencies","next","versionMatch","exec","major","groups","majorVersion","parseInt","payload","isPayloadInstalled","ignore","onlyDirectories","configType","getProjectType","packageJsonType","type"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import type { CompilerOptions } from 'typescript'\n\nimport * as p from '@clack/prompts'\nimport { parse, stringify } from 'comment-json'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\nimport { promisify } from 'util'\n\nimport type { CliArgs, DbType, NextAppDetails, NextConfigType, PackageManager } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { debug as origDebug, warning } from '../utils/log.js'\nimport { moveMessage } from '../utils/messages.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\nconst readFile = promisify(fs.readFile)\nconst writeFile = promisify(fs.writeFile)\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype InitNextArgs = {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n} & Pick<CliArgs, '--debug' | '--payload-version'>\n\ntype InitNextResult =\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\n | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n\nexport async function initNext(args: InitNextArgs): Promise<InitNextResult> {\n const { dbType: dbType, packageManager, projectDir } = args\n\n const nextAppDetails = args.nextAppDetails || (await getNextAppDetails(projectDir))\n\n if (!nextAppDetails.nextAppDir) {\n warning(`Could not find app directory in ${projectDir}, creating...`)\n const createdAppDir = path.resolve(projectDir, nextAppDetails.isSrcDir ? 'src/app' : 'app')\n fse.mkdirSync(createdAppDir, { recursive: true })\n nextAppDetails.nextAppDir = createdAppDir\n }\n\n const { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigType } = nextAppDetails\n\n if (!nextConfigType) {\n return {\n isSrcDir,\n nextAppDir,\n reason: `Could not determine Next Config type in ${projectDir}. Possibly try renaming next.config.js to next.config.cjs or next.config.mjs.`,\n success: false,\n }\n }\n\n if (hasTopLevelLayout) {\n // Output directions for user to move all files from app to top-level directory named `(app)`\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n return {\n isSrcDir,\n nextAppDir,\n reason: 'Found existing layout.tsx in app directory',\n success: false,\n }\n }\n\n const installSpinner = p.spinner()\n installSpinner.start('Installing Payload and dependencies...')\n\n const configurationResult = await installAndConfigurePayload({\n ...args,\n nextAppDetails,\n nextConfigType,\n useDistFiles: true, // Requires running 'pnpm pack-template-files' in cpa\n })\n\n if (configurationResult.success === false) {\n installSpinner.stop(configurationResult.reason, 1)\n return { ...configurationResult, isSrcDir, success: false }\n }\n\n const { success: installSuccess } = await installDeps({\n dbType,\n packageManager,\n projectDir,\n versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n if (!installSuccess) {\n installSpinner.stop('Failed to install dependencies', 1)\n return {\n ...configurationResult,\n isSrcDir,\n reason: 'Failed to install dependencies',\n success: false,\n }\n }\n\n // Add `@payload-config` to tsconfig.json `paths`\n await addPayloadConfigToTsConfig(projectDir, isSrcDir)\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) {\n const tsConfigPath = path.resolve(projectDir, 'tsconfig.json')\n\n // Check if tsconfig.json exists\n if (!fs.existsSync(tsConfigPath)) {\n warning(`Could not find tsconfig.json to add @payload-config path.`)\n return\n }\n const userTsConfigContent = await readFile(tsConfigPath, {\n encoding: 'utf8',\n })\n const userTsConfig = parse(userTsConfigContent) as {\n compilerOptions?: CompilerOptions\n }\n\n const hasBaseUrl =\n userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.'\n const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './'\n\n if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {\n userTsConfig.compilerOptions = {}\n }\n\n if (\n !userTsConfig.compilerOptions?.paths?.['@payload-config'] &&\n userTsConfig.compilerOptions?.paths\n ) {\n userTsConfig.compilerOptions.paths = {\n ...(userTsConfig.compilerOptions.paths || {}),\n '@payload-config': [`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`],\n }\n await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), { encoding: 'utf8' })\n }\n}\n\nasync function installAndConfigurePayload(\n args: {\n nextAppDetails: NextAppDetails\n nextConfigType: NextConfigType\n useDistFiles?: boolean\n } & InitNextArgs,\n): Promise<\n | { payloadConfigPath: string; success: true }\n | { payloadConfigPath?: string; reason: string; success: false }\n> {\n const {\n '--debug': debug,\n nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {},\n nextConfigType,\n projectDir,\n useDistFiles,\n } = args\n\n if (!nextAppDir || !nextConfigPath) {\n return {\n reason: 'Could not find app directory or next.config.js',\n success: false,\n }\n }\n\n const logDebug = (message: string) => {\n if (debug) {\n origDebug(message)\n }\n }\n\n if (!fs.existsSync(projectDir)) {\n return {\n reason: `Could not find specified project directory at ${projectDir}`,\n success: false,\n }\n }\n\n const templateFilesPath =\n dirname.endsWith('dist') || useDistFiles\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank')\n\n logDebug(`Using template files from: ${templateFilesPath}`)\n\n if (!fs.existsSync(templateFilesPath)) {\n return {\n reason: `Could not find template source files from ${templateFilesPath}`,\n success: false,\n }\n } else {\n logDebug('Found template source files')\n }\n\n logDebug(`Copying template files from ${templateFilesPath} to ${nextAppDir}`)\n\n const templateSrcDir = path.resolve(templateFilesPath, isSrcDir ? '' : 'src')\n\n logDebug(`templateSrcDir: ${templateSrcDir}`)\n logDebug(`nextAppDir: ${nextAppDir}`)\n logDebug(`projectDir: ${projectDir}`)\n logDebug(`nextConfigPath: ${nextConfigPath}`)\n logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`)\n\n logDebug(\n `isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`,\n )\n\n // This is a little clunky and needs to account for isSrcDir\n copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath))\n\n // Wrap next.config.js with withPayload\n await wrapNextConfig({ nextConfigPath, nextConfigType })\n\n return {\n payloadConfigPath: path.resolve(nextAppDir, '../payload.config.ts'),\n success: true,\n }\n}\n\nasync function installDeps(args: {\n dbType: DbType\n packageManager: PackageManager\n projectDir: string\n versionOrTag?: string\n}) {\n const { dbType, packageManager, projectDir, versionOrTag } = args\n const { getDbPackageName } = await import('./ast/adapter-config.js')\n\n const version = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@${version}`,\n )\n\n packagesToInstall.push(`${getDbPackageName(dbType)}@${version}`)\n\n // Match graphql version of @payloadcms/next\n packagesToInstall.push('graphql@^16.8.1')\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n return await installPackages({ packageManager, packagesToInstall, projectDir })\n}\n\nexport async function getNextAppDetails(projectDir: string): Promise<NextAppDetails> {\n const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'))\n\n // Match next.config.js, next.config.ts, next.config.mjs, next.config.cjs\n const nextConfigPath: string | undefined = (\n await globby('next.config.(\\\\w)?(t|j)s', { absolute: true, cwd: projectDir })\n )?.[0]\n\n if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath: undefined,\n nextVersion: null,\n }\n }\n\n const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'))\n // Check if Next.js version is new enough\n let nextVersion = null\n if (packageObj.dependencies?.next) {\n nextVersion = packageObj.dependencies.next\n // Match versions using regex matching groups\n const versionMatch = /(?<major>\\d+)/.exec(nextVersion)\n if (!versionMatch) {\n p.log.warn(`Could not determine Next.js version from ${nextVersion}`)\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n\n const { major } = versionMatch.groups as { major: string }\n const majorVersion = parseInt(major)\n if (majorVersion < 15) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n }\n\n const isSupportedNextVersion = true\n\n // Check if Payload already installed\n if (packageObj.dependencies?.payload) {\n return {\n hasTopLevelLayout: false,\n isPayloadInstalled: true,\n isSrcDir,\n isSupportedNextVersion,\n nextConfigPath,\n nextVersion,\n }\n }\n\n let nextAppDir: string | undefined = (\n await globby(['**/app'], {\n absolute: true,\n cwd: projectDir,\n ignore: ['**/node_modules/**'],\n onlyDirectories: true,\n })\n )?.[0]\n\n if (!nextAppDir || nextAppDir.length === 0) {\n nextAppDir = undefined\n }\n\n const configType = getProjectType({ nextConfigPath, packageObj })\n\n const hasTopLevelLayout = nextAppDir\n ? fs.existsSync(path.resolve(nextAppDir, 'layout.tsx'))\n : false\n\n return {\n hasTopLevelLayout,\n isSrcDir,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextConfigType: configType,\n nextVersion,\n }\n}\n\nfunction getProjectType(args: {\n nextConfigPath: string\n packageObj: Record<string, unknown>\n}): NextConfigType {\n const { nextConfigPath, packageObj } = args\n\n if (nextConfigPath.endsWith('.ts')) {\n return 'ts'\n }\n\n if (nextConfigPath.endsWith('.mjs')) {\n return 'esm'\n }\n if (nextConfigPath.endsWith('.cjs')) {\n return 'cjs'\n }\n\n const packageJsonType = packageObj.type\n if (packageJsonType === 'module') {\n return 'esm'\n }\n if (packageJsonType === 'commonjs') {\n return 'cjs'\n }\n\n return 'cjs'\n}\n"],"names":["p","parse","stringify","fs","fse","globby","fileURLToPath","path","promisify","copyRecursiveSync","debug","origDebug","warning","moveMessage","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","ensurePnpmBuildApprovals","installPackages","wrapNextConfig","readFile","writeFile","filename","url","dirname","initNext","args","dbType","packageManager","projectDir","nextAppDetails","getNextAppDetails","nextAppDir","createdAppDir","resolve","isSrcDir","mkdirSync","recursive","hasTopLevelLayout","nextConfigType","reason","success","log","warn","installSpinner","spinner","start","configurationResult","installAndConfigurePayload","useDistFiles","stop","installSuccess","installDeps","versionOrTag","addPayloadConfigToTsConfig","tsConfigPath","existsSync","userTsConfigContent","encoding","userTsConfig","hasBaseUrl","compilerOptions","baseUrl","paths","nextConfigPath","logDebug","message","templateFilesPath","endsWith","templateSrcDir","payloadConfigPath","getDbPackageName","version","packageName","packagesToInstall","map","pkg","push","absolute","cwd","length","isSupportedNextVersion","undefined","nextVersion","packageObj","readJson","dependencies","next","versionMatch","exec","major","groups","majorVersion","parseInt","payload","isPayloadInstalled","ignore","onlyDirectories","configType","getProjectType","packageJsonType","type"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { NextAppDetails } from '../types.js';
|
|
2
|
-
export declare function updatePayloadInProject(appDetails: NextAppDetails): Promise<{
|
|
2
|
+
export declare function updatePayloadInProject(appDetails: NextAppDetails, versionOrTag?: string): Promise<{
|
|
3
3
|
message: string;
|
|
4
4
|
success: boolean;
|
|
5
5
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-payload-in-project.d.ts","sourceRoot":"","sources":["../../src/lib/update-payload-in-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQjD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"update-payload-in-project.d.ts","sourceRoot":"","sources":["../../src/lib/update-payload-in-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQjD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,cAAc,EAC1B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAqEhD"}
|
|
@@ -4,11 +4,11 @@ import path from 'path';
|
|
|
4
4
|
const filename = fileURLToPath(import.meta.url);
|
|
5
5
|
const dirname = path.dirname(filename);
|
|
6
6
|
import { copyRecursiveSync } from '../utils/copy-recursive-sync.js';
|
|
7
|
-
import { getLatestPackageVersion } from '../utils/getLatestPackageVersion.js';
|
|
8
7
|
import { info } from '../utils/log.js';
|
|
8
|
+
import { resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
9
9
|
import { getPackageManager } from './get-package-manager.js';
|
|
10
10
|
import { installPackages } from './install-packages.js';
|
|
11
|
-
export async function updatePayloadInProject(appDetails) {
|
|
11
|
+
export async function updatePayloadInProject(appDetails, versionOrTag) {
|
|
12
12
|
if (!appDetails.nextConfigPath) {
|
|
13
13
|
return {
|
|
14
14
|
message: 'No Next.js config found',
|
|
@@ -27,9 +27,10 @@ export async function updatePayloadInProject(appDetails) {
|
|
|
27
27
|
const packageManager = await getPackageManager({
|
|
28
28
|
projectDir
|
|
29
29
|
});
|
|
30
|
-
//
|
|
31
|
-
const latestPayloadVersion = await
|
|
32
|
-
packageName: 'payload'
|
|
30
|
+
// Resolve the requested Payload version (dist-tag or explicit version)
|
|
31
|
+
const latestPayloadVersion = await resolvePackageVersion({
|
|
32
|
+
packageName: 'payload',
|
|
33
|
+
versionOrTag
|
|
33
34
|
});
|
|
34
35
|
if (payloadVersion === latestPayloadVersion) {
|
|
35
36
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/update-payload-in-project.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport type { NextAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/lib/update-payload-in-project.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport type { NextAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { info } from '../utils/log.js'\nimport { resolvePackageVersion } from '../utils/resolvePackageVersion.js'\nimport { getPackageManager } from './get-package-manager.js'\nimport { installPackages } from './install-packages.js'\n\nexport async function updatePayloadInProject(\n appDetails: NextAppDetails,\n versionOrTag?: string,\n): Promise<{ message: string; success: boolean }> {\n if (!appDetails.nextConfigPath) {\n return { message: 'No Next.js config found', success: false }\n }\n\n const projectDir = path.dirname(appDetails.nextConfigPath)\n\n const packageObj = (await fse.readJson(path.resolve(projectDir, 'package.json'))) as {\n dependencies?: Record<string, string>\n }\n if (!packageObj?.dependencies) {\n throw new Error('No package.json found in this project')\n }\n\n const payloadVersion = packageObj.dependencies?.payload\n if (!payloadVersion) {\n throw new Error('Payload is not installed in this project')\n }\n\n const packageManager = await getPackageManager({ projectDir })\n\n // Resolve the requested Payload version (dist-tag or explicit version)\n const latestPayloadVersion = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n if (payloadVersion === latestPayloadVersion) {\n return { message: `Payload v${payloadVersion} is already up to date.`, success: true }\n }\n\n // Update all existing Payload packages\n const payloadPackages = Object.keys(packageObj.dependencies).filter((dep) =>\n dep.startsWith('@payloadcms/'),\n )\n\n const packageNames = ['payload', ...payloadPackages]\n\n const packagesToUpdate = packageNames.map((pkg) => `${pkg}@${latestPayloadVersion}`)\n\n info(`Using ${packageManager}.\\n`)\n info(\n `Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\\n\\n${packageNames.map((p) => ` - ${p}`).join('\\n')}`,\n )\n\n const { success: updateSuccess } = await installPackages({\n packageManager,\n packagesToInstall: packagesToUpdate,\n projectDir,\n })\n\n if (!updateSuccess) {\n throw new Error('Failed to update Payload packages')\n }\n info('Payload packages updated successfully.')\n\n info(`Updating Payload Next.js files...`)\n\n const templateFilesPath =\n process.env.JEST_WORKER_ID !== undefined\n ? path.resolve(dirname, '../../../../templates/blank')\n : path.resolve(dirname, '../..', 'dist/template')\n\n const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)')\n\n copyRecursiveSync(\n templateSrcDir,\n path.resolve(projectDir, appDetails.isSrcDir ? 'src/app' : 'app', '(payload)'),\n ['custom.scss$'], // Do not overwrite user's custom.scss\n )\n\n return { message: 'Payload updated successfully.', success: true }\n}\n"],"names":["fse","fileURLToPath","path","filename","url","dirname","copyRecursiveSync","info","resolvePackageVersion","getPackageManager","installPackages","updatePayloadInProject","appDetails","versionOrTag","nextConfigPath","message","success","projectDir","packageObj","readJson","resolve","dependencies","Error","payloadVersion","payload","packageManager","latestPayloadVersion","packageName","payloadPackages","Object","keys","filter","dep","startsWith","packageNames","packagesToUpdate","map","pkg","length","p","join","updateSuccess","packagesToInstall","templateFilesPath","process","env","JEST_WORKER_ID","undefined","templateSrcDir","isSrcDir"],"mappings":"AAAA,OAAOA,SAAS,WAAU;AAC1B,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,UAAU,OAAM;AAEvB,MAAMC,WAAWF,cAAc,YAAYG,GAAG;AAC9C,MAAMC,UAAUH,KAAKG,OAAO,CAACF;AAI7B,SAASG,iBAAiB,QAAQ,kCAAiC;AACnE,SAASC,IAAI,QAAQ,kBAAiB;AACtC,SAASC,qBAAqB,QAAQ,oCAAmC;AACzE,SAASC,iBAAiB,QAAQ,2BAA0B;AAC5D,SAASC,eAAe,QAAQ,wBAAuB;AAEvD,OAAO,eAAeC,uBACpBC,UAA0B,EAC1BC,YAAqB;IAErB,IAAI,CAACD,WAAWE,cAAc,EAAE;QAC9B,OAAO;YAAEC,SAAS;YAA2BC,SAAS;QAAM;IAC9D;IAEA,MAAMC,aAAaf,KAAKG,OAAO,CAACO,WAAWE,cAAc;IAEzD,MAAMI,aAAc,MAAMlB,IAAImB,QAAQ,CAACjB,KAAKkB,OAAO,CAACH,YAAY;IAGhE,IAAI,CAACC,YAAYG,cAAc;QAC7B,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,iBAAiBL,WAAWG,YAAY,EAAEG;IAChD,IAAI,CAACD,gBAAgB;QACnB,MAAM,IAAID,MAAM;IAClB;IAEA,MAAMG,iBAAiB,MAAMhB,kBAAkB;QAAEQ;IAAW;IAE5D,uEAAuE;IACvE,MAAMS,uBAAuB,MAAMlB,sBAAsB;QAAEmB,aAAa;QAAWd;IAAa;IAEhG,IAAIU,mBAAmBG,sBAAsB;QAC3C,OAAO;YAAEX,SAAS,CAAC,SAAS,EAAEQ,eAAe,uBAAuB,CAAC;YAAEP,SAAS;QAAK;IACvF;IAEA,uCAAuC;IACvC,MAAMY,kBAAkBC,OAAOC,IAAI,CAACZ,WAAWG,YAAY,EAAEU,MAAM,CAAC,CAACC,MACnEA,IAAIC,UAAU,CAAC;IAGjB,MAAMC,eAAe;QAAC;WAAcN;KAAgB;IAEpD,MAAMO,mBAAmBD,aAAaE,GAAG,CAAC,CAACC,MAAQ,GAAGA,IAAI,CAAC,EAAEX,sBAAsB;IAEnFnB,KAAK,CAAC,MAAM,EAAEkB,eAAe,GAAG,CAAC;IACjClB,KACE,CAAC,SAAS,EAAE4B,iBAAiBG,MAAM,CAAC,sBAAsB,EAAEZ,qBAAqB,OAAO,EAAEQ,aAAaE,GAAG,CAAC,CAACG,IAAM,CAAC,IAAI,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO;IAG5I,MAAM,EAAExB,SAASyB,aAAa,EAAE,GAAG,MAAM/B,gBAAgB;QACvDe;QACAiB,mBAAmBP;QACnBlB;IACF;IAEA,IAAI,CAACwB,eAAe;QAClB,MAAM,IAAInB,MAAM;IAClB;IACAf,KAAK;IAELA,KAAK,CAAC,iCAAiC,CAAC;IAExC,MAAMoC,oBACJC,QAAQC,GAAG,CAACC,cAAc,KAAKC,YAC3B7C,KAAKkB,OAAO,CAACf,SAAS,iCACtBH,KAAKkB,OAAO,CAACf,SAAS,SAAS;IAErC,MAAM2C,iBAAiB9C,KAAKkB,OAAO,CAACuB,mBAAmB;IAEvDrC,kBACE0C,gBACA9C,KAAKkB,OAAO,CAACH,YAAYL,WAAWqC,QAAQ,GAAG,YAAY,OAAO,cAClE;QAAC;KAAe;IAGlB,OAAO;QAAElC,SAAS;QAAiCC,SAAS;IAAK;AACnE"}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AA4BzC,qBAAa,IAAI;IACf,IAAI,EAAE,OAAO,CAAA;;IAoDP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA+N5B"}
|