create-payload-app 1.0.0 → 3.0.0-alpha.54

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 (91) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +3 -3
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/configure-payload-config.d.ts +11 -0
  7. package/dist/lib/configure-payload-config.d.ts.map +1 -0
  8. package/dist/lib/configure-payload-config.js +15 -53
  9. package/dist/lib/configure-payload-config.js.map +1 -0
  10. package/dist/lib/create-project.d.ts +14 -0
  11. package/dist/lib/create-project.d.ts.map +1 -0
  12. package/dist/lib/create-project.js +84 -24
  13. package/dist/lib/create-project.js.map +1 -0
  14. package/dist/lib/create-project.spec.d.ts +2 -0
  15. package/dist/lib/create-project.spec.d.ts.map +1 -0
  16. package/dist/lib/create-project.spec.js +30 -75
  17. package/dist/lib/create-project.spec.js.map +1 -0
  18. package/dist/lib/generate-secret.d.ts +2 -0
  19. package/dist/lib/generate-secret.d.ts.map +1 -0
  20. package/dist/lib/generate-secret.js +1 -1
  21. package/dist/lib/generate-secret.js.map +1 -0
  22. package/dist/lib/init-next.d.ts +29 -0
  23. package/dist/lib/init-next.d.ts.map +1 -0
  24. package/dist/lib/init-next.js +285 -0
  25. package/dist/lib/init-next.js.map +1 -0
  26. package/dist/lib/packages.d.ts +9 -0
  27. package/dist/lib/packages.d.ts.map +1 -0
  28. package/dist/lib/packages.js +8 -52
  29. package/dist/lib/packages.js.map +1 -0
  30. package/dist/lib/parse-project-name.d.ts +3 -0
  31. package/dist/lib/parse-project-name.d.ts.map +1 -0
  32. package/dist/lib/parse-project-name.js +53 -12
  33. package/dist/lib/parse-project-name.js.map +1 -0
  34. package/dist/lib/parse-template.d.ts +3 -0
  35. package/dist/lib/parse-template.d.ts.map +1 -0
  36. package/dist/lib/parse-template.js +50 -20
  37. package/dist/lib/parse-template.js.map +1 -0
  38. package/dist/lib/select-db.d.ts +3 -0
  39. package/dist/lib/select-db.d.ts.map +1 -0
  40. package/dist/lib/select-db.js +72 -31
  41. package/dist/lib/select-db.js.map +1 -0
  42. package/dist/lib/templates.d.ts +4 -0
  43. package/dist/lib/templates.d.ts.map +1 -0
  44. package/dist/lib/templates.js +17 -11
  45. package/dist/lib/templates.js.map +1 -0
  46. package/dist/lib/wrap-next-config.d.ts +12 -0
  47. package/dist/lib/wrap-next-config.d.ts.map +1 -0
  48. package/dist/lib/wrap-next-config.js +110 -0
  49. package/dist/lib/wrap-next-config.js.map +1 -0
  50. package/dist/lib/wrap-next-config.spec.d.ts +2 -0
  51. package/dist/lib/wrap-next-config.spec.d.ts.map +1 -0
  52. package/dist/lib/wrap-next-config.spec.js +98 -0
  53. package/dist/lib/wrap-next-config.spec.js.map +1 -0
  54. package/dist/lib/write-env-file.d.ts +10 -0
  55. package/dist/lib/write-env-file.d.ts.map +1 -0
  56. package/dist/lib/write-env-file.js +9 -6
  57. package/dist/lib/write-env-file.js.map +1 -0
  58. package/dist/main.d.ts +7 -0
  59. package/dist/main.d.ts.map +1 -0
  60. package/dist/main.js +176 -60
  61. package/dist/main.js.map +1 -0
  62. package/dist/scripts/pack-template-files.d.ts +2 -0
  63. package/dist/scripts/pack-template-files.d.ts.map +1 -0
  64. package/dist/scripts/pack-template-files.js +43 -0
  65. package/dist/scripts/pack-template-files.js.map +1 -0
  66. package/dist/template/src/app/(payload)/admin/[[...segments]]/page.tsx +17 -0
  67. package/dist/template/src/app/(payload)/api/[...slug]/route.ts +9 -0
  68. package/dist/template/src/app/(payload)/api/graphql/route.ts +6 -0
  69. package/dist/template/src/app/(payload)/api/graphql-playground/route.ts +6 -0
  70. package/dist/template/src/app/(payload)/custom.scss +0 -0
  71. package/dist/template/src/app/(payload)/layout.tsx +16 -0
  72. package/dist/template/src/app/my-route/route.ts +14 -0
  73. package/dist/template/src/collections/Users.ts +13 -0
  74. package/dist/template/src/payload.config.ts +38 -0
  75. package/dist/types.d.ts +55 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +1 -1
  78. package/dist/types.js.map +1 -0
  79. package/dist/utils/copy-recursive-sync.d.ts +5 -0
  80. package/dist/utils/copy-recursive-sync.d.ts.map +1 -0
  81. package/dist/utils/copy-recursive-sync.js +34 -0
  82. package/dist/utils/copy-recursive-sync.js.map +1 -0
  83. package/dist/utils/log.d.ts +6 -0
  84. package/dist/utils/log.d.ts.map +1 -0
  85. package/dist/utils/log.js +62 -15
  86. package/dist/utils/log.js.map +1 -0
  87. package/dist/utils/messages.d.ts +11 -0
  88. package/dist/utils/messages.d.ts.map +1 -0
  89. package/dist/utils/messages.js +47 -16
  90. package/dist/utils/messages.js.map +1 -0
  91. package/package.json +27 -10
@@ -13,4 +13,4 @@ function generateSecret() {
13
13
  return (0, _crypto.randomBytes)(32).toString('hex').slice(0, 24);
14
14
  }
