create-payload-app 3.44.0-canary.10 → 3.44.0-canary.2
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/create-project.d.ts +0 -22
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +2 -53
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/create-project.spec.js +1 -29
- package/dist/lib/create-project.spec.js.map +1 -1
- package/dist/lib/download-template.js +1 -1
- package/dist/lib/download-template.js.map +1 -1
- package/dist/template/src/payload-types.ts +0 -158
- package/package.json +1 -1
@@ -11,31 +11,9 @@ export declare function createProject(args: {
|
|
11
11
|
projectDir: string;
|
12
12
|
projectName: string;
|
13
13
|
} & TemplateOrExample): Promise<void>;
|
14
|
-
/**
|
15
|
-
* Reads the package.json file into an object and then does the following:
|
16
|
-
* - Sets the `name` property to the provided `projectName`.
|
17
|
-
* - Bumps the payload packages from workspace:* to the latest version.
|
18
|
-
* - Writes the updated object back to the package.json file.
|
19
|
-
*/
|
20
14
|
export declare function updatePackageJSON(args: {
|
21
|
-
/**
|
22
|
-
* The latest version of Payload to use in the package.json.
|
23
|
-
*/
|
24
|
-
latestVersion: string;
|
25
15
|
projectDir: string;
|
26
|
-
/**
|
27
|
-
* The name of the project to set in package.json.
|
28
|
-
*/
|
29
16
|
projectName: string;
|
30
17
|
}): Promise<void>;
|
31
|
-
/**
|
32
|
-
* Recursively updates a JSON object to replace all instances of `workspace:` with the latest version pinned.
|
33
|
-
*
|
34
|
-
* Does not return and instead modifies the `packageJson` object in place.
|
35
|
-
*/
|
36
|
-
export declare function updatePackageJSONDependencies(args: {
|
37
|
-
latestVersion: string;
|
38
|
-
packageJson: Record<string, unknown>;
|
39
|
-
}): void;
|
40
18
|
export {};
|
41
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,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;AAmDpB,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,
|
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;AAmDpB,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,CAiGf;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhB"}
|
@@ -82,12 +82,7 @@ export async function createProject(args) {
|
|
82
82
|
}
|
83
83
|
const spinner = p.spinner();
|
84
84
|
spinner.start('Checking latest Payload version...');
|
85
|
-
const payloadVersion = await getLatestPackageVersion({
|
86
|
-
packageName: 'payload'
|
87
|
-
});
|
88
|
-
spinner.stop(`Found latest version of Payload ${payloadVersion}`);
|
89
85
|
await updatePackageJSON({
|
90
|
-
latestVersion: payloadVersion,
|
91
86
|
projectDir,
|
92
87
|
projectName
|
93
88
|
});
|
@@ -143,21 +138,12 @@ export async function createProject(args) {
|
|
143
138
|
});
|
144
139
|
}
|
145
140
|
}
|
146
|
-
|
147
|
-
|
148
|
-
* - Sets the `name` property to the provided `projectName`.
|
149
|
-
* - Bumps the payload packages from workspace:* to the latest version.
|
150
|
-
* - Writes the updated object back to the package.json file.
|
151
|
-
*/ export async function updatePackageJSON(args) {
|
152
|
-
const { latestVersion, projectDir, projectName } = args;
|
141
|
+
export async function updatePackageJSON(args) {
|
142
|
+
const { projectDir, projectName } = args;
|
153
143
|
const packageJsonPath = path.resolve(projectDir, 'package.json');
|
154
144
|
try {
|
155
145
|
const packageObj = await fse.readJson(packageJsonPath);
|
156
146
|
packageObj.name = projectName;
|
157
|
-
updatePackageJSONDependencies({
|
158
|
-
latestVersion,
|
159
|
-
packageJson: packageObj
|
160
|
-
});
|
161
147
|
await fse.writeJson(packageJsonPath, packageObj, {
|
162
148
|
spaces: 2
|
163
149
|
});
|
@@ -165,42 +151,5 @@ export async function createProject(args) {
|
|
165
151
|
warning(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`);
|
166
152
|
}
|
167
153
|
}
|
168
|
-
/**
|
169
|
-
* Recursively updates a JSON object to replace all instances of `workspace:` with the latest version pinned.
|
170
|
-
*
|
171
|
-
* Does not return and instead modifies the `packageJson` object in place.
|
172
|
-
*/ export function updatePackageJSONDependencies(args) {
|
173
|
-
const { latestVersion, packageJson } = args;
|
174
|
-
const updatedDependencies = Object.entries(packageJson.dependencies || {}).reduce((acc, [key, value])=>{
|
175
|
-
if (typeof value === 'string' && value.startsWith('workspace:')) {
|
176
|
-
acc[key] = `${latestVersion}`;
|
177
|
-
} else if (key === 'payload' || key.startsWith('@payloadcms')) {
|
178
|
-
acc[key] = `${latestVersion}`;
|
179
|
-
} else {
|
180
|
-
acc[key] = value;
|
181
|
-
}
|
182
|
-
return acc;
|
183
|
-
}, {});
|
184
|
-
packageJson.dependencies = updatedDependencies;
|
185
|
-
}
|
186
|
-
/**
|
187
|
-
* Fetches the latest version of a package from the NPM registry.
|
188
|
-
*
|
189
|
-
* Used in determining the latest version of Payload to use in the generated templates.
|
190
|
-
*/ async function getLatestPackageVersion({ packageName = 'payload' }) {
|
191
|
-
try {
|
192
|
-
const response = await fetch(`https://registry.npmjs.org/-/package/${packageName}/dist-tags`);
|
193
|
-
const data = await response.json();
|
194
|
-
// Monster chaining for type safety just checking for data.latest
|
195
|
-
const latestVersion = data && typeof data === 'object' && 'latest' in data && data.latest && typeof data.latest === 'string' ? data.latest : null;
|
196
|
-
if (!latestVersion) {
|
197
|
-
throw new Error(`No latest version found for package: ${packageName}`);
|
198
|
-
}
|
199
|
-
return latestVersion;
|
200
|
-
} catch (error) {
|
201
|
-
console.error('Error fetching Payload version:', error);
|
202
|
-
throw error;
|
203
|
-
}
|
204
|
-
}
|
205
154
|
|
206
155
|
//# 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 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'\nimport { generateSecret } from './generate-secret.js'\nimport { manageEnvFiles } from './manage-env-files.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 const payloadVersion = await getLatestPackageVersion({ packageName: 'payload' })\n\n spinner.stop(`Found latest version of Payload ${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 // 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\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"],"names":["p","chalk","execa","fse","fileURLToPath","path","tryInitRepoAndCommit","debug","error","info","warning","configurePayloadConfig","configurePluginProject","downloadExample","downloadTemplate","generateSecret","manageEnvFiles","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","payloadVersion","getLatestPackageVersion","packageName","stop","updatePackageJSON","latestVersion","type","projectDirPath","dbType","projectDirOrConfigPath","databaseType","databaseUri","dbUri","payloadSecret","undefined","lockPath","existsSync","remove","result","packageJsonPath","packageObj","readJson","name","updatePackageJSONDependencies","packageJson","writeJson","spaces","updatedDependencies","Object","entries","dependencies","reduce","acc","key","value","startsWith","response","fetch","data","json","latest","console"],"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;AACzD,SAASC,cAAc,QAAQ,uBAAsB;AACrD,SAASC,cAAc,QAAQ,wBAAuB;AAEtD,MAAMC,WAAWb,cAAc,YAAYc,GAAG;AAC9C,MAAMC,UAAUd,KAAKc,OAAO,CAACF;AAE7B,eAAeG,uBAAuBC,UAAkB;IACtD,MAAMC,aAAa,MAAMnB,IAAImB,UAAU,CAACD;IACxC,IAAI,CAACC,YAAY;QACf,MAAMnB,IAAIoB,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,MAAM1B,MAAM2B,OAAO,CAACD,YAAY;YAC9BE,KAAKzB,KAAK0B,OAAO,CAACV;QACpB;QACA,OAAO;IACT,EAAE,OAAOW,KAAc;QACrBxB,MAAM,CAAC,6BAA6B,EAAEwB,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;QACxBnB,MAAM,CAAC,6BAA6B,EAAEN,MAAMqC,KAAK,CAACjB,aAAa;QAC/D;IACF;IAEA,MAAMD,uBAAuBC;IAE7B,IAAIK,OAAO,CAAC,kBAAkB,EAAE;QAC9B,0DAA0D;QAC1D,MAAMa,eAAelC,KAAK0B,OAAO,CAACZ,SAAS,yBAAyBO,OAAO,CAAC,kBAAkB;QAC9F,MAAMvB,IAAIqC,IAAI,CAACD,cAAclB;IAC/B;IAEA,IAAIK,OAAO,CAAC,mBAAmB,EAAE;QAC/B,2DAA2D;QAC3D,MAAMe,gBAAgBpC,KAAK0B,OAAO,CAChCZ,SACA,0BACAO,OAAO,CAAC,mBAAmB;QAE7B,MAAMvB,IAAIqC,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,MAAMZ,iBAAiB;YACrBP,OAAOmB,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,MAAMb,gBAAgB;YACpBN,OAAOmB,OAAO,CAAC,UAAU;YACzBkB;YACAvB;QACF;IACF;IAEA,MAAMwB,UAAU7C,EAAE6C,OAAO;IACzBA,QAAQC,KAAK,CAAC;IAEd,MAAMC,iBAAiB,MAAMC,wBAAwB;QAAEC,aAAa;IAAU;IAE9EJ,QAAQK,IAAI,CAAC,CAAC,gCAAgC,EAAEH,gBAAgB;IAEhE,MAAMI,kBAAkB;QAAEC,eAAeL;QAAgB1B;QAAYgB;IAAY;IAEjF,IAAI,cAAcZ,MAAM;QACtB,IAAIA,KAAKiB,QAAQ,CAACW,IAAI,KAAK,UAAU;YACnCR,QAAQX,OAAO,CAAC;YAChBtB,uBAAuB;gBAAE0C,gBAAgBjC;gBAAYgB;YAAY;QACnE,OAAO;YACLQ,QAAQX,OAAO,CAAC;YAChB,MAAMvB,uBAAuB;gBAC3B4C,QAAQnB,WAAWiB;gBACnBG,wBAAwB;oBAAEnC;gBAAW;YACvC;QACF;IACF;IAEA,MAAML,eAAe;QACnBU;QACA+B,cAAcrB,WAAWiB;QACzBK,aAAatB,WAAWuB;QACxBC,eAAe7C;QACfM;QACAqB,UAAU,cAAcjB,OAAOA,KAAKiB,QAAQ,GAAGmB;IACjD;IAEA,gEAAgE;IAChE,MAAMC,WAAWzD,KAAK0B,OAAO,CAACV,YAAY;IAC1C,IAAIlB,IAAI4D,UAAU,CAACD,WAAW;QAC5B,MAAM3D,IAAI6D,MAAM,CAACF;IACnB;IAEA,IAAI,CAACpC,OAAO,CAAC,YAAY,EAAE;QACzBjB,KAAK,CAAC,MAAM,EAAEkB,eAAe,GAAG,CAAC;QACjCkB,QAAQX,OAAO,CAAC;QAChB,MAAM+B,SAAS,MAAMzC,YAAY;YAAEE;YAASC;YAAgBN;QAAW;QACvE,IAAI4C,QAAQ;YACVpB,QAAQK,IAAI,CAAC;QACf,OAAO;YACLL,QAAQK,IAAI,CAAC,iCAAiC;QAChD;IACF,OAAO;QACLL,QAAQK,IAAI,CAAC;IACf;IAEA,IAAI,CAACxB,OAAO,CAAC,WAAW,EAAE;QACxBpB,qBAAqB;YAAEwB,KAAKT;QAAW;IACzC;AACF;AAEA;;;;;CAKC,GACD,OAAO,eAAe8B,kBAAkB1B,IAUvC;IACC,MAAM,EAAE2B,aAAa,EAAE/B,UAAU,EAAEgB,WAAW,EAAE,GAAGZ;IACnD,MAAMyC,kBAAkB7D,KAAK0B,OAAO,CAACV,YAAY;IACjD,IAAI;QACF,MAAM8C,aAAa,MAAMhE,IAAIiE,QAAQ,CAACF;QACtCC,WAAWE,IAAI,GAAGhC;QAElBiC,8BAA8B;YAC5BlB;YACAmB,aAAaJ;QACf;QAEA,MAAMhE,IAAIqE,SAAS,CAACN,iBAAiBC,YAAY;YAAEM,QAAQ;QAAE;IAC/D,EAAE,OAAOzC,KAAc;QACrBtB,QAAQ,CAAC,uCAAuC,EAAEsB,eAAeC,QAAQD,IAAIE,OAAO,GAAG,IAAI;IAC7F;AACF;AAEA;;;;CAIC,GACD,OAAO,SAASoC,8BAA8B7C,IAG7C;IACC,MAAM,EAAE2B,aAAa,EAAEmB,WAAW,EAAE,GAAG9C;IAEvC,MAAMiD,sBAAsBC,OAAOC,OAAO,CAACL,YAAYM,YAAY,IAAI,CAAC,GAAGC,MAAM,CAC/E,CAACC,KAAK,CAACC,KAAKC,MAAM;QAChB,IAAI,OAAOA,UAAU,YAAYA,MAAMC,UAAU,CAAC,eAAe;YAC/DH,GAAG,CAACC,IAAI,GAAG,GAAG5B,eAAe;QAC/B,OAAO,IAAI4B,QAAQ,aAAaA,IAAIE,UAAU,CAAC,gBAAgB;YAC7DH,GAAG,CAACC,IAAI,GAAG,GAAG5B,eAAe;QAC/B,OAAO;YACL2B,GAAG,CAACC,IAAI,GAAGC;QACb;QACA,OAAOF;IACT,GACA,CAAC;IAEHR,YAAYM,YAAY,GAAGH;AAC7B;AAEA;;;;CAIC,GACD,eAAe1B,wBAAwB,EACrCC,cAAc,SAAS,EAUxB;IACC,IAAI;QACF,MAAMkC,WAAW,MAAMC,MAAM,CAAC,qCAAqC,EAAEnC,YAAY,UAAU,CAAC;QAC5F,MAAMoC,OAAO,MAAMF,SAASG,IAAI;QAEhC,iEAAiE;QACjE,MAAMlC,gBACJiC,QACA,OAAOA,SAAS,YAChB,YAAYA,QACZA,KAAKE,MAAM,IACX,OAAOF,KAAKE,MAAM,KAAK,WACnBF,KAAKE,MAAM,GACX;QAEN,IAAI,CAACnC,eAAe;YAClB,MAAM,IAAInB,MAAM,CAAC,qCAAqC,EAAEgB,aAAa;QACvE;QAEA,OAAOG;IACT,EAAE,OAAO5C,OAAO;QACdgF,QAAQhF,KAAK,CAAC,mCAAmCA;QACjD,MAAMA;IACR;AACF"}
|
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'\nimport { generateSecret } from './generate-secret.js'\nimport { manageEnvFiles } from './manage-env-files.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 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 // 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","generateSecret","manageEnvFiles","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","databaseType","databaseUri","dbUri","payloadSecret","undefined","lockPath","existsSync","remove","result","stop","packageJsonPath","packageObj","readJson","name","writeJson","spaces"],"mappings":"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"}
|
@@ -4,7 +4,7 @@ import fse from 'fs-extra';
|
|
4
4
|
import globby from 'globby';
|
5
5
|
import * as os from 'node:os';
|
6
6
|
import path from 'path';
|
7
|
-
import { createProject
|
7
|
+
import { createProject } from './create-project.js';
|
8
8
|
import { dbReplacements } from './replacements.js';
|
9
9
|
import { getValidTemplates } from './templates.js';
|
10
10
|
describe('createProject', ()=>{
|
@@ -152,34 +152,6 @@ describe('createProject', ()=>{
|
|
152
152
|
expect(content).toContain(dbReplacement.configReplacement().join('\n'));
|
153
153
|
});
|
154
154
|
});
|
155
|
-
describe('updates package.json', ()=>{
|
156
|
-
it('updates package name and bumps workspace versions', async ()=>{
|
157
|
-
const latestVersion = '3.0.0';
|
158
|
-
const initialJSON = {
|
159
|
-
name: 'test-project',
|
160
|
-
version: '1.0.0',
|
161
|
-
dependencies: {
|
162
|
-
'@payloadcms/db-mongodb': 'workspace:*',
|
163
|
-
payload: 'workspace:*',
|
164
|
-
'@payloadcms/ui': 'workspace:*'
|
165
|
-
}
|
166
|
-
};
|
167
|
-
const correctlyModifiedJSON = {
|
168
|
-
name: 'test-project',
|
169
|
-
version: '1.0.0',
|
170
|
-
dependencies: {
|
171
|
-
'@payloadcms/db-mongodb': `${latestVersion}`,
|
172
|
-
payload: `${latestVersion}`,
|
173
|
-
'@payloadcms/ui': `${latestVersion}`
|
174
|
-
}
|
175
|
-
};
|
176
|
-
updatePackageJSONDependencies({
|
177
|
-
latestVersion,
|
178
|
-
packageJson: initialJSON
|
179
|
-
});
|
180
|
-
expect(initialJSON).toEqual(correctlyModifiedJSON);
|
181
|
-
});
|
182
|
-
});
|
183
155
|
});
|
184
156
|
});
|
185
157
|
|
@@ -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, ProjectExample, ProjectTemplate } from '../types.js'\n\nimport { createProject, updatePackageJSONDependencies } from './create-project.js'\nimport { dbReplacements } from './replacements.js'\nimport { getValidTemplates } from './templates.js'\n\ndescribe('createProject', () => {\n let projectDir: string\n\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('updates project name in plugin template importMap file', async () => {\n const projectName = 'my-custom-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 importMapPath = path.resolve(projectDir, './dev/app/(payload)/admin/importMap.js')\n const importMapFile = fse.readFileSync(importMapPath, 'utf-8')\n\n expect(importMapFile).not.toContain('plugin-package-name-placeholder')\n expect(importMapFile).toContain('my-custom-plugin')\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 describe('updates package.json', () => {\n it('updates package name and bumps workspace versions', async () => {\n const latestVersion = '3.0.0'\n const initialJSON = {\n name: 'test-project',\n version: '1.0.0',\n dependencies: {\n '@payloadcms/db-mongodb': 'workspace:*',\n payload: 'workspace:*',\n '@payloadcms/ui': 'workspace:*',\n },\n }\n\n const correctlyModifiedJSON = {\n name: 'test-project',\n version: '1.0.0',\n dependencies: {\n '@payloadcms/db-mongodb': `${latestVersion}`,\n payload: `${latestVersion}`,\n '@payloadcms/ui': `${latestVersion}`,\n },\n }\n\n updatePackageJSONDependencies({\n latestVersion,\n packageJson: initialJSON,\n })\n\n expect(initialJSON).toEqual(correctlyModifiedJSON)\n })\n })\n })\n})\n"],"names":["jest","fs","fse","globby","os","path","createProject","updatePackageJSONDependencies","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","importMapPath","importMapFile","readFileSync","not","toContain","example","undefined","templates","each","templateName","db","find","t","dbDetails","dbUri","dbReplacement","toBe","Object","keys","dependencies","filter","n","startsWith","toHaveLength","payloadConfigPath","absolute","cwd","content","importReplacement","configReplacement","join","latestVersion","initialJSON","version","payload","correctlyModifiedJSON","toEqual"],"mappings":"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"}
|
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\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('updates project name in plugin template importMap file', async () => {\n const projectName = 'my-custom-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 importMapPath = path.resolve(projectDir, './dev/app/(payload)/admin/importMap.js')\n const importMapFile = fse.readFileSync(importMapPath, 'utf-8')\n\n expect(importMapFile).not.toContain('plugin-package-name-placeholder')\n expect(importMapFile).toContain('my-custom-plugin')\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","importMapPath","importMapFile","readFileSync","not","toContain","example","undefined","templates","each","templateName","db","find","t","dbDetails","dbUri","dbReplacement","toBe","Object","keys","dependencies","filter","n","startsWith","toHaveLength","payloadConfigPath","absolute","cwd","content","importReplacement","configReplacement","join"],"mappings":"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"}
|
@@ -5,7 +5,7 @@ import { debug as debugLog } from '../utils/log.js';
|
|
5
5
|
export async function downloadTemplate({ debug, projectDir, template }) {
|
6
6
|
const branchOrTag = template.url.split('#')?.[1] || 'latest';
|
7
7
|
const url = `https://codeload.github.com/payloadcms/payload/tar.gz/${branchOrTag}`;
|
8
|
-
const filter = `payload-${branchOrTag.replace(/^v/, '')
|
8
|
+
const filter = `payload-${branchOrTag.replace(/^v/, '')}/templates/${template.name}/`;
|
9
9
|
if (debug) {
|
10
10
|
debugLog(`Using template url: ${template.url}`);
|
11
11
|
debugLog(`Codeload url: ${url}`);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/download-template.ts"],"sourcesContent":["import { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { x } from 'tar'\n\nimport type { ProjectTemplate } from '../types.js'\n\nimport { debug as debugLog } from '../utils/log.js'\n\nexport async function downloadTemplate({\n debug,\n projectDir,\n template,\n}: {\n debug?: boolean\n projectDir: string\n template: ProjectTemplate\n}) {\n const branchOrTag = template.url.split('#')?.[1] || 'latest'\n const url = `https://codeload.github.com/payloadcms/payload/tar.gz/${branchOrTag}`\n const filter = `payload-${branchOrTag.replace(/^v/, '')
|
1
|
+
{"version":3,"sources":["../../src/lib/download-template.ts"],"sourcesContent":["import { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { x } from 'tar'\n\nimport type { ProjectTemplate } from '../types.js'\n\nimport { debug as debugLog } from '../utils/log.js'\n\nexport async function downloadTemplate({\n debug,\n projectDir,\n template,\n}: {\n debug?: boolean\n projectDir: string\n template: ProjectTemplate\n}) {\n const branchOrTag = template.url.split('#')?.[1] || 'latest'\n const url = `https://codeload.github.com/payloadcms/payload/tar.gz/${branchOrTag}`\n const filter = `payload-${branchOrTag.replace(/^v/, '')}/templates/${template.name}/`\n\n if (debug) {\n debugLog(`Using template url: ${template.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 + template.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","downloadTemplate","projectDir","template","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,iBAAiB,EACrCF,KAAK,EACLG,UAAU,EACVC,QAAQ,EAKT;IACC,MAAMC,cAAcD,SAASE,GAAG,CAACC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI;IACpD,MAAMD,MAAM,CAAC,sDAAsD,EAAED,aAAa;IAClF,MAAMG,SAAS,CAAC,QAAQ,EAAEH,YAAYI,OAAO,CAAC,MAAM,IAAI,WAAW,EAAEL,SAASM,IAAI,CAAC,CAAC,CAAC;IAErF,IAAIV,OAAO;QACTC,SAAS,CAAC,oBAAoB,EAAEG,SAASE,GAAG,EAAE;QAC9CL,SAAS,CAAC,cAAc,EAAEK,KAAK;QAC/BL,SAAS,CAAC,QAAQ,EAAEO,QAAQ;IAC9B;IAEA,MAAMV,SACJ,MAAMa,kBAAkBL,MACxBP,EAAE;QACAa,KAAKT;QACLK,QAAQ,CAACK,IAAMA,EAAEC,QAAQ,CAACN;QAC1BO,OAAO,IAAIX,SAASM,IAAI,CAACH,KAAK,CAAC,KAAKS,MAAM;IAC5C;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"}
|
@@ -6,94 +6,24 @@
|
|
6
6
|
* and re-run `payload generate:types` to regenerate this file.
|
7
7
|
*/
|
8
8
|
|
9
|
-
/**
|
10
|
-
* Supported timezones in IANA format.
|
11
|
-
*
|
12
|
-
* This interface was referenced by `Config`'s JSON-Schema
|
13
|
-
* via the `definition` "supportedTimezones".
|
14
|
-
*/
|
15
|
-
export type SupportedTimezones =
|
16
|
-
| 'Pacific/Midway'
|
17
|
-
| 'Pacific/Niue'
|
18
|
-
| 'Pacific/Honolulu'
|
19
|
-
| 'Pacific/Rarotonga'
|
20
|
-
| 'America/Anchorage'
|
21
|
-
| 'Pacific/Gambier'
|
22
|
-
| 'America/Los_Angeles'
|
23
|
-
| 'America/Tijuana'
|
24
|
-
| 'America/Denver'
|
25
|
-
| 'America/Phoenix'
|
26
|
-
| 'America/Chicago'
|
27
|
-
| 'America/Guatemala'
|
28
|
-
| 'America/New_York'
|
29
|
-
| 'America/Bogota'
|
30
|
-
| 'America/Caracas'
|
31
|
-
| 'America/Santiago'
|
32
|
-
| 'America/Buenos_Aires'
|
33
|
-
| 'America/Sao_Paulo'
|
34
|
-
| 'Atlantic/South_Georgia'
|
35
|
-
| 'Atlantic/Azores'
|
36
|
-
| 'Atlantic/Cape_Verde'
|
37
|
-
| 'Europe/London'
|
38
|
-
| 'Europe/Berlin'
|
39
|
-
| 'Africa/Lagos'
|
40
|
-
| 'Europe/Athens'
|
41
|
-
| 'Africa/Cairo'
|
42
|
-
| 'Europe/Moscow'
|
43
|
-
| 'Asia/Riyadh'
|
44
|
-
| 'Asia/Dubai'
|
45
|
-
| 'Asia/Baku'
|
46
|
-
| 'Asia/Karachi'
|
47
|
-
| 'Asia/Tashkent'
|
48
|
-
| 'Asia/Calcutta'
|
49
|
-
| 'Asia/Dhaka'
|
50
|
-
| 'Asia/Almaty'
|
51
|
-
| 'Asia/Jakarta'
|
52
|
-
| 'Asia/Bangkok'
|
53
|
-
| 'Asia/Shanghai'
|
54
|
-
| 'Asia/Singapore'
|
55
|
-
| 'Asia/Tokyo'
|
56
|
-
| 'Asia/Seoul'
|
57
|
-
| 'Australia/Brisbane'
|
58
|
-
| 'Australia/Sydney'
|
59
|
-
| 'Pacific/Guam'
|
60
|
-
| 'Pacific/Noumea'
|
61
|
-
| 'Pacific/Auckland'
|
62
|
-
| 'Pacific/Fiji';
|
63
|
-
|
64
9
|
export interface Config {
|
65
10
|
auth: {
|
66
11
|
users: UserAuthOperations;
|
67
12
|
};
|
68
|
-
blocks: {};
|
69
13
|
collections: {
|
70
14
|
users: User;
|
71
15
|
media: Media;
|
72
|
-
'payload-locked-documents': PayloadLockedDocument;
|
73
16
|
'payload-preferences': PayloadPreference;
|
74
17
|
'payload-migrations': PayloadMigration;
|
75
18
|
};
|
76
|
-
collectionsJoins: {};
|
77
|
-
collectionsSelect: {
|
78
|
-
users: UsersSelect<false> | UsersSelect<true>;
|
79
|
-
media: MediaSelect<false> | MediaSelect<true>;
|
80
|
-
'payload-locked-documents': PayloadLockedDocumentsSelect<false> | PayloadLockedDocumentsSelect<true>;
|
81
|
-
'payload-preferences': PayloadPreferencesSelect<false> | PayloadPreferencesSelect<true>;
|
82
|
-
'payload-migrations': PayloadMigrationsSelect<false> | PayloadMigrationsSelect<true>;
|
83
|
-
};
|
84
19
|
db: {
|
85
20
|
defaultIDType: string;
|
86
21
|
};
|
87
22
|
globals: {};
|
88
|
-
globalsSelect: {};
|
89
23
|
locale: null;
|
90
24
|
user: User & {
|
91
25
|
collection: 'users';
|
92
26
|
};
|
93
|
-
jobs: {
|
94
|
-
tasks: unknown;
|
95
|
-
workflows: unknown;
|
96
|
-
};
|
97
27
|
}
|
98
28
|
export interface UserAuthOperations {
|
99
29
|
forgotPassword: {
|
@@ -149,29 +79,6 @@ export interface Media {
|
|
149
79
|
focalX?: number | null;
|
150
80
|
focalY?: number | null;
|
151
81
|
}
|
152
|
-
/**
|
153
|
-
* This interface was referenced by `Config`'s JSON-Schema
|
154
|
-
* via the `definition` "payload-locked-documents".
|
155
|
-
*/
|
156
|
-
export interface PayloadLockedDocument {
|
157
|
-
id: string;
|
158
|
-
document?:
|
159
|
-
| ({
|
160
|
-
relationTo: 'users';
|
161
|
-
value: string | User;
|
162
|
-
} | null)
|
163
|
-
| ({
|
164
|
-
relationTo: 'media';
|
165
|
-
value: string | Media;
|
166
|
-
} | null);
|
167
|
-
globalSlug?: string | null;
|
168
|
-
user: {
|
169
|
-
relationTo: 'users';
|
170
|
-
value: string | User;
|
171
|
-
};
|
172
|
-
updatedAt: string;
|
173
|
-
createdAt: string;
|
174
|
-
}
|
175
82
|
/**
|
176
83
|
* This interface was referenced by `Config`'s JSON-Schema
|
177
84
|
* via the `definition` "payload-preferences".
|
@@ -206,71 +113,6 @@ export interface PayloadMigration {
|
|
206
113
|
updatedAt: string;
|
207
114
|
createdAt: string;
|
208
115
|
}
|
209
|
-
/**
|
210
|
-
* This interface was referenced by `Config`'s JSON-Schema
|
211
|
-
* via the `definition` "users_select".
|
212
|
-
*/
|
213
|
-
export interface UsersSelect<T extends boolean = true> {
|
214
|
-
updatedAt?: T;
|
215
|
-
createdAt?: T;
|
216
|
-
email?: T;
|
217
|
-
resetPasswordToken?: T;
|
218
|
-
resetPasswordExpiration?: T;
|
219
|
-
salt?: T;
|
220
|
-
hash?: T;
|
221
|
-
loginAttempts?: T;
|
222
|
-
lockUntil?: T;
|
223
|
-
}
|
224
|
-
/**
|
225
|
-
* This interface was referenced by `Config`'s JSON-Schema
|
226
|
-
* via the `definition` "media_select".
|
227
|
-
*/
|
228
|
-
export interface MediaSelect<T extends boolean = true> {
|
229
|
-
alt?: T;
|
230
|
-
updatedAt?: T;
|
231
|
-
createdAt?: T;
|
232
|
-
url?: T;
|
233
|
-
thumbnailURL?: T;
|
234
|
-
filename?: T;
|
235
|
-
mimeType?: T;
|
236
|
-
filesize?: T;
|
237
|
-
width?: T;
|
238
|
-
height?: T;
|
239
|
-
focalX?: T;
|
240
|
-
focalY?: T;
|
241
|
-
}
|
242
|
-
/**
|
243
|
-
* This interface was referenced by `Config`'s JSON-Schema
|
244
|
-
* via the `definition` "payload-locked-documents_select".
|
245
|
-
*/
|
246
|
-
export interface PayloadLockedDocumentsSelect<T extends boolean = true> {
|
247
|
-
document?: T;
|
248
|
-
globalSlug?: T;
|
249
|
-
user?: T;
|
250
|
-
updatedAt?: T;
|
251
|
-
createdAt?: T;
|
252
|
-
}
|
253
|
-
/**
|
254
|
-
* This interface was referenced by `Config`'s JSON-Schema
|
255
|
-
* via the `definition` "payload-preferences_select".
|
256
|
-
*/
|
257
|
-
export interface PayloadPreferencesSelect<T extends boolean = true> {
|
258
|
-
user?: T;
|
259
|
-
key?: T;
|
260
|
-
value?: T;
|
261
|
-
updatedAt?: T;
|
262
|
-
createdAt?: T;
|
263
|
-
}
|
264
|
-
/**
|
265
|
-
* This interface was referenced by `Config`'s JSON-Schema
|
266
|
-
* via the `definition` "payload-migrations_select".
|
267
|
-
*/
|
268
|
-
export interface PayloadMigrationsSelect<T extends boolean = true> {
|
269
|
-
name?: T;
|
270
|
-
batch?: T;
|
271
|
-
updatedAt?: T;
|
272
|
-
createdAt?: T;
|
273
|
-
}
|
274
116
|
/**
|
275
117
|
* This interface was referenced by `Config`'s JSON-Schema
|
276
118
|
* via the `definition` "auth".
|