create-payload-app 4.0.0-internal.a0ef1b8 → 4.0.0-internal.a6582c6

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.
Files changed (52) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/lib/ast/adapter-config.d.ts.map +1 -1
  3. package/dist/lib/ast/adapter-config.js +0 -10
  4. package/dist/lib/ast/adapter-config.js.map +1 -1
  5. package/dist/lib/ast/types.d.ts +2 -2
  6. package/dist/lib/ast/types.d.ts.map +1 -1
  7. package/dist/lib/ast/types.js +0 -1
  8. package/dist/lib/ast/types.js.map +1 -1
  9. package/dist/lib/configure-plugin-project.d.ts.map +1 -1
  10. package/dist/lib/configure-pnpm-builds.d.ts +20 -0
  11. package/dist/lib/configure-pnpm-builds.d.ts.map +1 -0
  12. package/dist/lib/configure-pnpm-builds.js +100 -0
  13. package/dist/lib/configure-pnpm-builds.js.map +1 -0
  14. package/dist/lib/create-project.d.ts.map +1 -1
  15. package/dist/lib/create-project.js +13 -50
  16. package/dist/lib/create-project.js.map +1 -1
  17. package/dist/lib/init-next.d.ts +1 -1
  18. package/dist/lib/init-next.d.ts.map +1 -1
  19. package/dist/lib/init-next.js +20 -4
  20. package/dist/lib/init-next.js.map +1 -1
  21. package/dist/lib/update-payload-in-project.d.ts +1 -1
  22. package/dist/lib/update-payload-in-project.d.ts.map +1 -1
  23. package/dist/lib/update-payload-in-project.js +18 -8
  24. package/dist/lib/update-payload-in-project.js.map +1 -1
  25. package/dist/lib/wrap-next-config.d.ts.map +1 -1
  26. package/dist/main.d.ts.map +1 -1
  27. package/dist/main.js +6 -5
  28. package/dist/main.js.map +1 -1
  29. package/dist/template/src/app/(frontend)/styles.css +1 -1
  30. package/dist/template/src/app/(payload)/admin/importMap.js +0 -2
  31. package/dist/template/src/app/(payload)/layout.tsx +8 -2
  32. package/dist/template/src/payload-types.ts +10 -116
  33. package/dist/types.d.ts +1 -0
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/types.js.map +1 -1
  36. package/dist/utils/casing.d.ts.map +1 -1
  37. package/dist/utils/log.d.ts.map +1 -1
  38. package/dist/utils/messages.d.ts.map +1 -1
  39. package/dist/utils/messages.js +1 -0
  40. package/dist/utils/messages.js.map +1 -1
  41. package/dist/utils/resolvePackageVersion.d.ts +29 -0
  42. package/dist/utils/resolvePackageVersion.d.ts.map +1 -0
  43. package/dist/utils/resolvePackageVersion.js +41 -0
  44. package/dist/utils/resolvePackageVersion.js.map +1 -0
  45. package/dist/utils/resolvePackageVersion.spec.js +77 -0
  46. package/dist/utils/resolvePackageVersion.spec.js.map +1 -0
  47. package/package.json +2 -2
  48. package/dist/utils/getLatestPackageVersion.d.ts +0 -17
  49. package/dist/utils/getLatestPackageVersion.d.ts.map +0 -1
  50. package/dist/utils/getLatestPackageVersion.js +0 -20
  51. package/dist/utils/getLatestPackageVersion.js.map +0 -1
  52. /package/dist/template/src/app/(payload)/{custom.scss → custom.css} +0 -0
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2018-2025 Payload CMS, Inc. <info@payloadcms.com>
3
+ Copyright (c) 2018-2026 Payload CMS, LLC <info@payloadcms.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-config.d.ts","sourceRoot":"","sources":["../../../src/lib/ast/adapter-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEjE,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,IAAI,GAAG,MAAM,CAAA;IACnC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAA;CAC3B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CA0CnE,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAwEtE,CAAA;AAEV;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,MAAM,CAE5E"}
1
+ {"version":3,"file":"adapter-config.d.ts","sourceRoot":"","sources":["../../../src/lib/ast/adapter-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEjE,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,IAAI,GAAG,MAAM,CAAA;IACnC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAA;CAC3B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CA0CnE,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,cAAc,EAAE,oBAAoB,CA8DtE,CAAA;AAEV;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,MAAM,CAE5E"}
@@ -100,16 +100,6 @@
100
100
  })`,
101
101
  packageName: '@payloadcms/storage-s3'
102
102
  },
103
- uploadthingStorage: {
104
- adapterName: 'uploadthingStorage',
105
- configTemplate: ()=>`uploadthingStorage({
106
- collections: {
107
- media: true,
108
- },
109
- token: process.env.UPLOADTHING_SECRET || '',
110
- })`,
111
- packageName: '@payloadcms/storage-uploadthing'
112
- },
113
103
  vercelBlobStorage: {
114
104
  adapterName: 'vercelBlobStorage',
115
105
  configTemplate: ()=>`vercelBlobStorage({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/ast/adapter-config.ts"],"sourcesContent":["/**\n * Centralized adapter configuration\n * Shared across all AST transformation and test files\n */\n\nimport type { DatabaseAdapter, StorageAdapter } from './types.js'\n\nexport type DatabaseAdapterConfig = {\n adapterName: string\n configTemplate: (envVar: string) => string\n packageName: string\n}\n\nexport type StorageAdapterConfig = {\n adapterName: null | string\n configTemplate: () => null | string\n packageName: null | string\n}\n\n/**\n * Database adapter configurations\n */\nexport const DB_ADAPTER_CONFIG: Record<DatabaseAdapter, DatabaseAdapterConfig> = {\n 'd1-sqlite': {\n adapterName: 'sqliteD1Adapter',\n configTemplate: () => `sqliteD1Adapter({\n binding: cloudflare.env.D1,\n})`,\n packageName: '@payloadcms/db-d1-sqlite',\n },\n mongodb: {\n adapterName: 'mongooseAdapter',\n configTemplate: (envVar: string) => `mongooseAdapter({\n url: process.env.${envVar} || '',\n})`,\n packageName: '@payloadcms/db-mongodb',\n },\n postgres: {\n adapterName: 'postgresAdapter',\n configTemplate: (envVar: string) => `postgresAdapter({\n pool: {\n connectionString: process.env.${envVar} || '',\n },\n})`,\n packageName: '@payloadcms/db-postgres',\n },\n sqlite: {\n adapterName: 'sqliteAdapter',\n configTemplate: () => `sqliteAdapter({\n client: {\n url: process.env.DATABASE_URL || '',\n },\n})`,\n packageName: '@payloadcms/db-sqlite',\n },\n 'vercel-postgres': {\n adapterName: 'vercelPostgresAdapter',\n configTemplate: () => `vercelPostgresAdapter({\n pool: {\n connectionString: process.env.POSTGRES_URL || '',\n },\n})`,\n packageName: '@payloadcms/db-vercel-postgres',\n },\n} as const\n\n/**\n * Storage adapter configurations\n */\nexport const STORAGE_ADAPTER_CONFIG: Record<StorageAdapter, StorageAdapterConfig> = {\n azureStorage: {\n adapterName: 'azureStorage',\n configTemplate: () => `azureStorage({\n collections: {\n media: true,\n },\n connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING || '',\n containerName: process.env.AZURE_STORAGE_CONTAINER_NAME || '',\n })`,\n packageName: '@payloadcms/storage-azure',\n },\n gcsStorage: {\n adapterName: 'gcsStorage',\n configTemplate: () => `gcsStorage({\n collections: {\n media: true,\n },\n bucket: process.env.GCS_BUCKET || '',\n })`,\n packageName: '@payloadcms/storage-gcs',\n },\n localDisk: {\n adapterName: null,\n configTemplate: () => null,\n packageName: null,\n },\n r2Storage: {\n adapterName: 'r2Storage',\n configTemplate: () => `r2Storage({\n bucket: cloudflare.env.R2,\n collections: { media: true },\n })`,\n packageName: '@payloadcms/storage-r2',\n },\n s3Storage: {\n adapterName: 's3Storage',\n configTemplate: () => `s3Storage({\n collections: {\n media: true,\n },\n bucket: process.env.S3_BUCKET || '',\n config: {\n credentials: {\n accessKeyId: process.env.S3_ACCESS_KEY_ID || '',\n secretAccessKey: process.env.S3_SECRET_ACCESS_KEY || '',\n },\n region: process.env.S3_REGION || '',\n },\n })`,\n packageName: '@payloadcms/storage-s3',\n },\n uploadthingStorage: {\n adapterName: 'uploadthingStorage',\n configTemplate: () => `uploadthingStorage({\n collections: {\n media: true,\n },\n token: process.env.UPLOADTHING_SECRET || '',\n })`,\n packageName: '@payloadcms/storage-uploadthing',\n },\n vercelBlobStorage: {\n adapterName: 'vercelBlobStorage',\n configTemplate: () => `vercelBlobStorage({\n collections: {\n media: true,\n },\n token: process.env.BLOB_READ_WRITE_TOKEN || '',\n })`,\n packageName: '@payloadcms/storage-vercel-blob',\n },\n} as const\n\n/**\n * Helper to get database adapter package name\n */\nexport function getDbPackageName(adapter: DatabaseAdapter): string {\n return DB_ADAPTER_CONFIG[adapter].packageName\n}\n\n/**\n * Helper to get database adapter name\n */\nexport function getDbAdapterName(adapter: DatabaseAdapter): string {\n return DB_ADAPTER_CONFIG[adapter].adapterName\n}\n\n/**\n * Helper to get storage adapter package name\n */\nexport function getStoragePackageName(adapter: StorageAdapter): null | string {\n return STORAGE_ADAPTER_CONFIG[adapter].packageName\n}\n\n/**\n * Helper to get storage adapter name\n */\nexport function getStorageAdapterName(adapter: StorageAdapter): null | string {\n return STORAGE_ADAPTER_CONFIG[adapter].adapterName\n}\n"],"names":["DB_ADAPTER_CONFIG","adapterName","configTemplate","packageName","mongodb","envVar","postgres","sqlite","STORAGE_ADAPTER_CONFIG","azureStorage","gcsStorage","localDisk","r2Storage","s3Storage","uploadthingStorage","vercelBlobStorage","getDbPackageName","adapter","getDbAdapterName","getStoragePackageName","getStorageAdapterName"],"mappings":"AAAA;;;CAGC,GAgBD;;CAEC,GACD,OAAO,MAAMA,oBAAoE;IAC/E,aAAa;QACXC,aAAa;QACbC,gBAAgB,IAAM,CAAC;;EAEzB,CAAC;QACCC,aAAa;IACf;IACAC,SAAS;QACPH,aAAa;QACbC,gBAAgB,CAACG,SAAmB,CAAC;mBACtB,EAAEA,OAAO;EAC1B,CAAC;QACCF,aAAa;IACf;IACAG,UAAU;QACRL,aAAa;QACbC,gBAAgB,CAACG,SAAmB,CAAC;;kCAEP,EAAEA,OAAO;;EAEzC,CAAC;QACCF,aAAa;IACf;IACAI,QAAQ;QACNN,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;EAIzB,CAAC;QACCC,aAAa;IACf;IACA,mBAAmB;QACjBF,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;EAIzB,CAAC;QACCC,aAAa;IACf;AACF,EAAU;AAEV;;CAEC,GACD,OAAO,MAAMK,yBAAuE;IAClFC,cAAc;QACZR,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;;IAMvB,CAAC;QACDC,aAAa;IACf;IACAO,YAAY;QACVT,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;IAKvB,CAAC;QACDC,aAAa;IACf;IACAQ,WAAW;QACTV,aAAa;QACbC,gBAAgB,IAAM;QACtBC,aAAa;IACf;IACAS,WAAW;QACTX,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;IAGvB,CAAC;QACDC,aAAa;IACf;IACAU,WAAW;QACTZ,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;;;;;;;;IAYvB,CAAC;QACDC,aAAa;IACf;IACAW,oBAAoB;QAClBb,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;IAKvB,CAAC;QACDC,aAAa;IACf;IACAY,mBAAmB;QACjBd,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;IAKvB,CAAC;QACDC,aAAa;IACf;AACF,EAAU;AAEV;;CAEC,GACD,OAAO,SAASa,iBAAiBC,OAAwB;IACvD,OAAOjB,iBAAiB,CAACiB,QAAQ,CAACd,WAAW;AAC/C;AAEA;;CAEC,GACD,OAAO,SAASe,iBAAiBD,OAAwB;IACvD,OAAOjB,iBAAiB,CAACiB,QAAQ,CAAChB,WAAW;AAC/C;AAEA;;CAEC,GACD,OAAO,SAASkB,sBAAsBF,OAAuB;IAC3D,OAAOT,sBAAsB,CAACS,QAAQ,CAACd,WAAW;AACpD;AAEA;;CAEC,GACD,OAAO,SAASiB,sBAAsBH,OAAuB;IAC3D,OAAOT,sBAAsB,CAACS,QAAQ,CAAChB,WAAW;AACpD"}
1
+ {"version":3,"sources":["../../../src/lib/ast/adapter-config.ts"],"sourcesContent":["/**\n * Centralized adapter configuration\n * Shared across all AST transformation and test files\n */\n\nimport type { DatabaseAdapter, StorageAdapter } from './types.js'\n\nexport type DatabaseAdapterConfig = {\n adapterName: string\n configTemplate: (envVar: string) => string\n packageName: string\n}\n\nexport type StorageAdapterConfig = {\n adapterName: null | string\n configTemplate: () => null | string\n packageName: null | string\n}\n\n/**\n * Database adapter configurations\n */\nexport const DB_ADAPTER_CONFIG: Record<DatabaseAdapter, DatabaseAdapterConfig> = {\n 'd1-sqlite': {\n adapterName: 'sqliteD1Adapter',\n configTemplate: () => `sqliteD1Adapter({\n binding: cloudflare.env.D1,\n})`,\n packageName: '@payloadcms/db-d1-sqlite',\n },\n mongodb: {\n adapterName: 'mongooseAdapter',\n configTemplate: (envVar: string) => `mongooseAdapter({\n url: process.env.${envVar} || '',\n})`,\n packageName: '@payloadcms/db-mongodb',\n },\n postgres: {\n adapterName: 'postgresAdapter',\n configTemplate: (envVar: string) => `postgresAdapter({\n pool: {\n connectionString: process.env.${envVar} || '',\n },\n})`,\n packageName: '@payloadcms/db-postgres',\n },\n sqlite: {\n adapterName: 'sqliteAdapter',\n configTemplate: () => `sqliteAdapter({\n client: {\n url: process.env.DATABASE_URL || '',\n },\n})`,\n packageName: '@payloadcms/db-sqlite',\n },\n 'vercel-postgres': {\n adapterName: 'vercelPostgresAdapter',\n configTemplate: () => `vercelPostgresAdapter({\n pool: {\n connectionString: process.env.POSTGRES_URL || '',\n },\n})`,\n packageName: '@payloadcms/db-vercel-postgres',\n },\n} as const\n\n/**\n * Storage adapter configurations\n */\nexport const STORAGE_ADAPTER_CONFIG: Record<StorageAdapter, StorageAdapterConfig> = {\n azureStorage: {\n adapterName: 'azureStorage',\n configTemplate: () => `azureStorage({\n collections: {\n media: true,\n },\n connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING || '',\n containerName: process.env.AZURE_STORAGE_CONTAINER_NAME || '',\n })`,\n packageName: '@payloadcms/storage-azure',\n },\n gcsStorage: {\n adapterName: 'gcsStorage',\n configTemplate: () => `gcsStorage({\n collections: {\n media: true,\n },\n bucket: process.env.GCS_BUCKET || '',\n })`,\n packageName: '@payloadcms/storage-gcs',\n },\n localDisk: {\n adapterName: null,\n configTemplate: () => null,\n packageName: null,\n },\n r2Storage: {\n adapterName: 'r2Storage',\n configTemplate: () => `r2Storage({\n bucket: cloudflare.env.R2,\n collections: { media: true },\n })`,\n packageName: '@payloadcms/storage-r2',\n },\n s3Storage: {\n adapterName: 's3Storage',\n configTemplate: () => `s3Storage({\n collections: {\n media: true,\n },\n bucket: process.env.S3_BUCKET || '',\n config: {\n credentials: {\n accessKeyId: process.env.S3_ACCESS_KEY_ID || '',\n secretAccessKey: process.env.S3_SECRET_ACCESS_KEY || '',\n },\n region: process.env.S3_REGION || '',\n },\n })`,\n packageName: '@payloadcms/storage-s3',\n },\n vercelBlobStorage: {\n adapterName: 'vercelBlobStorage',\n configTemplate: () => `vercelBlobStorage({\n collections: {\n media: true,\n },\n token: process.env.BLOB_READ_WRITE_TOKEN || '',\n })`,\n packageName: '@payloadcms/storage-vercel-blob',\n },\n} as const\n\n/**\n * Helper to get database adapter package name\n */\nexport function getDbPackageName(adapter: DatabaseAdapter): string {\n return DB_ADAPTER_CONFIG[adapter].packageName\n}\n\n/**\n * Helper to get database adapter name\n */\nexport function getDbAdapterName(adapter: DatabaseAdapter): string {\n return DB_ADAPTER_CONFIG[adapter].adapterName\n}\n\n/**\n * Helper to get storage adapter package name\n */\nexport function getStoragePackageName(adapter: StorageAdapter): null | string {\n return STORAGE_ADAPTER_CONFIG[adapter].packageName\n}\n\n/**\n * Helper to get storage adapter name\n */\nexport function getStorageAdapterName(adapter: StorageAdapter): null | string {\n return STORAGE_ADAPTER_CONFIG[adapter].adapterName\n}\n"],"names":["DB_ADAPTER_CONFIG","adapterName","configTemplate","packageName","mongodb","envVar","postgres","sqlite","STORAGE_ADAPTER_CONFIG","azureStorage","gcsStorage","localDisk","r2Storage","s3Storage","vercelBlobStorage","getDbPackageName","adapter","getDbAdapterName","getStoragePackageName","getStorageAdapterName"],"mappings":"AAAA;;;CAGC,GAgBD;;CAEC,GACD,OAAO,MAAMA,oBAAoE;IAC/E,aAAa;QACXC,aAAa;QACbC,gBAAgB,IAAM,CAAC;;EAEzB,CAAC;QACCC,aAAa;IACf;IACAC,SAAS;QACPH,aAAa;QACbC,gBAAgB,CAACG,SAAmB,CAAC;mBACtB,EAAEA,OAAO;EAC1B,CAAC;QACCF,aAAa;IACf;IACAG,UAAU;QACRL,aAAa;QACbC,gBAAgB,CAACG,SAAmB,CAAC;;kCAEP,EAAEA,OAAO;;EAEzC,CAAC;QACCF,aAAa;IACf;IACAI,QAAQ;QACNN,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;EAIzB,CAAC;QACCC,aAAa;IACf;IACA,mBAAmB;QACjBF,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;EAIzB,CAAC;QACCC,aAAa;IACf;AACF,EAAU;AAEV;;CAEC,GACD,OAAO,MAAMK,yBAAuE;IAClFC,cAAc;QACZR,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;;IAMvB,CAAC;QACDC,aAAa;IACf;IACAO,YAAY;QACVT,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;IAKvB,CAAC;QACDC,aAAa;IACf;IACAQ,WAAW;QACTV,aAAa;QACbC,gBAAgB,IAAM;QACtBC,aAAa;IACf;IACAS,WAAW;QACTX,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;IAGvB,CAAC;QACDC,aAAa;IACf;IACAU,WAAW;QACTZ,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;;;;;;;;IAYvB,CAAC;QACDC,aAAa;IACf;IACAW,mBAAmB;QACjBb,aAAa;QACbC,gBAAgB,IAAM,CAAC;;;;;IAKvB,CAAC;QACDC,aAAa;IACf;AACF,EAAU;AAEV;;CAEC,GACD,OAAO,SAASY,iBAAiBC,OAAwB;IACvD,OAAOhB,iBAAiB,CAACgB,QAAQ,CAACb,WAAW;AAC/C;AAEA;;CAEC,GACD,OAAO,SAASc,iBAAiBD,OAAwB;IACvD,OAAOhB,iBAAiB,CAACgB,QAAQ,CAACf,WAAW;AAC/C;AAEA;;CAEC,GACD,OAAO,SAASiB,sBAAsBF,OAAuB;IAC3D,OAAOR,sBAAsB,CAACQ,QAAQ,CAACb,WAAW;AACpD;AAEA;;CAEC,GACD,OAAO,SAASgB,sBAAsBH,OAAuB;IAC3D,OAAOR,sBAAsB,CAACQ,QAAQ,CAACf,WAAW;AACpD"}
@@ -94,8 +94,8 @@ export type ModificationResult = {
94
94
  warnings?: string[];
95
95
  };
96
96
  export type DatabaseAdapter = (typeof ALL_DATABASE_ADAPTERS)[number];
97
- export declare const ALL_DATABASE_ADAPTERS: readonly ["mongodb", "postgres", "sqlite", "vercel-postgres", "d1-sqlite"];
98
- export declare const ALL_STORAGE_ADAPTERS: readonly ["azureStorage", "gcsStorage", "localDisk", "r2Storage", "s3Storage", "uploadthingStorage", "vercelBlobStorage"];
97
+ export declare const ALL_DATABASE_ADAPTERS: readonly ['mongodb', 'postgres', 'sqlite', 'vercel-postgres', 'd1-sqlite'];
98
+ export declare const ALL_STORAGE_ADAPTERS: readonly ['azureStorage', 'gcsStorage', 'localDisk', 'r2Storage', 's3Storage', 'vercelBlobStorage'];
99
99
  export type StorageAdapter = (typeof ALL_STORAGE_ADAPTERS)[number];
100
100
  export type TransformOptions = {
101
101
  databaseAdapter?: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/ast/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/ast/types.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,6 @@ export const ALL_STORAGE_ADAPTERS = [
11
11
  'localDisk',
12
12
  'r2Storage',
13
13
  's3Storage',
14
- 'uploadthingStorage',
15
14
  'vercelBlobStorage'
16
15
  ];
17
16
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/ast/types.ts"],"sourcesContent":["import type {\n ArrayLiteralExpression,\n CallExpression,\n ImportDeclaration,\n PropertyAssignment,\n SourceFile,\n} from 'ts-morph'\n\n// Result types for import utility functions\nexport type ImportRemovalResult = {\n removedIndex?: number\n sourceFile: SourceFile\n}\n\nexport type NamedImportRemovalResult = {\n fullyRemoved: boolean\n index?: number\n sourceFile: SourceFile\n}\n\nexport type ImportCleanupResult = {\n kept: string[]\n removed: string[]\n sourceFile: SourceFile\n}\n\nexport type DetectionError = {\n debugInfo?: Record<string, unknown>\n technicalDetails: string\n userMessage: string\n}\n\nexport type PayloadConfigStructures = {\n buildConfigCall: CallExpression\n dbProperty?: PropertyAssignment\n importStatements: ImportDeclaration[]\n pluginsArray?: ArrayLiteralExpression\n}\n\n/**\n * Detection result with edge case tracking and import source information\n */\nexport type DetectionResult = {\n /** Edge case flags */\n edgeCases?: {\n /** Import uses an alias (e.g., import { buildConfig as bc }) */\n hasImportAlias: boolean\n /** Other Payload imports exist (e.g., CollectionConfig) */\n hasOtherPayloadImports: boolean\n /** Multiple buildConfig calls found in file */\n multipleBuildConfigCalls: boolean\n /** Needs manual intervention (can't be automatically handled) */\n needsManualIntervention: boolean\n }\n error?: DetectionError\n /** Import source tracking */\n importSources?: {\n /** Current database adapter import info */\n dbAdapter?: {\n hasOtherImports: boolean\n importDeclaration: ImportDeclaration\n packageName: string\n }\n /** Current storage adapter import info */\n storage?: Array<{\n hasOtherImports: boolean\n importDeclaration: ImportDeclaration\n packageName: string\n }>\n }\n /** Source file reference */\n sourceFile?: SourceFile\n /** Detected structures */\n structures?: PayloadConfigStructures\n success: boolean\n}\n\n/**\n * Tracks a single modification made to the AST\n */\nexport type Modification = {\n description: string\n location?: {\n column: number\n line: number\n }\n type:\n | 'function-renamed'\n | 'import-added'\n | 'import-modified'\n | 'import-removed'\n | 'property-added'\n | 'property-removed'\n}\n\n/**\n * Result of transformation operations\n */\nexport type TransformationResult = {\n error?: DetectionError\n modifications: Modification[]\n modified: boolean\n success: boolean\n warnings?: string[]\n}\n\n/**\n * Final result after writing to disk\n */\nexport type ModificationResult = {\n error?: DetectionError\n filePath: string\n formatted?: boolean\n modifications: Modification[]\n success: boolean\n warnings?: string[]\n}\nexport type DatabaseAdapter = (typeof ALL_DATABASE_ADAPTERS)[number]\n\nexport const ALL_DATABASE_ADAPTERS = [\n 'mongodb',\n 'postgres',\n 'sqlite',\n 'vercel-postgres',\n 'd1-sqlite',\n] as const\n\nexport const ALL_STORAGE_ADAPTERS = [\n 'azureStorage',\n 'gcsStorage',\n 'localDisk',\n 'r2Storage',\n 's3Storage',\n 'uploadthingStorage',\n 'vercelBlobStorage',\n] as const\n\nexport type StorageAdapter = (typeof ALL_STORAGE_ADAPTERS)[number]\n\nexport type TransformOptions = {\n databaseAdapter?: {\n envVarName?: string\n type: DatabaseAdapter\n }\n removeSharp?: boolean\n storageAdapter?: {\n type: StorageAdapter\n }\n}\n\nexport type WriteOptions = {\n formatWithPrettier?: boolean\n validateStructure?: boolean\n}\n\nexport type WriteResult = {\n error?: DetectionError\n success: boolean\n}\n\nexport type ConfigureOptions = {\n db?: {\n envVarName?: string\n type: DatabaseAdapter\n }\n removeSharp?: boolean\n storage?: StorageAdapter\n} & WriteOptions\n"],"names":["ALL_DATABASE_ADAPTERS","ALL_STORAGE_ADAPTERS"],"mappings":"AAuHA,OAAO,MAAMA,wBAAwB;IACnC;IACA;IACA;IACA;IACA;CACD,CAAS;AAEV,OAAO,MAAMC,uBAAuB;IAClC;IACA;IACA;IACA;IACA;IACA;IACA;CACD,CAAS"}
1
+ {"version":3,"sources":["../../../src/lib/ast/types.ts"],"sourcesContent":["import type {\n ArrayLiteralExpression,\n CallExpression,\n ImportDeclaration,\n PropertyAssignment,\n SourceFile,\n} from 'ts-morph'\n\n// Result types for import utility functions\nexport type ImportRemovalResult = {\n removedIndex?: number\n sourceFile: SourceFile\n}\n\nexport type NamedImportRemovalResult = {\n fullyRemoved: boolean\n index?: number\n sourceFile: SourceFile\n}\n\nexport type ImportCleanupResult = {\n kept: string[]\n removed: string[]\n sourceFile: SourceFile\n}\n\nexport type DetectionError = {\n debugInfo?: Record<string, unknown>\n technicalDetails: string\n userMessage: string\n}\n\nexport type PayloadConfigStructures = {\n buildConfigCall: CallExpression\n dbProperty?: PropertyAssignment\n importStatements: ImportDeclaration[]\n pluginsArray?: ArrayLiteralExpression\n}\n\n/**\n * Detection result with edge case tracking and import source information\n */\nexport type DetectionResult = {\n /** Edge case flags */\n edgeCases?: {\n /** Import uses an alias (e.g., import { buildConfig as bc }) */\n hasImportAlias: boolean\n /** Other Payload imports exist (e.g., CollectionConfig) */\n hasOtherPayloadImports: boolean\n /** Multiple buildConfig calls found in file */\n multipleBuildConfigCalls: boolean\n /** Needs manual intervention (can't be automatically handled) */\n needsManualIntervention: boolean\n }\n error?: DetectionError\n /** Import source tracking */\n importSources?: {\n /** Current database adapter import info */\n dbAdapter?: {\n hasOtherImports: boolean\n importDeclaration: ImportDeclaration\n packageName: string\n }\n /** Current storage adapter import info */\n storage?: Array<{\n hasOtherImports: boolean\n importDeclaration: ImportDeclaration\n packageName: string\n }>\n }\n /** Source file reference */\n sourceFile?: SourceFile\n /** Detected structures */\n structures?: PayloadConfigStructures\n success: boolean\n}\n\n/**\n * Tracks a single modification made to the AST\n */\nexport type Modification = {\n description: string\n location?: {\n column: number\n line: number\n }\n type:\n | 'function-renamed'\n | 'import-added'\n | 'import-modified'\n | 'import-removed'\n | 'property-added'\n | 'property-removed'\n}\n\n/**\n * Result of transformation operations\n */\nexport type TransformationResult = {\n error?: DetectionError\n modifications: Modification[]\n modified: boolean\n success: boolean\n warnings?: string[]\n}\n\n/**\n * Final result after writing to disk\n */\nexport type ModificationResult = {\n error?: DetectionError\n filePath: string\n formatted?: boolean\n modifications: Modification[]\n success: boolean\n warnings?: string[]\n}\nexport type DatabaseAdapter = (typeof ALL_DATABASE_ADAPTERS)[number]\n\nexport const ALL_DATABASE_ADAPTERS = [\n 'mongodb',\n 'postgres',\n 'sqlite',\n 'vercel-postgres',\n 'd1-sqlite',\n] as const\n\nexport const ALL_STORAGE_ADAPTERS = [\n 'azureStorage',\n 'gcsStorage',\n 'localDisk',\n 'r2Storage',\n 's3Storage',\n 'vercelBlobStorage',\n] as const\n\nexport type StorageAdapter = (typeof ALL_STORAGE_ADAPTERS)[number]\n\nexport type TransformOptions = {\n databaseAdapter?: {\n envVarName?: string\n type: DatabaseAdapter\n }\n removeSharp?: boolean\n storageAdapter?: {\n type: StorageAdapter\n }\n}\n\nexport type WriteOptions = {\n formatWithPrettier?: boolean\n validateStructure?: boolean\n}\n\nexport type WriteResult = {\n error?: DetectionError\n success: boolean\n}\n\nexport type ConfigureOptions = {\n db?: {\n envVarName?: string\n type: DatabaseAdapter\n }\n removeSharp?: boolean\n storage?: StorageAdapter\n} & WriteOptions\n"],"names":["ALL_DATABASE_ADAPTERS","ALL_STORAGE_ADAPTERS"],"mappings":"AAuHA,OAAO,MAAMA,wBAAwB;IACnC;IACA;IACA;IACA;IACA;CACD,CAAS;AAEV,OAAO,MAAMC,uBAAuB;IAClC;IACA;IACA;IACA;IACA;IACA;CACD,CAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"configure-plugin-project.d.ts","sourceRoot":"","sources":["../../src/lib/configure-plugin-project.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,kCAGpC;IACD,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB,SAmCA,CAAA"}
1
+ {"version":3,"file":"configure-plugin-project.d.ts","sourceRoot":"","sources":["../../src/lib/configure-plugin-project.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,sBAAsB,qCAGhC;IACD,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB,SAmCA,CAAA"}
@@ -0,0 +1,20 @@
1
+ import type { PackageManager } from '../types.js';
2
+ /**
3
+ * pnpm v11 fails installs that have unapproved dependency build scripts, reading approvals only from
4
+ * pnpm-workspace.yaml (the `pnpm` field in package.json is ignored). create-next-app now scaffolds a
5
+ * placeholder `allowBuilds` block (sharp/unrs-resolver left unset) plus an `ignoredBuiltDependencies`
6
+ * denylist, so we must merge rather than skip: force Payload's build scripts to `true` and remove them
7
+ * from the denylist. No-op for non-pnpm package managers.
8
+ */
9
+ export declare function ensurePnpmBuildApprovals(args: {
10
+ packageManager: PackageManager;
11
+ projectDir: string;
12
+ }): Promise<void>;
13
+ /**
14
+ * Merges Payload's required build approvals into a pnpm-workspace.yaml string. Pure and idempotent:
15
+ * sets each required package to `true` under `allowBuilds` (adding the block if missing) and strips
16
+ * those packages from any `ignoredBuiltDependencies` denylist. Top-level keys are detected by a
17
+ * zero-indent `key:`, with their two-space children grouped beneath them.
18
+ */
19
+ export declare function upsertBuildApprovals(content: string): string;
20
+ //# sourceMappingURL=configure-pnpm-builds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-pnpm-builds.d.ts","sourceRoot":"","sources":["../../src/lib/configure-pnpm-builds.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAWjD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhB;AAOD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkC5D"}
@@ -0,0 +1,100 @@
1
+ import fse from 'fs-extra';
2
+ import path from 'path';
3
+ /*
4
+ * Build scripts pnpm v11 must be allowed to run for the projects create-payload-app scaffolds;
5
+ * otherwise the install fails with ERR_PNPM_IGNORED_BUILDS. esbuild/sharp/unrs-resolver cover the
6
+ * default templates; workerd is required by with-cloudflare-d1.
7
+ * TODO(follow-up): the CI drift guard only verifies the blank template — extend it across every
8
+ * getValidTemplates() entry so this single list can't drift per-template.
9
+ */ const ALLOWED_BUILDS = [
10
+ 'esbuild',
11
+ 'sharp',
12
+ 'unrs-resolver',
13
+ 'workerd'
14
+ ];
15
+ /**
16
+ * pnpm v11 fails installs that have unapproved dependency build scripts, reading approvals only from
17
+ * pnpm-workspace.yaml (the `pnpm` field in package.json is ignored). create-next-app now scaffolds a
18
+ * placeholder `allowBuilds` block (sharp/unrs-resolver left unset) plus an `ignoredBuiltDependencies`
19
+ * denylist, so we must merge rather than skip: force Payload's build scripts to `true` and remove them
20
+ * from the denylist. No-op for non-pnpm package managers.
21
+ */ export async function ensurePnpmBuildApprovals(args) {
22
+ const { packageManager, projectDir } = args;
23
+ if (packageManager !== 'pnpm') {
24
+ return;
25
+ }
26
+ const workspacePath = path.join(projectDir, 'pnpm-workspace.yaml');
27
+ const existing = await fse.pathExists(workspacePath) ? await fse.readFile(workspacePath, 'utf-8') : '';
28
+ await fse.writeFile(workspacePath, upsertBuildApprovals(existing));
29
+ }
30
+ /**
31
+ * Merges Payload's required build approvals into a pnpm-workspace.yaml string. Pure and idempotent:
32
+ * sets each required package to `true` under `allowBuilds` (adding the block if missing) and strips
33
+ * those packages from any `ignoredBuiltDependencies` denylist. Top-level keys are detected by a
34
+ * zero-indent `key:`, with their two-space children grouped beneath them.
35
+ */ export function upsertBuildApprovals(content) {
36
+ const blocks = toTopLevelBlocks(content);
37
+ const ignored = blocks.find((block)=>block.key === 'ignoredBuiltDependencies');
38
+ if (ignored) {
39
+ ignored.lines = ignored.lines.filter((line, index)=>{
40
+ if (index === 0) {
41
+ return true;
42
+ }
43
+ const name = /^\s*-\s*'?([^'\s]+)'?\s*$/.exec(line)?.[1];
44
+ return !(name && ALLOWED_BUILDS.includes(name));
45
+ });
46
+ }
47
+ const allow = blocks.find((block)=>block.key === 'allowBuilds');
48
+ if (allow) {
49
+ for (const name of ALLOWED_BUILDS){
50
+ const pattern = new RegExp(`^\\s+'?${escapeRegExp(name)}'?:`);
51
+ const index = allow.lines.findIndex((line)=>pattern.test(line));
52
+ if (index >= 0) {
53
+ allow.lines[index] = ` ${name}: true`;
54
+ } else {
55
+ allow.lines.push(` ${name}: true`);
56
+ }
57
+ }
58
+ } else {
59
+ blocks.push({
60
+ key: 'allowBuilds',
61
+ lines: [
62
+ 'allowBuilds:',
63
+ ...ALLOWED_BUILDS.map((name)=>` ${name}: true`)
64
+ ]
65
+ });
66
+ }
67
+ const output = blocks.flatMap((block)=>block.lines).join('\n');
68
+ return output.endsWith('\n') ? output : `${output}\n`;
69
+ }
70
+ function toTopLevelBlocks(content) {
71
+ const lines = content.length ? content.replace(/\n$/, '').split('\n') : [];
72
+ const blocks = [];
73
+ for (const line of lines){
74
+ const key = /^[^\s#]/.test(line) ? /^([^:]+):/.exec(line)?.[1] : undefined;
75
+ const current = blocks[blocks.length - 1];
76
+ if (key !== undefined) {
77
+ blocks.push({
78
+ key,
79
+ lines: [
80
+ line
81
+ ]
82
+ });
83
+ } else if (current) {
84
+ current.lines.push(line);
85
+ } else {
86
+ blocks.push({
87
+ key: null,
88
+ lines: [
89
+ line
90
+ ]
91
+ });
92
+ }
93
+ }
94
+ return blocks;
95
+ }
96
+ function escapeRegExp(value) {
97
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
98
+ }
99
+
100
+ //# sourceMappingURL=configure-pnpm-builds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/configure-pnpm-builds.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport path from 'path'\n\nimport type { PackageManager } from '../types.js'\n\n/*\n * Build scripts pnpm v11 must be allowed to run for the projects create-payload-app scaffolds;\n * otherwise the install fails with ERR_PNPM_IGNORED_BUILDS. esbuild/sharp/unrs-resolver cover the\n * default templates; workerd is required by with-cloudflare-d1.\n * TODO(follow-up): the CI drift guard only verifies the blank template — extend it across every\n * getValidTemplates() entry so this single list can't drift per-template.\n */\nconst ALLOWED_BUILDS = ['esbuild', 'sharp', 'unrs-resolver', 'workerd']\n\n/**\n * pnpm v11 fails installs that have unapproved dependency build scripts, reading approvals only from\n * pnpm-workspace.yaml (the `pnpm` field in package.json is ignored). create-next-app now scaffolds a\n * placeholder `allowBuilds` block (sharp/unrs-resolver left unset) plus an `ignoredBuiltDependencies`\n * denylist, so we must merge rather than skip: force Payload's build scripts to `true` and remove them\n * from the denylist. No-op for non-pnpm package managers.\n */\nexport async function ensurePnpmBuildApprovals(args: {\n packageManager: PackageManager\n projectDir: string\n}): Promise<void> {\n const { packageManager, projectDir } = args\n if (packageManager !== 'pnpm') {\n return\n }\n\n const workspacePath = path.join(projectDir, 'pnpm-workspace.yaml')\n const existing = (await fse.pathExists(workspacePath))\n ? await fse.readFile(workspacePath, 'utf-8')\n : ''\n\n await fse.writeFile(workspacePath, upsertBuildApprovals(existing))\n}\n\ntype WorkspaceBlock = {\n key: null | string\n lines: string[]\n}\n\n/**\n * Merges Payload's required build approvals into a pnpm-workspace.yaml string. Pure and idempotent:\n * sets each required package to `true` under `allowBuilds` (adding the block if missing) and strips\n * those packages from any `ignoredBuiltDependencies` denylist. Top-level keys are detected by a\n * zero-indent `key:`, with their two-space children grouped beneath them.\n */\nexport function upsertBuildApprovals(content: string): string {\n const blocks = toTopLevelBlocks(content)\n\n const ignored = blocks.find((block) => block.key === 'ignoredBuiltDependencies')\n if (ignored) {\n ignored.lines = ignored.lines.filter((line, index) => {\n if (index === 0) {\n return true\n }\n const name = /^\\s*-\\s*'?([^'\\s]+)'?\\s*$/.exec(line)?.[1]\n return !(name && ALLOWED_BUILDS.includes(name))\n })\n }\n\n const allow = blocks.find((block) => block.key === 'allowBuilds')\n if (allow) {\n for (const name of ALLOWED_BUILDS) {\n const pattern = new RegExp(`^\\\\s+'?${escapeRegExp(name)}'?:`)\n const index = allow.lines.findIndex((line) => pattern.test(line))\n if (index >= 0) {\n allow.lines[index] = ` ${name}: true`\n } else {\n allow.lines.push(` ${name}: true`)\n }\n }\n } else {\n blocks.push({\n key: 'allowBuilds',\n lines: ['allowBuilds:', ...ALLOWED_BUILDS.map((name) => ` ${name}: true`)],\n })\n }\n\n const output = blocks.flatMap((block) => block.lines).join('\\n')\n return output.endsWith('\\n') ? output : `${output}\\n`\n}\n\nfunction toTopLevelBlocks(content: string): WorkspaceBlock[] {\n const lines = content.length ? content.replace(/\\n$/, '').split('\\n') : []\n const blocks: WorkspaceBlock[] = []\n\n for (const line of lines) {\n const key = /^[^\\s#]/.test(line) ? /^([^:]+):/.exec(line)?.[1] : undefined\n const current = blocks[blocks.length - 1]\n if (key !== undefined) {\n blocks.push({ key, lines: [line] })\n } else if (current) {\n current.lines.push(line)\n } else {\n blocks.push({ key: null, lines: [line] })\n }\n }\n\n return blocks\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n"],"names":["fse","path","ALLOWED_BUILDS","ensurePnpmBuildApprovals","args","packageManager","projectDir","workspacePath","join","existing","pathExists","readFile","writeFile","upsertBuildApprovals","content","blocks","toTopLevelBlocks","ignored","find","block","key","lines","filter","line","index","name","exec","includes","allow","pattern","RegExp","escapeRegExp","findIndex","test","push","map","output","flatMap","endsWith","length","replace","split","undefined","current","value"],"mappings":"AAAA,OAAOA,SAAS,WAAU;AAC1B,OAAOC,UAAU,OAAM;AAIvB;;;;;;CAMC,GACD,MAAMC,iBAAiB;IAAC;IAAW;IAAS;IAAiB;CAAU;AAEvE;;;;;;CAMC,GACD,OAAO,eAAeC,yBAAyBC,IAG9C;IACC,MAAM,EAAEC,cAAc,EAAEC,UAAU,EAAE,GAAGF;IACvC,IAAIC,mBAAmB,QAAQ;QAC7B;IACF;IAEA,MAAME,gBAAgBN,KAAKO,IAAI,CAACF,YAAY;IAC5C,MAAMG,WAAW,AAAC,MAAMT,IAAIU,UAAU,CAACH,iBACnC,MAAMP,IAAIW,QAAQ,CAACJ,eAAe,WAClC;IAEJ,MAAMP,IAAIY,SAAS,CAACL,eAAeM,qBAAqBJ;AAC1D;AAOA;;;;;CAKC,GACD,OAAO,SAASI,qBAAqBC,OAAe;IAClD,MAAMC,SAASC,iBAAiBF;IAEhC,MAAMG,UAAUF,OAAOG,IAAI,CAAC,CAACC,QAAUA,MAAMC,GAAG,KAAK;IACrD,IAAIH,SAAS;QACXA,QAAQI,KAAK,GAAGJ,QAAQI,KAAK,CAACC,MAAM,CAAC,CAACC,MAAMC;YAC1C,IAAIA,UAAU,GAAG;gBACf,OAAO;YACT;YACA,MAAMC,OAAO,4BAA4BC,IAAI,CAACH,OAAO,CAAC,EAAE;YACxD,OAAO,CAAEE,CAAAA,QAAQvB,eAAeyB,QAAQ,CAACF,KAAI;QAC/C;IACF;IAEA,MAAMG,QAAQb,OAAOG,IAAI,CAAC,CAACC,QAAUA,MAAMC,GAAG,KAAK;IACnD,IAAIQ,OAAO;QACT,KAAK,MAAMH,QAAQvB,eAAgB;YACjC,MAAM2B,UAAU,IAAIC,OAAO,CAAC,OAAO,EAAEC,aAAaN,MAAM,GAAG,CAAC;YAC5D,MAAMD,QAAQI,MAAMP,KAAK,CAACW,SAAS,CAAC,CAACT,OAASM,QAAQI,IAAI,CAACV;YAC3D,IAAIC,SAAS,GAAG;gBACdI,MAAMP,KAAK,CAACG,MAAM,GAAG,CAAC,EAAE,EAAEC,KAAK,MAAM,CAAC;YACxC,OAAO;gBACLG,MAAMP,KAAK,CAACa,IAAI,CAAC,CAAC,EAAE,EAAET,KAAK,MAAM,CAAC;YACpC;QACF;IACF,OAAO;QACLV,OAAOmB,IAAI,CAAC;YACVd,KAAK;YACLC,OAAO;gBAAC;mBAAmBnB,eAAeiC,GAAG,CAAC,CAACV,OAAS,CAAC,EAAE,EAAEA,KAAK,MAAM,CAAC;aAAE;QAC7E;IACF;IAEA,MAAMW,SAASrB,OAAOsB,OAAO,CAAC,CAAClB,QAAUA,MAAME,KAAK,EAAEb,IAAI,CAAC;IAC3D,OAAO4B,OAAOE,QAAQ,CAAC,QAAQF,SAAS,GAAGA,OAAO,EAAE,CAAC;AACvD;AAEA,SAASpB,iBAAiBF,OAAe;IACvC,MAAMO,QAAQP,QAAQyB,MAAM,GAAGzB,QAAQ0B,OAAO,CAAC,OAAO,IAAIC,KAAK,CAAC,QAAQ,EAAE;IAC1E,MAAM1B,SAA2B,EAAE;IAEnC,KAAK,MAAMQ,QAAQF,MAAO;QACxB,MAAMD,MAAM,UAAUa,IAAI,CAACV,QAAQ,YAAYG,IAAI,CAACH,OAAO,CAAC,EAAE,GAAGmB;QACjE,MAAMC,UAAU5B,MAAM,CAACA,OAAOwB,MAAM,GAAG,EAAE;QACzC,IAAInB,QAAQsB,WAAW;YACrB3B,OAAOmB,IAAI,CAAC;gBAAEd;gBAAKC,OAAO;oBAACE;iBAAK;YAAC;QACnC,OAAO,IAAIoB,SAAS;YAClBA,QAAQtB,KAAK,CAACa,IAAI,CAACX;QACrB,OAAO;YACLR,OAAOmB,IAAI,CAAC;gBAAEd,KAAK;gBAAMC,OAAO;oBAACE;iBAAK;YAAC;QACzC;IACF;IAEA,OAAOR;AACT;AAEA,SAASgB,aAAaa,KAAa;IACjC,OAAOA,MAAMJ,OAAO,CAAC,uBAAuB;AAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;AAqDpB,KAAK,iBAAiB,GAClB;IACE,OAAO,EAAE,cAAc,CAAA;CACxB,GACD;IACE,QAAQ,EAAE,eAAe,CAAA;CAC1B,CAAA;AAEL,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,iBAAiB,GACpB,OAAO,CAAC,IAAI,CAAC,CAqIf;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,IAAI,CAiBP"}
1
+ {"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;AA4DpB,KAAK,iBAAiB,GAClB;IACE,OAAO,EAAE,cAAc,CAAA;CACxB,GACD;IACE,QAAQ,EAAE,eAAe,CAAA;CAC1B,CAAA;AAEL,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,iBAAiB,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Hf;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,IAAI,CAiBP"}
@@ -6,8 +6,10 @@ import { fileURLToPath } from 'node:url';
6
6
  import path from 'path';
7
7
  import { tryInitRepoAndCommit } from '../utils/git.js';
8
8
  import { debug, error, info, warning } from '../utils/log.js';
9
+ import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
9
10
  import { configurePayloadConfig } from './configure-payload-config.js';
10
11
  import { configurePluginProject } from './configure-plugin-project.js';
12
+ import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
11
13
  import { downloadExample } from './download-example.js';
12
14
  import { downloadSkill } from './download-skill.js';
13
15
  import { downloadTemplate } from './download-template.js';
@@ -35,6 +37,10 @@ async function installDeps(args) {
35
37
  } else if (packageManager === 'bun') {
36
38
  installCmd = 'bun install';
37
39
  }
40
+ await ensurePnpmBuildApprovals({
41
+ packageManager,
42
+ projectDir
43
+ });
38
44
  try {
39
45
  await execa.command(installCmd, {
40
46
  cwd: path.resolve(projectDir)
@@ -82,23 +88,14 @@ export async function createProject(args) {
82
88
  projectDir
83
89
  });
84
90
  }
91
+ const versionOrTag = cliArgs['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG;
85
92
  const spinner = p.spinner();
86
- spinner.start('Checking latest Payload version...');
87
- // Allows overriding the installed Payload version instead of installing the latest
88
- const versionFromCli = cliArgs['--version'];
89
- let payloadVersion;
90
- if (versionFromCli) {
91
- await verifyVersionForPackage({
92
- version: versionFromCli
93
- });
94
- payloadVersion = versionFromCli;
95
- spinner.stop(`Using provided version of Payload ${payloadVersion}`);
96
- } else {
97
- payloadVersion = await getLatestPackageVersion({
98
- packageName: 'payload'
99
- });
100
- spinner.stop(`Found latest version of Payload ${payloadVersion}`);
101
- }
93
+ spinner.start(`Resolving Payload version (${versionOrTag})...`);
94
+ const payloadVersion = await resolvePackageVersion({
95
+ packageName: 'payload',
96
+ versionOrTag
97
+ });
98
+ spinner.stop(`Using Payload version ${payloadVersion}`);
102
99
  await updatePackageJSON({
103
100
  latestVersion: payloadVersion,
104
101
  projectDir,
@@ -211,39 +208,5 @@ export async function createProject(args) {
211
208
  }, {});
212
209
  packageJson.dependencies = updatedDependencies;
213
210
  }
214
- /**
215
- * Fetches the latest version of a package from the NPM registry.
216
- *
217
- * Used in determining the latest version of Payload to use in the generated templates.
218
- */ async function getLatestPackageVersion({ packageName = 'payload' }) {
219
- try {
220
- const response = await fetch(`https://registry.npmjs.org/-/package/${packageName}/dist-tags`);
221
- const data = await response.json();
222
- // Monster chaining for type safety just checking for data.latest
223
- const latestVersion = data && typeof data === 'object' && 'latest' in data && data.latest && typeof data.latest === 'string' ? data.latest : null;
224
- if (!latestVersion) {
225
- throw new Error(`No latest version found for package: ${packageName}`);
226
- }
227
- return latestVersion;
228
- } catch (error) {
229
- console.error('Error fetching Payload version:', error);
230
- throw error;
231
- }
232
- }
233
- /**
234
- * Verifies that the specified version of a package exists on the NPM registry.
235
- *
236
- * Throws an error if the version does not exist.
237
- */ async function verifyVersionForPackage({ packageName = 'payload', version }) {
238
- try {
239
- const response = await fetch(`https://registry.npmjs.org/${packageName}/${version}`);
240
- if (response.status !== 200) {
241
- throw new Error(`No ${version} version found for package: ${packageName}`);
242
- }
243
- } catch (error) {
244
- console.error('Error verifying Payload version:', error);
245
- throw error;
246
- }
247
- }
248
211
 
249
212
  //# sourceMappingURL=create-project.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/create-project.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type {\n AgentType,\n CliArgs,\n DbDetails,\n PackageManager,\n ProjectExample,\n ProjectTemplate,\n} from '../types.js'\n\nimport { tryInitRepoAndCommit } from '../utils/git.js'\nimport { debug, error, info, warning } from '../utils/log.js'\nimport { configurePayloadConfig } from './configure-payload-config.js'\nimport { configurePluginProject } from './configure-plugin-project.js'\nimport { downloadExample } from './download-example.js'\nimport { downloadSkill } from './download-skill.js'\nimport { downloadTemplate } from './download-template.js'\nimport { generateSecret } from './generate-secret.js'\nimport { manageEnvFiles } from './manage-env-files.js'\nimport { getAgentChoice } from './select-agent.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nasync function createOrFindProjectDir(projectDir: string): Promise<void> {\n const pathExists = await fse.pathExists(projectDir)\n if (!pathExists) {\n await fse.mkdir(projectDir)\n }\n}\n\nasync function installDeps(args: {\n cliArgs: CliArgs\n packageManager: PackageManager\n projectDir: string\n}): Promise<boolean> {\n const { cliArgs, packageManager, projectDir } = args\n if (cliArgs['--no-deps']) {\n return true\n }\n let installCmd = 'npm install --legacy-peer-deps'\n\n if (packageManager === 'yarn') {\n installCmd = 'yarn'\n } else if (packageManager === 'pnpm') {\n installCmd = 'pnpm install'\n } else if (packageManager === 'bun') {\n installCmd = 'bun install'\n }\n\n try {\n await execa.command(installCmd, {\n cwd: path.resolve(projectDir),\n })\n return true\n } catch (err: unknown) {\n error(`Error installing dependencies${err instanceof Error ? `: ${err.message}` : ''}.`)\n return false\n }\n}\n\ntype TemplateOrExample =\n | {\n example: ProjectExample\n }\n | {\n template: ProjectTemplate\n }\n\nexport async function createProject(\n args: {\n agentType?: AgentType\n cliArgs: CliArgs\n dbDetails?: DbDetails\n packageManager: PackageManager\n projectDir: string\n projectName: string\n } & TemplateOrExample,\n): Promise<void> {\n const { agentType, cliArgs, dbDetails, packageManager, projectDir, projectName } = args\n\n if (cliArgs['--dry-run']) {\n debug(`Dry run: Creating project in ${chalk.green(projectDir)}`)\n return\n }\n\n await createOrFindProjectDir(projectDir)\n\n if (cliArgs['--local-example']) {\n // Copy example from local path. For development purposes.\n const localExample = path.resolve(dirname, '../../../../examples/', cliArgs['--local-example'])\n await fse.copy(localExample, projectDir)\n }\n\n if (cliArgs['--local-template']) {\n // Copy template from local path. For development purposes.\n const localTemplate = path.resolve(\n dirname,\n '../../../../templates/',\n cliArgs['--local-template'],\n )\n await fse.copy(localTemplate, projectDir)\n } else if ('template' in args && 'url' in args.template) {\n const { template } = args\n if (cliArgs['--branch']) {\n template.url = `${template.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadTemplate({\n debug: cliArgs['--debug'],\n projectDir,\n template,\n })\n } else if ('example' in args && 'url' in args.example) {\n const { example } = args\n if (cliArgs['--branch']) {\n example.url = `${example.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadExample({\n debug: cliArgs['--debug'],\n example,\n projectDir,\n })\n }\n\n const spinner = p.spinner()\n spinner.start('Checking latest Payload version...')\n\n // Allows overriding the installed Payload version instead of installing the latest\n const versionFromCli = cliArgs['--version']\n\n let payloadVersion: string\n\n if (versionFromCli) {\n await verifyVersionForPackage({ version: versionFromCli })\n\n payloadVersion = versionFromCli\n\n spinner.stop(`Using provided version of Payload ${payloadVersion}`)\n } else {\n payloadVersion = await getLatestPackageVersion({ packageName: 'payload' })\n\n spinner.stop(`Found latest version of Payload ${payloadVersion}`)\n }\n\n await updatePackageJSON({ latestVersion: payloadVersion, projectDir, projectName })\n\n if ('template' in args) {\n if (args.template.type === 'plugin') {\n spinner.message('Configuring Plugin...')\n configurePluginProject({ projectDirPath: projectDir, projectName })\n } else {\n spinner.message('Configuring Payload...')\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: { projectDir },\n })\n }\n }\n\n await manageEnvFiles({\n cliArgs,\n databaseType: dbDetails?.type,\n databaseUri: dbDetails?.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n template: 'template' in args ? args.template : undefined,\n })\n\n if (agentType) {\n spinner.message('Installing agent skill...')\n try {\n await downloadSkill({\n agentType,\n branch: cliArgs['--branch'] || undefined,\n debug: cliArgs['--debug'],\n projectDir,\n })\n\n const { configFile, skillsDir } = getAgentChoice(agentType)\n const skillPath = `${skillsDir}/payload`\n const configContent =\n configFile === 'CLAUDE.md'\n ? `# Claude Code\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n : `# Agents\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n await fse.writeFile(path.resolve(projectDir, configFile), configContent)\n } catch (err) {\n if (cliArgs['--debug'] && err instanceof Error) {\n debug(`Failed to download skill: ${err.message}`)\n }\n warning('Could not download agent skill. You can install it manually later.')\n }\n }\n\n if (!cliArgs['--no-deps']) {\n info(`Using ${packageManager}.\\n`)\n spinner.message('Installing dependencies...')\n const result = await installDeps({ cliArgs, packageManager, projectDir })\n if (result) {\n spinner.stop('Successfully installed Payload and dependencies')\n } else {\n spinner.stop('Error installing dependencies', 1)\n }\n } else {\n spinner.stop('Dependency installation skipped')\n }\n\n if (!cliArgs['--no-git']) {\n tryInitRepoAndCommit({ cwd: projectDir })\n }\n}\n\n/**\n * Reads the package.json file into an object and then does the following:\n * - Sets the `name` property to the provided `projectName`.\n * - Bumps the payload packages from workspace:* to the latest version.\n * - Writes the updated object back to the package.json file.\n */\nexport async function updatePackageJSON(args: {\n /**\n * The latest version of Payload to use in the package.json.\n */\n latestVersion: string\n projectDir: string\n /**\n * The name of the project to set in package.json.\n */\n projectName: string\n}): Promise<void> {\n const { latestVersion, projectDir, projectName } = args\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n try {\n const packageObj = await fse.readJson(packageJsonPath)\n packageObj.name = projectName\n\n updatePackageJSONDependencies({\n latestVersion,\n packageJson: packageObj,\n })\n\n await fse.writeJson(packageJsonPath, packageObj, { spaces: 2 })\n } catch (err: unknown) {\n warning(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`)\n }\n}\n\n/**\n * Recursively updates a JSON object to replace all instances of `workspace:` with the latest version pinned.\n *\n * Does not return and instead modifies the `packageJson` object in place.\n */\nexport function updatePackageJSONDependencies(args: {\n latestVersion: string\n packageJson: Record<string, unknown>\n}): void {\n const { latestVersion, packageJson } = args\n\n const updatedDependencies = Object.entries(packageJson.dependencies || {}).reduce(\n (acc, [key, value]) => {\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n acc[key] = `${latestVersion}`\n } else if (key === 'payload' || key.startsWith('@payloadcms')) {\n acc[key] = `${latestVersion}`\n } else {\n acc[key] = value\n }\n return acc\n },\n {} as Record<string, string>,\n )\n packageJson.dependencies = updatedDependencies\n}\n\n/**\n * Fetches the latest version of a package from the NPM registry.\n *\n * Used in determining the latest version of Payload to use in the generated templates.\n */\nasync function getLatestPackageVersion({\n packageName = 'payload',\n}: {\n /**\n * Package name to fetch the latest version for based on the NPM registry URL\n *\n * Eg. for `'payload'`, it will fetch the version from `https://registry.npmjs.org/payload`\n *\n * @default 'payload'\n */\n packageName?: string\n}): Promise<string> {\n try {\n const response = await fetch(`https://registry.npmjs.org/-/package/${packageName}/dist-tags`)\n const data = await response.json()\n\n // Monster chaining for type safety just checking for data.latest\n const latestVersion =\n data &&\n typeof data === 'object' &&\n 'latest' in data &&\n data.latest &&\n typeof data.latest === 'string'\n ? data.latest\n : null\n\n if (!latestVersion) {\n throw new Error(`No latest version found for package: ${packageName}`)\n }\n\n return latestVersion\n } catch (error) {\n console.error('Error fetching Payload version:', error)\n throw error\n }\n}\n\n/**\n * Verifies that the specified version of a package exists on the NPM registry.\n *\n * Throws an error if the version does not exist.\n */\nasync function verifyVersionForPackage({\n packageName = 'payload',\n version,\n}: {\n /**\n * Package name to fetch the latest version for based on the NPM registry URL\n *\n * Eg. for `'payload'`, it will fetch the version from `https://registry.npmjs.org/payload`\n *\n * @default 'payload'\n */\n packageName?: string\n version: string\n}): Promise<void> {\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}/${version}`)\n\n if (response.status !== 200) {\n throw new Error(`No ${version} version found for package: ${packageName}`)\n }\n } catch (error) {\n console.error('Error verifying Payload version:', error)\n throw error\n }\n}\n"],"names":["p","chalk","execa","fse","fileURLToPath","path","tryInitRepoAndCommit","debug","error","info","warning","configurePayloadConfig","configurePluginProject","downloadExample","downloadSkill","downloadTemplate","generateSecret","manageEnvFiles","getAgentChoice","filename","url","dirname","createOrFindProjectDir","projectDir","pathExists","mkdir","installDeps","args","cliArgs","packageManager","installCmd","command","cwd","resolve","err","Error","message","createProject","agentType","dbDetails","projectName","green","localExample","copy","localTemplate","template","split","example","spinner","start","versionFromCli","payloadVersion","verifyVersionForPackage","version","stop","getLatestPackageVersion","packageName","updatePackageJSON","latestVersion","type","projectDirPath","dbType","projectDirOrConfigPath","databaseType","databaseUri","dbUri","payloadSecret","undefined","branch","configFile","skillsDir","skillPath","configContent","writeFile","result","packageJsonPath","packageObj","readJson","name","updatePackageJSONDependencies","packageJson","writeJson","spaces","updatedDependencies","Object","entries","dependencies","reduce","acc","key","value","startsWith","response","fetch","data","json","latest","console","status"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/create-project.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type {\n AgentType,\n CliArgs,\n DbDetails,\n PackageManager,\n ProjectExample,\n ProjectTemplate,\n} from '../types.js'\n\nimport { tryInitRepoAndCommit } from '../utils/git.js'\nimport { debug, error, info, warning } from '../utils/log.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { configurePayloadConfig } from './configure-payload-config.js'\nimport { configurePluginProject } from './configure-plugin-project.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { downloadExample } from './download-example.js'\nimport { downloadSkill } from './download-skill.js'\nimport { downloadTemplate } from './download-template.js'\nimport { generateSecret } from './generate-secret.js'\nimport { manageEnvFiles } from './manage-env-files.js'\nimport { getAgentChoice } from './select-agent.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nasync function createOrFindProjectDir(projectDir: string): Promise<void> {\n const pathExists = await fse.pathExists(projectDir)\n if (!pathExists) {\n await fse.mkdir(projectDir)\n }\n}\n\nasync function installDeps(args: {\n cliArgs: CliArgs\n packageManager: PackageManager\n projectDir: string\n}): Promise<boolean> {\n const { cliArgs, packageManager, projectDir } = args\n if (cliArgs['--no-deps']) {\n return true\n }\n let installCmd = 'npm install --legacy-peer-deps'\n\n if (packageManager === 'yarn') {\n installCmd = 'yarn'\n } else if (packageManager === 'pnpm') {\n installCmd = 'pnpm install'\n } else if (packageManager === 'bun') {\n installCmd = 'bun install'\n }\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n try {\n await execa.command(installCmd, {\n cwd: path.resolve(projectDir),\n })\n return true\n } catch (err: unknown) {\n error(`Error installing dependencies${err instanceof Error ? `: ${err.message}` : ''}.`)\n return false\n }\n}\n\ntype TemplateOrExample =\n | {\n example: ProjectExample\n }\n | {\n template: ProjectTemplate\n }\n\nexport async function createProject(\n args: {\n agentType?: AgentType\n cliArgs: CliArgs\n dbDetails?: DbDetails\n packageManager: PackageManager\n projectDir: string\n projectName: string\n } & TemplateOrExample,\n): Promise<void> {\n const { agentType, cliArgs, dbDetails, packageManager, projectDir, projectName } = args\n\n if (cliArgs['--dry-run']) {\n debug(`Dry run: Creating project in ${chalk.green(projectDir)}`)\n return\n }\n\n await createOrFindProjectDir(projectDir)\n\n if (cliArgs['--local-example']) {\n // Copy example from local path. For development purposes.\n const localExample = path.resolve(dirname, '../../../../examples/', cliArgs['--local-example'])\n await fse.copy(localExample, projectDir)\n }\n\n if (cliArgs['--local-template']) {\n // Copy template from local path. For development purposes.\n const localTemplate = path.resolve(\n dirname,\n '../../../../templates/',\n cliArgs['--local-template'],\n )\n await fse.copy(localTemplate, projectDir)\n } else if ('template' in args && 'url' in args.template) {\n const { template } = args\n if (cliArgs['--branch']) {\n template.url = `${template.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadTemplate({\n debug: cliArgs['--debug'],\n projectDir,\n template,\n })\n } else if ('example' in args && 'url' in args.example) {\n const { example } = args\n if (cliArgs['--branch']) {\n example.url = `${example.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadExample({\n debug: cliArgs['--debug'],\n example,\n projectDir,\n })\n }\n\n const versionOrTag = cliArgs['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG\n\n const spinner = p.spinner()\n spinner.start(`Resolving Payload version (${versionOrTag})...`)\n\n const payloadVersion = await resolvePackageVersion({\n packageName: 'payload',\n versionOrTag,\n })\n\n spinner.stop(`Using Payload version ${payloadVersion}`)\n\n await updatePackageJSON({ latestVersion: payloadVersion, projectDir, projectName })\n\n if ('template' in args) {\n if (args.template.type === 'plugin') {\n spinner.message('Configuring Plugin...')\n configurePluginProject({ projectDirPath: projectDir, projectName })\n } else {\n spinner.message('Configuring Payload...')\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: { projectDir },\n })\n }\n }\n\n await manageEnvFiles({\n cliArgs,\n databaseType: dbDetails?.type,\n databaseUri: dbDetails?.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n template: 'template' in args ? args.template : undefined,\n })\n\n if (agentType) {\n spinner.message('Installing agent skill...')\n try {\n await downloadSkill({\n agentType,\n branch: cliArgs['--branch'] || undefined,\n debug: cliArgs['--debug'],\n projectDir,\n })\n\n const { configFile, skillsDir } = getAgentChoice(agentType)\n const skillPath = `${skillsDir}/payload`\n const configContent =\n configFile === 'CLAUDE.md'\n ? `# Claude Code\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n : `# Agents\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n await fse.writeFile(path.resolve(projectDir, configFile), configContent)\n } catch (err) {\n if (cliArgs['--debug'] && err instanceof Error) {\n debug(`Failed to download skill: ${err.message}`)\n }\n warning('Could not download agent skill. You can install it manually later.')\n }\n }\n\n if (!cliArgs['--no-deps']) {\n info(`Using ${packageManager}.\\n`)\n spinner.message('Installing dependencies...')\n const result = await installDeps({ cliArgs, packageManager, projectDir })\n if (result) {\n spinner.stop('Successfully installed Payload and dependencies')\n } else {\n spinner.stop('Error installing dependencies', 1)\n }\n } else {\n spinner.stop('Dependency installation skipped')\n }\n\n if (!cliArgs['--no-git']) {\n tryInitRepoAndCommit({ cwd: projectDir })\n }\n}\n\n/**\n * Reads the package.json file into an object and then does the following:\n * - Sets the `name` property to the provided `projectName`.\n * - Bumps the payload packages from workspace:* to the latest version.\n * - Writes the updated object back to the package.json file.\n */\nexport async function updatePackageJSON(args: {\n /**\n * The latest version of Payload to use in the package.json.\n */\n latestVersion: string\n projectDir: string\n /**\n * The name of the project to set in package.json.\n */\n projectName: string\n}): Promise<void> {\n const { latestVersion, projectDir, projectName } = args\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n try {\n const packageObj = await fse.readJson(packageJsonPath)\n packageObj.name = projectName\n\n updatePackageJSONDependencies({\n latestVersion,\n packageJson: packageObj,\n })\n\n await fse.writeJson(packageJsonPath, packageObj, { spaces: 2 })\n } catch (err: unknown) {\n warning(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`)\n }\n}\n\n/**\n * Recursively updates a JSON object to replace all instances of `workspace:` with the latest version pinned.\n *\n * Does not return and instead modifies the `packageJson` object in place.\n */\nexport function updatePackageJSONDependencies(args: {\n latestVersion: string\n packageJson: Record<string, unknown>\n}): void {\n const { latestVersion, packageJson } = args\n\n const updatedDependencies = Object.entries(packageJson.dependencies || {}).reduce(\n (acc, [key, value]) => {\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n acc[key] = `${latestVersion}`\n } else if (key === 'payload' || key.startsWith('@payloadcms')) {\n acc[key] = `${latestVersion}`\n } else {\n acc[key] = value\n }\n return acc\n },\n {} as Record<string, string>,\n )\n packageJson.dependencies = updatedDependencies\n}\n"],"names":["p","chalk","execa","fse","fileURLToPath","path","tryInitRepoAndCommit","debug","error","info","warning","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","configurePayloadConfig","configurePluginProject","ensurePnpmBuildApprovals","downloadExample","downloadSkill","downloadTemplate","generateSecret","manageEnvFiles","getAgentChoice","filename","url","dirname","createOrFindProjectDir","projectDir","pathExists","mkdir","installDeps","args","cliArgs","packageManager","installCmd","command","cwd","resolve","err","Error","message","createProject","agentType","dbDetails","projectName","green","localExample","copy","localTemplate","template","split","example","versionOrTag","spinner","start","payloadVersion","packageName","stop","updatePackageJSON","latestVersion","type","projectDirPath","dbType","projectDirOrConfigPath","databaseType","databaseUri","dbUri","payloadSecret","undefined","branch","configFile","skillsDir","skillPath","configContent","writeFile","result","packageJsonPath","packageObj","readJson","name","updatePackageJSONDependencies","packageJson","writeJson","spaces","updatedDependencies","Object","entries","dependencies","reduce","acc","key","value","startsWith"],"mappings":"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"}
@@ -5,7 +5,7 @@ type InitNextArgs = {
5
5
  packageManager: PackageManager;
6
6
  projectDir: string;
7
7
  useDistFiles?: boolean;
8
- } & Pick<CliArgs, '--debug'>;
8
+ } & Pick<CliArgs, '--debug' | '--payload-version'>;
9
9
  type InitNextResult = {
10
10
  isSrcDir: boolean;
11
11
  nextAppDir?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AAclG,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAE5B,KAAK,cAAc,GACf;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC1E;IACE,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,IAAI,CAAA;CACd,CAAA;AAEL,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAgE1E;AAoID,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2FnF"}
1
+ {"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AAmBlG,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,mBAAmB,CAAC,CAAA;AAElD,KAAK,cAAc,GACf;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC1E;IACE,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,IAAI,CAAA;CACd,CAAA;AAEL,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAqE1E;AA8ID,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2FnF"}
@@ -9,6 +9,8 @@ import { promisify } from 'util';
9
9
  import { copyRecursiveSync } from '../utils/copy-recursive-sync.js';
10
10
  import { debug as origDebug, warning } from '../utils/log.js';
11
11
  import { moveMessage } from '../utils/messages.js';
12
+ import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
13
+ import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
12
14
  import { installPackages } from './install-packages.js';
13
15
  import { wrapNextConfig } from './wrap-next-config.js';
14
16
  const readFile = promisify(fs.readFile);
@@ -64,7 +66,12 @@ export async function initNext(args) {
64
66
  success: false
65
67
  };
66
68
  }
67
- const { success: installSuccess } = await installDeps(projectDir, packageManager, dbType);
69
+ const { success: installSuccess } = await installDeps({
70
+ dbType,
71
+ packageManager,
72
+ projectDir,
73
+ versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG
74
+ });
68
75
  if (!installSuccess) {
69
76
  installSpinner.stop('Failed to install dependencies', 1);
70
77
  return {
@@ -161,16 +168,25 @@ async function installAndConfigurePayload(args) {
161
168
  success: true
162
169
  };
163
170
  }
164
- async function installDeps(projectDir, packageManager, dbType) {
171
+ async function installDeps(args) {
172
+ const { dbType, packageManager, projectDir, versionOrTag } = args;
165
173
  const { getDbPackageName } = await import('./ast/adapter-config.js');
174
+ const version = await resolvePackageVersion({
175
+ packageName: 'payload',
176
+ versionOrTag
177
+ });
166
178
  const packagesToInstall = [
167
179
  'payload',
168
180
  '@payloadcms/next',
169
181
  '@payloadcms/richtext-lexical'
170
- ].map((pkg)=>`${pkg}@latest`);
171
- packagesToInstall.push(`${getDbPackageName(dbType)}@latest`);
182
+ ].map((pkg)=>`${pkg}@${version}`);
183
+ packagesToInstall.push(`${getDbPackageName(dbType)}@${version}`);
172
184
  // Match graphql version of @payloadcms/next
173
185
  packagesToInstall.push('graphql@^16.8.1');
186
+ await ensurePnpmBuildApprovals({
187
+ packageManager,
188
+ projectDir
189
+ });
174
190
  return await installPackages({
175
191
  packageManager,
176
192
  packagesToInstall,