create-payload-app 3.0.0-canary.92e4997 → 3.0.0-canary.a78fca3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/dist/lib/configure-payload-config.d.ts +8 -2
  2. package/dist/lib/configure-payload-config.d.ts.map +1 -1
  3. package/dist/lib/configure-payload-config.js +74 -25
  4. package/dist/lib/configure-payload-config.js.map +1 -1
  5. package/dist/lib/create-project.d.ts.map +1 -1
  6. package/dist/lib/create-project.js +9 -2
  7. package/dist/lib/create-project.js.map +1 -1
  8. package/dist/lib/create-project.spec.js +9 -12
  9. package/dist/lib/create-project.spec.js.map +1 -1
  10. package/dist/lib/get-package-manager.d.ts +6 -0
  11. package/dist/lib/get-package-manager.d.ts.map +1 -0
  12. package/dist/lib/get-package-manager.js +29 -0
  13. package/dist/lib/get-package-manager.js.map +1 -0
  14. package/dist/lib/init-next.d.ts +1 -9
  15. package/dist/lib/init-next.d.ts.map +1 -1
  16. package/dist/lib/init-next.js +31 -50
  17. package/dist/lib/init-next.js.map +1 -1
  18. package/dist/lib/install-packages.d.ts +9 -0
  19. package/dist/lib/install-packages.d.ts.map +1 -0
  20. package/dist/lib/install-packages.js +43 -0
  21. package/dist/lib/install-packages.js.map +1 -0
  22. package/dist/lib/replacements.d.ts +27 -0
  23. package/dist/lib/replacements.d.ts.map +1 -0
  24. package/dist/lib/replacements.js +67 -0
  25. package/dist/lib/replacements.js.map +1 -0
  26. package/dist/lib/templates.js +1 -26
  27. package/dist/lib/templates.js.map +1 -1
  28. package/dist/lib/update-payload-in-project.d.ts +6 -0
  29. package/dist/lib/update-payload-in-project.d.ts.map +1 -0
  30. package/dist/lib/update-payload-in-project.js +71 -0
  31. package/dist/lib/update-payload-in-project.js.map +1 -0
  32. package/dist/lib/wrap-next-config.d.ts.map +1 -1
  33. package/dist/lib/wrap-next-config.js +1 -2
  34. package/dist/lib/wrap-next-config.js.map +1 -1
  35. package/dist/lib/wrap-next-config.spec.js +1 -0
  36. package/dist/lib/wrap-next-config.spec.js.map +1 -1
  37. package/dist/main.d.ts.map +1 -1
  38. package/dist/main.js +28 -21
  39. package/dist/main.js.map +1 -1
  40. package/dist/template/src/collections/Media.ts +16 -0
  41. package/dist/template/src/payload.config.ts +9 -14
  42. package/dist/types.d.ts +11 -0
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js.map +1 -1
  45. package/dist/utils/copy-recursive-sync.d.ts +2 -0
  46. package/dist/utils/copy-recursive-sync.d.ts.map +1 -1
  47. package/dist/utils/copy-recursive-sync.js +2 -0
  48. package/dist/utils/copy-recursive-sync.js.map +1 -1
  49. package/dist/utils/git.d.ts +4 -0
  50. package/dist/utils/git.d.ts.map +1 -0
  51. package/dist/utils/git.js +46 -0
  52. package/dist/utils/git.js.map +1 -0
  53. package/dist/utils/messages.d.ts.map +1 -1
  54. package/dist/utils/messages.js.map +1 -1
  55. package/package.json +19 -7
  56. package/dist/lib/packages.d.ts +0 -9
  57. package/dist/lib/packages.d.ts.map +0 -1
  58. package/dist/lib/packages.js +0 -27
  59. package/dist/lib/packages.js.map +0 -1
package/dist/main.js CHANGED
@@ -2,18 +2,18 @@ import * as p from '@clack/prompts';
2
2
  import slugify from '@sindresorhus/slugify';
3
3
  import arg from 'arg';
4
4
  import chalk from 'chalk';
5
- // @ts-expect-error no types
6
- import { detect } from 'detect-package-manager';
7
5
  import figures from 'figures';
8
6
  import path from 'path';
9
7
  import { configurePayloadConfig } from './lib/configure-payload-config.js';
10
8
  import { createProject } from './lib/create-project.js';
11
9
  import { generateSecret } from './lib/generate-secret.js';
10
+ import { getPackageManager } from './lib/get-package-manager.js';
12
11
  import { getNextAppDetails, initNext } from './lib/init-next.js';
13
12
  import { parseProjectName } from './lib/parse-project-name.js';
14
13
  import { parseTemplate } from './lib/parse-template.js';
