create-payload-app 3.11.1-canary.54f6c59 → 3.11.1-canary.575547
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/lib/configure-plugin-project.d.ts +8 -0
- package/dist/lib/configure-plugin-project.d.ts.map +1 -0
- package/dist/lib/configure-plugin-project.js +25 -0
- package/dist/lib/configure-plugin-project.js.map +1 -0
- package/dist/lib/create-project.d.ts +8 -3
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +38 -10
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/create-project.spec.js +27 -2
- package/dist/lib/create-project.spec.js.map +1 -1
- package/dist/lib/download-example.d.ts +7 -0
- package/dist/lib/download-example.d.ts.map +1 -0
- package/dist/lib/download-example.js +28 -0
- package/dist/lib/download-example.js.map +1 -0
- package/dist/lib/examples.d.ts +9 -0
- package/dist/lib/examples.d.ts.map +1 -0
- package/dist/lib/examples.js +25 -0
- package/dist/lib/examples.js.map +1 -0
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +6 -0
- package/dist/lib/templates.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +66 -43
- package/dist/main.js.map +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/casing.d.ts +3 -0
- package/dist/utils/casing.d.ts.map +1 -0
- package/dist/utils/casing.js +12 -0
- package/dist/utils/casing.js.map +1 -0
- 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 +2 -2
@@ -0,0 +1,8 @@
|
|
1
|
+
/**
|
2
|
+
* Configures a plugin project by updating all package name placeholders to projectName
|
3
|
+
*/
|
4
|
+
export declare const configurePluginProject: ({ projectDirPath, projectName, }: {
|
5
|
+
projectDirPath: string;
|
6
|
+
projectName: string;
|
7
|
+
}) => void;
|
8
|
+
//# sourceMappingURL=configure-plugin-project.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"configure-plugin-project.d.ts","sourceRoot":"","sources":["../../src/lib/configure-plugin-project.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,sBAAsB,qCAGhC;IACD,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB,SA+BA,CAAA"}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import fse from 'fs-extra';
|
2
|
+
import path from 'path';
|
3
|
+
import { toCamelCase, toPascalCase } from '../utils/casing.js';
|
4
|
+
/**
|
5
|
+
* Configures a plugin project by updating all package name placeholders to projectName
|
6
|
+
*/ export const configurePluginProject = ({ projectDirPath, projectName })=>{
|
7
|
+
const devPayloadConfigPath = path.resolve(projectDirPath, './dev/payload.config.ts');
|
8
|
+
const devTsConfigPath = path.resolve(projectDirPath, './dev/tsconfig.json');
|
9
|
+
const indexTsPath = path.resolve(projectDirPath, './src/index.ts');
|
10
|
+
const devPayloadConfig = fse.readFileSync(devPayloadConfigPath, 'utf8');
|
11
|
+
const devTsConfig = fse.readFileSync(devTsConfigPath, 'utf8');
|
12
|
+
const indexTs = fse.readFileSync(indexTsPath, 'utf-8');
|
13
|
+
const updatedTsConfig = devTsConfig.replaceAll('plugin-package-name-placeholder', projectName);
|
14
|
+
let updatedIndexTs = indexTs.replaceAll('plugin-package-name-placeholder', projectName);
|
15
|
+
const pluginExportVariableName = toCamelCase(projectName);
|
16
|
+
updatedIndexTs = updatedIndexTs.replace('export const myPlugin', `export const ${pluginExportVariableName}`);
|
17
|
+
updatedIndexTs = updatedIndexTs.replaceAll('MyPluginConfig', `${toPascalCase(projectName)}Config`);
|
18
|
+
let updatedPayloadConfig = devPayloadConfig.replace('plugin-package-name-placeholder', projectName);
|
19
|
+
updatedPayloadConfig = updatedPayloadConfig.replaceAll('myPlugin', pluginExportVariableName);
|
20
|
+
fse.writeFileSync(devPayloadConfigPath, updatedPayloadConfig);
|
21
|
+
fse.writeFileSync(devTsConfigPath, updatedTsConfig);
|
22
|
+
fse.writeFileSync(indexTsPath, updatedIndexTs);
|
23
|
+
};
|
24
|
+
|
25
|
+
//# sourceMappingURL=configure-plugin-project.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/lib/configure-plugin-project.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport path from 'path'\n\nimport { toCamelCase, toPascalCase } from '../utils/casing.js'\n\n/**\n * Configures a plugin project by updating all package name placeholders to projectName\n */\nexport const configurePluginProject = ({\n projectDirPath,\n projectName,\n}: {\n projectDirPath: string\n projectName: string\n}) => {\n const devPayloadConfigPath = path.resolve(projectDirPath, './dev/payload.config.ts')\n const devTsConfigPath = path.resolve(projectDirPath, './dev/tsconfig.json')\n const indexTsPath = path.resolve(projectDirPath, './src/index.ts')\n\n const devPayloadConfig = fse.readFileSync(devPayloadConfigPath, 'utf8')\n const devTsConfig = fse.readFileSync(devTsConfigPath, 'utf8')\n const indexTs = fse.readFileSync(indexTsPath, 'utf-8')\n\n const updatedTsConfig = devTsConfig.replaceAll('plugin-package-name-placeholder', projectName)\n let updatedIndexTs = indexTs.replaceAll('plugin-package-name-placeholder', projectName)\n\n const pluginExportVariableName = toCamelCase(projectName)\n\n updatedIndexTs = updatedIndexTs.replace(\n 'export const myPlugin',\n `export const ${pluginExportVariableName}`,\n )\n\n updatedIndexTs = updatedIndexTs.replaceAll('MyPluginConfig', `${toPascalCase(projectName)}Config`)\n\n let updatedPayloadConfig = devPayloadConfig.replace(\n 'plugin-package-name-placeholder',\n projectName,\n )\n\n updatedPayloadConfig = updatedPayloadConfig.replaceAll('myPlugin', pluginExportVariableName)\n\n fse.writeFileSync(devPayloadConfigPath, updatedPayloadConfig)\n fse.writeFileSync(devTsConfigPath, updatedTsConfig)\n fse.writeFileSync(indexTsPath, updatedIndexTs)\n}\n"],"names":["fse","path","toCamelCase","toPascalCase","configurePluginProject","projectDirPath","projectName","devPayloadConfigPath","resolve","devTsConfigPath","indexTsPath","devPayloadConfig","readFileSync","devTsConfig","indexTs","updatedTsConfig","replaceAll","updatedIndexTs","pluginExportVariableName","replace","updatedPayloadConfig","writeFileSync"],"mappings":"AAAA,OAAOA,SAAS,WAAU;AAC1B,OAAOC,UAAU,OAAM;AAEvB,SAASC,WAAW,EAAEC,YAAY,QAAQ,qBAAoB;AAE9D;;CAEC,GACD,OAAO,MAAMC,yBAAyB,CAAC,EACrCC,cAAc,EACdC,WAAW,EAIZ;IACC,MAAMC,uBAAuBN,KAAKO,OAAO,CAACH,gBAAgB;IAC1D,MAAMI,kBAAkBR,KAAKO,OAAO,CAACH,gBAAgB;IACrD,MAAMK,cAAcT,KAAKO,OAAO,CAACH,gBAAgB;IAEjD,MAAMM,mBAAmBX,IAAIY,YAAY,CAACL,sBAAsB;IAChE,MAAMM,cAAcb,IAAIY,YAAY,CAACH,iBAAiB;IACtD,MAAMK,UAAUd,IAAIY,YAAY,CAACF,aAAa;IAE9C,MAAMK,kBAAkBF,YAAYG,UAAU,CAAC,mCAAmCV;IAClF,IAAIW,iBAAiBH,QAAQE,UAAU,CAAC,mCAAmCV;IAE3E,MAAMY,2BAA2BhB,YAAYI;IAE7CW,iBAAiBA,eAAeE,OAAO,CACrC,yBACA,CAAC,aAAa,EAAED,0BAA0B;IAG5CD,iBAAiBA,eAAeD,UAAU,CAAC,kBAAkB,GAAGb,aAAaG,aAAa,MAAM,CAAC;IAEjG,IAAIc,uBAAuBT,iBAAiBQ,OAAO,CACjD,mCACAb;IAGFc,uBAAuBA,qBAAqBJ,UAAU,CAAC,YAAYE;IAEnElB,IAAIqB,aAAa,CAACd,sBAAsBa;IACxCpB,IAAIqB,aAAa,CAACZ,iBAAiBM;IACnCf,IAAIqB,aAAa,CAACX,aAAaO;AACjC,EAAC"}
|
@@ -1,14 +1,19 @@
|
|
1
|
-
import type { CliArgs, DbDetails, PackageManager, ProjectTemplate } from '../types.js';
|
1
|
+
import type { CliArgs, DbDetails, PackageManager, ProjectExample, ProjectTemplate } from '../types.js';
|
2
|
+
type TemplateOrExample = {
|
3
|
+
example: ProjectExample;
|
4
|
+
} | {
|
5
|
+
template: ProjectTemplate;
|
6
|
+
};
|
2
7
|
export declare function createProject(args: {
|
3
8
|
cliArgs: CliArgs;
|
4
9
|
dbDetails?: DbDetails;
|
5
10
|
packageManager: PackageManager;
|
6
11
|
projectDir: string;
|
7
12
|
projectName: string;
|
8
|
-
|
9
|
-
}): Promise<void>;
|
13
|
+
} & TemplateOrExample): Promise<void>;
|
10
14
|
export declare function updatePackageJSON(args: {
|
11
15
|
projectDir: string;
|
12
16
|
projectName: string;
|
13
17
|
}): Promise<void>;
|
18
|
+
export {};
|
14
19
|
//# sourceMappingURL=create-project.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;AAiDpB,KAAK,iBAAiB,GAClB;IACE,OAAO,EAAE,cAAc,CAAA;CACxB,GACD;IACE,QAAQ,EAAE,eAAe,CAAA;CAC1B,CAAA;AAEL,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,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,CAwFf;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhB"}
|
@@ -7,6 +7,8 @@ import path from 'path';
|
|
7
7
|
import { tryInitRepoAndCommit } from '../utils/git.js';
|
8
8
|
import { debug, error, info, warning } from '../utils/log.js';
|
9
9
|
import { configurePayloadConfig } from './configure-payload-config.js';
|
10
|
+
import { configurePluginProject } from './configure-plugin-project.js';
|
11
|
+
import { downloadExample } from './download-example.js';
|
10
12
|
import { downloadTemplate } from './download-template.js';
|
11
13
|
const filename = fileURLToPath(import.meta.url);
|
12
14
|
const dirname = path.dirname(filename);
|
@@ -40,25 +42,41 @@ async function installDeps(args) {
|
|
40
42
|
}
|
41
43
|
}
|
42
44
|
export async function createProject(args) {
|
43
|
-
const { cliArgs, dbDetails, packageManager, projectDir, projectName
|
45
|
+
const { cliArgs, dbDetails, packageManager, projectDir, projectName } = args;
|
44
46
|
if (cliArgs['--dry-run']) {
|
45
47
|
debug(`Dry run: Creating project in ${chalk.green(projectDir)}`);
|
46
48
|
return;
|
47
49
|
}
|
48
50
|
await createOrFindProjectDir(projectDir);
|
51
|
+
if (cliArgs['--local-example']) {
|
52
|
+
// Copy example from local path. For development purposes.
|
53
|
+
const localExample = path.resolve(dirname, '../../../../examples/', cliArgs['--local-example']);
|
54
|
+
await fse.copy(localExample, projectDir);
|
55
|
+
}
|
49
56
|
if (cliArgs['--local-template']) {
|
50
57
|
// Copy template from local path. For development purposes.
|
51
58
|
const localTemplate = path.resolve(dirname, '../../../../templates/', cliArgs['--local-template']);
|
52
59
|
await fse.copy(localTemplate, projectDir);
|
53
|
-
} else if ('url' in template) {
|
54
|
-
|
55
|
-
|
60
|
+
} else if ('template' in args && 'url' in args.template) {
|
61
|
+
const { template } = args;
|
62
|
+
if (cliArgs['--branch']) {
|
63
|
+
template.url = `${template.url.split('#')?.[0]}#${cliArgs['--branch']}`;
|
56
64
|
}
|
57
65
|
await downloadTemplate({
|
58
66
|
debug: cliArgs['--debug'],
|
59
67
|
projectDir,
|
60
68
|
template
|
61
69
|
});
|
70
|
+
} else if ('example' in args && 'url' in args.example) {
|
71
|
+
const { example } = args;
|
72
|
+
if (cliArgs['--branch']) {
|
73
|
+
example.url = `${example.url.split('#')?.[0]}#${cliArgs['--branch']}`;
|
74
|
+
}
|
75
|
+
await downloadExample({
|
76
|
+
debug: cliArgs['--debug'],
|
77
|
+
example,
|
78
|
+
projectDir
|
79
|
+
});
|
62
80
|
}
|
63
81
|
const spinner = p.spinner();
|
64
82
|
spinner.start('Checking latest Payload version...');
|
@@ -66,13 +84,23 @@ export async function createProject(args) {
|
|
66
84
|
projectDir,
|
67
85
|
projectName
|
68
86
|
});
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
87
|
+
if ('template' in args) {
|
88
|
+
if (args.template.type === 'plugin') {
|
89
|
+
spinner.message('Configuring Plugin...');
|
90
|
+
configurePluginProject({
|
91
|
+
projectDirPath: projectDir,
|
92
|
+
projectName
|
93
|
+
});
|
94
|
+
} else {
|
95
|
+
spinner.message('Configuring Payload...');
|
96
|
+
await configurePayloadConfig({
|
97
|
+
dbType: dbDetails?.type,
|
98
|
+
projectDirOrConfigPath: {
|
99
|
+
projectDir
|
100
|
+
}
|
101
|
+
});
|
74
102
|
}
|
75
|
-
}
|
103
|
+
}
|
76
104
|
// Remove yarn.lock file. This is only desired in Payload Cloud.
|
77
105
|
const lockPath = path.resolve(projectDir, 'pnpm-lock.yaml');
|
78
106
|
if (fse.existsSync(lockPath)) {
|
@@ -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 {
|
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 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 { downloadTemplate } from './download-template.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 cliArgs: CliArgs\n dbDetails?: DbDetails\n packageManager: PackageManager\n projectDir: string\n projectName: string\n } & TemplateOrExample,\n): Promise<void> {\n const { 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 await updatePackageJSON({ 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 // Remove yarn.lock file. This is only desired in Payload Cloud.\n const lockPath = path.resolve(projectDir, 'pnpm-lock.yaml')\n if (fse.existsSync(lockPath)) {\n await fse.remove(lockPath)\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\nexport async function updatePackageJSON(args: {\n projectDir: string\n projectName: string\n}): Promise<void> {\n const { 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 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"],"names":["p","chalk","execa","fse","fileURLToPath","path","tryInitRepoAndCommit","debug","error","info","warning","configurePayloadConfig","configurePluginProject","downloadExample","downloadTemplate","filename","url","dirname","createOrFindProjectDir","projectDir","pathExists","mkdir","installDeps","args","cliArgs","packageManager","installCmd","command","cwd","resolve","err","Error","message","createProject","dbDetails","projectName","green","localExample","copy","localTemplate","template","split","example","spinner","start","updatePackageJSON","type","projectDirPath","dbType","projectDirOrConfigPath","lockPath","existsSync","remove","result","stop","packageJsonPath","packageObj","readJson","name","writeJson","spaces"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AACnC,OAAOC,WAAW,QAAO;AACzB,OAAOC,WAAW,QAAO;AACzB,OAAOC,SAAS,WAAU;AAC1B,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,UAAU,OAAM;AAUvB,SAASC,oBAAoB,QAAQ,kBAAiB;AACtD,SAASC,KAAK,EAAEC,KAAK,EAAEC,IAAI,EAAEC,OAAO,QAAQ,kBAAiB;AAC7D,SAASC,sBAAsB,QAAQ,gCAA+B;AACtE,SAASC,sBAAsB,QAAQ,gCAA+B;AACtE,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,gBAAgB,QAAQ,yBAAwB;AAEzD,MAAMC,WAAWX,cAAc,YAAYY,GAAG;AAC9C,MAAMC,UAAUZ,KAAKY,OAAO,CAACF;AAE7B,eAAeG,uBAAuBC,UAAkB;IACtD,MAAMC,aAAa,MAAMjB,IAAIiB,UAAU,CAACD;IACxC,IAAI,CAACC,YAAY;QACf,MAAMjB,IAAIkB,KAAK,CAACF;IAClB;AACF;AAEA,eAAeG,YAAYC,IAI1B;IACC,MAAM,EAAEC,OAAO,EAAEC,cAAc,EAAEN,UAAU,EAAE,GAAGI;IAChD,IAAIC,OAAO,CAAC,YAAY,EAAE;QACxB,OAAO;IACT;IACA,IAAIE,aAAa;IAEjB,IAAID,mBAAmB,QAAQ;QAC7BC,aAAa;IACf,OAAO,IAAID,mBAAmB,QAAQ;QACpCC,aAAa;IACf,OAAO,IAAID,mBAAmB,OAAO;QACnCC,aAAa;IACf;IAEA,IAAI;QACF,MAAMxB,MAAMyB,OAAO,CAACD,YAAY;YAC9BE,KAAKvB,KAAKwB,OAAO,CAACV;QACpB;QACA,OAAO;IACT,EAAE,OAAOW,KAAc;QACrBtB,MAAM,CAAC,6BAA6B,EAAEsB,eAAeC,QAAQ,CAAC,EAAE,EAAED,IAAIE,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC;QACvF,OAAO;IACT;AACF;AAUA,OAAO,eAAeC,cACpBV,IAMqB;IAErB,MAAM,EAAEC,OAAO,EAAEU,SAAS,EAAET,cAAc,EAAEN,UAAU,EAAEgB,WAAW,EAAE,GAAGZ;IAExE,IAAIC,OAAO,CAAC,YAAY,EAAE;QACxBjB,MAAM,CAAC,6BAA6B,EAAEN,MAAMmC,KAAK,CAACjB,aAAa;QAC/D;IACF;IAEA,MAAMD,uBAAuBC;IAE7B,IAAIK,OAAO,CAAC,kBAAkB,EAAE;QAC9B,0DAA0D;QAC1D,MAAMa,eAAehC,KAAKwB,OAAO,CAACZ,SAAS,yBAAyBO,OAAO,CAAC,kBAAkB;QAC9F,MAAMrB,IAAImC,IAAI,CAACD,cAAclB;IAC/B;IAEA,IAAIK,OAAO,CAAC,mBAAmB,EAAE;QAC/B,2DAA2D;QAC3D,MAAMe,gBAAgBlC,KAAKwB,OAAO,CAChCZ,SACA,0BACAO,OAAO,CAAC,mBAAmB;QAE7B,MAAMrB,IAAImC,IAAI,CAACC,eAAepB;IAChC,OAAO,IAAI,cAAcI,QAAQ,SAASA,KAAKiB,QAAQ,EAAE;QACvD,MAAM,EAAEA,QAAQ,EAAE,GAAGjB;QACrB,IAAIC,OAAO,CAAC,WAAW,EAAE;YACvBgB,SAASxB,GAAG,GAAG,GAAGwB,SAASxB,GAAG,CAACyB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAEjB,OAAO,CAAC,WAAW,EAAE;QACzE;QAEA,MAAMV,iBAAiB;YACrBP,OAAOiB,OAAO,CAAC,UAAU;YACzBL;YACAqB;QACF;IACF,OAAO,IAAI,aAAajB,QAAQ,SAASA,KAAKmB,OAAO,EAAE;QACrD,MAAM,EAAEA,OAAO,EAAE,GAAGnB;QACpB,IAAIC,OAAO,CAAC,WAAW,EAAE;YACvBkB,QAAQ1B,GAAG,GAAG,GAAG0B,QAAQ1B,GAAG,CAACyB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAEjB,OAAO,CAAC,WAAW,EAAE;QACvE;QAEA,MAAMX,gBAAgB;YACpBN,OAAOiB,OAAO,CAAC,UAAU;YACzBkB;YACAvB;QACF;IACF;IAEA,MAAMwB,UAAU3C,EAAE2C,OAAO;IACzBA,QAAQC,KAAK,CAAC;IAEd,MAAMC,kBAAkB;QAAE1B;QAAYgB;IAAY;IAElD,IAAI,cAAcZ,MAAM;QACtB,IAAIA,KAAKiB,QAAQ,CAACM,IAAI,KAAK,UAAU;YACnCH,QAAQX,OAAO,CAAC;YAChBpB,uBAAuB;gBAAEmC,gBAAgB5B;gBAAYgB;YAAY;QACnE,OAAO;YACLQ,QAAQX,OAAO,CAAC;YAChB,MAAMrB,uBAAuB;gBAC3BqC,QAAQd,WAAWY;gBACnBG,wBAAwB;oBAAE9B;gBAAW;YACvC;QACF;IACF;IAEA,gEAAgE;IAChE,MAAM+B,WAAW7C,KAAKwB,OAAO,CAACV,YAAY;IAC1C,IAAIhB,IAAIgD,UAAU,CAACD,WAAW;QAC5B,MAAM/C,IAAIiD,MAAM,CAACF;IACnB;IAEA,IAAI,CAAC1B,OAAO,CAAC,YAAY,EAAE;QACzBf,KAAK,CAAC,MAAM,EAAEgB,eAAe,GAAG,CAAC;QACjCkB,QAAQX,OAAO,CAAC;QAChB,MAAMqB,SAAS,MAAM/B,YAAY;YAAEE;YAASC;YAAgBN;QAAW;QACvE,IAAIkC,QAAQ;YACVV,QAAQW,IAAI,CAAC;QACf,OAAO;YACLX,QAAQW,IAAI,CAAC,iCAAiC;QAChD;IACF,OAAO;QACLX,QAAQW,IAAI,CAAC;IACf;IAEA,IAAI,CAAC9B,OAAO,CAAC,WAAW,EAAE;QACxBlB,qBAAqB;YAAEsB,KAAKT;QAAW;IACzC;AACF;AAEA,OAAO,eAAe0B,kBAAkBtB,IAGvC;IACC,MAAM,EAAEJ,UAAU,EAAEgB,WAAW,EAAE,GAAGZ;IACpC,MAAMgC,kBAAkBlD,KAAKwB,OAAO,CAACV,YAAY;IACjD,IAAI;QACF,MAAMqC,aAAa,MAAMrD,IAAIsD,QAAQ,CAACF;QACtCC,WAAWE,IAAI,GAAGvB;QAClB,MAAMhC,IAAIwD,SAAS,CAACJ,iBAAiBC,YAAY;YAAEI,QAAQ;QAAE;IAC/D,EAAE,OAAO9B,KAAc;QACrBpB,QAAQ,CAAC,uCAAuC,EAAEoB,eAAeC,QAAQD,IAAIE,OAAO,GAAG,IAAI;IAC7F;AACF"}
|
@@ -40,10 +40,13 @@ describe('createProject', ()=>{
|
|
40
40
|
name: 'plugin',
|
41
41
|
type: 'plugin',
|
42
42
|
description: 'Template for creating a Payload plugin',
|
43
|
-
url: 'https://github.com/payloadcms/payload
|
43
|
+
url: 'https://github.com/payloadcms/payload/templates/plugin'
|
44
44
|
};
|
45
45
|
await createProject({
|
46
|
-
cliArgs:
|
46
|
+
cliArgs: {
|
47
|
+
...args,
|
48
|
+
'--local-template': 'plugin'
|
49
|
+
},
|
47
50
|
packageManager,
|
48
51
|
projectDir,
|
49
52
|
projectName,
|
@@ -54,6 +57,28 @@ describe('createProject', ()=>{
|
|
54
57
|
// Check package name and description
|
55
58
|
expect(packageJson.name).toStrictEqual(projectName);
|
56
59
|
});
|
60
|
+
it('creates example', async ()=>{
|
61
|
+
const projectName = 'custom-server-example';
|
62
|
+
const example = {
|
63
|
+
name: 'custom-server',
|
64
|
+
url: 'https://github.com/payloadcms/payload/examples/custom-server#main'
|
65
|
+
};
|
66
|
+
await createProject({
|
67
|
+
cliArgs: {
|
68
|
+
...args,
|
69
|
+
'--local-template': undefined,
|
70
|
+
'--local-example': 'custom-server'
|
71
|
+
},
|
72
|
+
packageManager,
|
73
|
+
projectDir,
|
74
|
+
projectName,
|
75
|
+
example
|
76
|
+
});
|
77
|
+
const packageJsonPath = path.resolve(projectDir, 'package.json');
|
78
|
+
const packageJson = fse.readJsonSync(packageJsonPath);
|
79
|
+
// Check package name and description
|
80
|
+
expect(packageJson.name).toStrictEqual(projectName);
|
81
|
+
});
|
57
82
|
describe('creates project from template', ()=>{
|
58
83
|
const templates = getValidTemplates();
|
59
84
|
it.each([
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/create-project.spec.ts"],"sourcesContent":["import { jest } from '@jest/globals'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport * as os from 'node:os'\nimport path from 'path'\n\nimport type { CliArgs, DbType, ProjectTemplate } from '../types.js'\n\nimport { createProject } from './create-project.js'\nimport { dbReplacements } from './replacements.js'\nimport { getValidTemplates } from './templates.js'\n\ndescribe('createProject', () => {\n let projectDir: string\n beforeAll(() => {\n // eslint-disable-next-line no-console\n console.log = jest.fn()\n })\n\n beforeEach(() => {\n const tempDirectory = fs.realpathSync(os.tmpdir())\n projectDir = `${tempDirectory}/${Math.random().toString(36).substring(7)}`\n })\n\n afterEach(() => {\n if (fse.existsSync(projectDir)) {\n fse.rmSync(projectDir, { recursive: true })\n }\n })\n\n describe('#createProject', () => {\n const args = {\n _: ['project-name'],\n '--db': 'mongodb',\n '--local-template': 'blank',\n '--no-deps': true,\n } as CliArgs\n const packageManager = 'yarn'\n\n it('creates plugin template', async () => {\n const projectName = 'plugin'\n const template: ProjectTemplate = {\n name: 'plugin',\n type: 'plugin',\n description: 'Template for creating a Payload plugin',\n url: 'https://github.com/payloadcms/payload
|
1
|
+
{"version":3,"sources":["../../src/lib/create-project.spec.ts"],"sourcesContent":["import { jest } from '@jest/globals'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport * as os from 'node:os'\nimport path from 'path'\n\nimport type { CliArgs, DbType, ProjectExample, ProjectTemplate } from '../types.js'\n\nimport { createProject } from './create-project.js'\nimport { dbReplacements } from './replacements.js'\nimport { getValidTemplates } from './templates.js'\n\ndescribe('createProject', () => {\n let projectDir: string\n beforeAll(() => {\n // eslint-disable-next-line no-console\n console.log = jest.fn()\n })\n\n beforeEach(() => {\n const tempDirectory = fs.realpathSync(os.tmpdir())\n projectDir = `${tempDirectory}/${Math.random().toString(36).substring(7)}`\n })\n\n afterEach(() => {\n if (fse.existsSync(projectDir)) {\n fse.rmSync(projectDir, { recursive: true })\n }\n })\n\n describe('#createProject', () => {\n const args = {\n _: ['project-name'],\n '--db': 'mongodb',\n '--local-template': 'blank',\n '--no-deps': true,\n } as CliArgs\n const packageManager = 'yarn'\n\n it('creates plugin template', async () => {\n const projectName = 'plugin'\n const template: ProjectTemplate = {\n name: 'plugin',\n type: 'plugin',\n description: 'Template for creating a Payload plugin',\n url: 'https://github.com/payloadcms/payload/templates/plugin',\n }\n\n await createProject({\n cliArgs: { ...args, '--local-template': 'plugin' } as CliArgs,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n const packageJson = fse.readJsonSync(packageJsonPath)\n\n // Check package name and description\n expect(packageJson.name).toStrictEqual(projectName)\n })\n\n it('creates example', async () => {\n const projectName = 'custom-server-example'\n const example: ProjectExample = {\n name: 'custom-server',\n url: 'https://github.com/payloadcms/payload/examples/custom-server#main',\n }\n\n await createProject({\n cliArgs: {\n ...args,\n '--local-template': undefined,\n '--local-example': 'custom-server',\n } as CliArgs,\n packageManager,\n projectDir,\n projectName,\n example,\n })\n\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n const packageJson = fse.readJsonSync(packageJsonPath)\n\n // Check package name and description\n expect(packageJson.name).toStrictEqual(projectName)\n })\n\n describe('creates project from template', () => {\n const templates = getValidTemplates()\n\n it.each([\n ['blank', 'mongodb'],\n ['blank', 'postgres'],\n\n // TODO: Re-enable these once 3.0 is stable and templates updated\n // ['website', 'mongodb'],\n // ['website', 'postgres'],\n // ['ecommerce', 'mongodb'],\n // ['ecommerce', 'postgres'],\n ])('update config and deps: %s, %s', async (templateName, db) => {\n const projectName = 'starter-project'\n\n const template = templates.find((t) => t.name === templateName)\n\n const cliArgs = {\n ...args,\n '--db': db,\n '--local-template': templateName,\n } as CliArgs\n\n await createProject({\n cliArgs,\n dbDetails: {\n type: db as DbType,\n dbUri: `${db}://localhost:27017/create-project-test`,\n },\n packageManager,\n projectDir,\n projectName,\n template: template as ProjectTemplate,\n })\n\n const dbReplacement = dbReplacements[db as DbType]\n\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n const packageJson = fse.readJsonSync(packageJsonPath)\n\n // Verify git was initialized\n expect(fse.existsSync(path.resolve(projectDir, '.git'))).toBe(true)\n\n // Should only have one db adapter\n expect(\n Object.keys(packageJson.dependencies).filter((n) => n.startsWith('@payloadcms/db-')),\n ).toHaveLength(1)\n\n const payloadConfigPath = (\n await globby('**/payload.config.ts', {\n absolute: true,\n cwd: projectDir,\n })\n )?.[0]\n\n const content = fse.readFileSync(payloadConfigPath, 'utf-8')\n\n // Check payload.config.ts\n expect(content).not.toContain('// database-adapter-import')\n expect(content).toContain(dbReplacement.importReplacement)\n\n expect(content).not.toContain('// database-adapter-config-start')\n expect(content).not.toContain('// database-adapter-config-end')\n expect(content).toContain(dbReplacement.configReplacement().join('\\n'))\n })\n })\n })\n})\n"],"names":["jest","fs","fse","globby","os","path","createProject","dbReplacements","getValidTemplates","describe","projectDir","beforeAll","console","log","fn","beforeEach","tempDirectory","realpathSync","tmpdir","Math","random","toString","substring","afterEach","existsSync","rmSync","recursive","args","_","packageManager","it","projectName","template","name","type","description","url","cliArgs","packageJsonPath","resolve","packageJson","readJsonSync","expect","toStrictEqual","example","undefined","templates","each","templateName","db","find","t","dbDetails","dbUri","dbReplacement","toBe","Object","keys","dependencies","filter","n","startsWith","toHaveLength","payloadConfigPath","absolute","cwd","content","readFileSync","not","toContain","importReplacement","configReplacement","join"],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"download-example.d.ts","sourceRoot":"","sources":["../../src/lib/download-example.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,wBAAsB,eAAe,CAAC,EACpC,KAAK,EACL,OAAO,EACP,UAAU,GACX,EAAE;IACD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB,iBAmBA"}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { Readable } from 'node:stream';
|
2
|
+
import { pipeline } from 'node:stream/promises';
|
3
|
+
import { x } from 'tar';
|
4
|
+
import { debug as debugLog } from '../utils/log.js';
|
5
|
+
export async function downloadExample({ debug, example, projectDir }) {
|
6
|
+
const branchOrTag = example.url.split('#')?.[1] || 'latest';
|
7
|
+
const url = `https://codeload.github.com/payloadcms/payload/tar.gz/${branchOrTag}`;
|
8
|
+
const filter = `payload-${branchOrTag.replace(/^v/, '')}/examples/${example.name}/`;
|
9
|
+
if (debug) {
|
10
|
+
debugLog(`Using example url: ${example.url}`);
|
11
|
+
debugLog(`Codeload url: ${url}`);
|
12
|
+
debugLog(`Filter: ${filter}`);
|
13
|
+
}
|
14
|
+
await pipeline(await downloadTarStream(url), x({
|
15
|
+
cwd: projectDir,
|
16
|
+
filter: (p)=>p.includes(filter),
|
17
|
+
strip: 2 + example.name.split('/').length
|
18
|
+
}));
|
19
|
+
}
|
20
|
+
async function downloadTarStream(url) {
|
21
|
+
const res = await fetch(url);
|
22
|
+
if (!res.body) {
|
23
|
+
throw new Error(`Failed to download: ${url}`);
|
24
|
+
}
|
25
|
+
return Readable.from(res.body);
|
26
|
+
}
|
27
|
+
|
28
|
+
//# sourceMappingURL=download-example.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/lib/download-example.ts"],"sourcesContent":["import { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { x } from 'tar'\n\nimport type { ProjectExample } from '../types.js'\n\nimport { debug as debugLog } from '../utils/log.js'\n\nexport async function downloadExample({\n debug,\n example,\n projectDir,\n}: {\n debug?: boolean\n example: ProjectExample\n projectDir: string\n}) {\n const branchOrTag = example.url.split('#')?.[1] || 'latest'\n const url = `https://codeload.github.com/payloadcms/payload/tar.gz/${branchOrTag}`\n const filter = `payload-${branchOrTag.replace(/^v/, '')}/examples/${example.name}/`\n\n if (debug) {\n debugLog(`Using example url: ${example.url}`)\n debugLog(`Codeload url: ${url}`)\n debugLog(`Filter: ${filter}`)\n }\n\n await pipeline(\n await downloadTarStream(url),\n x({\n cwd: projectDir,\n filter: (p) => p.includes(filter),\n strip: 2 + example.name.split('/').length,\n }),\n )\n}\n\nasync function downloadTarStream(url: string) {\n const res = await fetch(url)\n\n if (!res.body) {\n throw new Error(`Failed to download: ${url}`)\n }\n\n return Readable.from(res.body as unknown as NodeJS.ReadableStream)\n}\n"],"names":["Readable","pipeline","x","debug","debugLog","downloadExample","example","projectDir","branchOrTag","url","split","filter","replace","name","downloadTarStream","cwd","p","includes","strip","length","res","fetch","body","Error","from"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAa;AACtC,SAASC,QAAQ,QAAQ,uBAAsB;AAC/C,SAASC,CAAC,QAAQ,MAAK;AAIvB,SAASC,SAASC,QAAQ,QAAQ,kBAAiB;AAEnD,OAAO,eAAeC,gBAAgB,EACpCF,KAAK,EACLG,OAAO,EACPC,UAAU,EAKX;IACC,MAAMC,cAAcF,QAAQG,GAAG,CAACC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI;IACnD,MAAMD,MAAM,CAAC,sDAAsD,EAAED,aAAa;IAClF,MAAMG,SAAS,CAAC,QAAQ,EAAEH,YAAYI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAEN,QAAQO,IAAI,CAAC,CAAC,CAAC;IAEnF,IAAIV,OAAO;QACTC,SAAS,CAAC,mBAAmB,EAAEE,QAAQG,GAAG,EAAE;QAC5CL,SAAS,CAAC,cAAc,EAAEK,KAAK;QAC/BL,SAAS,CAAC,QAAQ,EAAEO,QAAQ;IAC9B;IAEA,MAAMV,SACJ,MAAMa,kBAAkBL,MACxBP,EAAE;QACAa,KAAKR;QACLI,QAAQ,CAACK,IAAMA,EAAEC,QAAQ,CAACN;QAC1BO,OAAO,IAAIZ,QAAQO,IAAI,CAACH,KAAK,CAAC,KAAKS,MAAM;IAC3C;AAEJ;AAEA,eAAeL,kBAAkBL,GAAW;IAC1C,MAAMW,MAAM,MAAMC,MAAMZ;IAExB,IAAI,CAACW,IAAIE,IAAI,EAAE;QACb,MAAM,IAAIC,MAAM,CAAC,oBAAoB,EAAEd,KAAK;IAC9C;IAEA,OAAOT,SAASwB,IAAI,CAACJ,IAAIE,IAAI;AAC/B"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import type { ProjectExample } from '../types.js';
|
2
|
+
export declare function getExamples({ branch }: {
|
3
|
+
branch: string;
|
4
|
+
}): Promise<ProjectExample[]>;
|
5
|
+
export declare function parseExample({ name, branch, }: {
|
6
|
+
branch: string;
|
7
|
+
name: string;
|
8
|
+
}): Promise<false | ProjectExample>;
|
9
|
+
//# sourceMappingURL=examples.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../src/lib/examples.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,wBAAsB,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAa3F;AAED,wBAAsB,YAAY,CAAC,EACjC,IAAI,EACJ,MAAM,GACP,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,CAYlC"}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { error, info } from '../utils/log.js';
|
2
|
+
export async function getExamples({ branch }) {
|
3
|
+
const url = `https://api.github.com/repos/payloadcms/payload/contents/examples?ref=${branch}`;
|
4
|
+
const response = await fetch(url);
|
5
|
+
const examplesResponseList = await response.json();
|
6
|
+
const examples = examplesResponseList.map((example)=>({
|
7
|
+
name: example.name,
|
8
|
+
url: `https://github.com/payloadcms/payload/examples/${example.name}#${branch}`
|
9
|
+
}));
|
10
|
+
return examples;
|
11
|
+
}
|
12
|
+
export async function parseExample({ name, branch }) {
|
13
|
+
const examples = await getExamples({
|
14
|
+
branch
|
15
|
+
});
|
16
|
+
const example = examples.find((e)=>e.name === name);
|
17
|
+
if (!example) {
|
18
|
+
error(`'${name}' is not a valid example name.`);
|
19
|
+
info(`Valid examples: ${examples.map((e)=>e.name).join(', ')}`);
|
20
|
+
return false;
|
21
|
+
}
|
22
|
+
return example;
|
23
|
+
}
|
24
|
+
|
25
|
+
//# sourceMappingURL=examples.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/lib/examples.ts"],"sourcesContent":["import type { ProjectExample } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport async function getExamples({ branch }: { branch: string }): Promise<ProjectExample[]> {\n const url = `https://api.github.com/repos/payloadcms/payload/contents/examples?ref=${branch}`\n\n const response = await fetch(url)\n\n const examplesResponseList: { name: string; path: string }[] = await response.json()\n\n const examples: ProjectExample[] = examplesResponseList.map((example) => ({\n name: example.name,\n url: `https://github.com/payloadcms/payload/examples/${example.name}#${branch}`,\n }))\n\n return examples\n}\n\nexport async function parseExample({\n name,\n branch,\n}: {\n branch: string\n name: string\n}): Promise<false | ProjectExample> {\n const examples = await getExamples({ branch })\n\n const example = examples.find((e) => e.name === name)\n\n if (!example) {\n error(`'${name}' is not a valid example name.`)\n info(`Valid examples: ${examples.map((e) => e.name).join(', ')}`)\n return false\n }\n\n return example\n}\n"],"names":["error","info","getExamples","branch","url","response","fetch","examplesResponseList","json","examples","map","example","name","parseExample","find","e","join"],"mappings":"AAEA,SAASA,KAAK,EAAEC,IAAI,QAAQ,kBAAiB;AAE7C,OAAO,eAAeC,YAAY,EAAEC,MAAM,EAAsB;IAC9D,MAAMC,MAAM,CAAC,sEAAsE,EAAED,QAAQ;IAE7F,MAAME,WAAW,MAAMC,MAAMF;IAE7B,MAAMG,uBAAyD,MAAMF,SAASG,IAAI;IAElF,MAAMC,WAA6BF,qBAAqBG,GAAG,CAAC,CAACC,UAAa,CAAA;YACxEC,MAAMD,QAAQC,IAAI;YAClBR,KAAK,CAAC,+CAA+C,EAAEO,QAAQC,IAAI,CAAC,CAAC,EAAET,QAAQ;QACjF,CAAA;IAEA,OAAOM;AACT;AAEA,OAAO,eAAeI,aAAa,EACjCD,IAAI,EACJT,MAAM,EAIP;IACC,MAAMM,WAAW,MAAMP,YAAY;QAAEC;IAAO;IAE5C,MAAMQ,UAAUF,SAASK,IAAI,CAAC,CAACC,IAAMA,EAAEH,IAAI,KAAKA;IAEhD,IAAI,CAACD,SAAS;QACZX,MAAM,CAAC,CAAC,EAAEY,KAAK,8BAA8B,CAAC;QAC9CX,KAAK,CAAC,gBAAgB,EAAEQ,SAASC,GAAG,CAAC,CAACK,IAAMA,EAAEH,IAAI,EAAEI,IAAI,CAAC,OAAO;QAChE,OAAO;IACT;IAEA,OAAOL;AACT"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAQ9D;AAED,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAQ9D;AAED,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,CAsBrD"}
|
package/dist/lib/templates.js
CHANGED
@@ -22,6 +22,12 @@ export function getValidTemplates() {
|
|
22
22
|
type: 'starter',
|
23
23
|
description: 'Website Template',
|
24
24
|
url: `https://github.com/payloadcms/payload/templates/website#main`
|
25
|
+
},
|
26
|
+
{
|
27
|
+
name: 'plugin',
|
28
|
+
type: 'plugin',
|
29
|
+
description: 'Template for creating a Payload plugin',
|
30
|
+
url: 'https://github.com/payloadcms/payload/templates/plugin#main'
|
25
31
|
}
|
26
32
|
];
|
27
33
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/templates.ts"],"sourcesContent":["import type { ProjectTemplate } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport function validateTemplate(templateName: string): boolean {\n const validTemplates = getValidTemplates()\n if (!validTemplates.map((t) => t.name).includes(templateName)) {\n error(`'${templateName}' is not a valid template.`)\n info(`Valid templates: ${validTemplates.map((t) => t.name).join(', ')}`)\n return false\n }\n return true\n}\n\nexport function getValidTemplates(): ProjectTemplate[] {\n // Starters _must_ be a valid template name from the templates/ directory\n return [\n {\n name: 'blank',\n type: 'starter',\n description: 'Blank 3.0 Template',\n url: `https://github.com/payloadcms/payload/templates/blank#main`,\n },\n {\n name: 'website',\n type: 'starter',\n description: 'Website Template',\n url: `https://github.com/payloadcms/payload/templates/website#main`,\n },\n
|
1
|
+
{"version":3,"sources":["../../src/lib/templates.ts"],"sourcesContent":["import type { ProjectTemplate } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport function validateTemplate(templateName: string): boolean {\n const validTemplates = getValidTemplates()\n if (!validTemplates.map((t) => t.name).includes(templateName)) {\n error(`'${templateName}' is not a valid template.`)\n info(`Valid templates: ${validTemplates.map((t) => t.name).join(', ')}`)\n return false\n }\n return true\n}\n\nexport function getValidTemplates(): ProjectTemplate[] {\n // Starters _must_ be a valid template name from the templates/ directory\n return [\n {\n name: 'blank',\n type: 'starter',\n description: 'Blank 3.0 Template',\n url: `https://github.com/payloadcms/payload/templates/blank#main`,\n },\n {\n name: 'website',\n type: 'starter',\n description: 'Website Template',\n url: `https://github.com/payloadcms/payload/templates/website#main`,\n },\n {\n name: 'plugin',\n type: 'plugin',\n description: 'Template for creating a Payload plugin',\n url: 'https://github.com/payloadcms/payload/templates/plugin#main',\n },\n ]\n}\n"],"names":["error","info","validateTemplate","templateName","validTemplates","getValidTemplates","map","t","name","includes","join","type","description","url"],"mappings":"AAEA,SAASA,KAAK,EAAEC,IAAI,QAAQ,kBAAiB;AAE7C,OAAO,SAASC,iBAAiBC,YAAoB;IACnD,MAAMC,iBAAiBC;IACvB,IAAI,CAACD,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEC,QAAQ,CAACN,eAAe;QAC7DH,MAAM,CAAC,CAAC,EAAEG,aAAa,0BAA0B,CAAC;QAClDF,KAAK,CAAC,iBAAiB,EAAEG,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEE,IAAI,CAAC,OAAO;QACvE,OAAO;IACT;IACA,OAAO;AACT;AAEA,OAAO,SAASL;IACd,yEAAyE;IACzE,OAAO;QACL;YACEG,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK,CAAC,0DAA0D,CAAC;QACnE;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK,CAAC,4DAA4D,CAAC;QACrE;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;KACD;AACH"}
|
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;AAwBzC,qBAAa,IAAI;IACf,IAAI,EAAE,OAAO,CAAA;;IA8CP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAmN5B"}
|
package/dist/main.js
CHANGED
@@ -7,6 +7,7 @@ import path from 'path';
|
|
7
7
|
import { configurePayloadConfig } from './lib/configure-payload-config.js';
|
8
8
|
import { PACKAGE_VERSION } from './lib/constants.js';
|
9
9
|
import { createProject } from './lib/create-project.js';
|
10
|
+
import { parseExample } from './lib/examples.js';
|
10
11
|
import { generateSecret } from './lib/generate-secret.js';
|
11
12
|
import { getPackageManager } from './lib/get-package-manager.js';
|
12
13
|
import { getNextAppDetails, initNext } from './lib/init-next.js';
|
@@ -23,15 +24,16 @@ export class Main {
|
|
23
24
|
constructor(){
|
24
25
|
// @ts-expect-error bad typings
|
25
26
|
this.args = arg({
|
27
|
+
'--branch': String,
|
26
28
|
'--db': String,
|
27
29
|
'--db-accept-recommended': Boolean,
|
28
30
|
'--db-connection-string': String,
|
31
|
+
'--example': String,
|
29
32
|
'--help': Boolean,
|
30
33
|
'--local-template': String,
|
31
34
|
'--name': String,
|
32
35
|
'--secret': String,
|
33
36
|
'--template': String,
|
34
|
-
'--template-branch': String,
|
35
37
|
// Next.js
|
36
38
|
'--init-next': Boolean,
|
37
39
|
// Package manager
|
@@ -48,6 +50,7 @@ export class Main {
|
|
48
50
|
'--dry-run': Boolean,
|
49
51
|
// Aliases
|
50
52
|
'-d': '--db',
|
53
|
+
'-e': '--example',
|
51
54
|
'-h': '--help',
|
52
55
|
'-n': '--name',
|
53
56
|
'-t': '--template'
|
@@ -158,50 +161,70 @@ export class Main {
|
|
158
161
|
process.exit(1);
|
159
162
|
}
|
160
163
|
}
|
161
|
-
|
162
|
-
|
164
|
+
const exampleArg = this.args['--example'];
|
165
|
+
if (exampleArg) {
|
166
|
+
const example = await parseExample({
|
167
|
+
name: exampleArg,
|
168
|
+
branch: this.args['--branch'] ?? 'main'
|
169
|
+
});
|
170
|
+
if (!example) {
|
171
|
+
helpMessage();
|
172
|
+
process.exit(1);
|
173
|
+
}
|
174
|
+
await createProject({
|
175
|
+
cliArgs: this.args,
|
176
|
+
example,
|
177
|
+
packageManager,
|
178
|
+
projectDir,
|
179
|
+
projectName
|
180
|
+
});
|
163
181
|
}
|
164
|
-
|
165
|
-
|
166
|
-
if (!template) {
|
167
|
-
p.log.error('Invalid template given');
|
168
|
-
p.outro(feedbackOutro());
|
169
|
-
process.exit(1);
|
182
|
+
if (debugFlag) {
|
183
|
+
debug(`Using ${exampleArg ? 'examples' : 'templates'} from git tag: v${PACKAGE_VERSION}`);
|
170
184
|
}
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
185
|
+
if (!exampleArg) {
|
186
|
+
const validTemplates = getValidTemplates();
|
187
|
+
const template = await parseTemplate(this.args, validTemplates);
|
188
|
+
if (!template) {
|
189
|
+
p.log.error('Invalid template given');
|
190
|
+
p.outro(feedbackOutro());
|
191
|
+
process.exit(1);
|
192
|
+
}
|
193
|
+
switch(template.type){
|
194
|
+
case 'plugin':
|
195
|
+
{
|
196
|
+
await createProject({
|
197
|
+
cliArgs: this.args,
|
198
|
+
packageManager,
|
199
|
+
projectDir,
|
200
|
+
projectName,
|
201
|
+
template
|
202
|
+
});
|
203
|
+
break;
|
204
|
+
}
|
205
|
+
case 'starter':
|
206
|
+
{
|
207
|
+
const dbDetails = await selectDb(this.args, projectName);
|
208
|
+
const payloadSecret = generateSecret();
|
209
|
+
await createProject({
|
210
|
+
cliArgs: this.args,
|
211
|
+
dbDetails,
|
212
|
+
packageManager,
|
213
|
+
projectDir,
|
214
|
+
projectName,
|
215
|
+
template
|
216
|
+
});
|
217
|
+
await manageEnvFiles({
|
218
|
+
cliArgs: this.args,
|
219
|
+
databaseType: dbDetails.type,
|
220
|
+
databaseUri: dbDetails.dbUri,
|
221
|
+
payloadSecret,
|
222
|
+
projectDir,
|
223
|
+
template
|
224
|
+
});
|
225
|
+
break;
|
226
|
+
}
|
227
|
+
}
|
205
228
|
}
|
206
229
|
info('Payload project successfully created!');
|
207
230
|
p.note(successMessage(projectDir, packageManager), chalk.bgGreen(chalk.black(' Next Steps ')));
|
package/dist/main.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/main.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\nimport arg from 'arg'\nimport chalk from 'chalk'\nimport figures from 'figures'\nimport path from 'path'\n\nimport type { CliArgs } from './types.js'\n\nimport { configurePayloadConfig } from './lib/configure-payload-config.js'\nimport { PACKAGE_VERSION } from './lib/constants.js'\nimport { createProject } from './lib/create-project.js'\nimport { generateSecret } from './lib/generate-secret.js'\nimport { getPackageManager } from './lib/get-package-manager.js'\nimport { getNextAppDetails, initNext } from './lib/init-next.js'\nimport { manageEnvFiles } from './lib/manage-env-files.js'\nimport { parseProjectName } from './lib/parse-project-name.js'\nimport { parseTemplate } from './lib/parse-template.js'\nimport { selectDb } from './lib/select-db.js'\nimport { getValidTemplates, validateTemplate } from './lib/templates.js'\nimport { updatePayloadInProject } from './lib/update-payload-in-project.js'\nimport { debug, error, info } from './utils/log.js'\nimport {\n feedbackOutro,\n helpMessage,\n moveMessage,\n successfulNextInit,\n successMessage,\n} from './utils/messages.js'\n\nexport class Main {\n args: CliArgs\n\n constructor() {\n // @ts-expect-error bad typings\n this.args = arg(\n {\n '--db': String,\n '--db-accept-recommended': Boolean,\n '--db-connection-string': String,\n '--help': Boolean,\n '--local-template': String,\n '--name': String,\n '--secret': String,\n '--template': String,\n '--template-branch': String,\n\n // Next.js\n '--init-next': Boolean, // TODO: Is this needed if we detect if inside Next.js project?\n\n // Package manager\n '--no-deps': Boolean,\n '--use-bun': Boolean,\n '--use-npm': Boolean,\n '--use-pnpm': Boolean,\n '--use-yarn': Boolean,\n\n // Other\n '--no-git': Boolean,\n\n // Flags\n '--beta': Boolean,\n '--debug': Boolean,\n '--dry-run': Boolean,\n\n // Aliases\n '-d': '--db',\n '-h': '--help',\n '-n': '--name',\n '-t': '--template',\n },\n { permissive: true },\n )\n }\n\n async init(): Promise<void> {\n try {\n if (this.args['--help']) {\n helpMessage()\n process.exit(0)\n }\n\n const debugFlag = this.args['--debug']\n\n // eslint-disable-next-line no-console\n console.log('\\n')\n p.intro(chalk.bgCyan(chalk.black(' create-payload-app ')))\n p.note(\"Welcome to Payload. Let's create a project!\")\n\n // Detect if inside Next.js project\n const nextAppDetails = await getNextAppDetails(process.cwd())\n const {\n hasTopLevelLayout,\n isPayloadInstalled,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextVersion,\n } = nextAppDetails\n\n if (nextConfigPath && !isSupportedNextVersion) {\n p.log.warn(\n `Next.js v${nextVersion} is unsupported. Next.js >= 15 is required to use Payload.`,\n )\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n // Upgrade Payload in existing project\n if (isPayloadInstalled && nextConfigPath) {\n p.log.warn(`Payload installation detected in current project.`)\n const shouldUpdate = await p.confirm({\n initialValue: false,\n message: chalk.bold(`Upgrade Payload in this project?`),\n })\n\n if (!p.isCancel(shouldUpdate) && shouldUpdate) {\n const { message, success: updateSuccess } = await updatePayloadInProject(nextAppDetails)\n if (updateSuccess) {\n info(message)\n } else {\n error(message)\n }\n }\n\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n if (nextConfigPath) {\n this.args['--name'] = slugify(path.basename(path.dirname(nextConfigPath)))\n }\n\n const projectName = await parseProjectName(this.args)\n const projectDir = nextConfigPath\n ? path.dirname(nextConfigPath)\n : path.resolve(process.cwd(), slugify(projectName))\n\n const packageManager = await getPackageManager({ cliArgs: this.args, projectDir })\n\n if (nextConfigPath) {\n p.log.step(\n chalk.bold(`${chalk.bgBlack(` ${figures.triangleUp} Next.js `)} project detected!`),\n )\n\n const proceed = await p.confirm({\n initialValue: true,\n message: chalk.bold(`Install ${chalk.green('Payload')} in this project?`),\n })\n if (p.isCancel(proceed) || !proceed) {\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n // Check for top-level layout.tsx\n if (nextAppDir && hasTopLevelLayout) {\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n const dbDetails = await selectDb(this.args, projectName)\n\n const result = await initNext({\n ...this.args,\n dbType: dbDetails.type,\n nextAppDetails,\n packageManager,\n projectDir,\n })\n\n if (result.success === false) {\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: {\n payloadConfigPath: result.payloadConfigPath,\n },\n })\n\n await manageEnvFiles({\n cliArgs: this.args,\n databaseType: dbDetails.type,\n databaseUri: dbDetails.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n })\n\n info('Payload project successfully initialized!')\n p.note(successfulNextInit(), chalk.bgGreen(chalk.black(' Documentation ')))\n p.outro(feedbackOutro())\n return\n }\n\n const templateArg = this.args['--template']\n if (templateArg) {\n const valid = validateTemplate(templateArg)\n if (!valid) {\n helpMessage()\n process.exit(1)\n }\n }\n\n if (debugFlag) {\n debug(`Using templates from git tag: v${PACKAGE_VERSION}`)\n }\n\n const validTemplates = getValidTemplates()\n const template = await parseTemplate(this.args, validTemplates)\n if (!template) {\n p.log.error('Invalid template given')\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n switch (template.type) {\n case 'plugin': {\n await createProject({\n cliArgs: this.args,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n break\n }\n case 'starter': {\n const dbDetails = await selectDb(this.args, projectName)\n const payloadSecret = generateSecret()\n\n await createProject({\n cliArgs: this.args,\n dbDetails,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n\n await manageEnvFiles({\n cliArgs: this.args,\n databaseType: dbDetails.type,\n databaseUri: dbDetails.dbUri,\n payloadSecret,\n projectDir,\n template,\n })\n\n break\n }\n }\n\n info('Payload project successfully created!')\n p.note(successMessage(projectDir, packageManager), chalk.bgGreen(chalk.black(' Next Steps ')))\n p.outro(feedbackOutro())\n } catch (err: unknown) {\n error(err instanceof Error ? err.message : 'An error occurred')\n }\n }\n}\n"],"names":["p","slugify","arg","chalk","figures","path","configurePayloadConfig","PACKAGE_VERSION","createProject","generateSecret","getPackageManager","getNextAppDetails","initNext","manageEnvFiles","parseProjectName","parseTemplate","selectDb","getValidTemplates","validateTemplate","updatePayloadInProject","debug","error","info","feedbackOutro","helpMessage","moveMessage","successfulNextInit","successMessage","Main","args","constructor","String","Boolean","permissive","init","process","exit","debugFlag","console","log","intro","bgCyan","black","note","nextAppDetails","cwd","hasTopLevelLayout","isPayloadInstalled","isSupportedNextVersion","nextAppDir","nextConfigPath","nextVersion","warn","outro","shouldUpdate","confirm","initialValue","message","bold","isCancel","success","updateSuccess","basename","dirname","projectName","projectDir","resolve","packageManager","cliArgs","step","bgBlack","triangleUp","proceed","green","dbDetails","result","dbType","type","projectDirOrConfigPath","payloadConfigPath","databaseType","databaseUri","dbUri","payloadSecret","bgGreen","templateArg","valid","validTemplates","template","err","Error"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["../src/main.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\nimport arg from 'arg'\nimport chalk from 'chalk'\nimport figures from 'figures'\nimport path from 'path'\n\nimport type { CliArgs } from './types.js'\n\nimport { configurePayloadConfig } from './lib/configure-payload-config.js'\nimport { PACKAGE_VERSION } from './lib/constants.js'\nimport { createProject } from './lib/create-project.js'\nimport { parseExample } from './lib/examples.js'\nimport { generateSecret } from './lib/generate-secret.js'\nimport { getPackageManager } from './lib/get-package-manager.js'\nimport { getNextAppDetails, initNext } from './lib/init-next.js'\nimport { manageEnvFiles } from './lib/manage-env-files.js'\nimport { parseProjectName } from './lib/parse-project-name.js'\nimport { parseTemplate } from './lib/parse-template.js'\nimport { selectDb } from './lib/select-db.js'\nimport { getValidTemplates, validateTemplate } from './lib/templates.js'\nimport { updatePayloadInProject } from './lib/update-payload-in-project.js'\nimport { debug, error, info } from './utils/log.js'\nimport {\n feedbackOutro,\n helpMessage,\n moveMessage,\n successfulNextInit,\n successMessage,\n} from './utils/messages.js'\n\nexport class Main {\n args: CliArgs\n\n constructor() {\n // @ts-expect-error bad typings\n this.args = arg(\n {\n '--branch': String,\n '--db': String,\n '--db-accept-recommended': Boolean,\n '--db-connection-string': String,\n '--example': String,\n '--help': Boolean,\n '--local-template': String,\n '--name': String,\n '--secret': String,\n '--template': String,\n\n // Next.js\n '--init-next': Boolean, // TODO: Is this needed if we detect if inside Next.js project?\n\n // Package manager\n '--no-deps': Boolean,\n '--use-bun': Boolean,\n '--use-npm': Boolean,\n '--use-pnpm': Boolean,\n '--use-yarn': Boolean,\n\n // Other\n '--no-git': Boolean,\n\n // Flags\n '--beta': Boolean,\n '--debug': Boolean,\n '--dry-run': Boolean,\n\n // Aliases\n '-d': '--db',\n '-e': '--example',\n '-h': '--help',\n '-n': '--name',\n '-t': '--template',\n },\n { permissive: true },\n )\n }\n\n async init(): Promise<void> {\n try {\n if (this.args['--help']) {\n helpMessage()\n process.exit(0)\n }\n\n const debugFlag = this.args['--debug']\n\n // eslint-disable-next-line no-console\n console.log('\\n')\n p.intro(chalk.bgCyan(chalk.black(' create-payload-app ')))\n p.note(\"Welcome to Payload. Let's create a project!\")\n\n // Detect if inside Next.js project\n const nextAppDetails = await getNextAppDetails(process.cwd())\n const {\n hasTopLevelLayout,\n isPayloadInstalled,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextVersion,\n } = nextAppDetails\n\n if (nextConfigPath && !isSupportedNextVersion) {\n p.log.warn(\n `Next.js v${nextVersion} is unsupported. Next.js >= 15 is required to use Payload.`,\n )\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n // Upgrade Payload in existing project\n if (isPayloadInstalled && nextConfigPath) {\n p.log.warn(`Payload installation detected in current project.`)\n const shouldUpdate = await p.confirm({\n initialValue: false,\n message: chalk.bold(`Upgrade Payload in this project?`),\n })\n\n if (!p.isCancel(shouldUpdate) && shouldUpdate) {\n const { message, success: updateSuccess } = await updatePayloadInProject(nextAppDetails)\n if (updateSuccess) {\n info(message)\n } else {\n error(message)\n }\n }\n\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n if (nextConfigPath) {\n this.args['--name'] = slugify(path.basename(path.dirname(nextConfigPath)))\n }\n\n const projectName = await parseProjectName(this.args)\n const projectDir = nextConfigPath\n ? path.dirname(nextConfigPath)\n : path.resolve(process.cwd(), slugify(projectName))\n\n const packageManager = await getPackageManager({ cliArgs: this.args, projectDir })\n\n if (nextConfigPath) {\n p.log.step(\n chalk.bold(`${chalk.bgBlack(` ${figures.triangleUp} Next.js `)} project detected!`),\n )\n\n const proceed = await p.confirm({\n initialValue: true,\n message: chalk.bold(`Install ${chalk.green('Payload')} in this project?`),\n })\n if (p.isCancel(proceed) || !proceed) {\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n // Check for top-level layout.tsx\n if (nextAppDir && hasTopLevelLayout) {\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n p.outro(feedbackOutro())\n process.exit(0)\n }\n\n const dbDetails = await selectDb(this.args, projectName)\n\n const result = await initNext({\n ...this.args,\n dbType: dbDetails.type,\n nextAppDetails,\n packageManager,\n projectDir,\n })\n\n if (result.success === false) {\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: {\n payloadConfigPath: result.payloadConfigPath,\n },\n })\n\n await manageEnvFiles({\n cliArgs: this.args,\n databaseType: dbDetails.type,\n databaseUri: dbDetails.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n })\n\n info('Payload project successfully initialized!')\n p.note(successfulNextInit(), chalk.bgGreen(chalk.black(' Documentation ')))\n p.outro(feedbackOutro())\n return\n }\n\n const templateArg = this.args['--template']\n if (templateArg) {\n const valid = validateTemplate(templateArg)\n if (!valid) {\n helpMessage()\n process.exit(1)\n }\n }\n\n const exampleArg = this.args['--example']\n\n if (exampleArg) {\n const example = await parseExample({\n name: exampleArg,\n branch: this.args['--branch'] ?? 'main',\n })\n\n if (!example) {\n helpMessage()\n process.exit(1)\n }\n\n await createProject({\n cliArgs: this.args,\n example,\n packageManager,\n projectDir,\n projectName,\n })\n }\n\n if (debugFlag) {\n debug(`Using ${exampleArg ? 'examples' : 'templates'} from git tag: v${PACKAGE_VERSION}`)\n }\n\n if (!exampleArg) {\n const validTemplates = getValidTemplates()\n const template = await parseTemplate(this.args, validTemplates)\n if (!template) {\n p.log.error('Invalid template given')\n p.outro(feedbackOutro())\n process.exit(1)\n }\n\n switch (template.type) {\n case 'plugin': {\n await createProject({\n cliArgs: this.args,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n break\n }\n case 'starter': {\n const dbDetails = await selectDb(this.args, projectName)\n const payloadSecret = generateSecret()\n\n await createProject({\n cliArgs: this.args,\n dbDetails,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n\n await manageEnvFiles({\n cliArgs: this.args,\n databaseType: dbDetails.type,\n databaseUri: dbDetails.dbUri,\n payloadSecret,\n projectDir,\n template,\n })\n\n break\n }\n }\n }\n\n info('Payload project successfully created!')\n p.note(successMessage(projectDir, packageManager), chalk.bgGreen(chalk.black(' Next Steps ')))\n p.outro(feedbackOutro())\n } catch (err: unknown) {\n error(err instanceof Error ? err.message : 'An error occurred')\n }\n }\n}\n"],"names":["p","slugify","arg","chalk","figures","path","configurePayloadConfig","PACKAGE_VERSION","createProject","parseExample","generateSecret","getPackageManager","getNextAppDetails","initNext","manageEnvFiles","parseProjectName","parseTemplate","selectDb","getValidTemplates","validateTemplate","updatePayloadInProject","debug","error","info","feedbackOutro","helpMessage","moveMessage","successfulNextInit","successMessage","Main","args","constructor","String","Boolean","permissive","init","process","exit","debugFlag","console","log","intro","bgCyan","black","note","nextAppDetails","cwd","hasTopLevelLayout","isPayloadInstalled","isSupportedNextVersion","nextAppDir","nextConfigPath","nextVersion","warn","outro","shouldUpdate","confirm","initialValue","message","bold","isCancel","success","updateSuccess","basename","dirname","projectName","projectDir","resolve","packageManager","cliArgs","step","bgBlack","triangleUp","proceed","green","dbDetails","result","dbType","type","projectDirOrConfigPath","payloadConfigPath","databaseType","databaseUri","dbUri","payloadSecret","bgGreen","templateArg","valid","exampleArg","example","name","branch","validTemplates","template","err","Error"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
@@ -1,30 +1,37 @@
|
|
1
1
|
import type arg from 'arg';
|
2
2
|
export interface Args extends arg.Spec {
|
3
3
|
'--beta': BooleanConstructor;
|
4
|
+
'--branch': StringConstructor;
|
4
5
|
'--db': StringConstructor;
|
5
6
|
'--db-accept-recommended': BooleanConstructor;
|
6
7
|
'--db-connection-string': StringConstructor;
|
7
8
|
'--debug': BooleanConstructor;
|
8
9
|
'--dry-run': BooleanConstructor;
|
10
|
+
'--example': StringConstructor;
|
9
11
|
'--help': BooleanConstructor;
|
10
12
|
'--init-next': BooleanConstructor;
|
13
|
+
'--local-example': StringConstructor;
|
11
14
|
'--local-template': StringConstructor;
|
12
15
|
'--name': StringConstructor;
|
13
16
|
'--no-deps': BooleanConstructor;
|
14
17
|
'--no-git': BooleanConstructor;
|
15
18
|
'--secret': StringConstructor;
|
16
19
|
'--template': StringConstructor;
|
17
|
-
'--template-branch': StringConstructor;
|
18
20
|
'--use-bun': BooleanConstructor;
|
19
21
|
'--use-npm': BooleanConstructor;
|
20
22
|
'--use-pnpm': BooleanConstructor;
|
21
23
|
'--use-yarn': BooleanConstructor;
|
24
|
+
'-e': string;
|
22
25
|
'-h': string;
|
23
26
|
'-n': string;
|
24
27
|
'-t': string;
|
25
28
|
}
|
26
29
|
export type CliArgs = arg.Result<Args>;
|
27
30
|
export type ProjectTemplate = GitTemplate | PluginTemplate;
|
31
|
+
export type ProjectExample = {
|
32
|
+
name: string;
|
33
|
+
url: string;
|
34
|
+
};
|
28
35
|
/**
|
29
36
|
* Template that is cloned verbatim from a git repo
|
30
37
|
* Performs .env manipulation based upon input
|
package/dist/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,MAAM,WAAW,IAAK,SAAQ,GAAG,CAAC,IAAI;IACpC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,iBAAiB,CAAA;IACzB,yBAAyB,EAAE,kBAAkB,CAAA;IAC7C,wBAAwB,EAAE,iBAAiB,CAAA;IAC3C,SAAS,EAAE,kBAAkB,CAAA;IAC7B,WAAW,EAAE,kBAAkB,CAAA;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,MAAM,WAAW,IAAK,SAAQ,GAAG,CAAC,IAAI;IACpC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,MAAM,EAAE,iBAAiB,CAAA;IACzB,yBAAyB,EAAE,kBAAkB,CAAA;IAC7C,wBAAwB,EAAE,iBAAiB,CAAA;IAC3C,SAAS,EAAE,kBAAkB,CAAA;IAC7B,WAAW,EAAE,kBAAkB,CAAA;IAE/B,WAAW,EAAE,iBAAiB,CAAA;IAC9B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,aAAa,EAAE,kBAAkB,CAAA;IACjC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,kBAAkB,EAAE,iBAAiB,CAAA;IACrC,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,UAAU,EAAE,kBAAkB,CAAA;IAC9B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,YAAY,EAAE,iBAAiB,CAAA;IAC/B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,YAAY,EAAE,kBAAkB,CAAA;IAChC,YAAY,EAAE,kBAAkB,CAAA;IAIhC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAEtC,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,cAAc,CAAA;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,UAAU,QAAQ;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;CAC9B;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAE5D,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,iBAAiB,CAAA;AAE1E,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG;IAC3B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,EAAE,OAAO,CAAA;IACjB,sBAAsB,EAAE,OAAO,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,WAAW,EAAE,IAAI,GAAG,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAA;AAEjD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,cAAc,GAAG,mBAAmB,CAAA"}
|
package/dist/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type arg from 'arg'\n\nexport interface Args extends arg.Spec {\n '--beta': BooleanConstructor\n '--db': StringConstructor\n '--db-accept-recommended': BooleanConstructor\n '--db-connection-string': StringConstructor\n '--debug': BooleanConstructor\n '--dry-run': BooleanConstructor\n '--help': BooleanConstructor\n '--init-next': BooleanConstructor\n '--local-template': StringConstructor\n '--name': StringConstructor\n '--no-deps': BooleanConstructor\n '--no-git': BooleanConstructor\n '--secret': StringConstructor\n '--template': StringConstructor\n '--
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type arg from 'arg'\n\nexport interface Args extends arg.Spec {\n '--beta': BooleanConstructor\n '--branch': StringConstructor\n '--db': StringConstructor\n '--db-accept-recommended': BooleanConstructor\n '--db-connection-string': StringConstructor\n '--debug': BooleanConstructor\n '--dry-run': BooleanConstructor\n\n '--example': StringConstructor\n '--help': BooleanConstructor\n '--init-next': BooleanConstructor\n '--local-example': StringConstructor\n '--local-template': StringConstructor\n '--name': StringConstructor\n '--no-deps': BooleanConstructor\n '--no-git': BooleanConstructor\n '--secret': StringConstructor\n '--template': StringConstructor\n '--use-bun': BooleanConstructor\n '--use-npm': BooleanConstructor\n '--use-pnpm': BooleanConstructor\n '--use-yarn': BooleanConstructor\n\n // Aliases\n\n '-e': string\n '-h': string\n '-n': string\n '-t': string\n}\n\nexport type CliArgs = arg.Result<Args>\n\nexport type ProjectTemplate = GitTemplate | PluginTemplate\n\nexport type ProjectExample = {\n name: string\n url: string\n}\n\n/**\n * Template that is cloned verbatim from a git repo\n * Performs .env manipulation based upon input\n */\nexport interface GitTemplate extends Template {\n type: 'starter'\n url: string\n}\n\n/**\n * Type specifically for the plugin template\n * No .env manipulation is done\n */\nexport interface PluginTemplate extends Template {\n type: 'plugin'\n url: string\n}\n\ninterface Template {\n description?: string\n name: string\n type: ProjectTemplate['type']\n}\n\nexport type PackageManager = 'bun' | 'npm' | 'pnpm' | 'yarn'\n\nexport type DbType = 'mongodb' | 'postgres' | 'sqlite' | 'vercel-postgres'\n\nexport type DbDetails = {\n dbUri: string\n type: DbType\n}\n\nexport type EditorType = 'lexical' | 'slate'\n\nexport type NextAppDetails = {\n hasTopLevelLayout: boolean\n isPayloadInstalled?: boolean\n isSrcDir: boolean\n isSupportedNextVersion: boolean\n nextAppDir?: string\n nextConfigPath?: string\n nextConfigType?: NextConfigType\n nextVersion: null | string\n}\n\nexport type NextConfigType = 'cjs' | 'esm' | 'ts'\n\nexport type StorageAdapterType = 'localDisk' | 'payloadCloud' | 'vercelBlobStorage'\n"],"names":[],"mappings":"AA2FA,WAAmF"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"casing.d.ts","sourceRoot":"","sources":["../../src/utils/casing.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,QAAS,MAAM,WAMtC,CAAA;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKlD"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
export const toCamelCase = (str)=>{
|
2
|
+
const s = str.match(/[A-Z]{2,}(?=[A-Z][a-z]+\d*|\b)|[A-Z]?[a-z]+\d*|[A-Z]|\d+/g)?.map((x)=>x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()).join('');
|
3
|
+
return (s && s.slice(0, 1).toLowerCase() + s.slice(1)) ?? '';
|
4
|
+
};
|
5
|
+
export function toPascalCase(input) {
|
6
|
+
return input.replace(/[_-]+/g, ' ') // Replace underscores or hyphens with spaces
|
7
|
+
.replace(/(?:^|\s+)(\w)/g, (_, c)=>c.toUpperCase()) // Capitalize first letter of each word
|
8
|
+
.replace(/\s+/g, '') // Remove all spaces
|
9
|
+
;
|
10
|
+
}
|
11
|
+
|
12
|
+
//# sourceMappingURL=casing.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/utils/casing.ts"],"sourcesContent":["export const toCamelCase = (str: string) => {\n const s = str\n .match(/[A-Z]{2,}(?=[A-Z][a-z]+\\d*|\\b)|[A-Z]?[a-z]+\\d*|[A-Z]|\\d+/g)\n ?.map((x) => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase())\n .join('')\n return (s && s.slice(0, 1).toLowerCase() + s.slice(1)) ?? ''\n}\n\nexport function toPascalCase(input: string): string {\n return input\n .replace(/[_-]+/g, ' ') // Replace underscores or hyphens with spaces\n .replace(/(?:^|\\s+)(\\w)/g, (_, c) => c.toUpperCase()) // Capitalize first letter of each word\n .replace(/\\s+/g, '') // Remove all spaces\n}\n"],"names":["toCamelCase","str","s","match","map","x","slice","toUpperCase","toLowerCase","join","toPascalCase","input","replace","_","c"],"mappings":"AAAA,OAAO,MAAMA,cAAc,CAACC;IAC1B,MAAMC,IAAID,IACPE,KAAK,CAAC,8DACLC,IAAI,CAACC,IAAMA,EAAEC,KAAK,CAAC,GAAG,GAAGC,WAAW,KAAKF,EAAEC,KAAK,CAAC,GAAGE,WAAW,IAChEC,KAAK;IACR,OAAO,AAACP,CAAAA,KAAKA,EAAEI,KAAK,CAAC,GAAG,GAAGE,WAAW,KAAKN,EAAEI,KAAK,CAAC,EAAC,KAAM;AAC5D,EAAC;AAED,OAAO,SAASI,aAAaC,KAAa;IACxC,OAAOA,MACJC,OAAO,CAAC,UAAU,KAAK,6CAA6C;KACpEA,OAAO,CAAC,kBAAkB,CAACC,GAAGC,IAAMA,EAAEP,WAAW,IAAI,uCAAuC;KAC5FK,OAAO,CAAC,QAAQ,IAAI,oBAAoB;;AAC7C"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAA;AAMlE,eAAO,MAAM,cAAc,QAE1B,CAAA;AAID,wBAAgB,WAAW,IAAI,IAAI,
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAA;AAMlE,eAAO,MAAM,cAAc,QAE1B,CAAA;AAID,wBAAgB,WAAW,IAAI,IAAI,CA8BlC;AAQD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,CAsBzF;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAgBpF;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/utils/messages.js
CHANGED
@@ -26,6 +26,7 @@ export function helpMessage() {
|
|
26
26
|
|
27
27
|
-n {underline my-payload-app} Set project name
|
28
28
|
-t {underline template_name} Choose specific template
|
29
|
+
-e {underline example_name} Choose specific exmaple
|
29
30
|
|
30
31
|
{dim Available templates: ${formatTemplates(validTemplates)}}
|
31
32
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/messages.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport chalk from 'chalk'\nimport path from 'path'\nimport terminalLink from 'terminal-link'\n\nimport type { PackageManager, ProjectTemplate } from '../types.js'\n\nimport { getValidTemplates } from '../lib/templates.js'\n\nconst header = (message: string): string => chalk.bold(message)\n\nexport const welcomeMessage = chalk`\n {green Welcome to Payload. Let's create a project! }\n`\n\nconst spacer = ' '.repeat(8)\n\nexport function helpMessage(): void {\n const validTemplates = getValidTemplates()\n console.log(chalk`\n {bold USAGE}\n\n {dim Inside of an existing Next.js project}\n\n {dim $} {bold npx create-payload-app}\n\n {dim Create a new project from scratch}\n\n {dim $} {bold npx create-payload-app}\n {dim $} {bold npx create-payload-app} my-project\n {dim $} {bold npx create-payload-app} -n my-project -t template-name\n\n {bold OPTIONS}\n\n -n {underline my-payload-app} Set project name\n -t {underline template_name} Choose specific template\n\n {dim Available templates: ${formatTemplates(validTemplates)}}\n\n --use-npm Use npm to install dependencies\n --use-yarn Use yarn to install dependencies\n --use-pnpm Use pnpm to install dependencies\n --use-bun Use bun to install dependencies (experimental)\n --no-deps Do not install any dependencies\n -h Show help\n`)\n}\n\nfunction formatTemplates(templates: ProjectTemplate[]) {\n return `\\n\\n${spacer}${templates\n .map((t) => `${t.name}${' '.repeat(28 - t.name.length)}${t.description}`)\n .join(`\\n${spacer}`)}`\n}\n\nexport function successMessage(projectDir: string, packageManager: PackageManager): string {\n const relativePath = path.relative(process.cwd(), projectDir)\n return `\n${header('Launch Application:')}\n\n - cd ./${relativePath}\n - ${\n packageManager === 'npm' ? 'npm run' : packageManager\n } dev or follow directions in ${createTerminalLink(\n 'README.md',\n `file://${path.resolve(projectDir, 'README.md')}`,\n )}\n\n${header('Documentation:')}\n\n - ${createTerminalLink(\n 'Getting Started',\n 'https://payloadcms.com/docs/getting-started/what-is-payload',\n )}\n - ${createTerminalLink('Configuration', 'https://payloadcms.com/docs/configuration/overview')}\n\n`\n}\n\nexport function successfulNextInit(): string {\n return `- ${createTerminalLink(\n 'Getting Started',\n 'https://payloadcms.com/docs/getting-started/what-is-payload',\n )}\n- ${createTerminalLink('Configuration', 'https://payloadcms.com/docs/configuration/overview')}\n`\n}\n\nexport function moveMessage(args: { nextAppDir: string; projectDir: string }): string {\n const relativeAppDir = path.relative(process.cwd(), args.nextAppDir)\n return `\n${header('Next Steps:')}\n\nPayload does not support a top-level layout.tsx file in the app directory.\n\n${chalk.bold('To continue:')}\n\n- Create a new directory in ./${relativeAppDir} such as ./${relativeAppDir}/${chalk.bold('(app)')}\n- Move all files from ./${relativeAppDir} into that directory\n\nIt is recommended to do this from your IDE if your app has existing file references.\n\nOnce moved, rerun the create-payload-app command again.\n`\n}\n\nexport function feedbackOutro(): string {\n return `${chalk.bgCyan(chalk.black(' Have feedback? '))} Visit us on ${createTerminalLink('GitHub', 'https://github.com/payloadcms/payload')}.`\n}\n\n// Create terminalLink with fallback for unsupported terminals\nfunction createTerminalLink(text: string, url: string) {\n return terminalLink(text, url, {\n fallback: (text, url) => `${text}: ${url}`,\n })\n}\n"],"names":["chalk","path","terminalLink","getValidTemplates","header","message","bold","welcomeMessage","spacer","repeat","helpMessage","validTemplates","console","log","formatTemplates","templates","map","t","name","length","description","join","successMessage","projectDir","packageManager","relativePath","relative","process","cwd","createTerminalLink","resolve","successfulNextInit","moveMessage","args","relativeAppDir","nextAppDir","feedbackOutro","bgCyan","black","text","url","fallback"],"mappings":"AAAA,6BAA6B,GAC7B,OAAOA,WAAW,QAAO;AACzB,OAAOC,UAAU,OAAM;AACvB,OAAOC,kBAAkB,gBAAe;AAIxC,SAASC,iBAAiB,QAAQ,sBAAqB;AAEvD,MAAMC,SAAS,CAACC,UAA4BL,MAAMM,IAAI,CAACD;AAEvD,OAAO,MAAME,iBAAiBP,KAAK,CAAC;;AAEpC,CAAC,CAAA;AAED,MAAMQ,SAAS,IAAIC,MAAM,CAAC;AAE1B,OAAO,SAASC;IACd,MAAMC,iBAAiBR;IACvBS,QAAQC,GAAG,CAACb,KAAK,CAAC
|
1
|
+
{"version":3,"sources":["../../src/utils/messages.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport chalk from 'chalk'\nimport path from 'path'\nimport terminalLink from 'terminal-link'\n\nimport type { PackageManager, ProjectTemplate } from '../types.js'\n\nimport { getValidTemplates } from '../lib/templates.js'\n\nconst header = (message: string): string => chalk.bold(message)\n\nexport const welcomeMessage = chalk`\n {green Welcome to Payload. Let's create a project! }\n`\n\nconst spacer = ' '.repeat(8)\n\nexport function helpMessage(): void {\n const validTemplates = getValidTemplates()\n console.log(chalk`\n {bold USAGE}\n\n {dim Inside of an existing Next.js project}\n\n {dim $} {bold npx create-payload-app}\n\n {dim Create a new project from scratch}\n\n {dim $} {bold npx create-payload-app}\n {dim $} {bold npx create-payload-app} my-project\n {dim $} {bold npx create-payload-app} -n my-project -t template-name\n\n {bold OPTIONS}\n\n -n {underline my-payload-app} Set project name\n -t {underline template_name} Choose specific template\n -e {underline example_name} Choose specific exmaple\n\n {dim Available templates: ${formatTemplates(validTemplates)}}\n\n --use-npm Use npm to install dependencies\n --use-yarn Use yarn to install dependencies\n --use-pnpm Use pnpm to install dependencies\n --use-bun Use bun to install dependencies (experimental)\n --no-deps Do not install any dependencies\n -h Show help\n`)\n}\n\nfunction formatTemplates(templates: ProjectTemplate[]) {\n return `\\n\\n${spacer}${templates\n .map((t) => `${t.name}${' '.repeat(28 - t.name.length)}${t.description}`)\n .join(`\\n${spacer}`)}`\n}\n\nexport function successMessage(projectDir: string, packageManager: PackageManager): string {\n const relativePath = path.relative(process.cwd(), projectDir)\n return `\n${header('Launch Application:')}\n\n - cd ./${relativePath}\n - ${\n packageManager === 'npm' ? 'npm run' : packageManager\n } dev or follow directions in ${createTerminalLink(\n 'README.md',\n `file://${path.resolve(projectDir, 'README.md')}`,\n )}\n\n${header('Documentation:')}\n\n - ${createTerminalLink(\n 'Getting Started',\n 'https://payloadcms.com/docs/getting-started/what-is-payload',\n )}\n - ${createTerminalLink('Configuration', 'https://payloadcms.com/docs/configuration/overview')}\n\n`\n}\n\nexport function successfulNextInit(): string {\n return `- ${createTerminalLink(\n 'Getting Started',\n 'https://payloadcms.com/docs/getting-started/what-is-payload',\n )}\n- ${createTerminalLink('Configuration', 'https://payloadcms.com/docs/configuration/overview')}\n`\n}\n\nexport function moveMessage(args: { nextAppDir: string; projectDir: string }): string {\n const relativeAppDir = path.relative(process.cwd(), args.nextAppDir)\n return `\n${header('Next Steps:')}\n\nPayload does not support a top-level layout.tsx file in the app directory.\n\n${chalk.bold('To continue:')}\n\n- Create a new directory in ./${relativeAppDir} such as ./${relativeAppDir}/${chalk.bold('(app)')}\n- Move all files from ./${relativeAppDir} into that directory\n\nIt is recommended to do this from your IDE if your app has existing file references.\n\nOnce moved, rerun the create-payload-app command again.\n`\n}\n\nexport function feedbackOutro(): string {\n return `${chalk.bgCyan(chalk.black(' Have feedback? '))} Visit us on ${createTerminalLink('GitHub', 'https://github.com/payloadcms/payload')}.`\n}\n\n// Create terminalLink with fallback for unsupported terminals\nfunction createTerminalLink(text: string, url: string) {\n return terminalLink(text, url, {\n fallback: (text, url) => `${text}: ${url}`,\n })\n}\n"],"names":["chalk","path","terminalLink","getValidTemplates","header","message","bold","welcomeMessage","spacer","repeat","helpMessage","validTemplates","console","log","formatTemplates","templates","map","t","name","length","description","join","successMessage","projectDir","packageManager","relativePath","relative","process","cwd","createTerminalLink","resolve","successfulNextInit","moveMessage","args","relativeAppDir","nextAppDir","feedbackOutro","bgCyan","black","text","url","fallback"],"mappings":"AAAA,6BAA6B,GAC7B,OAAOA,WAAW,QAAO;AACzB,OAAOC,UAAU,OAAM;AACvB,OAAOC,kBAAkB,gBAAe;AAIxC,SAASC,iBAAiB,QAAQ,sBAAqB;AAEvD,MAAMC,SAAS,CAACC,UAA4BL,MAAMM,IAAI,CAACD;AAEvD,OAAO,MAAME,iBAAiBP,KAAK,CAAC;;AAEpC,CAAC,CAAA;AAED,MAAMQ,SAAS,IAAIC,MAAM,CAAC;AAE1B,OAAO,SAASC;IACd,MAAMC,iBAAiBR;IACvBS,QAAQC,GAAG,CAACb,KAAK,CAAC;;;;;;;;;;;;;;;;;;;kCAmBc,EAAEc,gBAAgBH,gBAAgB;;;;;;;;AAQpE,CAAC;AACD;AAEA,SAASG,gBAAgBC,SAA4B;IACnD,OAAO,CAAC,IAAI,EAAEP,SAASO,UACpBC,GAAG,CAAC,CAACC,IAAM,GAAGA,EAAEC,IAAI,GAAG,IAAIT,MAAM,CAAC,KAAKQ,EAAEC,IAAI,CAACC,MAAM,IAAIF,EAAEG,WAAW,EAAE,EACvEC,IAAI,CAAC,CAAC,EAAE,EAAEb,QAAQ,GAAG;AAC1B;AAEA,OAAO,SAASc,eAAeC,UAAkB,EAAEC,cAA8B;IAC/E,MAAMC,eAAexB,KAAKyB,QAAQ,CAACC,QAAQC,GAAG,IAAIL;IAClD,OAAO,CAAC;AACV,EAAEnB,OAAO,uBAAuB;;SAEvB,EAAEqB,aAAa;IACpB,EACAD,mBAAmB,QAAQ,YAAYA,eACxC,6BAA6B,EAAEK,mBAC9B,aACA,CAAC,OAAO,EAAE5B,KAAK6B,OAAO,CAACP,YAAY,cAAc,EACjD;;AAEJ,EAAEnB,OAAO,kBAAkB;;IAEvB,EAAEyB,mBACF,mBACA,+DACA;IACA,EAAEA,mBAAmB,iBAAiB,sDAAsD;;AAEhG,CAAC;AACD;AAEA,OAAO,SAASE;IACd,OAAO,CAAC,EAAE,EAAEF,mBACV,mBACA,+DACA;EACF,EAAEA,mBAAmB,iBAAiB,sDAAsD;AAC9F,CAAC;AACD;AAEA,OAAO,SAASG,YAAYC,IAAgD;IAC1E,MAAMC,iBAAiBjC,KAAKyB,QAAQ,CAACC,QAAQC,GAAG,IAAIK,KAAKE,UAAU;IACnE,OAAO,CAAC;AACV,EAAE/B,OAAO,eAAe;;;;AAIxB,EAAEJ,MAAMM,IAAI,CAAC,gBAAgB;;8BAEC,EAAE4B,eAAe,WAAW,EAAEA,eAAe,CAAC,EAAElC,MAAMM,IAAI,CAAC,SAAS;wBAC1E,EAAE4B,eAAe;;;;;AAKzC,CAAC;AACD;AAEA,OAAO,SAASE;IACd,OAAO,GAAGpC,MAAMqC,MAAM,CAACrC,MAAMsC,KAAK,CAAC,qBAAqB,aAAa,EAAET,mBAAmB,UAAU,yCAAyC,CAAC,CAAC;AACjJ;AAEA,8DAA8D;AAC9D,SAASA,mBAAmBU,IAAY,EAAEC,GAAW;IACnD,OAAOtC,aAAaqC,MAAMC,KAAK;QAC7BC,UAAU,CAACF,MAAMC,MAAQ,GAAGD,KAAK,EAAE,EAAEC,KAAK;IAC5C;AACF"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "create-payload-app",
|
3
|
-
"version": "3.11.1-canary.
|
3
|
+
"version": "3.11.1-canary.0575547",
|
4
4
|
"homepage": "https://payloadcms.com",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -73,7 +73,7 @@
|
|
73
73
|
"scripts": {
|
74
74
|
"build": "pnpm pack-template-files && pnpm typecheck && pnpm build:swc",
|
75
75
|
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
|
76
|
-
"clean": "rimraf {dist,*.tsbuildinfo}",
|
76
|
+
"clean": "rimraf -g {dist,*.tsbuildinfo}",
|
77
77
|
"lint": "eslint .",
|
78
78
|
"lint:fix": "eslint . --fix",
|
79
79
|
"pack-template-files": "node --no-deprecation --import @swc-node/register/esm-register src/scripts/pack-template-files.ts",
|