15
15
 
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZ2VuZXJhdGUtc2VjcmV0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTZWNyZXQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jykuc2xpY2UoMCwgMjQpXG59XG4iXSwibmFtZXMiOlsiZ2VuZXJhdGVTZWNyZXQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwic2xpY2UiXSwibWFwcGluZ3MiOiI7Ozs7K0JBRWdCQTs7O2VBQUFBOzs7d0JBRlk7QUFFckIsU0FBU0E7SUFDZCxPQUFPQyxJQUFBQSxtQkFBVyxFQUFDLElBQUlDLFFBQVEsQ0FBQyxPQUFPQyxLQUFLLENBQUMsR0FBRztBQUNsRCJ9
16
+ //# sourceMappingURL=generate-secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/generate-secret.ts"],"sourcesContent":["import { randomBytes } from 'crypto'\n\nexport function generateSecret(): string {\n return randomBytes(32).toString('hex').slice(0, 24)\n}\n"],"names":["generateSecret","randomBytes","toString","slice"],"mappings":";;;;+BAEgBA;;;eAAAA;;;wBAFY;AAErB,SAASA;IACd,OAAOC,IAAAA,mBAAW,EAAC,IAAIC,QAAQ,CAAC,OAAOC,KAAK,CAAC,GAAG;AAClD"}
@@ -0,0 +1,29 @@
1
+ import type { CliArgs, DbType, PackageManager } from '../types.js';
2
+ type InitNextArgs = Pick<CliArgs, '--debug'> & {
3
+ dbType: DbType;
4
+ nextAppDetails?: NextAppDetails;
5
+ packageManager: PackageManager;
6
+ projectDir: string;
7
+ useDistFiles?: boolean;
8
+ };
9
+ type InitNextResult = {
10
+ isSrcDir: boolean;
11
+ nextAppDir: string;
12
+ payloadConfigPath: string;
13
+ success: true;
14
+ } | {
15
+ isSrcDir: boolean;
16
+ nextAppDir?: string;
17
+ reason: string;
18
+ success: false;
19
+ };
20
+ export declare function initNext(args: InitNextArgs): Promise<InitNextResult>;
21
+ type NextAppDetails = {
22
+ hasTopLevelLayout: boolean;
23
+ isSrcDir: boolean;
24
+ nextAppDir?: string;
25
+ nextConfigPath?: string;
26
+ };
27
+ export declare function getNextAppDetails(projectDir: string): Promise<NextAppDetails>;
28
+ export {};
29
+ //# sourceMappingURL=init-next.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAOlE,KAAK,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG;IAC7C,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,CAAA;AAED,KAAK,cAAc,GACf;IACE,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,IAAI,CAAA;CACd,GACD;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAA;AAE9E,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAoD1E;AAiID,KAAK,cAAc,GAAG;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BnF"}
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ getNextAppDetails: function() {
13
+ return getNextAppDetails;
14
+ },
15
+ initNext: function() {
16
+ return initNext;
17
+ }
18
+ });
19
+ const _prompts = /*#__PURE__*/ _interop_require_wildcard(require("@clack/prompts"));
20
+ const _commentjson = require("comment-json");
21
+ const _execa = /*#__PURE__*/ _interop_require_default(require("execa"));
22
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
23
+ const _globby = /*#__PURE__*/ _interop_require_default(require("globby"));
24
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
25
+ const _util = require("util");
26
+ const _nodeurl = require("node:url");
27
+ const _copyrecursivesync = require("../utils/copy-recursive-sync.js");
28
+ const _log = require("../utils/log.js");
29
+ const _messages = require("../utils/messages.js");
30
+ const _wrapnextconfig = require("./wrap-next-config.js");
31
+ function _interop_require_default(obj) {
32
+ return obj && obj.__esModule ? obj : {
33
+ default: obj
34
+ };
35
+ }
36
+ function _getRequireWildcardCache(nodeInterop) {
37
+ if (typeof WeakMap !== "function") return null;
38
+ var cacheBabelInterop = new WeakMap();
39
+ var cacheNodeInterop = new WeakMap();
40
+ return (_getRequireWildcardCache = function(nodeInterop) {
41
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
42
+ })(nodeInterop);
43
+ }
44
+ function _interop_require_wildcard(obj, nodeInterop) {
45
+ if (!nodeInterop && obj && obj.__esModule) {
46
+ return obj;
47
+ }
48
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
49
+ return {
50
+ default: obj
51
+ };
52
+ }
53
+ var cache = _getRequireWildcardCache(nodeInterop);
54
+ if (cache && cache.has(obj)) {
55
+ return cache.get(obj);
56
+ }
57
+ var newObj = {
58
+ __proto__: null
59
+ };
60
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
61
+ for(var key in obj){
62
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
63
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
64
+ if (desc && (desc.get || desc.set)) {
65
+ Object.defineProperty(newObj, key, desc);
66
+ } else {
67
+ newObj[key] = obj[key];
68
+ }
69
+ }
70
+ }
71
+ newObj.default = obj;
72
+ if (cache) {
73
+ cache.set(obj, newObj);
74
+ }
75
+ return newObj;
76
+ }
77
+ const readFile = (0, _util.promisify)(_fs.default.readFile);
78
+ const writeFile = (0, _util.promisify)(_fs.default.writeFile);
79
+ const filename = (0, _nodeurl.fileURLToPath)(require("url").pathToFileURL(__filename).toString());
80
+ const dirname = _path.default.dirname(filename);
81
+ async function initNext(args) {
82
+ const { dbType: dbType, packageManager, projectDir } = args;
83
+ const nextAppDetails = args.nextAppDetails || await getNextAppDetails(projectDir);
84
+ const { hasTopLevelLayout, isSrcDir, nextAppDir } = nextAppDetails || await getNextAppDetails(projectDir);
85
+ if (!nextAppDir) {
86
+ return {
87
+ isSrcDir,
88
+ reason: `Could not find app directory in ${projectDir}`,
89
+ success: false
90
+ };
91
+ }
92
+ if (hasTopLevelLayout) {
93
+ // Output directions for user to move all files from app to top-level directory named `(app)`
94
+ _prompts.log.warn((0, _messages.moveMessage)({
95
+ nextAppDir,
96
+ projectDir
97
+ }));
98
+ return {
99
+ isSrcDir,
100
+ nextAppDir,
101
+ reason: 'Found existing layout.tsx in app directory',
102
+ success: false
103
+ };
104
+ }
105
+ const installSpinner = _prompts.spinner();
106
+ installSpinner.start('Installing Payload and dependencies...');
107
+ const configurationResult = installAndConfigurePayload({
108
+ ...args,
109
+ nextAppDetails,
110
+ useDistFiles: true
111
+ });
112
+ if (configurationResult.success === false) {
113
+ installSpinner.stop(configurationResult.reason, 1);
114
+ return {
115
+ ...configurationResult,
116
+ isSrcDir,
117
+ success: false
118
+ };
119
+ }
120
+ const { success: installSuccess } = await installDeps(projectDir, packageManager, dbType);
121
+ if (!installSuccess) {
122
+ installSpinner.stop('Failed to install dependencies', 1);
123
+ return {
124
+ ...configurationResult,
125
+ isSrcDir,
126
+ reason: 'Failed to install dependencies',
127
+ success: false
128
+ };
129
+ }
130
+ // Add `@payload-config` to tsconfig.json `paths`
131
+ await addPayloadConfigToTsConfig(projectDir, isSrcDir);
132
+ installSpinner.stop('Successfully installed Payload and dependencies');
133
+ return {
134
+ ...configurationResult,
135
+ isSrcDir,
136
+ nextAppDir,
137
+ success: true
138
+ };
139
+ }
140
+ async function addPayloadConfigToTsConfig(projectDir, isSrcDir) {
141
+ const tsConfigPath = _path.default.resolve(projectDir, 'tsconfig.json');
142
+ const userTsConfigContent = await readFile(tsConfigPath, {
143
+ encoding: 'utf8'
144
+ });
145
+ const userTsConfig = (0, _commentjson.parse)(userTsConfigContent);
146
+ if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {
147
+ userTsConfig.compilerOptions = {};
148
+ }
149
+ if (!userTsConfig.compilerOptions?.paths?.['@payload-config'] && userTsConfig.compilerOptions?.paths) {
150
+ userTsConfig.compilerOptions.paths = {
151
+ ...userTsConfig.compilerOptions.paths || {},
152
+ '@payload-config': [
153
+ `./${isSrcDir ? 'src/' : ''}payload.config.ts`
154
+ ]
155
+ };
156
+ await writeFile(tsConfigPath, (0, _commentjson.stringify)(userTsConfig, null, 2), {
157
+ encoding: 'utf8'
158
+ });
159
+ }
160
+ }
161
+ function installAndConfigurePayload(args) {
162
+ const { '--debug': debug, nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {}, projectDir, useDistFiles } = args;
163
+ if (!nextAppDir || !nextConfigPath) {
164
+ return {
165
+ reason: 'Could not find app directory or next.config.js',
166
+ success: false
167
+ };
168
+ }
169
+ const logDebug = (message)=>{
170
+ if (debug) (0, _log.debug)(message);
171
+ };
172
+ if (!_fs.default.existsSync(projectDir)) {
173
+ return {
174
+ reason: `Could not find specified project directory at ${projectDir}`,
175
+ success: false
176
+ };
177
+ }
178
+ const templateFilesPath = dirname.endsWith('dist') || useDistFiles ? _path.default.resolve(dirname, '../..', 'dist/template') : _path.default.resolve(dirname, '../../../../templates/blank-3.0');
179
+ logDebug(`Using template files from: ${templateFilesPath}`);
180
+ if (!_fs.default.existsSync(templateFilesPath)) {
181
+ return {
182
+ reason: `Could not find template source files from ${templateFilesPath}`,
183
+ success: false
184
+ };
185
+ } else {
186
+ logDebug('Found template source files');
187
+ }
188
+ logDebug(`Copying template files from ${templateFilesPath} to ${nextAppDir}`);
189
+ const templateSrcDir = _path.default.resolve(templateFilesPath, isSrcDir ? '' : 'src');
190
+ logDebug(`templateSrcDir: ${templateSrcDir}`);
191
+ logDebug(`nextAppDir: ${nextAppDir}`);
192
+ logDebug(`projectDir: ${projectDir}`);
193
+ logDebug(`nextConfigPath: ${nextConfigPath}`);
194
+ logDebug(`isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${_path.default.dirname(nextConfigPath)}`);
195
+ // This is a little clunky and needs to account for isSrcDir
196
+ (0, _copyrecursivesync.copyRecursiveSync)(templateSrcDir, _path.default.dirname(nextConfigPath), debug);
197
+ // Wrap next.config.js with withPayload
198
+ (0, _wrapnextconfig.wrapNextConfig)({
199
+ nextConfigPath
200
+ });
201
+ return {
202
+ payloadConfigPath: _path.default.resolve(nextAppDir, '../payload.config.ts'),
203
+ success: true
204
+ };
205
+ }
206
+ async function installDeps(projectDir, packageManager, dbType) {
207
+ const packagesToInstall = [
208
+ 'payload',
209
+ '@payloadcms/next',
210
+ '@payloadcms/richtext-lexical'
211
+ ].map((pkg)=>`${pkg}@alpha`);
212
+ packagesToInstall.push(`@payloadcms/db-${dbType}@alpha`);
213
+ let exitCode = 0;
214
+ switch(packageManager){
215
+ case 'npm':
216
+ {
217
+ ({ exitCode } = await (0, _execa.default)('npm', [
218
+ 'install',
219
+ '--save',
220
+ ...packagesToInstall
221
+ ], {
222
+ cwd: projectDir
223
+ }));
224
+ break;
225
+ }
226
+ case 'yarn':
227
+ case 'pnpm':
228
+ {
229
+ ({ exitCode } = await (0, _execa.default)(packageManager, [
230
+ 'add',
231
+ ...packagesToInstall
232
+ ], {
233
+ cwd: projectDir
234
+ }));
235
+ break;
236
+ }
237
+ case 'bun':
238
+ {
239
+ (0, _log.warning)('Bun support is untested.');
240
+ ({ exitCode } = await (0, _execa.default)('bun', [
241
+ 'add',
242
+ ...packagesToInstall
243
+ ], {
244
+ cwd: projectDir
245
+ }));
246
+ break;
247
+ }
248
+ }
249
+ return {
250
+ success: exitCode === 0
251
+ };
252
+ }
253
+ async function getNextAppDetails(projectDir) {
254
+ const isSrcDir = _fs.default.existsSync(_path.default.resolve(projectDir, 'src'));
255
+ const nextConfigPath = (await (0, _globby.default)('next.config.*js', {
256
+ absolute: true,
257
+ cwd: projectDir
258
+ }))?.[0];
259
+ if (!nextConfigPath || nextConfigPath.length === 0) {
260
+ return {
261
+ hasTopLevelLayout: false,
262
+ isSrcDir,
263
+ nextConfigPath: undefined
264
+ };
265
+ }
266
+ let nextAppDir = (await (0, _globby.default)([
267
+ '**/app'
268
+ ], {
269
+ absolute: true,
270
+ cwd: projectDir,
271
+ onlyDirectories: true
272
+ }))?.[0];
273
+ if (!nextAppDir || nextAppDir.length === 0) {
274
+ nextAppDir = undefined;
275
+ }
276
+ const hasTopLevelLayout = nextAppDir ? _fs.default.existsSync(_path.default.resolve(nextAppDir, 'layout.tsx')) : false;
277
+ return {
278
+ hasTopLevelLayout,
279
+ isSrcDir,
280
+ nextAppDir,
281
+ nextConfigPath
282
+ };
283
+ }
284
+
285
+ //# sourceMappingURL=init-next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import type { CompilerOptions } from 'typescript'\n\nimport * as p from '@clack/prompts'\nimport { parse, stringify } from 'comment-json'\nimport execa from 'execa'\nimport fs from 'fs'\nimport globby from 'globby'\nimport path from 'path'\nimport { promisify } from 'util'\n\nconst readFile = promisify(fs.readFile)\nconst writeFile = promisify(fs.writeFile)\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport { fileURLToPath } from 'node:url'\n\nimport type { CliArgs, DbType, PackageManager } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { debug as origDebug, warning } from '../utils/log.js'\nimport { moveMessage } from '../utils/messages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\ntype InitNextArgs = Pick<CliArgs, '--debug'> & {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n}\n\ntype InitNextResult =\n | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\n\nexport async function initNext(args: InitNextArgs): Promise<InitNextResult> {\n const { dbType: dbType, packageManager, projectDir } = args\n\n const nextAppDetails = args.nextAppDetails || (await getNextAppDetails(projectDir))\n\n const { hasTopLevelLayout, isSrcDir, nextAppDir } =\n nextAppDetails || (await getNextAppDetails(projectDir))\n\n if (!nextAppDir) {\n return { isSrcDir, reason: `Could not find app directory in ${projectDir}`, success: false }\n }\n\n if (hasTopLevelLayout) {\n // Output directions for user to move all files from app to top-level directory named `(app)`\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n return {\n isSrcDir,\n nextAppDir,\n reason: 'Found existing layout.tsx in app directory',\n success: false,\n }\n }\n\n const installSpinner = p.spinner()\n installSpinner.start('Installing Payload and dependencies...')\n\n const configurationResult = installAndConfigurePayload({\n ...args,\n nextAppDetails,\n useDistFiles: true, // Requires running 'pnpm pack-template-files' in cpa\n })\n\n if (configurationResult.success === false) {\n installSpinner.stop(configurationResult.reason, 1)\n return { ...configurationResult, isSrcDir, success: false }\n }\n\n const { success: installSuccess } = await installDeps(projectDir, packageManager, dbType)\n if (!installSuccess) {\n installSpinner.stop('Failed to install dependencies', 1)\n return {\n ...configurationResult,\n isSrcDir,\n reason: 'Failed to install dependencies',\n success: false,\n }\n }\n\n // Add `@payload-config` to tsconfig.json `paths`\n await addPayloadConfigToTsConfig(projectDir, isSrcDir)\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) {\n const tsConfigPath = path.resolve(projectDir, 'tsconfig.json')\n const userTsConfigContent = await readFile(tsConfigPath, {\n encoding: 'utf8',\n })\n const userTsConfig = parse(userTsConfigContent) as {\n compilerOptions?: CompilerOptions\n }\n if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {\n userTsConfig.compilerOptions = {}\n }\n\n if (\n !userTsConfig.compilerOptions?.paths?.['@payload-config'] &&\n userTsConfig.compilerOptions?.paths\n ) {\n userTsConfig.compilerOptions.paths = {\n ...(userTsConfig.compilerOptions.paths || {}),\n '@payload-config': [`./${isSrcDir ? 'src/' : ''}payload.config.ts`],\n }\n await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), { encoding: 'utf8' })\n }\n}\n\nfunction installAndConfigurePayload(\n args: InitNextArgs & { nextAppDetails: NextAppDetails; useDistFiles?: boolean },\n):\n | { payloadConfigPath: string; success: true }\n | { payloadConfigPath?: string; reason: string; success: false } {\n const {\n '--debug': debug,\n nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {},\n projectDir,\n useDistFiles,\n } = args\n\n if (!nextAppDir || !nextConfigPath) {\n return {\n reason: 'Could not find app directory or next.config.js',\n success: false,\n }\n }\n\n const logDebug = (message: string) => {\n if (debug) origDebug(message)\n }\n\n if (!fs.existsSync(projectDir)) {\n return {\n reason: `Could not find specified project directory at ${projectDir}`,\n success: false,\n }\n }\n\n const templateFilesPath =\n dirname.endsWith('dist') || useDistFiles\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank-3.0')\n\n logDebug(`Using template files from: ${templateFilesPath}`)\n\n if (!fs.existsSync(templateFilesPath)) {\n return {\n reason: `Could not find template source files from ${templateFilesPath}`,\n success: false,\n }\n } else {\n logDebug('Found template source files')\n }\n\n logDebug(`Copying template files from ${templateFilesPath} to ${nextAppDir}`)\n\n const templateSrcDir = path.resolve(templateFilesPath, isSrcDir ? '' : 'src')\n\n logDebug(`templateSrcDir: ${templateSrcDir}`)\n logDebug(`nextAppDir: ${nextAppDir}`)\n logDebug(`projectDir: ${projectDir}`)\n logDebug(`nextConfigPath: ${nextConfigPath}`)\n\n logDebug(\n `isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`,\n )\n\n // This is a little clunky and needs to account for isSrcDir\n copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath), debug)\n\n // Wrap next.config.js with withPayload\n wrapNextConfig({ nextConfigPath })\n\n return {\n payloadConfigPath: path.resolve(nextAppDir, '../payload.config.ts'),\n success: true,\n }\n}\n\nasync function installDeps(projectDir: string, packageManager: PackageManager, dbType: DbType) {\n const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@alpha`,\n )\n\n packagesToInstall.push(`@payloadcms/db-${dbType}@alpha`)\n\n let exitCode = 0\n switch (packageManager) {\n case 'npm': {\n ;({ exitCode } = await execa('npm', ['install', '--save', ...packagesToInstall], {\n cwd: projectDir,\n }))\n break\n }\n case 'yarn':\n case 'pnpm': {\n ;({ exitCode } = await execa(packageManager, ['add', ...packagesToInstall], {\n cwd: projectDir,\n }))\n break\n }\n case 'bun': {\n warning('Bun support is untested.')\n ;({ exitCode } = await execa('bun', ['add', ...packagesToInstall], { cwd: projectDir }))\n break\n }\n }\n\n return { success: exitCode === 0 }\n}\n\ntype NextAppDetails = {\n hasTopLevelLayout: boolean\n isSrcDir: boolean\n nextAppDir?: string\n nextConfigPath?: string\n}\n\nexport async function getNextAppDetails(projectDir: string): Promise<NextAppDetails> {\n const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'))\n\n const nextConfigPath: string | undefined = (\n await globby('next.config.*js', { absolute: true, cwd: projectDir })\n )?.[0]\n if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n nextConfigPath: undefined,\n }\n }\n\n let nextAppDir: string | undefined = (\n await globby(['**/app'], {\n absolute: true,\n cwd: projectDir,\n onlyDirectories: true,\n })\n )?.[0]\n\n if (!nextAppDir || nextAppDir.length === 0) {\n nextAppDir = undefined\n }\n\n const hasTopLevelLayout = nextAppDir\n ? fs.existsSync(path.resolve(nextAppDir, 'layout.tsx'))\n : false\n\n return { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigPath }\n}\n"],"names":["getNextAppDetails","initNext","readFile","promisify","fs","writeFile","filename","fileURLToPath","dirname","path","args","dbType","packageManager","projectDir","nextAppDetails","hasTopLevelLayout","isSrcDir","nextAppDir","reason","success","p","log","warn","moveMessage","installSpinner","spinner","start","configurationResult","installAndConfigurePayload","useDistFiles","stop","installSuccess","installDeps","addPayloadConfigToTsConfig","tsConfigPath","resolve","userTsConfigContent","encoding","userTsConfig","parse","compilerOptions","paths","stringify","debug","nextConfigPath","logDebug","message","origDebug","existsSync","templateFilesPath","endsWith","templateSrcDir","copyRecursiveSync","wrapNextConfig","payloadConfigPath","packagesToInstall","map","pkg","push","exitCode","execa","cwd","warning","globby","absolute","length","undefined","onlyDirectories"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { DbType } from '../types.js';
2
+ type DbAdapterReplacement = {
3
+ configReplacement: string[];
4
+ importReplacement: string;
5
+ packageName: string;
6
+ };
7
+ export declare const dbReplacements: Record<DbType, DbAdapterReplacement>;
8
+ export {};
9
+ //# sourceMappingURL=packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../../src/lib/packages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,KAAK,oBAAoB,GAAG;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAqBD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAG/D,CAAA"}
@@ -2,21 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- dbPackages: function() {
13
- return dbPackages;
14
- },
15
- bundlerPackages: function() {
16
- return bundlerPackages;
17
- },
18
- editorPackages: function() {
19
- return editorPackages;
5
+ Object.defineProperty(exports, "dbReplacements", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return dbReplacements;
20
9
  }
21
10
  });
