create-payload-app 3.0.0-canary.ee6d727 → 3.0.0-canary.ef0a8d0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.js.map +1 -1
- package/dist/lib/configure-payload-config.d.ts +8 -2
- package/dist/lib/configure-payload-config.d.ts.map +1 -1
- package/dist/lib/configure-payload-config.js +74 -25
- package/dist/lib/configure-payload-config.js.map +1 -1
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +1 -1
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/create-project.spec.js +19 -18
- package/dist/lib/create-project.spec.js.map +1 -1
- package/dist/lib/generate-secret.js.map +1 -1
- package/dist/lib/get-package-manager.js.map +1 -1
- package/dist/lib/init-next.d.ts +2 -2
- package/dist/lib/init-next.d.ts.map +1 -1
- package/dist/lib/init-next.js.map +1 -1
- package/dist/lib/install-packages.js.map +1 -1
- package/dist/lib/parse-project-name.js.map +1 -1
- package/dist/lib/parse-template.js.map +1 -1
- package/dist/lib/replacements.d.ts +27 -0
- package/dist/lib/replacements.d.ts.map +1 -0
- package/dist/lib/replacements.js +68 -0
- package/dist/lib/replacements.js.map +1 -0
- package/dist/lib/select-db.js.map +1 -1
- package/dist/lib/templates.js +6 -0
- package/dist/lib/templates.js.map +1 -1
- package/dist/lib/update-payload-in-project.js.map +1 -1
- package/dist/lib/wrap-next-config.d.ts.map +1 -1
- package/dist/lib/wrap-next-config.js +1 -2
- package/dist/lib/wrap-next-config.js.map +1 -1
- package/dist/lib/wrap-next-config.spec.js +12 -12
- package/dist/lib/wrap-next-config.spec.js.map +1 -1
- package/dist/lib/write-env-file.d.ts.map +1 -1
- package/dist/lib/write-env-file.js +25 -25
- package/dist/lib/write-env-file.js.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/scripts/pack-template-files.js.map +1 -1
- package/dist/template/src/collections/Media.ts +16 -0
- package/dist/template/src/collections/Users.ts +1 -1
- package/dist/template/src/payload.config.ts +10 -15
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/copy-recursive-sync.d.ts +2 -0
- package/dist/utils/copy-recursive-sync.d.ts.map +1 -1
- package/dist/utils/copy-recursive-sync.js +2 -0
- package/dist/utils/copy-recursive-sync.js.map +1 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/log.js +1 -1
- package/dist/utils/log.js.map +1 -1
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js.map +1 -1
- package/package.json +17 -4
- package/dist/lib/packages.d.ts +0 -9
- package/dist/lib/packages.d.ts.map +0 -1
- package/dist/lib/packages.js +0 -27
- package/dist/lib/packages.js.map +0 -1
@@ -0,0 +1,68 @@
|
|
1
|
+
const mongodbReplacement = {
|
2
|
+
// Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`
|
3
|
+
configReplacement: (envName = 'DATABASE_URI')=>[
|
4
|
+
' db: mongooseAdapter({',
|
5
|
+
` url: process.env.${envName} || '',`,
|
6
|
+
' }),'
|
7
|
+
],
|
8
|
+
importReplacement: "import { mongooseAdapter } from '@payloadcms/db-mongodb'",
|
9
|
+
packageName: '@payloadcms/db-mongodb'
|
10
|
+
};
|
11
|
+
const postgresReplacement = {
|
12
|
+
configReplacement: (envName = 'DATABASE_URI')=>[
|
13
|
+
' db: postgresAdapter({',
|
14
|
+
' pool: {',
|
15
|
+
` connectionString: process.env.${envName} || '',`,
|
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
|
+
const vercelBlobStorageReplacement = {
|
27
|
+
// Replacement of `// storage-adapter-placeholder`
|
28
|
+
configReplacement: [
|
29
|
+
' vercelBlobStorage({',
|
30
|
+
' collections: {',
|
31
|
+
' [Media.slug]: true,',
|
32
|
+
' },',
|
33
|
+
" token: process.env.BLOB_READ_WRITE_TOKEN || '',",
|
34
|
+
' }),'
|
35
|
+
],
|
36
|
+
importReplacement: "import { vercelBlobStorage } from '@payloadcms/storage-vercel-blob'",
|
37
|
+
packageName: '@payloadcms/storage-vercel-blob'
|
38
|
+
};
|
39
|
+
const payloadCloudReplacement = {
|
40
|
+
configReplacement: [
|
41
|
+
' payloadCloudPlugin(),'
|
42
|
+
],
|
43
|
+
importReplacement: "import { payloadCloudPlugin } from '@payloadcms/plugin-cloud'",
|
44
|
+
packageName: '@payloadcms/plugin-cloud'
|
45
|
+
};
|
46
|
+
// Removes placeholders
|
47
|
+
const diskReplacement = {
|
48
|
+
configReplacement: [],
|
49
|
+
importReplacement: ''
|
50
|
+
};
|
51
|
+
export const storageReplacements = {
|
52
|
+
localDisk: diskReplacement,
|
53
|
+
payloadCloud: payloadCloudReplacement,
|
54
|
+
vercelBlobStorage: vercelBlobStorageReplacement
|
55
|
+
};
|
56
|
+
export const configReplacements = {
|
57
|
+
sharp: {
|
58
|
+
// Replacement of `sharp, // Now optional`
|
59
|
+
configReplacement: {
|
60
|
+
match: 'sharp,',
|
61
|
+
replacement: ' // sharp,'
|
62
|
+
},
|
63
|
+
importReplacement: "import sharp from 'sharp'",
|
64
|
+
packageName: 'sharp'
|
65
|
+
}
|
66
|
+
};
|
67
|
+
|
68
|
+
//# sourceMappingURL=replacements.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/lib/replacements.ts"],"sourcesContent":["import type { DbType, StorageAdapterType } from '../types.js'\n\ntype DbAdapterReplacement = {\n configReplacement: (envName?: string) => string[]\n importReplacement: string\n packageName: string\n}\n\nconst mongodbReplacement: DbAdapterReplacement = {\n // Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`\n configReplacement: (envName = 'DATABASE_URI') => [\n ' db: mongooseAdapter({',\n ` url: process.env.${envName} || '',`,\n ' }),',\n ],\n importReplacement: \"import { mongooseAdapter } from '@payloadcms/db-mongodb'\",\n packageName: '@payloadcms/db-mongodb',\n}\n\nconst postgresReplacement: DbAdapterReplacement = {\n configReplacement: (envName = 'DATABASE_URI') => [\n ' db: postgresAdapter({',\n ' pool: {',\n ` connectionString: process.env.${envName} || '',`,\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\ntype StorageAdapterReplacement = {\n configReplacement: string[]\n importReplacement?: string\n packageName?: string\n}\n\nconst vercelBlobStorageReplacement: StorageAdapterReplacement = {\n // Replacement of `// storage-adapter-placeholder`\n configReplacement: [\n ' vercelBlobStorage({',\n ' collections: {',\n ' [Media.slug]: true,',\n ' },',\n \" token: process.env.BLOB_READ_WRITE_TOKEN || '',\",\n ' }),',\n ],\n importReplacement: \"import { vercelBlobStorage } from '@payloadcms/storage-vercel-blob'\",\n packageName: '@payloadcms/storage-vercel-blob',\n}\n\nconst payloadCloudReplacement: StorageAdapterReplacement = {\n configReplacement: [' payloadCloudPlugin(),'],\n importReplacement: \"import { payloadCloudPlugin } from '@payloadcms/plugin-cloud'\",\n packageName: '@payloadcms/plugin-cloud',\n}\n\n// Removes placeholders\nconst diskReplacement: StorageAdapterReplacement = {\n configReplacement: [],\n importReplacement: '',\n}\n\nexport const storageReplacements: Record<StorageAdapterType, StorageAdapterReplacement> = {\n localDisk: diskReplacement,\n payloadCloud: payloadCloudReplacement,\n vercelBlobStorage: vercelBlobStorageReplacement,\n}\n\n/**\n * Generic config replacement\n */\ntype ConfigReplacement = {\n configReplacement: {\n match: string\n replacement: string\n }\n importReplacement: string\n packageName: string\n}\n\nexport const configReplacements: Record<string, ConfigReplacement> = {\n sharp: {\n // Replacement of `sharp, // Now optional`\n configReplacement: {\n match: 'sharp,',\n replacement: ' // sharp,',\n },\n importReplacement: \"import sharp from 'sharp'\",\n packageName: 'sharp',\n },\n}\n"],"names":["mongodbReplacement","configReplacement","envName","importReplacement","packageName","postgresReplacement","dbReplacements","mongodb","postgres","vercelBlobStorageReplacement","payloadCloudReplacement","diskReplacement","storageReplacements","localDisk","payloadCloud","vercelBlobStorage","configReplacements","sharp","match","replacement"],"mappings":"AAQA,MAAMA,qBAA2C;IAC/C,8FAA8F;IAC9FC,mBAAmB,CAACC,UAAU,cAAc,GAAK;YAC/C;YACA,CAAC,qBAAqB,EAAEA,QAAQ,OAAO,CAAC;YACxC;SACD;IACDC,mBAAmB;IACnBC,aAAa;AACf;AAEA,MAAMC,sBAA4C;IAChDJ,mBAAmB,CAACC,UAAU,cAAc,GAAK;YAC/C;YACA;YACA,CAAC,oCAAoC,EAAEA,QAAQ,OAAO,CAAC;YACvD;YACA;SACD;IACDC,mBAAmB;IACnBC,aAAa;AACf;AAEA,OAAO,MAAME,iBAAuD;IAClEC,SAASP;IACTQ,UAAUH;AACZ,EAAC;AAQD,MAAMI,+BAA0D;IAC9D,kDAAkD;IAClDR,mBAAmB;QACjB;QACA;QACA;QACA;QACA;QACA;KACD;IACDE,mBAAmB;IACnBC,aAAa;AACf;AAEA,MAAMM,0BAAqD;IACzDT,mBAAmB;QAAC;KAA4B;IAChDE,mBAAmB;IACnBC,aAAa;AACf;AAEA,uBAAuB;AACvB,MAAMO,kBAA6C;IACjDV,mBAAmB,EAAE;IACrBE,mBAAmB;AACrB;AAEA,OAAO,MAAMS,sBAA6E;IACxFC,WAAWF;IACXG,cAAcJ;IACdK,mBAAmBN;AACrB,EAAC;AAcD,OAAO,MAAMO,qBAAwD;IACnEC,OAAO;QACL,0CAA0C;QAC1ChB,mBAAmB;YACjBiB,OAAO;YACPC,aAAa;QACf;QACAhB,mBAAmB;QACnBC,aAAa;IACf;AACF,EAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/select-db.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\n\nimport type { CliArgs, DbDetails, DbType } from '../types.js'\n\ntype DbChoice = {\n dbConnectionPrefix: `${string}/`\n title: string\n value: DbType\n}\n\nconst dbChoiceRecord: Record<DbType, DbChoice> = {\n mongodb: {\n dbConnectionPrefix: 'mongodb://127.0.0.1/',\n title: 'MongoDB',\n value: 'mongodb',\n },\n postgres: {\n dbConnectionPrefix: 'postgres://postgres:<password>@127.0.0.1:5432/',\n title: 'PostgreSQL (beta)',\n value: 'postgres',\n },\n}\n\nexport async function selectDb(args: CliArgs, projectName: string): Promise<DbDetails> {\n let dbType: DbType | symbol | undefined = undefined\n if (args['--db']) {\n if (!Object.values(dbChoiceRecord).some((dbChoice) => dbChoice.value === args['--db'])) {\n throw new Error(\n `Invalid database type given. Valid types are: ${Object.values(dbChoiceRecord)\n .map((dbChoice) => dbChoice.value)\n .join(', ')}`,\n )\n }\n dbType = args['--db'] as DbType\n } else {\n dbType = await p.select<{ label: string; value: DbType }[], DbType>({\n initialValue: 'mongodb',\n message: `Select a database`,\n options: [\n { label: 'MongoDB', value: 'mongodb' },\n { label: 'Postgres', value: 'postgres' },\n ],\n })\n if (p.isCancel(dbType)) process.exit(0)\n }\n\n const dbChoice = dbChoiceRecord[dbType]\n\n let dbUri: string | symbol | undefined = undefined\n const initialDbUri = `${dbChoice.dbConnectionPrefix}${\n projectName === '.' ? `payload-${getRandomDigitSuffix()}` : slugify(projectName)\n }`\n\n if (args['--db-accept-recommended']) {\n dbUri = initialDbUri\n } else if (args['--db-connection-string']) {\n dbUri = args['--db-connection-string']\n } else {\n dbUri = await p.text({\n initialValue: initialDbUri,\n message: `Enter ${dbChoice.title.split(' ')[0]} connection string`, // strip beta from title\n })\n if (p.isCancel(dbUri)) process.exit(0)\n }\n\n return {\n type: dbChoice.value,\n dbUri,\n }\n}\n\nfunction getRandomDigitSuffix(): string {\n return (Math.random() * Math.pow(10, 6)).toFixed(0)\n}\n"],"names":["p","slugify","dbChoiceRecord","mongodb","dbConnectionPrefix","title","value","postgres","selectDb","args","projectName","dbType","undefined","Object","values","some","dbChoice","Error","map","join","select","initialValue","message","options","label","isCancel","process","exit","dbUri","initialDbUri","getRandomDigitSuffix","text","split","type","Math","random","pow","toFixed"],"
|
1
|
+
{"version":3,"sources":["../../src/lib/select-db.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\n\nimport type { CliArgs, DbDetails, DbType } from '../types.js'\n\ntype DbChoice = {\n dbConnectionPrefix: `${string}/`\n title: string\n value: DbType\n}\n\nconst dbChoiceRecord: Record<DbType, DbChoice> = {\n mongodb: {\n dbConnectionPrefix: 'mongodb://127.0.0.1/',\n title: 'MongoDB',\n value: 'mongodb',\n },\n postgres: {\n dbConnectionPrefix: 'postgres://postgres:<password>@127.0.0.1:5432/',\n title: 'PostgreSQL (beta)',\n value: 'postgres',\n },\n}\n\nexport async function selectDb(args: CliArgs, projectName: string): Promise<DbDetails> {\n let dbType: DbType | symbol | undefined = undefined\n if (args['--db']) {\n if (!Object.values(dbChoiceRecord).some((dbChoice) => dbChoice.value === args['--db'])) {\n throw new Error(\n `Invalid database type given. Valid types are: ${Object.values(dbChoiceRecord)\n .map((dbChoice) => dbChoice.value)\n .join(', ')}`,\n )\n }\n dbType = args['--db'] as DbType\n } else {\n dbType = await p.select<{ label: string; value: DbType }[], DbType>({\n initialValue: 'mongodb',\n message: `Select a database`,\n options: [\n { label: 'MongoDB', value: 'mongodb' },\n { label: 'Postgres', value: 'postgres' },\n ],\n })\n if (p.isCancel(dbType)) process.exit(0)\n }\n\n const dbChoice = dbChoiceRecord[dbType]\n\n let dbUri: string | symbol | undefined = undefined\n const initialDbUri = `${dbChoice.dbConnectionPrefix}${\n projectName === '.' ? `payload-${getRandomDigitSuffix()}` : slugify(projectName)\n }`\n\n if (args['--db-accept-recommended']) {\n dbUri = initialDbUri\n } else if (args['--db-connection-string']) {\n dbUri = args['--db-connection-string']\n } else {\n dbUri = await p.text({\n initialValue: initialDbUri,\n message: `Enter ${dbChoice.title.split(' ')[0]} connection string`, // strip beta from title\n })\n if (p.isCancel(dbUri)) process.exit(0)\n }\n\n return {\n type: dbChoice.value,\n dbUri,\n }\n}\n\nfunction getRandomDigitSuffix(): string {\n return (Math.random() * Math.pow(10, 6)).toFixed(0)\n}\n"],"names":["p","slugify","dbChoiceRecord","mongodb","dbConnectionPrefix","title","value","postgres","selectDb","args","projectName","dbType","undefined","Object","values","some","dbChoice","Error","map","join","select","initialValue","message","options","label","isCancel","process","exit","dbUri","initialDbUri","getRandomDigitSuffix","text","split","type","Math","random","pow","toFixed"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AACnC,OAAOC,aAAa,wBAAuB;AAU3C,MAAMC,iBAA2C;IAC/CC,SAAS;QACPC,oBAAoB;QACpBC,OAAO;QACPC,OAAO;IACT;IACAC,UAAU;QACRH,oBAAoB;QACpBC,OAAO;QACPC,OAAO;IACT;AACF;AAEA,OAAO,eAAeE,SAASC,IAAa,EAAEC,WAAmB;IAC/D,IAAIC,SAAsCC;IAC1C,IAAIH,IAAI,CAAC,OAAO,EAAE;QAChB,IAAI,CAACI,OAAOC,MAAM,CAACZ,gBAAgBa,IAAI,CAAC,CAACC,WAAaA,SAASV,KAAK,KAAKG,IAAI,CAAC,OAAO,GAAG;YACtF,MAAM,IAAIQ,MACR,CAAC,8CAA8C,EAAEJ,OAAOC,MAAM,CAACZ,gBAC5DgB,GAAG,CAAC,CAACF,WAAaA,SAASV,KAAK,EAChCa,IAAI,CAAC,MAAM,CAAC;QAEnB;QACAR,SAASF,IAAI,CAAC,OAAO;IACvB,OAAO;QACLE,SAAS,MAAMX,EAAEoB,MAAM,CAA6C;YAClEC,cAAc;YACdC,SAAS,CAAC,iBAAiB,CAAC;YAC5BC,SAAS;gBACP;oBAAEC,OAAO;oBAAWlB,OAAO;gBAAU;gBACrC;oBAAEkB,OAAO;oBAAYlB,OAAO;gBAAW;aACxC;QACH;QACA,IAAIN,EAAEyB,QAAQ,CAACd,SAASe,QAAQC,IAAI,CAAC;IACvC;IAEA,MAAMX,WAAWd,cAAc,CAACS,OAAO;IAEvC,IAAIiB,QAAqChB;IACzC,MAAMiB,eAAe,CAAC,EAAEb,SAASZ,kBAAkB,CAAC,EAClDM,gBAAgB,MAAM,CAAC,QAAQ,EAAEoB,uBAAuB,CAAC,GAAG7B,QAAQS,aACrE,CAAC;IAEF,IAAID,IAAI,CAAC,0BAA0B,EAAE;QACnCmB,QAAQC;IACV,OAAO,IAAIpB,IAAI,CAAC,yBAAyB,EAAE;QACzCmB,QAAQnB,IAAI,CAAC,yBAAyB;IACxC,OAAO;QACLmB,QAAQ,MAAM5B,EAAE+B,IAAI,CAAC;YACnBV,cAAcQ;YACdP,SAAS,CAAC,MAAM,EAAEN,SAASX,KAAK,CAAC2B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC;QACpE;QACA,IAAIhC,EAAEyB,QAAQ,CAACG,QAAQF,QAAQC,IAAI,CAAC;IACtC;IAEA,OAAO;QACLM,MAAMjB,SAASV,KAAK;QACpBsB;IACF;AACF;AAEA,SAASE;IACP,OAAO,AAACI,CAAAA,KAAKC,MAAM,KAAKD,KAAKE,GAAG,CAAC,IAAI,EAAC,EAAGC,OAAO,CAAC;AACnD"}
|
package/dist/lib/templates.js
CHANGED
@@ -15,6 +15,12 @@ export function getValidTemplates() {
|
|
15
15
|
type: 'starter',
|
16
16
|
description: 'Blank 3.0 Template',
|
17
17
|
url: 'https://github.com/payloadcms/payload/templates/blank-3.0#beta'
|
18
|
+
},
|
19
|
+
{
|
20
|
+
name: 'website',
|
21
|
+
type: 'starter',
|
22
|
+
description: 'Website Template',
|
23
|
+
url: 'https://github.com/payloadcms/payload/templates/website#beta'
|
18
24
|
}
|
19
25
|
];
|
20
26
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/templates.ts"],"sourcesContent":["import type { ProjectTemplate } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport function validateTemplate(templateName: string): boolean {\n const validTemplates = getValidTemplates()\n if (!validTemplates.map((t) => t.name).includes(templateName)) {\n error(`'${templateName}' is not a valid template.`)\n info(`Valid templates: ${validTemplates.map((t) => t.name).join(', ')}`)\n return false\n }\n return true\n}\n\nexport function getValidTemplates(): ProjectTemplate[] {\n return [\n {\n name: 'blank',\n type: 'starter',\n description: 'Blank 3.0 Template',\n url: 'https://github.com/payloadcms/payload/templates/blank-3.0#beta',\n },\n
|
1
|
+
{"version":3,"sources":["../../src/lib/templates.ts"],"sourcesContent":["import type { ProjectTemplate } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport function validateTemplate(templateName: string): boolean {\n const validTemplates = getValidTemplates()\n if (!validTemplates.map((t) => t.name).includes(templateName)) {\n error(`'${templateName}' is not a valid template.`)\n info(`Valid templates: ${validTemplates.map((t) => t.name).join(', ')}`)\n return false\n }\n return true\n}\n\nexport function getValidTemplates(): ProjectTemplate[] {\n return [\n {\n name: 'blank',\n type: 'starter',\n description: 'Blank 3.0 Template',\n url: 'https://github.com/payloadcms/payload/templates/blank-3.0#beta',\n },\n {\n name: 'website',\n type: 'starter',\n description: 'Website Template',\n url: 'https://github.com/payloadcms/payload/templates/website#beta',\n },\n\n // Remove these until they have been updated for 3.0\n\n // {\n // name: 'blank',\n // type: 'starter',\n // description: 'Blank Template',\n // url: 'https://github.com/payloadcms/payload/templates/blank',\n // },\n // {\n // name: 'ecommerce',\n // type: 'starter',\n // description: 'E-commerce Template',\n // url: 'https://github.com/payloadcms/payload/templates/ecommerce',\n // },\n // {\n // name: 'plugin',\n // type: 'plugin',\n // description: 'Template for creating a Payload plugin',\n // url: 'https://github.com/payloadcms/payload-plugin-template#beta',\n // },\n // {\n // name: 'payload-demo',\n // type: 'starter',\n // description: 'Payload demo site at https://demo.payloadcms.com',\n // url: 'https://github.com/payloadcms/public-demo',\n // },\n // {\n // name: 'payload-website',\n // type: 'starter',\n // description: 'Payload website CMS at https://payloadcms.com',\n // url: 'https://github.com/payloadcms/website-cms',\n // },\n ]\n}\n"],"names":["error","info","validateTemplate","templateName","validTemplates","getValidTemplates","map","t","name","includes","join","type","description","url"],"mappings":"AAEA,SAASA,KAAK,EAAEC,IAAI,QAAQ,kBAAiB;AAE7C,OAAO,SAASC,iBAAiBC,YAAoB;IACnD,MAAMC,iBAAiBC;IACvB,IAAI,CAACD,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEC,QAAQ,CAACN,eAAe;QAC7DH,MAAM,CAAC,CAAC,EAAEG,aAAa,0BAA0B,CAAC;QAClDF,KAAK,CAAC,iBAAiB,EAAEG,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEE,IAAI,CAAC,MAAM,CAAC;QACvE,OAAO;IACT;IACA,OAAO;AACT;AAEA,OAAO,SAASL;IACd,OAAO;QACL;YACEG,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;KAkCD;AACH"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/update-payload-in-project.ts"],"sourcesContent":["import execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport type { NextAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { info } from '../utils/log.js'\nimport { getPackageManager } from './get-package-manager.js'\nimport { installPackages } from './install-packages.js'\n\nexport async function updatePayloadInProject(\n appDetails: NextAppDetails,\n): Promise<{ message: string; success: boolean }> {\n if (!appDetails.nextConfigPath) return { message: 'No Next.js config found', success: false }\n\n const projectDir = path.dirname(appDetails.nextConfigPath)\n\n const packageObj = (await fse.readJson(path.resolve(projectDir, 'package.json'))) as {\n dependencies?: Record<string, string>\n }\n if (!packageObj?.dependencies) {\n throw new Error('No package.json found in this project')\n }\n\n const payloadVersion = packageObj.dependencies?.payload\n if (!payloadVersion) {\n throw new Error('Payload is not installed in this project')\n }\n\n const packageManager = await getPackageManager({ projectDir })\n\n // Fetch latest Payload version from npm\n const { exitCode: getLatestVersionExitCode, stdout: latestPayloadVersion } = await execa('npm', [\n 'show',\n 'payload@beta',\n 'version',\n ])\n if (getLatestVersionExitCode !== 0) {\n throw new Error('Failed to fetch latest Payload version')\n }\n\n if (payloadVersion === latestPayloadVersion) {\n return { message: `Payload v${payloadVersion} is already up to date.`, success: true }\n }\n\n // Update all existing Payload packages\n const payloadPackages = Object.keys(packageObj.dependencies).filter((dep) =>\n dep.startsWith('@payloadcms/'),\n )\n\n const packageNames = ['payload', ...payloadPackages]\n\n const packagesToUpdate = packageNames.map((pkg) => `${pkg}@${latestPayloadVersion}`)\n\n info(`Using ${packageManager}.\\n`)\n info(\n `Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\\n\\n${packageNames.map((p) => ` - ${p}`).join('\\n')}`,\n )\n\n const { success: updateSuccess } = await installPackages({\n packageManager,\n packagesToInstall: packagesToUpdate,\n projectDir,\n })\n\n if (!updateSuccess) {\n throw new Error('Failed to update Payload packages')\n }\n info('Payload packages updated successfully.')\n\n info(`Updating Payload Next.js files...`)\n const templateFilesPath = dirname.endsWith('dist')\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank-3.0')\n\n const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)')\n\n copyRecursiveSync(\n templateSrcDir,\n path.resolve(projectDir, appDetails.isSrcDir ? 'src/app' : 'app', '(payload)'),\n )\n\n return { message: 'Payload updated successfully.', success: true }\n}\n"],"names":["execa","fse","fileURLToPath","path","filename","url","dirname","copyRecursiveSync","info","getPackageManager","installPackages","updatePayloadInProject","appDetails","nextConfigPath","message","success","projectDir","packageObj","readJson","resolve","dependencies","Error","payloadVersion","payload","packageManager","exitCode","getLatestVersionExitCode","stdout","latestPayloadVersion","payloadPackages","Object","keys","filter","dep","startsWith","packageNames","packagesToUpdate","map","pkg","length","p","join","updateSuccess","packagesToInstall","templateFilesPath","endsWith","templateSrcDir","isSrcDir"],"
|
1
|
+
{"version":3,"sources":["../../src/lib/update-payload-in-project.ts"],"sourcesContent":["import execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport type { NextAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { info } from '../utils/log.js'\nimport { getPackageManager } from './get-package-manager.js'\nimport { installPackages } from './install-packages.js'\n\nexport async function updatePayloadInProject(\n appDetails: NextAppDetails,\n): Promise<{ message: string; success: boolean }> {\n if (!appDetails.nextConfigPath) return { message: 'No Next.js config found', success: false }\n\n const projectDir = path.dirname(appDetails.nextConfigPath)\n\n const packageObj = (await fse.readJson(path.resolve(projectDir, 'package.json'))) as {\n dependencies?: Record<string, string>\n }\n if (!packageObj?.dependencies) {\n throw new Error('No package.json found in this project')\n }\n\n const payloadVersion = packageObj.dependencies?.payload\n if (!payloadVersion) {\n throw new Error('Payload is not installed in this project')\n }\n\n const packageManager = await getPackageManager({ projectDir })\n\n // Fetch latest Payload version from npm\n const { exitCode: getLatestVersionExitCode, stdout: latestPayloadVersion } = await execa('npm', [\n 'show',\n 'payload@beta',\n 'version',\n ])\n if (getLatestVersionExitCode !== 0) {\n throw new Error('Failed to fetch latest Payload version')\n }\n\n if (payloadVersion === latestPayloadVersion) {\n return { message: `Payload v${payloadVersion} is already up to date.`, success: true }\n }\n\n // Update all existing Payload packages\n const payloadPackages = Object.keys(packageObj.dependencies).filter((dep) =>\n dep.startsWith('@payloadcms/'),\n )\n\n const packageNames = ['payload', ...payloadPackages]\n\n const packagesToUpdate = packageNames.map((pkg) => `${pkg}@${latestPayloadVersion}`)\n\n info(`Using ${packageManager}.\\n`)\n info(\n `Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\\n\\n${packageNames.map((p) => ` - ${p}`).join('\\n')}`,\n )\n\n const { success: updateSuccess } = await installPackages({\n packageManager,\n packagesToInstall: packagesToUpdate,\n projectDir,\n })\n\n if (!updateSuccess) {\n throw new Error('Failed to update Payload packages')\n }\n info('Payload packages updated successfully.')\n\n info(`Updating Payload Next.js files...`)\n const templateFilesPath = dirname.endsWith('dist')\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank-3.0')\n\n const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)')\n\n copyRecursiveSync(\n templateSrcDir,\n path.resolve(projectDir, appDetails.isSrcDir ? 'src/app' : 'app', '(payload)'),\n )\n\n return { message: 'Payload updated successfully.', success: true }\n}\n"],"names":["execa","fse","fileURLToPath","path","filename","url","dirname","copyRecursiveSync","info","getPackageManager","installPackages","updatePayloadInProject","appDetails","nextConfigPath","message","success","projectDir","packageObj","readJson","resolve","dependencies","Error","payloadVersion","payload","packageManager","exitCode","getLatestVersionExitCode","stdout","latestPayloadVersion","payloadPackages","Object","keys","filter","dep","startsWith","packageNames","packagesToUpdate","map","pkg","length","p","join","updateSuccess","packagesToInstall","templateFilesPath","endsWith","templateSrcDir","isSrcDir"],"mappings":"AAAA,OAAOA,WAAW,QAAO;AACzB,OAAOC,SAAS,WAAU;AAC1B,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,UAAU,OAAM;AAEvB,MAAMC,WAAWF,cAAc,YAAYG,GAAG;AAC9C,MAAMC,UAAUH,KAAKG,OAAO,CAACF;AAI7B,SAASG,iBAAiB,QAAQ,kCAAiC;AACnE,SAASC,IAAI,QAAQ,kBAAiB;AACtC,SAASC,iBAAiB,QAAQ,2BAA0B;AAC5D,SAASC,eAAe,QAAQ,wBAAuB;AAEvD,OAAO,eAAeC,uBACpBC,UAA0B;IAE1B,IAAI,CAACA,WAAWC,cAAc,EAAE,OAAO;QAAEC,SAAS;QAA2BC,SAAS;IAAM;IAE5F,MAAMC,aAAab,KAAKG,OAAO,CAACM,WAAWC,cAAc;IAEzD,MAAMI,aAAc,MAAMhB,IAAIiB,QAAQ,CAACf,KAAKgB,OAAO,CAACH,YAAY;IAGhE,IAAI,CAACC,YAAYG,cAAc;QAC7B,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,iBAAiBL,WAAWG,YAAY,EAAEG;IAChD,IAAI,CAACD,gBAAgB;QACnB,MAAM,IAAID,MAAM;IAClB;IAEA,MAAMG,iBAAiB,MAAMf,kBAAkB;QAAEO;IAAW;IAE5D,wCAAwC;IACxC,MAAM,EAAES,UAAUC,wBAAwB,EAAEC,QAAQC,oBAAoB,EAAE,GAAG,MAAM5B,MAAM,OAAO;QAC9F;QACA;QACA;KACD;IACD,IAAI0B,6BAA6B,GAAG;QAClC,MAAM,IAAIL,MAAM;IAClB;IAEA,IAAIC,mBAAmBM,sBAAsB;QAC3C,OAAO;YAAEd,SAAS,CAAC,SAAS,EAAEQ,eAAe,uBAAuB,CAAC;YAAEP,SAAS;QAAK;IACvF;IAEA,uCAAuC;IACvC,MAAMc,kBAAkBC,OAAOC,IAAI,CAACd,WAAWG,YAAY,EAAEY,MAAM,CAAC,CAACC,MACnEA,IAAIC,UAAU,CAAC;IAGjB,MAAMC,eAAe;QAAC;WAAcN;KAAgB;IAEpD,MAAMO,mBAAmBD,aAAaE,GAAG,CAAC,CAACC,MAAQ,CAAC,EAAEA,IAAI,CAAC,EAAEV,qBAAqB,CAAC;IAEnFpB,KAAK,CAAC,MAAM,EAAEgB,eAAe,GAAG,CAAC;IACjChB,KACE,CAAC,SAAS,EAAE4B,iBAAiBG,MAAM,CAAC,sBAAsB,EAAEX,qBAAqB,OAAO,EAAEO,aAAaE,GAAG,CAAC,CAACG,IAAM,CAAC,IAAI,EAAEA,EAAE,CAAC,EAAEC,IAAI,CAAC,MAAM,CAAC;IAG5I,MAAM,EAAE1B,SAAS2B,aAAa,EAAE,GAAG,MAAMhC,gBAAgB;QACvDc;QACAmB,mBAAmBP;QACnBpB;IACF;IAEA,IAAI,CAAC0B,eAAe;QAClB,MAAM,IAAIrB,MAAM;IAClB;IACAb,KAAK;IAELA,KAAK,CAAC,iCAAiC,CAAC;IACxC,MAAMoC,oBAAoBtC,QAAQuC,QAAQ,CAAC,UACvC1C,KAAKgB,OAAO,CAACb,SAAS,SAAS,mBAC/BH,KAAKgB,OAAO,CAACb,SAAS;IAE1B,MAAMwC,iBAAiB3C,KAAKgB,OAAO,CAACyB,mBAAmB;IAEvDrC,kBACEuC,gBACA3C,KAAKgB,OAAO,CAACH,YAAYJ,WAAWmC,QAAQ,GAAG,YAAY,OAAO;IAGpE,OAAO;QAAEjC,SAAS;QAAiCC,SAAS;IAAK;AACnE"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"wrap-next-config.d.ts","sourceRoot":"","sources":["../../src/lib/wrap-next-config.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"wrap-next-config.d.ts","sourceRoot":"","sources":["../../src/lib/wrap-next-config.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,oBAAoB;;;CAGhC,CAAA;AAED,KAAK,cAAc,GAAG,KAAK,GAAG,KAAK,CAAA;AAEnC,eAAO,MAAM,cAAc,SAAU;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,cAAc,CAAA;CAC/B,SAaA,CAAA;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,GACzB;IAAE,qBAAqB,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAiGrD"}
|
@@ -1,8 +1,7 @@
|
|
1
1
|
import chalk from 'chalk';
|
2
2
|
import { Syntax, parseModule } from 'esprima-next';
|
3
3
|
import fs from 'fs';
|
4
|
-
import { warning } from '../utils/log.js';
|
5
|
-
import { log } from '../utils/log.js';
|
4
|
+
import { log, warning } from '../utils/log.js';
|
6
5
|
export const withPayloadStatement = {
|
7
6
|
cjs: `const { withPayload } = require('@payloadcms/next/withPayload')\n`,
|
8
7
|
esm: `import { withPayload } from '@payloadcms/next/withPayload'\n`
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/wrap-next-config.ts"],"sourcesContent":["import type { Program } from 'esprima-next'\n\nimport chalk from 'chalk'\nimport { Syntax, parseModule } from 'esprima-next'\nimport fs from 'fs'\n\nimport { warning } from '../utils/log.js'\nimport { log } from '../utils/log.js'\n\nexport const withPayloadStatement = {\n cjs: `const { withPayload } = require('@payloadcms/next/withPayload')\\n`,\n esm: `import { withPayload } from '@payloadcms/next/withPayload'\\n`,\n}\n\ntype NextConfigType = 'cjs' | 'esm'\n\nexport const wrapNextConfig = (args: {\n nextConfigPath: string\n nextConfigType: NextConfigType\n}) => {\n const { nextConfigPath, nextConfigType: configType } = args\n const configContent = fs.readFileSync(nextConfigPath, 'utf8')\n const { modifiedConfigContent: newConfig, success } = parseAndModifyConfigContent(\n configContent,\n configType,\n )\n\n if (!success) {\n return\n }\n\n fs.writeFileSync(nextConfigPath, newConfig)\n}\n\n/**\n * Parses config content with AST and wraps it with withPayload function\n */\nexport function parseAndModifyConfigContent(\n content: string,\n configType: NextConfigType,\n): { modifiedConfigContent: string; success: boolean } {\n content = withPayloadStatement[configType] + content\n\n let ast: Program | undefined\n try {\n ast = parseModule(content, { loc: true })\n } catch (error: unknown) {\n if (error instanceof Error) {\n warning(`Unable to parse Next config. Error: ${error.message} `)\n warnUserWrapNotSuccessful(configType)\n }\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n\n if (configType === 'esm') {\n const exportDefaultDeclaration = ast.body.find(\n (p) => p.type === Syntax.ExportDefaultDeclaration,\n ) as Directive | undefined\n\n const exportNamedDeclaration = ast.body.find(\n (p) => p.type === Syntax.ExportNamedDeclaration,\n ) as ExportNamedDeclaration | undefined\n\n if (!exportDefaultDeclaration && !exportNamedDeclaration) {\n throw new Error('Could not find ExportDefaultDeclaration in next.config.js')\n }\n\n if (exportDefaultDeclaration && exportDefaultDeclaration.declaration?.loc) {\n const modifiedConfigContent = insertBeforeAndAfter(\n content,\n exportDefaultDeclaration.declaration.loc,\n )\n return { modifiedConfigContent, success: true }\n } else if (exportNamedDeclaration) {\n const exportSpecifier = exportNamedDeclaration.specifiers.find(\n (s) =>\n s.type === 'ExportSpecifier' &&\n s.exported?.name === 'default' &&\n s.local?.type === 'Identifier' &&\n s.local?.name,\n )\n\n if (exportSpecifier) {\n warning('Could not automatically wrap next.config.js with withPayload.')\n warning('Automatic wrapping of named exports as default not supported yet.')\n\n warnUserWrapNotSuccessful(configType)\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n }\n\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return {\n modifiedConfigContent: content,\n success: false,\n }\n } else if (configType === 'cjs') {\n // Find `module.exports = X`\n const moduleExports = ast.body.find(\n (p) =>\n p.type === Syntax.ExpressionStatement &&\n p.expression?.type === Syntax.AssignmentExpression &&\n p.expression.left?.type === Syntax.MemberExpression &&\n p.expression.left.object?.type === Syntax.Identifier &&\n p.expression.left.object.name === 'module' &&\n p.expression.left.property?.type === Syntax.Identifier &&\n p.expression.left.property.name === 'exports',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any\n\n if (moduleExports && moduleExports.expression.right?.loc) {\n const modifiedConfigContent = insertBeforeAndAfter(\n content,\n moduleExports.expression.right.loc,\n )\n return { modifiedConfigContent, success: true }\n }\n\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return {\n modifiedConfigContent: content,\n success: false,\n }\n}\n\nfunction warnUserWrapNotSuccessful(configType: NextConfigType) {\n // Output directions for user to update next.config.js\n const withPayloadMessage = `\n\n ${chalk.bold(`Please manually wrap your existing next.config.js with the withPayload function. Here is an example:`)}\n\n ${withPayloadStatement[configType]}\n\n const nextConfig = {\n // Your Next.js config here\n }\n\n ${configType === 'esm' ? 'export default withPayload(nextConfig)' : 'module.exports = withPayload(nextConfig)'}\n\n`\n\n log(withPayloadMessage)\n}\n\ntype Directive = {\n declaration?: {\n loc: Loc\n }\n}\n\ntype ExportNamedDeclaration = {\n declaration: null\n loc: Loc\n specifiers: {\n exported: {\n loc: Loc\n name: string\n type: string\n }\n loc: Loc\n local: {\n loc: Loc\n name: string\n type: string\n }\n type: string\n }[]\n type: string\n}\n\ntype Loc = {\n end: { column: number; line: number }\n start: { column: number; line: number }\n}\n\nfunction insertBeforeAndAfter(content: string, loc: Loc) {\n const { end, start } = loc\n const lines = content.split('\\n')\n\n const insert = (line: string, column: number, text: string) => {\n return line.slice(0, column) + text + line.slice(column)\n }\n\n // insert ) after end\n lines[end.line - 1] = insert(lines[end.line - 1], end.column, ')')\n // insert withPayload before start\n if (start.line === end.line) {\n lines[end.line - 1] = insert(lines[end.line - 1], start.column, 'withPayload(')\n } else {\n lines[start.line - 1] = insert(lines[start.line - 1], start.column, 'withPayload(')\n }\n\n return lines.join('\\n')\n}\n"],"names":["chalk","Syntax","parseModule","fs","warning","log","withPayloadStatement","cjs","esm","wrapNextConfig","args","nextConfigPath","nextConfigType","configType","configContent","readFileSync","modifiedConfigContent","newConfig","success","parseAndModifyConfigContent","writeFileSync","content","ast","loc","error","Error","message","warnUserWrapNotSuccessful","exportDefaultDeclaration","body","find","p","type","ExportDefaultDeclaration","exportNamedDeclaration","ExportNamedDeclaration","declaration","insertBeforeAndAfter","exportSpecifier","specifiers","s","exported","name","local","moduleExports","ExpressionStatement","expression","AssignmentExpression","left","MemberExpression","object","Identifier","property","right","withPayloadMessage","bold","end","start","lines","split","insert","line","column","text","slice","join"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
1
|
+
{"version":3,"sources":["../../src/lib/wrap-next-config.ts"],"sourcesContent":["import type { Program } from 'esprima-next'\n\nimport chalk from 'chalk'\nimport { Syntax, parseModule } from 'esprima-next'\nimport fs from 'fs'\n\nimport { log, warning } from '../utils/log.js'\n\nexport const withPayloadStatement = {\n cjs: `const { withPayload } = require('@payloadcms/next/withPayload')\\n`,\n esm: `import { withPayload } from '@payloadcms/next/withPayload'\\n`,\n}\n\ntype NextConfigType = 'cjs' | 'esm'\n\nexport const wrapNextConfig = (args: {\n nextConfigPath: string\n nextConfigType: NextConfigType\n}) => {\n const { nextConfigPath, nextConfigType: configType } = args\n const configContent = fs.readFileSync(nextConfigPath, 'utf8')\n const { modifiedConfigContent: newConfig, success } = parseAndModifyConfigContent(\n configContent,\n configType,\n )\n\n if (!success) {\n return\n }\n\n fs.writeFileSync(nextConfigPath, newConfig)\n}\n\n/**\n * Parses config content with AST and wraps it with withPayload function\n */\nexport function parseAndModifyConfigContent(\n content: string,\n configType: NextConfigType,\n): { modifiedConfigContent: string; success: boolean } {\n content = withPayloadStatement[configType] + content\n\n let ast: Program | undefined\n try {\n ast = parseModule(content, { loc: true })\n } catch (error: unknown) {\n if (error instanceof Error) {\n warning(`Unable to parse Next config. Error: ${error.message} `)\n warnUserWrapNotSuccessful(configType)\n }\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n\n if (configType === 'esm') {\n const exportDefaultDeclaration = ast.body.find(\n (p) => p.type === Syntax.ExportDefaultDeclaration,\n ) as Directive | undefined\n\n const exportNamedDeclaration = ast.body.find(\n (p) => p.type === Syntax.ExportNamedDeclaration,\n ) as ExportNamedDeclaration | undefined\n\n if (!exportDefaultDeclaration && !exportNamedDeclaration) {\n throw new Error('Could not find ExportDefaultDeclaration in next.config.js')\n }\n\n if (exportDefaultDeclaration && exportDefaultDeclaration.declaration?.loc) {\n const modifiedConfigContent = insertBeforeAndAfter(\n content,\n exportDefaultDeclaration.declaration.loc,\n )\n return { modifiedConfigContent, success: true }\n } else if (exportNamedDeclaration) {\n const exportSpecifier = exportNamedDeclaration.specifiers.find(\n (s) =>\n s.type === 'ExportSpecifier' &&\n s.exported?.name === 'default' &&\n s.local?.type === 'Identifier' &&\n s.local?.name,\n )\n\n if (exportSpecifier) {\n warning('Could not automatically wrap next.config.js with withPayload.')\n warning('Automatic wrapping of named exports as default not supported yet.')\n\n warnUserWrapNotSuccessful(configType)\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n }\n\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return {\n modifiedConfigContent: content,\n success: false,\n }\n } else if (configType === 'cjs') {\n // Find `module.exports = X`\n const moduleExports = ast.body.find(\n (p) =>\n p.type === Syntax.ExpressionStatement &&\n p.expression?.type === Syntax.AssignmentExpression &&\n p.expression.left?.type === Syntax.MemberExpression &&\n p.expression.left.object?.type === Syntax.Identifier &&\n p.expression.left.object.name === 'module' &&\n p.expression.left.property?.type === Syntax.Identifier &&\n p.expression.left.property.name === 'exports',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any\n\n if (moduleExports && moduleExports.expression.right?.loc) {\n const modifiedConfigContent = insertBeforeAndAfter(\n content,\n moduleExports.expression.right.loc,\n )\n return { modifiedConfigContent, success: true }\n }\n\n return {\n modifiedConfigContent: content,\n success: false,\n }\n }\n\n warning('Could not automatically wrap Next config with withPayload.')\n warnUserWrapNotSuccessful(configType)\n return {\n modifiedConfigContent: content,\n success: false,\n }\n}\n\nfunction warnUserWrapNotSuccessful(configType: NextConfigType) {\n // Output directions for user to update next.config.js\n const withPayloadMessage = `\n\n ${chalk.bold(`Please manually wrap your existing next.config.js with the withPayload function. Here is an example:`)}\n\n ${withPayloadStatement[configType]}\n\n const nextConfig = {\n // Your Next.js config here\n }\n\n ${configType === 'esm' ? 'export default withPayload(nextConfig)' : 'module.exports = withPayload(nextConfig)'}\n\n`\n\n log(withPayloadMessage)\n}\n\ntype Directive = {\n declaration?: {\n loc: Loc\n }\n}\n\ntype ExportNamedDeclaration = {\n declaration: null\n loc: Loc\n specifiers: {\n exported: {\n loc: Loc\n name: string\n type: string\n }\n loc: Loc\n local: {\n loc: Loc\n name: string\n type: string\n }\n type: string\n }[]\n type: string\n}\n\ntype Loc = {\n end: { column: number; line: number }\n start: { column: number; line: number }\n}\n\nfunction insertBeforeAndAfter(content: string, loc: Loc) {\n const { end, start } = loc\n const lines = content.split('\\n')\n\n const insert = (line: string, column: number, text: string) => {\n return line.slice(0, column) + text + line.slice(column)\n }\n\n // insert ) after end\n lines[end.line - 1] = insert(lines[end.line - 1], end.column, ')')\n // insert withPayload before start\n if (start.line === end.line) {\n lines[end.line - 1] = insert(lines[end.line - 1], start.column, 'withPayload(')\n } else {\n lines[start.line - 1] = insert(lines[start.line - 1], start.column, 'withPayload(')\n }\n\n return lines.join('\\n')\n}\n"],"names":["chalk","Syntax","parseModule","fs","log","warning","withPayloadStatement","cjs","esm","wrapNextConfig","args","nextConfigPath","nextConfigType","configType","configContent","readFileSync","modifiedConfigContent","newConfig","success","parseAndModifyConfigContent","writeFileSync","content","ast","loc","error","Error","message","warnUserWrapNotSuccessful","exportDefaultDeclaration","body","find","p","type","ExportDefaultDeclaration","exportNamedDeclaration","ExportNamedDeclaration","declaration","insertBeforeAndAfter","exportSpecifier","specifiers","s","exported","name","local","moduleExports","ExpressionStatement","expression","AssignmentExpression","left","MemberExpression","object","Identifier","property","right","withPayloadMessage","bold","end","start","lines","split","insert","line","column","text","slice","join"],"mappings":"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"}
|
@@ -1,10 +1,14 @@
|
|
1
|
-
import { parseAndModifyConfigContent, withPayloadStatement } from './wrap-next-config.js';
|
2
1
|
import * as p from '@clack/prompts';
|
3
2
|
import { jest } from '@jest/globals';
|
3
|
+
import { parseAndModifyConfigContent, withPayloadStatement } from './wrap-next-config.js';
|
4
4
|
const esmConfigs = {
|
5
5
|
defaultNextConfig: `/** @type {import('next').NextConfig} */
|
6
6
|
const nextConfig = {};
|
7
7
|
export default nextConfig;
|
8
|
+
`,
|
9
|
+
nextConfigExportNamedDefault: `const nextConfig = {};
|
10
|
+
const wrapped = someFunc(asdf);
|
11
|
+
export { wrapped as default };
|
8
12
|
`,
|
9
13
|
nextConfigWithFunc: `const nextConfig = {};
|
10
14
|
export default someFunc(nextConfig);
|
@@ -13,10 +17,6 @@ export default someFunc(nextConfig);
|
|
13
17
|
export default someFunc(
|
14
18
|
nextConfig
|
15
19
|
);
|
16
|
-
`,
|
17
|
-
nextConfigExportNamedDefault: `const nextConfig = {};
|
18
|
-
const wrapped = someFunc(asdf);
|
19
|
-
export { wrapped as default };
|
20
20
|
`,
|
21
21
|
nextConfigWithSpread: `const nextConfig = {
|
22
22
|
...someConfig,
|
@@ -25,12 +25,16 @@ export default nextConfig;
|
|
25
25
|
`
|
26
26
|
};
|
27
27
|
const cjsConfigs = {
|
28
|
+
anonConfig: `module.exports = {};`,
|
28
29
|
defaultNextConfig: `
|
29
30
|
/** @type {import('next').NextConfig} */
|
30
31
|
const nextConfig = {};
|
31
32
|
module.exports = nextConfig;
|
32
33
|
`,
|
33
|
-
|
34
|
+
nextConfigExportNamedDefault: `const nextConfig = {};
|
35
|
+
const wrapped = someFunc(asdf);
|
36
|
+
module.exports = wrapped;
|
37
|
+
`,
|
34
38
|
nextConfigWithFunc: `const nextConfig = {};
|
35
39
|
module.exports = someFunc(nextConfig);
|
36
40
|
`,
|
@@ -38,10 +42,6 @@ module.exports = someFunc(nextConfig);
|
|
38
42
|
module.exports = someFunc(
|
39
43
|
nextConfig
|
40
44
|
);
|
41
|
-
`,
|
42
|
-
nextConfigExportNamedDefault: `const nextConfig = {};
|
43
|
-
const wrapped = someFunc(asdf);
|
44
|
-
module.exports = wrapped;
|
45
45
|
`,
|
46
46
|
nextConfigWithSpread: `const nextConfig = { ...someConfig };
|
47
47
|
module.exports = nextConfig;
|
@@ -63,7 +63,7 @@ describe('parseAndInsertWithPayload', ()=>{
|
|
63
63
|
it('should parse the config with a function on a new line', ()=>{
|
64
64
|
const { modifiedConfigContent } = parseAndModifyConfigContent(esmConfigs.nextConfigWithFuncMultiline, configType);
|
65
65
|
expect(modifiedConfigContent).toContain(importStatement);
|
66
|
-
expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n
|
66
|
+
expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n {2}nextConfig\n\)\)/);
|
67
67
|
});
|
68
68
|
it('should parse the config with a spread', ()=>{
|
69
69
|
const { modifiedConfigContent } = parseAndModifyConfigContent(esmConfigs.nextConfigWithSpread, configType);
|
@@ -99,7 +99,7 @@ describe('parseAndInsertWithPayload', ()=>{
|
|
99
99
|
it('should parse the config with a function on a new line', ()=>{
|
100
100
|
const { modifiedConfigContent } = parseAndModifyConfigContent(cjsConfigs.nextConfigWithFuncMultiline, configType);
|
101
101
|
expect(modifiedConfigContent).toContain(requireStatement);
|
102
|
-
expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n
|
102
|
+
expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n {2}nextConfig\n\)\)/);
|
103
103
|
});
|
104
104
|
it('should parse the config with a named export as default', ()=>{
|
105
105
|
const { modifiedConfigContent } = parseAndModifyConfigContent(cjsConfigs.nextConfigExportNamedDefault, configType);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/wrap-next-config.spec.ts"],"sourcesContent":["import
|
1
|
+
{"version":3,"sources":["../../src/lib/wrap-next-config.spec.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport { jest } from '@jest/globals'\n\nimport { parseAndModifyConfigContent, withPayloadStatement } from './wrap-next-config.js'\n\nconst esmConfigs = {\n defaultNextConfig: `/** @type {import('next').NextConfig} */\nconst nextConfig = {};\nexport default nextConfig;\n`,\n nextConfigExportNamedDefault: `const nextConfig = {};\nconst wrapped = someFunc(asdf);\nexport { wrapped as default };\n`,\n nextConfigWithFunc: `const nextConfig = {};\nexport default someFunc(nextConfig);\n`,\n nextConfigWithFuncMultiline: `const nextConfig = {};;\nexport default someFunc(\n nextConfig\n);\n`,\n nextConfigWithSpread: `const nextConfig = {\n ...someConfig,\n};\nexport default nextConfig;\n`,\n}\n\nconst cjsConfigs = {\n anonConfig: `module.exports = {};`,\n defaultNextConfig: `\n /** @type {import('next').NextConfig} */\nconst nextConfig = {};\nmodule.exports = nextConfig;\n`,\n nextConfigExportNamedDefault: `const nextConfig = {};\nconst wrapped = someFunc(asdf);\nmodule.exports = wrapped;\n`,\n nextConfigWithFunc: `const nextConfig = {};\nmodule.exports = someFunc(nextConfig);\n`,\n nextConfigWithFuncMultiline: `const nextConfig = {};\nmodule.exports = someFunc(\n nextConfig\n);\n`,\n nextConfigWithSpread: `const nextConfig = { ...someConfig };\nmodule.exports = nextConfig;\n`,\n}\n\ndescribe('parseAndInsertWithPayload', () => {\n describe('esm', () => {\n const configType = 'esm'\n const importStatement = withPayloadStatement[configType]\n it('should parse the default next config', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n esmConfigs.defaultNextConfig,\n configType,\n )\n expect(modifiedConfigContent).toContain(importStatement)\n expect(modifiedConfigContent).toContain('withPayload(nextConfig)')\n })\n it('should parse the config with a function', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n esmConfigs.nextConfigWithFunc,\n configType,\n )\n expect(modifiedConfigContent).toContain('withPayload(someFunc(nextConfig))')\n })\n\n it('should parse the config with a function on a new line', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n esmConfigs.nextConfigWithFuncMultiline,\n configType,\n )\n expect(modifiedConfigContent).toContain(importStatement)\n expect(modifiedConfigContent).toMatch(/withPayload\\(someFunc\\(\\n {2}nextConfig\\n\\)\\)/)\n })\n\n it('should parse the config with a spread', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n esmConfigs.nextConfigWithSpread,\n configType,\n )\n expect(modifiedConfigContent).toContain(importStatement)\n expect(modifiedConfigContent).toContain('withPayload(nextConfig)')\n })\n\n // Unsupported: export { wrapped as default }\n it('should give warning with a named export as default', () => {\n const warnLogSpy = jest.spyOn(p.log, 'warn').mockImplementation(() => {})\n\n const { modifiedConfigContent, success } = parseAndModifyConfigContent(\n esmConfigs.nextConfigExportNamedDefault,\n configType,\n )\n expect(modifiedConfigContent).toContain(importStatement)\n expect(success).toBe(false)\n\n expect(warnLogSpy).toHaveBeenCalledWith(\n expect.stringContaining('Could not automatically wrap'),\n )\n })\n })\n\n describe('cjs', () => {\n const configType = 'cjs'\n const requireStatement = withPayloadStatement[configType]\n it('should parse the default next config', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n cjsConfigs.defaultNextConfig,\n configType,\n )\n expect(modifiedConfigContent).toContain(requireStatement)\n expect(modifiedConfigContent).toContain('withPayload(nextConfig)')\n })\n it('should parse anonymous default config', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n cjsConfigs.anonConfig,\n configType,\n )\n expect(modifiedConfigContent).toContain(requireStatement)\n expect(modifiedConfigContent).toContain('withPayload({})')\n })\n it('should parse the config with a function', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n cjsConfigs.nextConfigWithFunc,\n configType,\n )\n expect(modifiedConfigContent).toContain('withPayload(someFunc(nextConfig))')\n })\n it('should parse the config with a function on a new line', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n cjsConfigs.nextConfigWithFuncMultiline,\n configType,\n )\n expect(modifiedConfigContent).toContain(requireStatement)\n expect(modifiedConfigContent).toMatch(/withPayload\\(someFunc\\(\\n {2}nextConfig\\n\\)\\)/)\n })\n it('should parse the config with a named export as default', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n cjsConfigs.nextConfigExportNamedDefault,\n configType,\n )\n expect(modifiedConfigContent).toContain(requireStatement)\n expect(modifiedConfigContent).toContain('withPayload(wrapped)')\n })\n\n it('should parse the config with a spread', () => {\n const { modifiedConfigContent } = parseAndModifyConfigContent(\n cjsConfigs.nextConfigWithSpread,\n configType,\n )\n expect(modifiedConfigContent).toContain(requireStatement)\n expect(modifiedConfigContent).toContain('withPayload(nextConfig)')\n })\n })\n})\n"],"names":["p","jest","parseAndModifyConfigContent","withPayloadStatement","esmConfigs","defaultNextConfig","nextConfigExportNamedDefault","nextConfigWithFunc","nextConfigWithFuncMultiline","nextConfigWithSpread","cjsConfigs","anonConfig","describe","configType","importStatement","it","modifiedConfigContent","expect","toContain","toMatch","warnLogSpy","spyOn","log","mockImplementation","success","toBe","toHaveBeenCalledWith","stringContaining","requireStatement"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"write-env-file.d.ts","sourceRoot":"","sources":["../../src/lib/write-env-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAI3D,wDAAwD;AACxD,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"write-env-file.d.ts","sourceRoot":"","sources":["../../src/lib/write-env-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAI3D,wDAAwD;AACxD,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DhB"}
|
@@ -9,33 +9,33 @@ import { debug, error } from '../utils/log.js';
|
|
9
9
|
}
|
10
10
|
const envOutputPath = path.join(projectDir, '.env');
|
11
11
|
try {
|
12
|
+
let fileContents;
|
13
|
+
if (template?.type === 'starter') {
|
14
|
+
// Parse .env file into key/value pairs
|
15
|
+
const envExample = path.join(projectDir, '.env.example');
|
16
|
+
const envFile = await fs.readFile(envExample, 'utf8');
|
17
|
+
fileContents = `# Added by Payload\n` + envFile.split('\n').filter((e)=>e).map((line)=>{
|
18
|
+
if (line.startsWith('#') || !line.includes('=')) return line;
|
19
|
+
const split = line.split('=');
|
20
|
+
const key = split[0];
|
21
|
+
let value = split[1];
|
22
|
+
if (key === 'MONGODB_URI' || key === 'MONGO_URL' || key === 'DATABASE_URI') {
|
23
|
+
value = databaseUri;
|
24
|
+
}
|
25
|
+
if (key === 'PAYLOAD_SECRET' || key === 'PAYLOAD_SECRET_KEY') {
|
26
|
+
value = payloadSecret;
|
27
|
+
}
|
28
|
+
return `${key}=${value}`;
|
29
|
+
}).join('\n');
|
30
|
+
} else {
|
31
|
+
fileContents = `# Added by Payload\nDATABASE_URI=${databaseUri}\nPAYLOAD_SECRET=${payloadSecret}\n`;
|
32
|
+
}
|
12
33
|
if (fs.existsSync(envOutputPath)) {
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
const envWithValues = envFile.split('\n').filter((e)=>e).map((line)=>{
|
17
|
-
if (line.startsWith('#') || !line.includes('=')) return line;
|
18
|
-
const split = line.split('=');
|
19
|
-
const key = split[0];
|
20
|
-
let value = split[1];
|
21
|
-
if (key === 'MONGODB_URI' || key === 'MONGO_URL' || key === 'DATABASE_URI') {
|
22
|
-
value = databaseUri;
|
23
|
-
}
|
24
|
-
if (key === 'PAYLOAD_SECRET' || key === 'PAYLOAD_SECRET_KEY') {
|
25
|
-
value = payloadSecret;
|
26
|
-
}
|
27
|
-
return `${key}=${value}`;
|
28
|
-
});
|
29
|
-
// Write new .env file
|
30
|
-
await fs.writeFile(envOutputPath, envWithValues.join('\n'));
|
31
|
-
} else {
|
32
|
-
const existingEnv = await fs.readFile(envOutputPath, 'utf8');
|
33
|
-
const newEnv = existingEnv + `\nDATABASE_URI=${databaseUri}\nPAYLOAD_SECRET=${payloadSecret}\n`;
|
34
|
-
await fs.writeFile(envOutputPath, newEnv);
|
35
|
-
}
|
34
|
+
const existingEnv = await fs.readFile(envOutputPath, 'utf8');
|
35
|
+
const newEnv = existingEnv + '\n# Added by Payload' + fileContents;
|
36
|
+
await fs.writeFile(envOutputPath, newEnv);
|
36
37
|
} else {
|
37
|
-
|
38
|
-
await fs.outputFile(`${projectDir}/.env`, content);
|
38
|
+
await fs.writeFile(envOutputPath, fileContents);
|
39
39
|
}
|
40
40
|
} catch (err) {
|
41
41
|
error('Unable to write .env file');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/write-env-file.ts"],"sourcesContent":["import fs from 'fs-extra'\nimport path from 'path'\n\nimport type { CliArgs, ProjectTemplate } from '../types.js'\n\nimport { debug, error } from '../utils/log.js'\n\n/** Parse and swap .env.example values and write .env */\nexport async function writeEnvFile(args: {\n cliArgs: CliArgs\n databaseUri: string\n payloadSecret: string\n projectDir: string\n template?: ProjectTemplate\n}): Promise<void> {\n const { cliArgs, databaseUri, payloadSecret, projectDir, template } = args\n\n if (cliArgs['--dry-run']) {\n debug(`DRY RUN: .env file created`)\n return\n }\n\n const envOutputPath = path.join(projectDir, '.env')\n\n try {\n
|
1
|
+
{"version":3,"sources":["../../src/lib/write-env-file.ts"],"sourcesContent":["import fs from 'fs-extra'\nimport path from 'path'\n\nimport type { CliArgs, ProjectTemplate } from '../types.js'\n\nimport { debug, error } from '../utils/log.js'\n\n/** Parse and swap .env.example values and write .env */\nexport async function writeEnvFile(args: {\n cliArgs: CliArgs\n databaseUri: string\n payloadSecret: string\n projectDir: string\n template?: ProjectTemplate\n}): Promise<void> {\n const { cliArgs, databaseUri, payloadSecret, projectDir, template } = args\n\n if (cliArgs['--dry-run']) {\n debug(`DRY RUN: .env file created`)\n return\n }\n\n const envOutputPath = path.join(projectDir, '.env')\n\n try {\n let fileContents: string\n\n if (template?.type === 'starter') {\n // Parse .env file into key/value pairs\n const envExample = path.join(projectDir, '.env.example')\n const envFile = await fs.readFile(envExample, 'utf8')\n\n fileContents =\n `# Added by Payload\\n` +\n envFile\n .split('\\n')\n .filter((e) => e)\n .map((line) => {\n if (line.startsWith('#') || !line.includes('=')) return line\n\n const split = line.split('=')\n const key = split[0]\n let value = split[1]\n\n if (key === 'MONGODB_URI' || key === 'MONGO_URL' || key === 'DATABASE_URI') {\n value = databaseUri\n }\n if (key === 'PAYLOAD_SECRET' || key === 'PAYLOAD_SECRET_KEY') {\n value = payloadSecret\n }\n\n return `${key}=${value}`\n })\n .join('\\n')\n } else {\n fileContents = `# Added by Payload\\nDATABASE_URI=${databaseUri}\\nPAYLOAD_SECRET=${payloadSecret}\\n`\n }\n\n if (fs.existsSync(envOutputPath)) {\n const existingEnv = await fs.readFile(envOutputPath, 'utf8')\n const newEnv = existingEnv + '\\n# Added by Payload' + fileContents\n await fs.writeFile(envOutputPath, newEnv)\n } else {\n await fs.writeFile(envOutputPath, fileContents)\n }\n } catch (err: unknown) {\n error('Unable to write .env file')\n if (err instanceof Error) {\n error(err.message)\n }\n process.exit(1)\n }\n}\n"],"names":["fs","path","debug","error","writeEnvFile","args","cliArgs","databaseUri","payloadSecret","projectDir","template","envOutputPath","join","fileContents","type","envExample","envFile","readFile","split","filter","e","map","line","startsWith","includes","key","value","existsSync","existingEnv","newEnv","writeFile","err","Error","message","process","exit"],"mappings":"AAAA,OAAOA,QAAQ,WAAU;AACzB,OAAOC,UAAU,OAAM;AAIvB,SAASC,KAAK,EAAEC,KAAK,QAAQ,kBAAiB;AAE9C,sDAAsD,GACtD,OAAO,eAAeC,aAAaC,IAMlC;IACC,MAAM,EAAEC,OAAO,EAAEC,WAAW,EAAEC,aAAa,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAGL;IAEtE,IAAIC,OAAO,CAAC,YAAY,EAAE;QACxBJ,MAAM,CAAC,0BAA0B,CAAC;QAClC;IACF;IAEA,MAAMS,gBAAgBV,KAAKW,IAAI,CAACH,YAAY;IAE5C,IAAI;QACF,IAAII;QAEJ,IAAIH,UAAUI,SAAS,WAAW;YAChC,uCAAuC;YACvC,MAAMC,aAAad,KAAKW,IAAI,CAACH,YAAY;YACzC,MAAMO,UAAU,MAAMhB,GAAGiB,QAAQ,CAACF,YAAY;YAE9CF,eACE,CAAC,oBAAoB,CAAC,GACtBG,QACGE,KAAK,CAAC,MACNC,MAAM,CAAC,CAACC,IAAMA,GACdC,GAAG,CAAC,CAACC;gBACJ,IAAIA,KAAKC,UAAU,CAAC,QAAQ,CAACD,KAAKE,QAAQ,CAAC,MAAM,OAAOF;gBAExD,MAAMJ,QAAQI,KAAKJ,KAAK,CAAC;gBACzB,MAAMO,MAAMP,KAAK,CAAC,EAAE;gBACpB,IAAIQ,QAAQR,KAAK,CAAC,EAAE;gBAEpB,IAAIO,QAAQ,iBAAiBA,QAAQ,eAAeA,QAAQ,gBAAgB;oBAC1EC,QAAQnB;gBACV;gBACA,IAAIkB,QAAQ,oBAAoBA,QAAQ,sBAAsB;oBAC5DC,QAAQlB;gBACV;gBAEA,OAAO,CAAC,EAAEiB,IAAI,CAAC,EAAEC,MAAM,CAAC;YAC1B,GACCd,IAAI,CAAC;QACZ,OAAO;YACLC,eAAe,CAAC,iCAAiC,EAAEN,YAAY,iBAAiB,EAAEC,cAAc,EAAE,CAAC;QACrG;QAEA,IAAIR,GAAG2B,UAAU,CAAChB,gBAAgB;YAChC,MAAMiB,cAAc,MAAM5B,GAAGiB,QAAQ,CAACN,eAAe;YACrD,MAAMkB,SAASD,cAAc,yBAAyBf;YACtD,MAAMb,GAAG8B,SAAS,CAACnB,eAAekB;QACpC,OAAO;YACL,MAAM7B,GAAG8B,SAAS,CAACnB,eAAeE;QACpC;IACF,EAAE,OAAOkB,KAAc;QACrB5B,MAAM;QACN,IAAI4B,eAAeC,OAAO;YACxB7B,MAAM4B,IAAIE,OAAO;QACnB;QACAC,QAAQC,IAAI,CAAC;IACf;AACF"}
|
package/dist/main.js
CHANGED
@@ -73,7 +73,7 @@ export class Main {
|
|
73
73
|
initialValue: false,
|
74
74
|
message: chalk.bold(`Upgrade Payload in this project?`)
|
75
75
|
});
|
76
|
-
if (!p.isCancel(shouldUpdate)
|
76
|
+
if (!p.isCancel(shouldUpdate) && shouldUpdate) {
|
77
77
|
const { message, success: updateSuccess } = await updatePayloadInProject(nextAppDetails);
|
78
78
|
if (updateSuccess) {
|
79
79
|
info(message);
|
@@ -125,7 +125,7 @@ export class Main {
|
|
125
125
|
process.exit(1);
|
126
126
|
}
|
127
127
|
await configurePayloadConfig({
|
128
|
-
dbDetails,
|
128
|
+
dbType: dbDetails?.type,
|
129
129
|
projectDirOrConfigPath: {
|
130
130
|
payloadConfigPath: result.payloadConfigPath
|
131
131
|
}
|
package/dist/main.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/main.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\nimport arg from 'arg'\nimport chalk from 'chalk'\nimport figures from 'figures'\nimport path from 'path'\n\nimport type { CliArgs } from './types.js'\n\nimport { configurePayloadConfig } from './lib/configure-payload-config.js'\nimport { 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 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"],"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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"}
|
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"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/scripts/pack-template-files.ts"],"sourcesContent":["import fs from 'fs'\nimport fsp from 'fs/promises'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\n// eslint-disable-next-line @typescript-eslint/no-floating-promises\nmain()\n\n/**\n * Copy the necessary template files from `templates/blank-3.0` to `dist/template`\n *\n * Eventually, this should be replaced with using tar.x to stream from the git repo\n */\n\nasync function main() {\n const root = path.resolve(dirname, '../../../../')\n const outputPath = path.resolve(dirname, '../../dist/template')\n const sourceTemplatePath = path.resolve(root, 'templates/blank-3.0')\n\n if (!fs.existsSync(sourceTemplatePath)) {\n throw new Error(`Source path does not exist: ${sourceTemplatePath}`)\n }\n\n if (!fs.existsSync(outputPath)) {\n fs.mkdirSync(outputPath, { recursive: true })\n }\n\n // Copy the src directory from `templates/blank-3.0` to `dist`\n const srcPath = path.resolve(sourceTemplatePath, 'src')\n const distSrcPath = path.resolve(outputPath, 'src')\n // Copy entire file structure from src to dist\n await fsp.cp(srcPath, distSrcPath, { recursive: true })\n}\n"],"names":["fs","fsp","fileURLToPath","path","filename","url","dirname","main","root","resolve","outputPath","sourceTemplatePath","existsSync","Error","mkdirSync","recursive","srcPath","distSrcPath","cp"],"
|
1
|
+
{"version":3,"sources":["../../src/scripts/pack-template-files.ts"],"sourcesContent":["import fs from 'fs'\nimport fsp from 'fs/promises'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\n// eslint-disable-next-line @typescript-eslint/no-floating-promises\nmain()\n\n/**\n * Copy the necessary template files from `templates/blank-3.0` to `dist/template`\n *\n * Eventually, this should be replaced with using tar.x to stream from the git repo\n */\n\nasync function main() {\n const root = path.resolve(dirname, '../../../../')\n const outputPath = path.resolve(dirname, '../../dist/template')\n const sourceTemplatePath = path.resolve(root, 'templates/blank-3.0')\n\n if (!fs.existsSync(sourceTemplatePath)) {\n throw new Error(`Source path does not exist: ${sourceTemplatePath}`)\n }\n\n if (!fs.existsSync(outputPath)) {\n fs.mkdirSync(outputPath, { recursive: true })\n }\n\n // Copy the src directory from `templates/blank-3.0` to `dist`\n const srcPath = path.resolve(sourceTemplatePath, 'src')\n const distSrcPath = path.resolve(outputPath, 'src')\n // Copy entire file structure from src to dist\n await fsp.cp(srcPath, distSrcPath, { recursive: true })\n}\n"],"names":["fs","fsp","fileURLToPath","path","filename","url","dirname","main","root","resolve","outputPath","sourceTemplatePath","existsSync","Error","mkdirSync","recursive","srcPath","distSrcPath","cp"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,SAAS,cAAa;AAC7B,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,UAAU,OAAM;AACvB,MAAMC,WAAWF,cAAc,YAAYG,GAAG;AAC9C,MAAMC,UAAUH,KAAKG,OAAO,CAACF;AAE7B,mEAAmE;AACnEG;AAEA;;;;CAIC,GAED,eAAeA;IACb,MAAMC,OAAOL,KAAKM,OAAO,CAACH,SAAS;IACnC,MAAMI,aAAaP,KAAKM,OAAO,CAACH,SAAS;IACzC,MAAMK,qBAAqBR,KAAKM,OAAO,CAACD,MAAM;IAE9C,IAAI,CAACR,GAAGY,UAAU,CAACD,qBAAqB;QACtC,MAAM,IAAIE,MAAM,CAAC,4BAA4B,EAAEF,mBAAmB,CAAC;IACrE;IAEA,IAAI,CAACX,GAAGY,UAAU,CAACF,aAAa;QAC9BV,GAAGc,SAAS,CAACJ,YAAY;YAAEK,WAAW;QAAK;IAC7C;IAEA,8DAA8D;IAC9D,MAAMC,UAAUb,KAAKM,OAAO,CAACE,oBAAoB;IACjD,MAAMM,cAAcd,KAAKM,OAAO,CAACC,YAAY;IAC7C,8CAA8C;IAC9C,MAAMT,IAAIiB,EAAE,CAACF,SAASC,aAAa;QAAEF,WAAW;IAAK;AACvD"}
|