15
14
  import { selectDb } from './lib/select-db.js';
16
15
  import { getValidTemplates, validateTemplate } from './lib/templates.js';
16
+ import { updatePayloadInProject } from './lib/update-payload-in-project.js';
17
17
  import { writeEnvFile } from './lib/write-env-file.js';
18
18
  import { error, info } from './utils/log.js';
19
19
  import { feedbackOutro, helpMessage, moveMessage, successMessage, successfulNextInit } from './utils/messages.js';
@@ -38,6 +38,8 @@ export class Main {
38
38
  '--use-npm': Boolean,
39
39
  '--use-pnpm': Boolean,
40
40
  '--use-yarn': Boolean,
41
+ // Other
42
+ '--no-git': Boolean,
41
43
  // Flags
42
44
  '--beta': Boolean,
43
45
  '--debug': Boolean,
@@ -63,13 +65,34 @@ export class Main {
63
65
  p.note("Welcome to Payload. Let's create a project!");
64
66
  // Detect if inside Next.js project
65
67
  const nextAppDetails = await getNextAppDetails(process.cwd());
66
- const { hasTopLevelLayout, nextAppDir, nextConfigPath } = nextAppDetails;
68
+ const { hasTopLevelLayout, isPayloadInstalled, nextAppDir, nextConfigPath } = nextAppDetails;
69
+ // Upgrade Payload in existing project
70
+ if (isPayloadInstalled && nextConfigPath) {
71
+ p.log.warn(`Payload installation detected in current project.`);
72
+ const shouldUpdate = await p.confirm({
73
+ initialValue: false,
74
+ message: chalk.bold(`Upgrade Payload in this project?`)
75
+ });
76
+ if (!p.isCancel(shouldUpdate) && shouldUpdate) {
77
+ const { message, success: updateSuccess } = await updatePayloadInProject(nextAppDetails);
78
+ if (updateSuccess) {
79
+ info(message);
80
+ } else {
81
+ error(message);
82
+ }
83
+ }
84
+ p.outro(feedbackOutro());
85
+ process.exit(0);
86
+ }
67
87
  if (nextConfigPath) {
68
88
  this.args['--name'] = slugify(path.basename(path.dirname(nextConfigPath)));
69
89
  }
70
90
  const projectName = await parseProjectName(this.args);
71
91
  const projectDir = nextConfigPath ? path.dirname(nextConfigPath) : path.resolve(process.cwd(), slugify(projectName));
72
- const packageManager = await getPackageManager(this.args, projectDir);
92
+ const packageManager = await getPackageManager({
93
+ cliArgs: this.args,
94
+ projectDir
95
+ });
73
96
  if (nextConfigPath) {
74
97
  p.log.step(chalk.bold(`${chalk.bgBlack(` ${figures.triangleUp} Next.js `)} project detected!`));
75
98
  const proceed = await p.confirm({
@@ -102,7 +125,7 @@ export class Main {
102
125
  process.exit(1);
103
126
  }
104
127
  await configurePayloadConfig({
105
- dbDetails,
128
+ dbType: dbDetails?.type,
106
129
  projectDirOrConfigPath: {
107
130
  payloadConfigPath: result.payloadConfigPath
108
131
  }
@@ -175,21 +198,5 @@ export class Main {
175
198
  }
176
199
  }
177
200
  }
178
- async function getPackageManager(args, projectDir) {
179
- let packageManager = 'npm';
180
- if (args['--use-npm']) {
181
- packageManager = 'npm';
182
- } else if (args['--use-yarn']) {
183
- packageManager = 'yarn';
184
- } else if (args['--use-pnpm']) {
185
- packageManager = 'pnpm';
186
- } else {
187
- const detected = await detect({
188
- cwd: projectDir
189
- });
190
- packageManager = detected || 'npm';
191
- }
192
- return packageManager;
193
- }
194
201
 
195
202
  //# sourceMappingURL=main.js.map
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'\n// @ts-expect-error no types\nimport { detect } from 'detect-package-manager'\nimport figures from 'figures'\nimport path from 'path'\n\nimport type { CliArgs, PackageManager } from './types.js'\n\nimport { configurePayloadConfig } from './lib/configure-payload-config.js'\nimport { createProject } from './lib/create-project.js'\nimport { generateSecret } from './lib/generate-secret.js'\nimport { getNextAppDetails, initNext } from './lib/init-next.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 { writeEnvFile } from './lib/write-env-file.js'\nimport { error, info } from './utils/log.js'\nimport {\n feedbackOutro,\n helpMessage,\n moveMessage,\n successMessage,\n successfulNextInit,\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-npm': Boolean,\n '--use-pnpm': Boolean,\n '--use-yarn': 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 // 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 { hasTopLevelLayout, nextAppDir, nextConfigPath } = nextAppDetails\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(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 dbDetails,\n projectDirOrConfigPath: {\n payloadConfigPath: result.payloadConfigPath,\n },\n })\n\n await writeEnvFile({\n cliArgs: this.args,\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 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 'starter': {\n const dbDetails = await selectDb(this.args, projectName)\n const payloadSecret = generateSecret()\n await createProject({\n cliArgs: this.args,\n dbDetails,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n await writeEnvFile({\n cliArgs: this.args,\n databaseUri: dbDetails.dbUri,\n payloadSecret,\n projectDir,\n template,\n })\n break\n }\n case 'plugin': {\n await createProject({\n cliArgs: this.args,\n packageManager,\n projectDir,\n projectName,\n template,\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\nasync function getPackageManager(args: CliArgs, projectDir: string): Promise<PackageManager> {\n let packageManager: PackageManager = 'npm'\n\n if (args['--use-npm']) {\n packageManager = 'npm'\n } else if (args['--use-yarn']) {\n packageManager = 'yarn'\n } else if (args['--use-pnpm']) {\n packageManager = 'pnpm'\n } else {\n const detected = await detect({ cwd: projectDir })\n packageManager = detected || 'npm'\n }\n return packageManager\n}\n"],"names":["p","slugify","arg","chalk","detect","figures","path","configurePayloadConfig","createProject","generateSecret","getNextAppDetails","initNext","parseProjectName","parseTemplate","selectDb","getValidTemplates","validateTemplate","writeEnvFile","error","info","feedbackOutro","helpMessage","moveMessage","successMessage","successfulNextInit","Main","args","constructor","String","Boolean","permissive","init","process","exit","console","log","intro","bgCyan","black","note","nextAppDetails","cwd","hasTopLevelLayout","nextAppDir","nextConfigPath","basename","dirname","projectName","projectDir","resolve","packageManager","getPackageManager","step","bold","bgBlack","triangleUp","proceed","confirm","initialValue","message","green","isCancel","outro","warn","dbDetails","result","dbType","type","success","projectDirOrConfigPath","payloadConfigPath","cliArgs","databaseUri","dbUri","payloadSecret","bgGreen","templateArg","valid","validTemplates","template","err","Error","detected"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","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 { 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 { 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 { writeEnvFile } from './lib/write-env-file.js'\nimport { error, info } from './utils/log.js'\nimport {\n feedbackOutro,\n helpMessage,\n moveMessage,\n successMessage,\n successfulNextInit,\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-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 // 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 { hasTopLevelLayout, isPayloadInstalled, nextAppDir, nextConfigPath } = nextAppDetails\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 writeEnvFile({\n cliArgs: this.args,\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 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 'starter': {\n const dbDetails = await selectDb(this.args, projectName)\n const payloadSecret = generateSecret()\n await createProject({\n cliArgs: this.args,\n dbDetails,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n await writeEnvFile({\n cliArgs: this.args,\n databaseUri: dbDetails.dbUri,\n payloadSecret,\n projectDir,\n template,\n })\n break\n }\n case 'plugin': {\n await createProject({\n cliArgs: this.args,\n packageManager,\n projectDir,\n projectName,\n template,\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","createProject","generateSecret","getPackageManager","getNextAppDetails","initNext","parseProjectName","parseTemplate","selectDb","getValidTemplates","validateTemplate","updatePayloadInProject","writeEnvFile","error","info","feedbackOutro","helpMessage","moveMessage","successMessage","successfulNextInit","Main","args","constructor","String","Boolean","permissive","init","process","exit","console","log","intro","bgCyan","black","note","nextAppDetails","cwd","hasTopLevelLayout","isPayloadInstalled","nextAppDir","nextConfigPath","warn","shouldUpdate","confirm","initialValue","message","bold","isCancel","success","updateSuccess","outro","basename","dirname","projectName","projectDir","resolve","packageManager","cliArgs","step","bgBlack","triangleUp","proceed","green","dbDetails","result","dbType","type","projectDirOrConfigPath","payloadConfigPath","databaseUri","dbUri","payloadSecret","bgGreen","templateArg","valid","validTemplates","template","err","Error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CollectionConfig } from 'payload/types'
2
+
3
+ export const Media: CollectionConfig = {
4
+ slug: 'media',
5
+ access: {
6
+ read: () => true,
7
+ },
8
+ fields: [
9
+ {
10
+ name: 'alt',
11
+ type: 'text',
12
+ required: true,
13
+ },
14
+ ],
15
+ upload: true,
16
+ }
@@ -1,12 +1,13 @@
1
+ // storage-adapter-import-placeholder
1
2
  import { mongooseAdapter } from '@payloadcms/db-mongodb' // database-adapter-import
2
- // import { payloadCloud } from '@payloadcms/plugin-cloud'
3
3
  import { lexicalEditor } from '@payloadcms/richtext-lexical'
4
4
  import path from 'path'
5
5
  import { buildConfig } from 'payload/config'
6
- // import sharp from 'sharp'
7
6
  import { fileURLToPath } from 'url'
7
+ import sharp from 'sharp'
8
8
 
9
9
  import { Users } from './collections/Users'
10
+ import { Media } from './collections/Media'
10
11
 
11
12
  const filename = fileURLToPath(import.meta.url)
12
13
  const dirname = path.dirname(filename)
@@ -15,9 +16,8 @@ export default buildConfig({
15
16
  admin: {
16
17
  user: Users.slug,
17
18
  },
18
- collections: [Users],
19
- editor: lexicalEditor({}),
20
- // plugins: [payloadCloud()], // TODO: Re-enable when cloud supports 3.0
19
+ collections: [Users, Media],
20
+ editor: lexicalEditor(),
21
21
  secret: process.env.PAYLOAD_SECRET || '',
22
22
  typescript: {
23
23
  outputFile: path.resolve(dirname, 'payload-types.ts'),
@@ -27,13 +27,8 @@ export default buildConfig({
27
27
  url: process.env.DATABASE_URI || '',
28
28
  }),
29
29
  // database-adapter-config-end
30
-
31
- // Sharp is now an optional dependency -
32
- // if you want to resize images, crop, set focal point, etc.
33
- // make sure to install it and pass it to the config.
34
-
35
- // This is temporary - we may make an adapter pattern
36
- // for this before reaching 3.0 stable
37
-
38
- // sharp,
30
+ sharp,
31
+ plugins: [
32
+ // storage-adapter-placeholder
33
+ ],
39
34
  })
package/dist/types.d.ts CHANGED
@@ -11,6 +11,7 @@ export interface Args extends arg.Spec {
11
11
  '--local-template': StringConstructor;
12
12
  '--name': StringConstructor;
13
13
  '--no-deps': BooleanConstructor;
14
+ '--no-git': BooleanConstructor;
14
15
  '--secret': StringConstructor;
15
16
  '--template': StringConstructor;
16
17
  '--template-branch': StringConstructor;
@@ -51,5 +52,15 @@ export type DbDetails = {
51
52
  type: DbType;
52
53
  };
53
54
  export type EditorType = 'lexical' | 'slate';
55
+ export type NextAppDetails = {
56
+ hasTopLevelLayout: boolean;
57
+ isPayloadInstalled?: boolean;
58
+ isSrcDir: boolean;
59
+ nextAppDir?: string;
60
+ nextConfigPath?: string;
61
+ nextConfigType?: NextConfigType;
62
+ };
63
+ export type NextConfigType = 'cjs' | 'esm';
64
+ export type StorageAdapterType = 'localDisk' | 'payloadCloud' | 'vercelBlobStorage';
54
65
  export {};
55
66
  //# sourceMappingURL=types.d.ts.map
@@ -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;IAC/B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,aAAa,EAAE,kBAAkB,CAAA;IACjC,kBAAkB,EAAE,iBAAiB,CAAA;IACrC,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,UAAU,EAAE,iBAAiB,CAAA;IAC7B,YAAY,EAAE,iBAAiB,CAAA;IAC/B,mBAAmB,EAAE,iBAAiB,CAAA;IACtC,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;CACb;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAEtC,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,cAAc,CAAA;AAE1D;;;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,CAAA;AAE3C,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"}
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;IAC/B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,aAAa,EAAE,kBAAkB,CAAA;IACjC,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,mBAAmB,EAAE,iBAAiB,CAAA;IACtC,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;CACb;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAEtC,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,cAAc,CAAA;AAE1D;;;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,CAAA;AAE3C,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,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,cAAc,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,CAAA;AAE1C,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 '--secret': StringConstructor\n '--template': StringConstructor\n '--template-branch': StringConstructor\n '--use-npm': BooleanConstructor\n '--use-pnpm': BooleanConstructor\n '--use-yarn': BooleanConstructor\n\n // Aliases\n\n '-h': string\n '-n': string\n '-t': string\n}\n\nexport type CliArgs = arg.Result<Args>\n\nexport type ProjectTemplate = GitTemplate | PluginTemplate\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'\n\nexport type DbDetails = {\n dbUri: string\n type: DbType\n}\n\nexport type EditorType = 'lexical' | 'slate'\n"],"names":[],"rangeMappings":"","mappings":"AAiEA,WAA4C"}
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 '--template-branch': StringConstructor\n '--use-npm': BooleanConstructor\n '--use-pnpm': BooleanConstructor\n '--use-yarn': BooleanConstructor\n\n // Aliases\n\n '-h': string\n '-n': string\n '-t': string\n}\n\nexport type CliArgs = arg.Result<Args>\n\nexport type ProjectTemplate = GitTemplate | PluginTemplate\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'\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 nextAppDir?: string\n nextConfigPath?: string\n nextConfigType?: NextConfigType\n}\n\nexport type NextConfigType = 'cjs' | 'esm'\n\nexport type StorageAdapterType = 'localDisk' | 'payloadCloud' | 'vercelBlobStorage'\n"],"names":[],"rangeMappings":"","mappings":"AA+EA,WAAmF"}
@@ -1,5 +1,7 @@
1
1
  /**
2
2
  * Recursively copy files from src to dest
3
+ *
4
+ * @internal
3
5
  */
4
6
  export declare function copyRecursiveSync(src: string, dest: string, debug?: boolean): void;
5
7
  //# sourceMappingURL=copy-recursive-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copy-recursive-sync.d.ts","sourceRoot":"","sources":["../../src/utils/copy-recursive-sync.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,QAY3E"}
1
+ {"version":3,"file":"copy-recursive-sync.d.ts","sourceRoot":"","sources":["../../src/utils/copy-recursive-sync.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,QAY3E"}
@@ -2,6 +2,8 @@ import fs from 'fs';
2
2
  import path from 'path';
3
3
  /**
4
4
  * Recursively copy files from src to dest
5
+ *
6
+ * @internal
5
7
  */ export function copyRecursiveSync(src, dest, debug) {
6
8
  const exists = fs.existsSync(src);
7
9
  const stats = exists && fs.statSync(src);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/copy-recursive-sync.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\n\n/**\n * Recursively copy files from src to dest\n */\nexport function copyRecursiveSync(src: string, dest: string, debug?: boolean) {\n const exists = fs.existsSync(src)\n const stats = exists && fs.statSync(src)\n const isDirectory = exists && stats !== false && stats.isDirectory()\n if (isDirectory) {\n fs.mkdirSync(dest, { recursive: true })\n fs.readdirSync(src).forEach((childItemName) => {\n copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName))\n })\n } else {\n fs.copyFileSync(src, dest)\n }\n}\n"],"names":["fs","path","copyRecursiveSync","src","dest","debug","exists","existsSync","stats","statSync","isDirectory","mkdirSync","recursive","readdirSync","forEach","childItemName","join","copyFileSync"],"rangeMappings":";;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,UAAU,OAAM;AAEvB;;CAEC,GACD,OAAO,SAASC,kBAAkBC,GAAW,EAAEC,IAAY,EAAEC,KAAe;IAC1E,MAAMC,SAASN,GAAGO,UAAU,CAACJ;IAC7B,MAAMK,QAAQF,UAAUN,GAAGS,QAAQ,CAACN;IACpC,MAAMO,cAAcJ,UAAUE,UAAU,SAASA,MAAME,WAAW;IAClE,IAAIA,aAAa;QACfV,GAAGW,SAAS,CAACP,MAAM;YAAEQ,WAAW;QAAK;QACrCZ,GAAGa,WAAW,CAACV,KAAKW,OAAO,CAAC,CAACC;YAC3Bb,kBAAkBD,KAAKe,IAAI,CAACb,KAAKY,gBAAgBd,KAAKe,IAAI,CAACZ,MAAMW;QACnE;IACF,OAAO;QACLf,GAAGiB,YAAY,CAACd,KAAKC;IACvB;AACF"}
1
+ {"version":3,"sources":["../../src/utils/copy-recursive-sync.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\n\n/**\n * Recursively copy files from src to dest\n *\n * @internal\n */\nexport function copyRecursiveSync(src: string, dest: string, debug?: boolean) {\n const exists = fs.existsSync(src)\n const stats = exists && fs.statSync(src)\n const isDirectory = exists && stats !== false && stats.isDirectory()\n if (isDirectory) {\n fs.mkdirSync(dest, { recursive: true })\n fs.readdirSync(src).forEach((childItemName) => {\n copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName))\n })\n } else {\n fs.copyFileSync(src, dest)\n }\n}\n"],"names":["fs","path","copyRecursiveSync","src","dest","debug","exists","existsSync","stats","statSync","isDirectory","mkdirSync","recursive","readdirSync","forEach","childItemName","join","copyFileSync"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,UAAU,OAAM;AAEvB;;;;CAIC,GACD,OAAO,SAASC,kBAAkBC,GAAW,EAAEC,IAAY,EAAEC,KAAe;IAC1E,MAAMC,SAASN,GAAGO,UAAU,CAACJ;IAC7B,MAAMK,QAAQF,UAAUN,GAAGS,QAAQ,CAACN;IACpC,MAAMO,cAAcJ,UAAUE,UAAU,SAASA,MAAME,WAAW;IAClE,IAAIA,aAAa;QACfV,GAAGW,SAAS,CAACP,MAAM;YAAEQ,WAAW;QAAK;QACrCZ,GAAGa,WAAW,CAACV,KAAKW,OAAO,CAAC,CAACC;YAC3Bb,kBAAkBD,KAAKe,IAAI,CAACb,KAAKY,gBAAgBd,KAAKe,IAAI,CAACZ,MAAMW;QACnE;IACF,OAAO;QACLf,GAAGiB,YAAY,CAACd,KAAKC;IACvB;AACF"}
@@ -0,0 +1,4 @@
1
+ export declare function tryInitRepoAndCommit(args: {
2
+ cwd: string;
3
+ }): void;
4
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAMA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAuBhE"}
@@ -0,0 +1,46 @@
1
+ import { execSync } from 'child_process';
2
+ import { warning } from './log.js';
3
+ export function tryInitRepoAndCommit(args) {
4
+ const execOpts = {
5
+ cwd: args.cwd,
6
+ stdio: 'ignore'
7
+ };
8
+ try {
9
+ // Check if git is available
10
+ execSync('git -v', execOpts);
11
+ // Do nothing if already in a git repo
12
+ if (isGitRepo(execOpts)) {
13
+ return;
14
+ }
15
+ // Initialize
16
+ execSync('git init', execOpts);
17
+ if (!ensureHasDefaultBranch(execOpts)) {
18
+ execSync('git checkout -b main', execOpts);
19
+ }
20
+ // Add and commit files
21
+ execSync('git add -A', execOpts);
22
+ execSync('git commit -m "feat: initial commit"', execOpts);
23
+ } catch (_) {
24
+ warning('Failed to initialize git repository.');
25
+ }
26
+ }
27
+ function isGitRepo(opts) {
28
+ try {
29
+ execSync('git rev-parse --is-inside-work-tree', opts);
30
+ return true;
31
+ } catch (_) {
32
+ // Ignore errors
33
+ }
34
+ return false;
35
+ }
36
+ function ensureHasDefaultBranch(opts) {
37
+ try {
38
+ execSync(`git config init.defaultBranch`, opts);
39
+ return true;
40
+ } catch (_) {
41
+ // Ignore errros
42
+ }
43
+ return false;
44
+ }
45
+
46
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/git.ts"],"sourcesContent":["import type { ExecSyncOptions } from 'child_process'\n\nimport { execSync } from 'child_process'\n\nimport { warning } from './log.js'\n\nexport function tryInitRepoAndCommit(args: { cwd: string }): void {\n const execOpts: ExecSyncOptions = { cwd: args.cwd, stdio: 'ignore' }\n try {\n // Check if git is available\n execSync('git -v', execOpts)\n\n // Do nothing if already in a git repo\n if (isGitRepo(execOpts)) {\n return\n }\n\n // Initialize\n execSync('git init', execOpts)\n if (!ensureHasDefaultBranch(execOpts)) {\n execSync('git checkout -b main', execOpts)\n }\n\n // Add and commit files\n execSync('git add -A', execOpts)\n execSync('git commit -m \"feat: initial commit\"', execOpts)\n } catch (_) {\n warning('Failed to initialize git repository.')\n }\n}\n\nfunction isGitRepo(opts: ExecSyncOptions): boolean {\n try {\n execSync('git rev-parse --is-inside-work-tree', opts)\n return true\n } catch (_) {\n // Ignore errors\n }\n return false\n}\n\nfunction ensureHasDefaultBranch(opts: ExecSyncOptions): boolean {\n try {\n execSync(`git config init.defaultBranch`, opts)\n return true\n } catch (_) {\n // Ignore errros\n }\n return false\n}\n"],"names":["execSync","warning","tryInitRepoAndCommit","args","execOpts","cwd","stdio","isGitRepo","ensureHasDefaultBranch","_","opts"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,QAAQ,QAAQ,gBAAe;AAExC,SAASC,OAAO,QAAQ,WAAU;AAElC,OAAO,SAASC,qBAAqBC,IAAqB;IACxD,MAAMC,WAA4B;QAAEC,KAAKF,KAAKE,GAAG;QAAEC,OAAO;IAAS;IACnE,IAAI;QACF,4BAA4B;QAC5BN,SAAS,UAAUI;QAEnB,sCAAsC;QACtC,IAAIG,UAAUH,WAAW;YACvB;QACF;QAEA,aAAa;QACbJ,SAAS,YAAYI;QACrB,IAAI,CAACI,uBAAuBJ,WAAW;YACrCJ,SAAS,wBAAwBI;QACnC;QAEA,uBAAuB;QACvBJ,SAAS,cAAcI;QACvBJ,SAAS,wCAAwCI;IACnD,EAAE,OAAOK,GAAG;QACVR,QAAQ;IACV;AACF;AAEA,SAASM,UAAUG,IAAqB;IACtC,IAAI;QACFV,SAAS,uCAAuCU;QAChD,OAAO;IACT,EAAE,OAAOD,GAAG;IACV,gBAAgB;IAClB;IACA,OAAO;AACT;AAEA,SAASD,uBAAuBE,IAAqB;IACnD,IAAI;QACFV,SAAS,CAAC,6BAA6B,CAAC,EAAEU;QAC1C,OAAO;IACT,EAAE,OAAOD,GAAG;IACV,gBAAgB;IAClB;IACA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAMjD,eAAO,MAAM,cAAc,QAE1B,CAAA;AAID,wBAAgB,WAAW,IAAI,IAAI,CA4BlC;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"}
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,CA4BlC;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"}
@@ -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 { ProjectTemplate } from '../types.js'\nimport type { PackageManager } 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 --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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,6BAA6B,GAC7B,OAAOA,WAAW,QAAO;AACzB,OAAOC,UAAU,OAAM;AACvB,OAAOC,kBAAkB,gBAAe;AAKxC,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;;;;;;;;;;;;;;;;;;kCAkBc,EAAEc,gBAAgBH,gBAAgB;;;;;;;AAOpE,CAAC;AACD;AAEA,SAASG,gBAAgBC,SAA4B;IACnD,OAAO,CAAC,IAAI,EAAEP,OAAO,EAAEO,UACpBC,GAAG,CAAC,CAACC,IAAM,CAAC,EAAEA,EAAEC,IAAI,CAAC,EAAE,IAAIT,MAAM,CAAC,KAAKQ,EAAEC,IAAI,CAACC,MAAM,EAAE,EAAEF,EAAEG,WAAW,CAAC,CAAC,EACvEC,IAAI,CAAC,CAAC,EAAE,EAAEb,OAAO,CAAC,EAAE,CAAC;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,aAAa,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,CAAC,EAAEpC,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,CAAC,EAAED,KAAK,EAAE,EAAEC,IAAI,CAAC;IAC5C;AACF"}
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 --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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","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;;;;;;;;;;;;;;;;;;kCAkBc,EAAEc,gBAAgBH,gBAAgB;;;;;;;AAOpE,CAAC;AACD;AAEA,SAASG,gBAAgBC,SAA4B;IACnD,OAAO,CAAC,IAAI,EAAEP,OAAO,EAAEO,UACpBC,GAAG,CAAC,CAACC,IAAM,CAAC,EAAEA,EAAEC,IAAI,CAAC,EAAE,IAAIT,MAAM,CAAC,KAAKQ,EAAEC,IAAI,CAACC,MAAM,EAAE,EAAEF,EAAEG,WAAW,CAAC,CAAC,EACvEC,IAAI,CAAC,CAAC,EAAE,EAAEb,OAAO,CAAC,EAAE,CAAC;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,aAAa,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,CAAC,EAAEpC,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,CAAC,EAAED,KAAK,EAAE,EAAEC,IAAI,CAAC;IAC5C;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-payload-app",
3
- "version": "3.0.0-canary.92e4997",
3
+ "version": "3.0.0-canary.a78fca3",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,10 +10,24 @@
10
10
  "license": "MIT",
11
11
  "type": "module",
12
12
  "exports": {
13
+ "./types": {
14
+ "import": "./src/types.ts",
15
+ "require": "./src/types.ts"
16
+ },
13
17
  "./commands": {
14
18
  "import": "./src/lib/init-next.ts",
15
19
  "require": "./src/lib/init-next.ts",
16
20
  "types": "./src/lib/init-next.ts"
21
+ },
22
+ "./lib/*": {
23
+ "import": "./src/lib/*",
24
+ "require": "./src/lib/*",
25
+ "types": "./src/lib/*"
26
+ },
27
+ "./utils/*": {
28
+ "import": "./src/utils/*",
29
+ "require": "./src/utils/*",
30
+ "types": "./src/utils/*"
17
31
  }
18
32
  },
19
33
  "bin": {
@@ -29,10 +43,8 @@
29
43
  "@sindresorhus/slugify": "^1.1.0",
30
44
  "arg": "^5.0.0",
31
45
  "chalk": "^4.1.0",
32
- "command-exists": "^1.2.9",
33
46
  "comment-json": "^4.2.3",
34
47
  "degit": "^2.8.4",
35
- "detect-package-manager": "^3.0.1",
36
48
  "esprima-next": "^6.0.3",
37
49
  "execa": "^5.0.0",
38
50
  "figures": "^6.1.0",
@@ -41,16 +53,16 @@
41
53
  "terminal-link": "^2.1.1"
42
54
  },
43
55
  "devDependencies": {
44
- "@types/command-exists": "^1.2.0",
45
56
  "@types/degit": "^2.8.3",
46
57
  "@types/esprima": "^4.0.6",
47
58
  "@types/fs-extra": "^9.0.12",
48
- "@types/jest": "^27.0.3",
49
- "@types/node": "20.12.5"
59
+ "@types/jest": "29.5.12",
60
+ "@types/node": "20.12.5",
61
+ "temp-dir": "2.0.0"
50
62
  },
51
63
  "scripts": {
52
64
  "build": "pnpm pack-template-files && pnpm typecheck && pnpm build:swc",
53
- "build:swc": "swc ./src -d ./dist --config-file .swcrc",
65
+ "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
54
66
  "clean": "rimraf {dist,*.tsbuildinfo}",
55
67
  "pack-template-files": "tsx src/scripts/pack-template-files.ts",
56
68
  "test": "jest",
@@ -1,9 +0,0 @@
1
- import type { DbType } from '../types.js';
2
- type DbAdapterReplacement = {
3
- configReplacement: string[];
4
- importReplacement: string;
5
- packageName: string;
6
- };
7
- export declare const dbReplacements: Record<DbType, DbAdapterReplacement>;
8
- export {};
9
- //# sourceMappingURL=packages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../../src/lib/packages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,KAAK,oBAAoB,GAAG;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAyBD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAG/D,CAAA"}
@@ -1,27 +0,0 @@
1
- const mongodbReplacement = {
2
- importReplacement: "import { mongooseAdapter } from '@payloadcms/db-mongodb'",
3
- packageName: '@payloadcms/db-mongodb',
4
- // Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`
5
- configReplacement: [
6
- ' db: mongooseAdapter({',
7
- " url: process.env.DATABASE_URI || '',",
8
- ' }),'
9
- ]
10
- };
11
- const postgresReplacement = {
12
- configReplacement: [
13
- ' db: postgresAdapter({',
14
- ' pool: {',
15
- " connectionString: process.env.DATABASE_URI || '',",
16
- ' },',
17
- ' }),'
18
- ],
19
- importReplacement: "import { postgresAdapter } from '@payloadcms/db-postgres'",
20
- packageName: '@payloadcms/db-postgres'
21
- };
22
- export const dbReplacements = {
23
- mongodb: mongodbReplacement,
24
- postgres: postgresReplacement
25
- };
26
-
27
- //# sourceMappingURL=packages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/packages.ts"],"sourcesContent":["import type { DbType } from '../types.js'\n\ntype DbAdapterReplacement = {\n configReplacement: string[]\n importReplacement: string\n packageName: string\n}\n\nconst mongodbReplacement: DbAdapterReplacement = {\n importReplacement: \"import { mongooseAdapter } from '@payloadcms/db-mongodb'\",\n packageName: '@payloadcms/db-mongodb',\n // Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`\n configReplacement: [\n ' db: mongooseAdapter({',\n \" url: process.env.DATABASE_URI || '',\",\n ' }),',\n ],\n}\n\nconst postgresReplacement: DbAdapterReplacement = {\n configReplacement: [\n ' db: postgresAdapter({',\n ' pool: {',\n \" connectionString: process.env.DATABASE_URI || '',\",\n ' },',\n ' }),',\n ],\n importReplacement: \"import { postgresAdapter } from '@payloadcms/db-postgres'\",\n packageName: '@payloadcms/db-postgres',\n}\n\nexport const dbReplacements: Record<DbType, DbAdapterReplacement> = {\n mongodb: mongodbReplacement,\n postgres: postgresReplacement,\n}\n"],"names":["mongodbReplacement","importReplacement","packageName","configReplacement","postgresReplacement","dbReplacements","mongodb","postgres"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAQA,MAAMA,qBAA2C;IAC/CC,mBAAmB;IACnBC,aAAa;IACb,8FAA8F;IAC9FC,mBAAmB;QACjB;QACA;QACA;KACD;AACH;AAEA,MAAMC,sBAA4C;IAChDD,mBAAmB;QACjB;QACA;QACA;QACA;QACA;KACD;IACDF,mBAAmB;IACnBC,aAAa;AACf;AAEA,OAAO,MAAMG,iBAAuD;IAClEC,SAASN;IACTO,UAAUH;AACZ,EAAC"}