22
11
  const mongodbReplacement = {
@@ -27,8 +16,7 @@ const mongodbReplacement = {
27
16
  ' db: mongooseAdapter({',
28
17
  ' url: process.env.DATABASE_URI,',
29
18
  ' }),'
30
- ],
31
- version: '^1.0.0'
19
+ ]
32
20
  };
33
21
  const postgresReplacement = {
34
22
  configReplacement: [
@@ -39,43 +27,11 @@ const postgresReplacement = {
39
27
  ' }),'
40
28
  ],
41
29
  importReplacement: "import { postgresAdapter } from '@payloadcms/db-postgres'",
42
- packageName: '@payloadcms/db-postgres',
43
- version: '^0.x'
30
+ packageName: '@payloadcms/db-postgres'
44
31
  };
45
- const dbPackages = {
32
+ const dbReplacements = {
46
33
  mongodb: mongodbReplacement,
47
34
  postgres: postgresReplacement
48
35
  };
49
- const webpackReplacement = {
50
- importReplacement: "import { webpackBundler } from '@payloadcms/bundler-webpack'",
51
- packageName: '@payloadcms/bundler-webpack',
52
- // Replacement of line containing `// bundler-config`
53
- configReplacement: ' bundler: webpackBundler(),',
54
- version: '^1.0.0'
55
- };
56
- const viteReplacement = {
57
- configReplacement: ' bundler: viteBundler(),',
58
- importReplacement: "import { viteBundler } from '@payloadcms/bundler-vite'",
59
- packageName: '@payloadcms/bundler-vite',
60
- version: '^0.x'
61
- };
62
- const bundlerPackages = {
63
- vite: viteReplacement,
64
- webpack: webpackReplacement
65
- };
66
- const editorPackages = {
67
- lexical: {
68
- configReplacement: ' editor: lexicalEditor({}),',
69
- importReplacement: "import { lexicalEditor } from '@payloadcms/richtext-lexical'",
70
- packageName: '@payloadcms/richtext-lexical',
71
- version: '^0.x'
72
- },
73
- slate: {
74
- configReplacement: ' editor: slateEditor({}),',
75
- importReplacement: "import { slateEditor } from '@payloadcms/richtext-slate'",
76
- packageName: '@payloadcms/richtext-slate',
77
- version: '^1.0.0'
78
- }
79
- };
80
36
 
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFja2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCdW5kbGVyVHlwZSwgRGJUeXBlLCBFZGl0b3JUeXBlIH0gZnJvbSAnLi4vdHlwZXMnXG5cbnR5cGUgRGJBZGFwdGVyUmVwbGFjZW1lbnQgPSB7XG4gIGNvbmZpZ1JlcGxhY2VtZW50OiBzdHJpbmdbXVxuICBpbXBvcnRSZXBsYWNlbWVudDogc3RyaW5nXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG59XG5cbnR5cGUgQnVuZGxlclJlcGxhY2VtZW50ID0ge1xuICBjb25maWdSZXBsYWNlbWVudDogc3RyaW5nXG4gIGltcG9ydFJlcGxhY2VtZW50OiBzdHJpbmdcbiAgcGFja2FnZU5hbWU6IHN0cmluZ1xuICB2ZXJzaW9uOiBzdHJpbmdcbn1cblxudHlwZSBFZGl0b3JSZXBsYWNlbWVudCA9IHtcbiAgY29uZmlnUmVwbGFjZW1lbnQ6IHN0cmluZ1xuICBpbXBvcnRSZXBsYWNlbWVudDogc3RyaW5nXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG59XG5cbmNvbnN0IG1vbmdvZGJSZXBsYWNlbWVudDogRGJBZGFwdGVyUmVwbGFjZW1lbnQgPSB7XG4gIGltcG9ydFJlcGxhY2VtZW50OiBcImltcG9ydCB7IG1vbmdvb3NlQWRhcHRlciB9IGZyb20gJ0BwYXlsb2FkY21zL2RiLW1vbmdvZGInXCIsXG4gIHBhY2thZ2VOYW1lOiAnQHBheWxvYWRjbXMvZGItbW9uZ29kYicsXG4gIC8vIFJlcGxhY2VtZW50IGJldHdlZW4gYC8vIGRhdGFiYXNlLWFkYXB0ZXItY29uZmlnLXN0YXJ0YCBhbmQgYC8vIGRhdGFiYXNlLWFkYXB0ZXItY29uZmlnLWVuZGBcbiAgY29uZmlnUmVwbGFjZW1lbnQ6IFsnICBkYjogbW9uZ29vc2VBZGFwdGVyKHsnLCAnICAgIHVybDogcHJvY2Vzcy5lbnYuREFUQUJBU0VfVVJJLCcsICcgIH0pLCddLFxuICB2ZXJzaW9uOiAnXjEuMC4wJyxcbn1cblxuY29uc3QgcG9zdGdyZXNSZXBsYWNlbWVudDogRGJBZGFwdGVyUmVwbGFjZW1lbnQgPSB7XG4gIGNvbmZpZ1JlcGxhY2VtZW50OiBbXG4gICAgJyAgZGI6IHBvc3RncmVzQWRhcHRlcih7JyxcbiAgICAnICAgIHBvb2w6IHsnLFxuICAgICcgICAgICBjb25uZWN0aW9uU3RyaW5nOiBwcm9jZXNzLmVudi5EQVRBQkFTRV9VUkksJyxcbiAgICAnICAgIH0sJyxcbiAgICAnICB9KSwnLFxuICBdLFxuICBpbXBvcnRSZXBsYWNlbWVudDogXCJpbXBvcnQgeyBwb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tICdAcGF5bG9hZGNtcy9kYi1wb3N0Z3JlcydcIixcbiAgcGFja2FnZU5hbWU6ICdAcGF5bG9hZGNtcy9kYi1wb3N0Z3JlcycsXG4gIHZlcnNpb246ICdeMC54JywgLy8gdXAgdG8sIG5vdCBpbmNsdWRpbmcgMS4wLjBcbn1cblxuZXhwb3J0IGNvbnN0IGRiUGFja2FnZXM6IFJlY29yZDxEYlR5cGUsIERiQWRhcHRlclJlcGxhY2VtZW50PiA9IHtcbiAgbW9uZ29kYjogbW9uZ29kYlJlcGxhY2VtZW50LFxuICBwb3N0Z3JlczogcG9zdGdyZXNSZXBsYWNlbWVudCxcbn1cblxuY29uc3Qgd2VicGFja1JlcGxhY2VtZW50OiBCdW5kbGVyUmVwbGFjZW1lbnQgPSB7XG4gIGltcG9ydFJlcGxhY2VtZW50OiBcImltcG9ydCB7IHdlYnBhY2tCdW5kbGVyIH0gZnJvbSAnQHBheWxvYWRjbXMvYnVuZGxlci13ZWJwYWNrJ1wiLFxuICBwYWNrYWdlTmFtZTogJ0BwYXlsb2FkY21zL2J1bmRsZXItd2VicGFjaycsXG4gIC8vIFJlcGxhY2VtZW50IG9mIGxpbmUgY29udGFpbmluZyBgLy8gYnVuZGxlci1jb25maWdgXG4gIGNvbmZpZ1JlcGxhY2VtZW50OiAnICAgIGJ1bmRsZXI6IHdlYnBhY2tCdW5kbGVyKCksJyxcbiAgdmVyc2lvbjogJ14xLjAuMCcsXG59XG5cbmNvbnN0IHZpdGVSZXBsYWNlbWVudDogQnVuZGxlclJlcGxhY2VtZW50ID0ge1xuICBjb25maWdSZXBsYWNlbWVudDogJyAgYnVuZGxlcjogdml0ZUJ1bmRsZXIoKSwnLFxuICBpbXBvcnRSZXBsYWNlbWVudDogXCJpbXBvcnQgeyB2aXRlQnVuZGxlciB9IGZyb20gJ0BwYXlsb2FkY21zL2J1bmRsZXItdml0ZSdcIixcbiAgcGFja2FnZU5hbWU6ICdAcGF5bG9hZGNtcy9idW5kbGVyLXZpdGUnLFxuICB2ZXJzaW9uOiAnXjAueCcsIC8vIHVwIHRvLCBub3QgaW5jbHVkaW5nIDEuMC4wXG59XG5cbmV4cG9ydCBjb25zdCBidW5kbGVyUGFja2FnZXM6IFJlY29yZDxCdW5kbGVyVHlwZSwgQnVuZGxlclJlcGxhY2VtZW50PiA9IHtcbiAgdml0ZTogdml0ZVJlcGxhY2VtZW50LFxuICB3ZWJwYWNrOiB3ZWJwYWNrUmVwbGFjZW1lbnQsXG59XG5cbmV4cG9ydCBjb25zdCBlZGl0b3JQYWNrYWdlczogUmVjb3JkPEVkaXRvclR5cGUsIEVkaXRvclJlcGxhY2VtZW50PiA9IHtcbiAgbGV4aWNhbDoge1xuICAgIGNvbmZpZ1JlcGxhY2VtZW50OiAnICBlZGl0b3I6IGxleGljYWxFZGl0b3Ioe30pLCcsXG4gICAgaW1wb3J0UmVwbGFjZW1lbnQ6IFwiaW1wb3J0IHsgbGV4aWNhbEVkaXRvciB9IGZyb20gJ0BwYXlsb2FkY21zL3JpY2h0ZXh0LWxleGljYWwnXCIsXG4gICAgcGFja2FnZU5hbWU6ICdAcGF5bG9hZGNtcy9yaWNodGV4dC1sZXhpY2FsJyxcbiAgICB2ZXJzaW9uOiAnXjAueCcsIC8vIHVwIHRvLCBub3QgaW5jbHVkaW5nIDEuMC4wXG4gIH0sXG4gIHNsYXRlOiB7XG4gICAgY29uZmlnUmVwbGFjZW1lbnQ6ICcgIGVkaXRvcjogc2xhdGVFZGl0b3Ioe30pLCcsXG4gICAgaW1wb3J0UmVwbGFjZW1lbnQ6IFwiaW1wb3J0IHsgc2xhdGVFZGl0b3IgfSBmcm9tICdAcGF5bG9hZGNtcy9yaWNodGV4dC1zbGF0ZSdcIixcbiAgICBwYWNrYWdlTmFtZTogJ0BwYXlsb2FkY21zL3JpY2h0ZXh0LXNsYXRlJyxcbiAgICB2ZXJzaW9uOiAnXjEuMC4wJyxcbiAgfSxcbn1cbiJdLCJuYW1lcyI6WyJkYlBhY2thZ2VzIiwiYnVuZGxlclBhY2thZ2VzIiwiZWRpdG9yUGFja2FnZXMiLCJtb25nb2RiUmVwbGFjZW1lbnQiLCJpbXBvcnRSZXBsYWNlbWVudCIsInBhY2thZ2VOYW1lIiwiY29uZmlnUmVwbGFjZW1lbnQiLCJ2ZXJzaW9uIiwicG9zdGdyZXNSZXBsYWNlbWVudCIsIm1vbmdvZGIiLCJwb3N0Z3JlcyIsIndlYnBhY2tSZXBsYWNlbWVudCIsInZpdGVSZXBsYWNlbWVudCIsInZpdGUiLCJ3ZWJwYWNrIiwibGV4aWNhbCIsInNsYXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQTRDYUEsVUFBVTtlQUFWQTs7SUFvQkFDLGVBQWU7ZUFBZkE7O0lBS0FDLGNBQWM7ZUFBZEE7OztBQTlDYixNQUFNQyxxQkFBMkM7SUFDL0NDLG1CQUFtQjtJQUNuQkMsYUFBYTtJQUNiLDhGQUE4RjtJQUM5RkMsbUJBQW1CO1FBQUM7UUFBMkI7UUFBc0M7S0FBUTtJQUM3RkMsU0FBUztBQUNYO0FBRUEsTUFBTUMsc0JBQTRDO0lBQ2hERixtQkFBbUI7UUFDakI7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBQ0RGLG1CQUFtQjtJQUNuQkMsYUFBYTtJQUNiRSxTQUFTO0FBQ1g7QUFFTyxNQUFNUCxhQUFtRDtJQUM5RFMsU0FBU047SUFDVE8sVUFBVUY7QUFDWjtBQUVBLE1BQU1HLHFCQUF5QztJQUM3Q1AsbUJBQW1CO0lBQ25CQyxhQUFhO0lBQ2IscURBQXFEO0lBQ3JEQyxtQkFBbUI7SUFDbkJDLFNBQVM7QUFDWDtBQUVBLE1BQU1LLGtCQUFzQztJQUMxQ04sbUJBQW1CO0lBQ25CRixtQkFBbUI7SUFDbkJDLGFBQWE7SUFDYkUsU0FBUztBQUNYO0FBRU8sTUFBTU4sa0JBQTJEO0lBQ3RFWSxNQUFNRDtJQUNORSxTQUFTSDtBQUNYO0FBRU8sTUFBTVQsaUJBQXdEO0lBQ25FYSxTQUFTO1FBQ1BULG1CQUFtQjtRQUNuQkYsbUJBQW1CO1FBQ25CQyxhQUFhO1FBQ2JFLFNBQVM7SUFDWDtJQUNBUyxPQUFPO1FBQ0xWLG1CQUFtQjtRQUNuQkYsbUJBQW1CO1FBQ25CQyxhQUFhO1FBQ2JFLFNBQVM7SUFDWDtBQUNGIn0=
37
+ //# sourceMappingURL=packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/packages.ts"],"sourcesContent":["import type { DbType } from '../types.js'\n\ntype DbAdapterReplacement = {\n configReplacement: string[]\n importReplacement: string\n packageName: string\n}\n\nconst mongodbReplacement: DbAdapterReplacement = {\n importReplacement: \"import { mongooseAdapter } from '@payloadcms/db-mongodb'\",\n packageName: '@payloadcms/db-mongodb',\n // Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`\n configReplacement: [' db: mongooseAdapter({', ' url: process.env.DATABASE_URI,', ' }),'],\n}\n\nconst postgresReplacement: DbAdapterReplacement = {\n configReplacement: [\n ' db: postgresAdapter({',\n ' pool: {',\n ' connectionString: process.env.DATABASE_URI,',\n ' },',\n ' }),',\n ],\n importReplacement: \"import { postgresAdapter } from '@payloadcms/db-postgres'\",\n packageName: '@payloadcms/db-postgres',\n}\n\nexport const dbReplacements: Record<DbType, DbAdapterReplacement> = {\n mongodb: mongodbReplacement,\n postgres: postgresReplacement,\n}\n"],"names":["dbReplacements","mongodbReplacement","importReplacement","packageName","configReplacement","postgresReplacement","mongodb","postgres"],"mappings":";;;;+BA2BaA;;;eAAAA;;;AAnBb,MAAMC,qBAA2C;IAC/CC,mBAAmB;IACnBC,aAAa;IACb,8FAA8F;IAC9FC,mBAAmB;QAAC;QAA2B;QAAsC;KAAQ;AAC/F;AAEA,MAAMC,sBAA4C;IAChDD,mBAAmB;QACjB;QACA;QACA;QACA;QACA;KACD;IACDF,mBAAmB;IACnBC,aAAa;AACf;AAEO,MAAMH,iBAAuD;IAClEM,SAASL;IACTM,UAAUF;AACZ"}
@@ -0,0 +1,3 @@
1
+ import type { CliArgs } from '../types.js';
2
+ export declare function parseProjectName(args: CliArgs): Promise<string>;
3
+ //# sourceMappingURL=parse-project-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-project-name.d.ts","sourceRoot":"","sources":["../../src/lib/parse-project-name.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAcrE"}
@@ -8,26 +8,67 @@ Object.defineProperty(exports, "parseProjectName", {
8
8
  return parseProjectName;
9
9
  }
10
10
  });
11
- const _prompts = /*#__PURE__*/ _interop_require_default(require("prompts"));
11
+ const _prompts = /*#__PURE__*/ _interop_require_wildcard(require("@clack/prompts"));
12
+ const _slugify = /*#__PURE__*/ _interop_require_default(require("@sindresorhus/slugify"));
12
13
  function _interop_require_default(obj) {
13
14
  return obj && obj.__esModule ? obj : {
14
15
  default: obj
15
16
  };
16
17
  }
18
+ function _getRequireWildcardCache(nodeInterop) {
19
+ if (typeof WeakMap !== "function") return null;
20
+ var cacheBabelInterop = new WeakMap();
21
+ var cacheNodeInterop = new WeakMap();
22
+ return (_getRequireWildcardCache = function(nodeInterop) {
23
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
24
+ })(nodeInterop);
25
+ }
26
+ function _interop_require_wildcard(obj, nodeInterop) {
27
+ if (!nodeInterop && obj && obj.__esModule) {
28
+ return obj;
29
+ }
30
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
31
+ return {
32
+ default: obj
33
+ };
34
+ }
35
+ var cache = _getRequireWildcardCache(nodeInterop);
36
+ if (cache && cache.has(obj)) {
37
+ return cache.get(obj);
38
+ }
39
+ var newObj = {
40
+ __proto__: null
41
+ };
42
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
43
+ for(var key in obj){
44
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
45
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
46
+ if (desc && (desc.get || desc.set)) {
47
+ Object.defineProperty(newObj, key, desc);
48
+ } else {
49
+ newObj[key] = obj[key];
50
+ }
51
+ }
52
+ }
53
+ newObj.default = obj;
54
+ if (cache) {
55
+ cache.set(obj, newObj);
56
+ }
57
+ return newObj;
58
+ }
17
59
  async function parseProjectName(args) {
18
- if (args['--name']) return args['--name'];
19
- if (args._[0]) return args._[0];
20
- const response = await (0, _prompts.default)({
21
- name: 'value',
60
+ if (args['--name']) return (0, _slugify.default)(args['--name']);
61
+ if (args._[0]) return (0, _slugify.default)(args._[0]);
62
+ const projectName = await _prompts.text({
22
63
  message: 'Project name?',
23
- type: 'text',
24
- validate: (value)=>!!value.length
25
- }, {
26
- onCancel: ()=>{
27
- process.exit(0);
64
+ validate: (value)=>{
65
+ if (!value) return 'Please enter a project name.';
28
66
  }
29
67
  });
30
- return response.value;
68
+ if (_prompts.isCancel(projectName)) {
69
+ process.exit(0);
70
+ }
71
+ return (0, _slugify.default)(projectName);
31
72
  }
32
73
 
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFyc2UtcHJvamVjdC1uYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwcm9tcHRzIGZyb20gJ3Byb21wdHMnXG5cbmltcG9ydCB0eXBlIHsgQ2xpQXJncyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VQcm9qZWN0TmFtZShhcmdzOiBDbGlBcmdzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKGFyZ3NbJy0tbmFtZSddKSByZXR1cm4gYXJnc1snLS1uYW1lJ11cbiAgaWYgKGFyZ3MuX1swXSkgcmV0dXJuIGFyZ3MuX1swXVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcHJvbXB0cyhcbiAgICB7XG4gICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgbWVzc2FnZTogJ1Byb2plY3QgbmFtZT8nLFxuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgdmFsaWRhdGU6ICh2YWx1ZTogc3RyaW5nKSA9PiAhIXZhbHVlLmxlbmd0aCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgfSxcbiAgICB9LFxuICApXG5cbiAgcmV0dXJuIHJlc3BvbnNlLnZhbHVlXG59XG4iXSwibmFtZXMiOlsicGFyc2VQcm9qZWN0TmFtZSIsImFyZ3MiLCJfIiwicmVzcG9uc2UiLCJwcm9tcHRzIiwibmFtZSIsIm1lc3NhZ2UiLCJ0eXBlIiwidmFsaWRhdGUiLCJ2YWx1ZSIsImxlbmd0aCIsIm9uQ2FuY2VsIiwicHJvY2VzcyIsImV4aXQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBSXNCQTs7O2VBQUFBOzs7Z0VBSkY7Ozs7OztBQUliLGVBQWVBLGlCQUFpQkMsSUFBYTtJQUNsRCxJQUFJQSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU9BLElBQUksQ0FBQyxTQUFTO0lBQ3pDLElBQUlBLEtBQUtDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBT0QsS0FBS0MsQ0FBQyxDQUFDLEVBQUU7SUFFL0IsTUFBTUMsV0FBVyxNQUFNQyxJQUFBQSxnQkFBTyxFQUM1QjtRQUNFQyxNQUFNO1FBQ05DLFNBQVM7UUFDVEMsTUFBTTtRQUNOQyxVQUFVLENBQUNDLFFBQWtCLENBQUMsQ0FBQ0EsTUFBTUMsTUFBTTtJQUM3QyxHQUNBO1FBQ0VDLFVBQVU7WUFDUkMsUUFBUUMsSUFBSSxDQUFDO1FBQ2Y7SUFDRjtJQUdGLE9BQU9WLFNBQVNNLEtBQUs7QUFDdkIifQ==
74
+ //# sourceMappingURL=parse-project-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/parse-project-name.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport slugify from '@sindresorhus/slugify'\n\nimport type { CliArgs } from '../types.js'\n\nexport async function parseProjectName(args: CliArgs): Promise<string> {\n if (args['--name']) return slugify(args['--name'])\n if (args._[0]) return slugify(args._[0])\n\n const projectName = await p.text({\n message: 'Project name?',\n validate: (value) => {\n if (!value) return 'Please enter a project name.'\n },\n })\n if (p.isCancel(projectName)) {\n process.exit(0)\n }\n return slugify(projectName)\n}\n"],"names":["parseProjectName","args","slugify","_","projectName","p","text","message","validate","value","isCancel","process","exit"],"mappings":";;;;+BAKsBA;;;eAAAA;;;iEALH;gEACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIb,eAAeA,iBAAiBC,IAAa;IAClD,IAAIA,IAAI,CAAC,SAAS,EAAE,OAAOC,IAAAA,gBAAO,EAACD,IAAI,CAAC,SAAS;IACjD,IAAIA,KAAKE,CAAC,CAAC,EAAE,EAAE,OAAOD,IAAAA,gBAAO,EAACD,KAAKE,CAAC,CAAC,EAAE;IAEvC,MAAMC,cAAc,MAAMC,SAAEC,IAAI,CAAC;QAC/BC,SAAS;QACTC,UAAU,CAACC;YACT,IAAI,CAACA,OAAO,OAAO;QACrB;IACF;IACA,IAAIJ,SAAEK,QAAQ,CAACN,cAAc;QAC3BO,QAAQC,IAAI,CAAC;IACf;IACA,OAAOV,IAAAA,gBAAO,EAACE;AACjB"}
@@ -0,0 +1,3 @@
1
+ import type { CliArgs, ProjectTemplate } from '../types.js';
2
+ export declare function parseTemplate(args: CliArgs, validTemplates: ProjectTemplate[]): Promise<ProjectTemplate | undefined>;
3
+ //# sourceMappingURL=parse-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-template.d.ts","sourceRoot":"","sources":["../../src/lib/parse-template.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE3D,wBAAsB,aAAa,CACjC,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,eAAe,EAAE,GAChC,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAwBtC"}