create-payload-app 0.4.2 → 0.5.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +13 -0
- package/README.md +17 -6
- package/dist/lib/configure-payload-config.js +139 -0
- package/dist/lib/create-project.js +52 -42
- package/dist/lib/create-project.test.js +59 -1
- package/dist/lib/packages.js +43 -0
- package/dist/lib/{get-db-connection.js → select-db.js} +55 -11
- package/dist/lib/templates.js +3 -3
- package/dist/lib/write-env-file.js +3 -1
- package/dist/main.js +32 -13
- package/dist/utils/messages.js +1 -1
- package/package.json +1 -1
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
// Use IntelliSense to learn about possible attributes.
|
3
|
+
// Hover to view descriptions of existing attributes.
|
4
|
+
"configurations": [
|
5
|
+
{
|
6
|
+
"command": "ts-node -T ./src/index.ts -n asdf -t blank --db mongodb --no-deps",
|
7
|
+
"cwd": "${workspaceFolder}",
|
8
|
+
"name": "Debug",
|
9
|
+
"request": "launch",
|
10
|
+
"type": "node-terminal"
|
11
|
+
},
|
12
|
+
]
|
13
|
+
}
|
package/README.md
CHANGED
@@ -9,15 +9,26 @@ CLI for easily starting new Payload project
|
|
9
9
|
USAGE
|
10
10
|
|
11
11
|
$ npx create-payload-app
|
12
|
+
$ npx create-payload-app my-project
|
13
|
+
$ npx create-payload-app -n my-project -t blog
|
12
14
|
|
13
15
|
OPTIONS
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
+
-n my-payload-app Set project name
|
18
|
+
-t template_name Choose specific template
|
17
19
|
|
18
|
-
Available templates:
|
20
|
+
Available templates:
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
blank Blank Template
|
23
|
+
website Website Template
|
24
|
+
ecommerce E-commerce Template
|
25
|
+
plugin Template for creating a Payload plugin
|
26
|
+
payload-demo Payload demo site at https://demo.payloadcms.com
|
27
|
+
payload-website Payload website CMS at https://payloadcms.com
|
28
|
+
|
29
|
+
--use-npm Use npm to install dependencies
|
30
|
+
--use-yarn Use yarn to install dependencies
|
31
|
+
--use-pnpm Use pnpm to install dependencies
|
32
|
+
--no-deps Do not install any dependencies
|
33
|
+
-h Show help
|
23
34
|
```
|
@@ -0,0 +1,139 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
15
|
+
function step(op) {
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
17
|
+
while (_) try {
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
20
|
+
switch (op[0]) {
|
21
|
+
case 0: case 1: t = op; break;
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
25
|
+
default:
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
30
|
+
if (t[2]) _.ops.pop();
|
31
|
+
_.trys.pop(); continue;
|
32
|
+
}
|
33
|
+
op = body.call(thisArg, _);
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
36
|
+
}
|
37
|
+
};
|
38
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
39
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
40
|
+
if (ar || !(i in from)) {
|
41
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
42
|
+
ar[i] = from[i];
|
43
|
+
}
|
44
|
+
}
|
45
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
46
|
+
};
|
47
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
48
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
49
|
+
};
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
51
|
+
exports.configurePayloadConfig = void 0;
|
52
|
+
var fs_extra_1 = __importDefault(require("fs-extra"));
|
53
|
+
var path_1 = __importDefault(require("path"));
|
54
|
+
var log_1 = require("../utils/log");
|
55
|
+
var packages_1 = require("./packages");
|
56
|
+
/** Update payload config with necessary imports and adapters */
|
57
|
+
function configurePayloadConfig(args) {
|
58
|
+
return __awaiter(this, void 0, void 0, function () {
|
59
|
+
var packageJsonPath, packageObj, dbPackage, bundlerPackage, err_1, possiblePaths, payloadConfigPath_1, configContent, configLines_1, dbReplacement_1, bundlerReplacement_1, dbConfigStartLineIndex_1, dbConfigEndLineIndex_1;
|
60
|
+
return __generator(this, function (_a) {
|
61
|
+
switch (_a.label) {
|
62
|
+
case 0:
|
63
|
+
if (!args.dbDetails) {
|
64
|
+
return [2 /*return*/];
|
65
|
+
}
|
66
|
+
packageJsonPath = path_1.default.resolve(args.projectDir, 'package.json');
|
67
|
+
_a.label = 1;
|
68
|
+
case 1:
|
69
|
+
_a.trys.push([1, 4, , 5]);
|
70
|
+
return [4 /*yield*/, fs_extra_1.default.readJson(packageJsonPath)];
|
71
|
+
case 2:
|
72
|
+
packageObj = _a.sent();
|
73
|
+
dbPackage = packages_1.dbPackages[args.dbDetails.type];
|
74
|
+
bundlerPackage = packages_1.bundlerPackages['webpack'];
|
75
|
+
packageObj.dependencies[dbPackage.packageName] = 'latest';
|
76
|
+
packageObj.dependencies[bundlerPackage.packageName] = 'latest';
|
77
|
+
return [4 /*yield*/, fs_extra_1.default.writeJson(packageJsonPath, packageObj, { spaces: 2 })];
|
78
|
+
case 3:
|
79
|
+
_a.sent();
|
80
|
+
return [3 /*break*/, 5];
|
81
|
+
case 4:
|
82
|
+
err_1 = _a.sent();
|
83
|
+
(0, log_1.warning)('Unable to update name in package.json');
|
84
|
+
return [3 /*break*/, 5];
|
85
|
+
case 5:
|
86
|
+
try {
|
87
|
+
possiblePaths = [
|
88
|
+
path_1.default.resolve(args.projectDir, 'src/payload.config.ts'),
|
89
|
+
path_1.default.resolve(args.projectDir, 'src/payload/payload.config.ts'),
|
90
|
+
];
|
91
|
+
possiblePaths.forEach(function (p) {
|
92
|
+
if (fs_extra_1.default.pathExistsSync(p) && !payloadConfigPath_1) {
|
93
|
+
payloadConfigPath_1 = p;
|
94
|
+
}
|
95
|
+
});
|
96
|
+
if (!payloadConfigPath_1) {
|
97
|
+
(0, log_1.warning)('Unable to update payload.config.ts with plugins');
|
98
|
+
return [2 /*return*/];
|
99
|
+
}
|
100
|
+
configContent = fs_extra_1.default.readFileSync(payloadConfigPath_1, 'utf-8');
|
101
|
+
configLines_1 = configContent.split('\n');
|
102
|
+
dbReplacement_1 = packages_1.dbPackages[args.dbDetails.type];
|
103
|
+
bundlerReplacement_1 = packages_1.bundlerPackages['webpack'];
|
104
|
+
configLines_1.forEach(function (l, i) {
|
105
|
+
if (l.includes('// database-adapter-import')) {
|
106
|
+
configLines_1[i] = dbReplacement_1.importReplacement;
|
107
|
+
}
|
108
|
+
if (l.includes('// bundler-import')) {
|
109
|
+
configLines_1[i] = bundlerReplacement_1.importReplacement;
|
110
|
+
}
|
111
|
+
if (l.includes('// bundler-config')) {
|
112
|
+
configLines_1[i] = bundlerReplacement_1.configReplacement;
|
113
|
+
}
|
114
|
+
if (l.includes('// database-adapter-config-start')) {
|
115
|
+
dbConfigStartLineIndex_1 = i;
|
116
|
+
}
|
117
|
+
if (l.includes('// database-adapter-config-end')) {
|
118
|
+
dbConfigEndLineIndex_1 = i;
|
119
|
+
}
|
120
|
+
});
|
121
|
+
if (!dbConfigStartLineIndex_1 || !dbConfigEndLineIndex_1) {
|
122
|
+
(0, log_1.warning)('Unable to update payload.config.ts with database adapter import');
|
123
|
+
}
|
124
|
+
else {
|
125
|
+
// Replaces lines between `// database-adapter-config-start` and `// database-adapter-config-end`
|
126
|
+
configLines_1.splice.apply(configLines_1, __spreadArray([dbConfigStartLineIndex_1,
|
127
|
+
dbConfigEndLineIndex_1 - dbConfigStartLineIndex_1 + 1], dbReplacement_1.configReplacement, false));
|
128
|
+
}
|
129
|
+
fs_extra_1.default.writeFileSync(payloadConfigPath_1, configLines_1.join('\n'));
|
130
|
+
}
|
131
|
+
catch (err) {
|
132
|
+
(0, log_1.warning)('Unable to update payload.config.ts with plugins');
|
133
|
+
}
|
134
|
+
return [2 /*return*/];
|
135
|
+
}
|
136
|
+
});
|
137
|
+
});
|
138
|
+
}
|
139
|
+
exports.configurePayloadConfig = configurePayloadConfig;
|
@@ -39,7 +39,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
39
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
40
40
|
};
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
42
|
-
exports.
|
42
|
+
exports.updatePackageJSON = exports.createProject = void 0;
|
43
43
|
var path_1 = __importDefault(require("path"));
|
44
44
|
var chalk_1 = __importDefault(require("chalk"));
|
45
45
|
var fs_extra_1 = __importDefault(require("fs-extra"));
|
@@ -47,6 +47,7 @@ var execa_1 = __importDefault(require("execa"));
|
|
47
47
|
var ora_1 = __importDefault(require("ora"));
|
48
48
|
var degit_1 = __importDefault(require("degit"));
|
49
49
|
var log_1 = require("../utils/log");
|
50
|
+
var configure_payload_config_1 = require("./configure-payload-config");
|
50
51
|
function createOrFindProjectDir(projectDir) {
|
51
52
|
return __awaiter(this, void 0, void 0, function () {
|
52
53
|
var pathExists;
|
@@ -67,7 +68,7 @@ function createOrFindProjectDir(projectDir) {
|
|
67
68
|
}
|
68
69
|
function installDeps(args) {
|
69
70
|
return __awaiter(this, void 0, void 0, function () {
|
70
|
-
var cliArgs, projectDir, packageManager,
|
71
|
+
var cliArgs, projectDir, packageManager, installCmd, err_1;
|
71
72
|
return __generator(this, function (_a) {
|
72
73
|
switch (_a.label) {
|
73
74
|
case 0:
|
@@ -75,11 +76,17 @@ function installDeps(args) {
|
|
75
76
|
if (cliArgs['--no-deps']) {
|
76
77
|
return [2 /*return*/, true];
|
77
78
|
}
|
78
|
-
|
79
|
+
installCmd = 'npm install --legacy-peer-deps';
|
80
|
+
if (packageManager === 'yarn') {
|
81
|
+
installCmd = 'yarn';
|
82
|
+
}
|
83
|
+
else if (packageManager === 'pnpm') {
|
84
|
+
installCmd = 'pnpm install';
|
85
|
+
}
|
79
86
|
_a.label = 1;
|
80
87
|
case 1:
|
81
88
|
_a.trys.push([1, 3, , 4]);
|
82
|
-
return [4 /*yield*/, execa_1.default.command(
|
89
|
+
return [4 /*yield*/, execa_1.default.command(installCmd, {
|
83
90
|
cwd: path_1.default.resolve(projectDir),
|
84
91
|
})];
|
85
92
|
case 2:
|
@@ -94,42 +101,13 @@ function installDeps(args) {
|
|
94
101
|
});
|
95
102
|
});
|
96
103
|
}
|
97
|
-
function updatePackageJSONName(args) {
|
98
|
-
return __awaiter(this, void 0, void 0, function () {
|
99
|
-
var projectName, projectDir, packageJsonPath, packageObj, err_2;
|
100
|
-
return __generator(this, function (_a) {
|
101
|
-
switch (_a.label) {
|
102
|
-
case 0:
|
103
|
-
projectName = args.projectName, projectDir = args.projectDir;
|
104
|
-
packageJsonPath = path_1.default.resolve(projectDir, 'package.json');
|
105
|
-
_a.label = 1;
|
106
|
-
case 1:
|
107
|
-
_a.trys.push([1, 4, , 5]);
|
108
|
-
return [4 /*yield*/, fs_extra_1.default.readJson(packageJsonPath)];
|
109
|
-
case 2:
|
110
|
-
packageObj = _a.sent();
|
111
|
-
packageObj.name = projectName;
|
112
|
-
return [4 /*yield*/, fs_extra_1.default.writeJson(packageJsonPath, packageObj, { spaces: 2 })];
|
113
|
-
case 3:
|
114
|
-
_a.sent();
|
115
|
-
return [3 /*break*/, 5];
|
116
|
-
case 4:
|
117
|
-
err_2 = _a.sent();
|
118
|
-
(0, log_1.warning)('Unable to update name in package.json');
|
119
|
-
return [3 /*break*/, 5];
|
120
|
-
case 5: return [2 /*return*/];
|
121
|
-
}
|
122
|
-
});
|
123
|
-
});
|
124
|
-
}
|
125
|
-
exports.updatePackageJSONName = updatePackageJSONName;
|
126
104
|
function createProject(args) {
|
127
105
|
return __awaiter(this, void 0, void 0, function () {
|
128
|
-
var cliArgs, projectName, projectDir, template, packageManager, emitter, spinner, lockPath, result;
|
106
|
+
var cliArgs, projectName, projectDir, template, packageManager, dbDetails, emitter, spinner, lockPath, result;
|
129
107
|
return __generator(this, function (_a) {
|
130
108
|
switch (_a.label) {
|
131
109
|
case 0:
|
132
|
-
cliArgs = args.cliArgs, projectName = args.projectName, projectDir = args.projectDir, template = args.template, packageManager = args.packageManager;
|
110
|
+
cliArgs = args.cliArgs, projectName = args.projectName, projectDir = args.projectDir, template = args.template, packageManager = args.packageManager, dbDetails = args.dbDetails;
|
133
111
|
return [4 /*yield*/, createOrFindProjectDir(projectDir)];
|
134
112
|
case 1:
|
135
113
|
_a.sent();
|
@@ -142,21 +120,24 @@ function createProject(args) {
|
|
142
120
|
_a.label = 3;
|
143
121
|
case 3:
|
144
122
|
spinner = (0, ora_1.default)('Checking latest Payload version...').start();
|
145
|
-
return [4 /*yield*/,
|
123
|
+
return [4 /*yield*/, updatePackageJSON({ projectName: projectName, projectDir: projectDir })];
|
124
|
+
case 4:
|
125
|
+
_a.sent();
|
126
|
+
return [4 /*yield*/, (0, configure_payload_config_1.configurePayloadConfig)({ projectDir: projectDir, dbDetails: dbDetails })
|
146
127
|
// Remove yarn.lock file. This is only desired in Payload Cloud.
|
147
128
|
];
|
148
|
-
case
|
129
|
+
case 5:
|
149
130
|
_a.sent();
|
150
131
|
lockPath = path_1.default.resolve(projectDir, 'yarn.lock');
|
151
|
-
if (!fs_extra_1.default.existsSync(lockPath)) return [3 /*break*/,
|
132
|
+
if (!fs_extra_1.default.existsSync(lockPath)) return [3 /*break*/, 7];
|
152
133
|
return [4 /*yield*/, fs_extra_1.default.remove(lockPath)];
|
153
|
-
case 5:
|
154
|
-
_a.sent();
|
155
|
-
_a.label = 6;
|
156
134
|
case 6:
|
135
|
+
_a.sent();
|
136
|
+
_a.label = 7;
|
137
|
+
case 7:
|
157
138
|
spinner.text = 'Installing dependencies...';
|
158
139
|
return [4 /*yield*/, installDeps({ cliArgs: cliArgs, projectDir: projectDir, packageManager: packageManager })];
|
159
|
-
case
|
140
|
+
case 8:
|
160
141
|
result = _a.sent();
|
161
142
|
spinner.stop();
|
162
143
|
spinner.clear();
|
@@ -172,3 +153,32 @@ function createProject(args) {
|
|
172
153
|
});
|
173
154
|
}
|
174
155
|
exports.createProject = createProject;
|
156
|
+
function updatePackageJSON(args) {
|
157
|
+
return __awaiter(this, void 0, void 0, function () {
|
158
|
+
var projectName, projectDir, packageJsonPath, packageObj, err_2;
|
159
|
+
return __generator(this, function (_a) {
|
160
|
+
switch (_a.label) {
|
161
|
+
case 0:
|
162
|
+
projectName = args.projectName, projectDir = args.projectDir;
|
163
|
+
packageJsonPath = path_1.default.resolve(projectDir, 'package.json');
|
164
|
+
_a.label = 1;
|
165
|
+
case 1:
|
166
|
+
_a.trys.push([1, 4, , 5]);
|
167
|
+
return [4 /*yield*/, fs_extra_1.default.readJson(packageJsonPath)];
|
168
|
+
case 2:
|
169
|
+
packageObj = _a.sent();
|
170
|
+
packageObj.name = projectName;
|
171
|
+
return [4 /*yield*/, fs_extra_1.default.writeJson(packageJsonPath, packageObj, { spaces: 2 })];
|
172
|
+
case 3:
|
173
|
+
_a.sent();
|
174
|
+
return [3 /*break*/, 5];
|
175
|
+
case 4:
|
176
|
+
err_2 = _a.sent();
|
177
|
+
(0, log_1.warning)('Unable to update name in package.json');
|
178
|
+
return [3 /*break*/, 5];
|
179
|
+
case 5: return [2 /*return*/];
|
180
|
+
}
|
181
|
+
});
|
182
|
+
});
|
183
|
+
}
|
184
|
+
exports.updatePackageJSON = updatePackageJSON;
|
@@ -42,6 +42,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
42
|
var fs_extra_1 = __importDefault(require("fs-extra"));
|
43
43
|
var path_1 = __importDefault(require("path"));
|
44
44
|
var create_project_1 = require("./create-project");
|
45
|
+
var packages_1 = require("./packages");
|
45
46
|
var projectDir = path_1.default.resolve(__dirname, './tmp');
|
46
47
|
describe('createProject', function () {
|
47
48
|
beforeAll(function () {
|
@@ -59,7 +60,11 @@ describe('createProject', function () {
|
|
59
60
|
});
|
60
61
|
describe('#createProject', function () {
|
61
62
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
62
|
-
var args = {
|
63
|
+
var args = {
|
64
|
+
_: ['project-name'],
|
65
|
+
'--db': 'mongodb',
|
66
|
+
'--no-deps': true,
|
67
|
+
};
|
63
68
|
var packageManager = 'yarn';
|
64
69
|
it('creates starter project', function () { return __awaiter(void 0, void 0, void 0, function () {
|
65
70
|
var projectName, template, packageJsonPath, packageJson;
|
@@ -119,5 +124,58 @@ describe('createProject', function () {
|
|
119
124
|
}
|
120
125
|
});
|
121
126
|
}); });
|
127
|
+
describe('db adapters and bundlers', function () {
|
128
|
+
it.each([
|
129
|
+
['mongodb', 'webpack'],
|
130
|
+
['postgres', 'webpack'],
|
131
|
+
])('update config and deps: %s, %s', function (db, bundler) { return __awaiter(void 0, void 0, void 0, function () {
|
132
|
+
var projectName, template, dbReplacement, bundlerReplacement, packageJsonPath, packageJson, payloadConfigPath, content;
|
133
|
+
return __generator(this, function (_a) {
|
134
|
+
switch (_a.label) {
|
135
|
+
case 0:
|
136
|
+
projectName = 'starter-project';
|
137
|
+
template = {
|
138
|
+
name: 'blank',
|
139
|
+
type: 'starter',
|
140
|
+
url: 'https://github.com/payloadcms/payload/templates/blank#2.0',
|
141
|
+
description: 'Blank Template',
|
142
|
+
};
|
143
|
+
return [4 /*yield*/, (0, create_project_1.createProject)({
|
144
|
+
cliArgs: args,
|
145
|
+
projectName: projectName,
|
146
|
+
projectDir: projectDir,
|
147
|
+
template: template,
|
148
|
+
packageManager: packageManager,
|
149
|
+
dbDetails: {
|
150
|
+
dbUri: "".concat(db, "://localhost:27017/create-project-test"),
|
151
|
+
type: db,
|
152
|
+
},
|
153
|
+
})];
|
154
|
+
case 1:
|
155
|
+
_a.sent();
|
156
|
+
dbReplacement = packages_1.dbPackages[db];
|
157
|
+
bundlerReplacement = packages_1.bundlerPackages[bundler];
|
158
|
+
packageJsonPath = path_1.default.resolve(projectDir, 'package.json');
|
159
|
+
packageJson = fs_extra_1.default.readJsonSync(packageJsonPath);
|
160
|
+
// Check deps
|
161
|
+
expect(packageJson.dependencies[dbReplacement.packageName]).toBeDefined();
|
162
|
+
expect(packageJson.dependencies[bundlerReplacement.packageName]).toBeDefined();
|
163
|
+
payloadConfigPath = path_1.default.resolve(projectDir, 'src/payload.config.ts');
|
164
|
+
content = fs_extra_1.default.readFileSync(payloadConfigPath, 'utf-8');
|
165
|
+
// Check payload.config.ts
|
166
|
+
expect(content).not.toContain('// database-adapter-import');
|
167
|
+
expect(content).toContain(dbReplacement.importReplacement);
|
168
|
+
expect(content).not.toContain('// database-adapter-config-start');
|
169
|
+
expect(content).not.toContain('// database-adapter-config-end');
|
170
|
+
expect(content).toContain(dbReplacement.configReplacement.join('\n'));
|
171
|
+
expect(content).not.toContain('// bundler-config-import');
|
172
|
+
expect(content).toContain(bundlerReplacement.importReplacement);
|
173
|
+
expect(content).not.toContain('// bundler-config');
|
174
|
+
expect(content).toContain(bundlerReplacement.configReplacement);
|
175
|
+
return [2 /*return*/];
|
176
|
+
}
|
177
|
+
});
|
178
|
+
}); });
|
179
|
+
});
|
122
180
|
});
|
123
181
|
});
|
@@ -0,0 +1,43 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.bundlerPackages = exports.dbPackages = void 0;
|
4
|
+
var mongodbReplacement = {
|
5
|
+
packageName: '@payloadcms/db-mongodb',
|
6
|
+
importReplacement: "import { mongooseAdapter } from '@payloadcms/db-mongodb'",
|
7
|
+
// Replacement between `// database-adapter-config-start` and `// database-adapter-config-end`
|
8
|
+
configReplacement: [
|
9
|
+
' db: mongooseAdapter({',
|
10
|
+
' url: process.env.DATABASE_URI,',
|
11
|
+
' }),',
|
12
|
+
],
|
13
|
+
};
|
14
|
+
var postgresReplacement = {
|
15
|
+
packageName: '@payloadcms/db-postgres',
|
16
|
+
importReplacement: "import { postgresAdapter } from '@payloadcms/db-postgres'",
|
17
|
+
configReplacement: [
|
18
|
+
' db: postgresAdapter({',
|
19
|
+
' client: {',
|
20
|
+
' connectionString: process.env.DATABASE_URI,',
|
21
|
+
' },',
|
22
|
+
' }),',
|
23
|
+
],
|
24
|
+
};
|
25
|
+
exports.dbPackages = {
|
26
|
+
mongodb: mongodbReplacement,
|
27
|
+
postgres: postgresReplacement,
|
28
|
+
};
|
29
|
+
var webpackReplacement = {
|
30
|
+
packageName: '@payloadcms/bundler-webpack',
|
31
|
+
importReplacement: "import { webpackBundler } from '@payloadcms/bundler-webpack'",
|
32
|
+
// Replacement of line containing `// bundler-config`
|
33
|
+
configReplacement: ' bundler: webpackBundler(),',
|
34
|
+
};
|
35
|
+
var viteReplacement = {
|
36
|
+
packageName: '@payloadcms/bundler-vite',
|
37
|
+
importReplacement: "import { viteBundler } from '@payloadcms/bundler-vite'",
|
38
|
+
configReplacement: ' bundler: viteBundler(),',
|
39
|
+
};
|
40
|
+
exports.bundlerPackages = {
|
41
|
+
webpack: webpackReplacement,
|
42
|
+
vite: viteReplacement,
|
43
|
+
};
|
@@ -39,22 +39,63 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
39
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
40
40
|
};
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
42
|
-
exports.
|
42
|
+
exports.selectDb = void 0;
|
43
43
|
var prompts_1 = __importDefault(require("prompts"));
|
44
44
|
var slugify_1 = __importDefault(require("@sindresorhus/slugify"));
|
45
|
-
|
45
|
+
var dbChoiceRecord = {
|
46
|
+
mongodb: {
|
47
|
+
value: 'mongodb',
|
48
|
+
title: 'MongoDB',
|
49
|
+
dbConnectionPrefix: 'mongodb://127.0.0.1/',
|
50
|
+
},
|
51
|
+
postgres: {
|
52
|
+
value: 'postgres',
|
53
|
+
title: 'PostgreSQL',
|
54
|
+
dbConnectionPrefix: 'postgres://127.0.0.1:5432/',
|
55
|
+
},
|
56
|
+
};
|
57
|
+
function selectDb(args, projectName) {
|
46
58
|
return __awaiter(this, void 0, void 0, function () {
|
47
|
-
var
|
59
|
+
var dbType, dbTypeRes, dbChoice, dbUriRes;
|
48
60
|
return __generator(this, function (_a) {
|
49
61
|
switch (_a.label) {
|
50
62
|
case 0:
|
51
|
-
|
52
|
-
|
63
|
+
dbType = undefined;
|
64
|
+
if (!args['--db']) return [3 /*break*/, 1];
|
65
|
+
if (!Object.values(dbChoiceRecord).some(function (dbChoice) { return dbChoice.value === args['--db']; })) {
|
66
|
+
throw new Error("Invalid database type given. Valid types are: ".concat(Object.values(dbChoiceRecord)
|
67
|
+
.map(function (dbChoice) { return dbChoice.value; })
|
68
|
+
.join(', ')));
|
69
|
+
}
|
70
|
+
dbType = args['--db'];
|
71
|
+
return [3 /*break*/, 3];
|
72
|
+
case 1: return [4 /*yield*/, (0, prompts_1.default)({
|
73
|
+
type: 'select',
|
74
|
+
name: 'value',
|
75
|
+
message: 'Select a database',
|
76
|
+
choices: Object.values(dbChoiceRecord).map(function (dbChoice) {
|
77
|
+
return {
|
78
|
+
title: dbChoice.title,
|
79
|
+
value: dbChoice.value,
|
80
|
+
};
|
81
|
+
}),
|
82
|
+
validate: function (value) { return !!value.length; },
|
83
|
+
}, {
|
84
|
+
onCancel: function () {
|
85
|
+
process.exit(0);
|
86
|
+
},
|
87
|
+
})];
|
88
|
+
case 2:
|
89
|
+
dbTypeRes = _a.sent();
|
90
|
+
dbType = dbTypeRes.value;
|
91
|
+
_a.label = 3;
|
92
|
+
case 3:
|
93
|
+
dbChoice = dbChoiceRecord[dbType];
|
53
94
|
return [4 /*yield*/, (0, prompts_1.default)({
|
54
95
|
type: 'text',
|
55
96
|
name: 'value',
|
56
|
-
message:
|
57
|
-
initial: "
|
97
|
+
message: "Enter ".concat(dbChoice.title, " connection string"),
|
98
|
+
initial: "".concat(dbChoice.dbConnectionPrefix).concat(projectName === '.'
|
58
99
|
? "payload-".concat(getRandomDigitSuffix())
|
59
100
|
: (0, slugify_1.default)(projectName)),
|
60
101
|
validate: function (value) { return !!value.length; },
|
@@ -63,14 +104,17 @@ function getDatabaseConnection(args, projectName) {
|
|
63
104
|
process.exit(0);
|
64
105
|
},
|
65
106
|
})];
|
66
|
-
case
|
67
|
-
|
68
|
-
return [2 /*return*/,
|
107
|
+
case 4:
|
108
|
+
dbUriRes = _a.sent();
|
109
|
+
return [2 /*return*/, {
|
110
|
+
type: dbChoice.value,
|
111
|
+
dbUri: dbUriRes.value,
|
112
|
+
}];
|
69
113
|
}
|
70
114
|
});
|
71
115
|
});
|
72
116
|
}
|
73
|
-
exports.
|
117
|
+
exports.selectDb = selectDb;
|
74
118
|
function getRandomDigitSuffix() {
|
75
119
|
return (Math.random() * Math.pow(10, 6)).toFixed(0);
|
76
120
|
}
|
package/dist/lib/templates.js
CHANGED
@@ -64,19 +64,19 @@ function getValidTemplates() {
|
|
64
64
|
{
|
65
65
|
name: 'blank',
|
66
66
|
type: 'starter',
|
67
|
-
url: 'https://github.com/payloadcms/payload/templates/blank',
|
67
|
+
url: 'https://github.com/payloadcms/payload/templates/blank#2.0',
|
68
68
|
description: 'Blank Template',
|
69
69
|
},
|
70
70
|
{
|
71
71
|
name: 'website',
|
72
72
|
type: 'starter',
|
73
|
-
url: 'https://github.com/payloadcms/payload/templates/website',
|
73
|
+
url: 'https://github.com/payloadcms/payload/templates/website#2.0',
|
74
74
|
description: 'Website Template',
|
75
75
|
},
|
76
76
|
{
|
77
77
|
name: 'ecommerce',
|
78
78
|
type: 'starter',
|
79
|
-
url: 'https://github.com/payloadcms/payload/templates/ecommerce',
|
79
|
+
url: 'https://github.com/payloadcms/payload/templates/ecommerce#2.0',
|
80
80
|
description: 'E-commerce Template',
|
81
81
|
},
|
82
82
|
{
|
@@ -68,7 +68,9 @@ function writeEnvFile(args) {
|
|
68
68
|
var split = line.split('=');
|
69
69
|
var key = split[0];
|
70
70
|
var value = split[1];
|
71
|
-
if (key === 'MONGODB_URI' ||
|
71
|
+
if (key === 'MONGODB_URI' ||
|
72
|
+
key === 'MONGO_URL' ||
|
73
|
+
key === 'DATABASE_URI') {
|
72
74
|
value = databaseUri;
|
73
75
|
}
|
74
76
|
if (key === 'PAYLOAD_SECRET' || key === 'PAYLOAD_SECRET_KEY') {
|
package/dist/main.js
CHANGED
@@ -44,7 +44,7 @@ var slugify_1 = __importDefault(require("@sindresorhus/slugify"));
|
|
44
44
|
var arg_1 = __importDefault(require("arg"));
|
45
45
|
var command_exists_1 = __importDefault(require("command-exists"));
|
46
46
|
var create_project_1 = require("./lib/create-project");
|
47
|
-
var
|
47
|
+
var select_db_1 = require("./lib/select-db");
|
48
48
|
var generate_secret_1 = require("./lib/generate-secret");
|
49
49
|
var parse_project_name_1 = require("./lib/parse-project-name");
|
50
50
|
var parse_template_1 = require("./lib/parse-template");
|
@@ -62,6 +62,8 @@ var Main = /** @class */ (function () {
|
|
62
62
|
'--db': String,
|
63
63
|
'--secret': String,
|
64
64
|
'--use-npm': Boolean,
|
65
|
+
'--use-yarn': Boolean,
|
66
|
+
'--use-pnpm': Boolean,
|
65
67
|
'--no-deps': Boolean,
|
66
68
|
'--dry-run': Boolean,
|
67
69
|
'--beta': Boolean,
|
@@ -72,7 +74,7 @@ var Main = /** @class */ (function () {
|
|
72
74
|
}
|
73
75
|
Main.prototype.init = function () {
|
74
76
|
return __awaiter(this, void 0, void 0, function () {
|
75
|
-
var _a, _b, templateArg, valid, _c, _d, projectName, validTemplates, template, projectDir, packageManager,
|
77
|
+
var _a, _b, templateArg, valid, _c, _d, projectName, validTemplates, template, projectDir, packageManager, dbDetails, payloadSecret, error_1;
|
76
78
|
return __generator(this, function (_e) {
|
77
79
|
switch (_e.label) {
|
78
80
|
case 0:
|
@@ -113,9 +115,9 @@ var Main = /** @class */ (function () {
|
|
113
115
|
case 9:
|
114
116
|
packageManager = _e.sent();
|
115
117
|
if (!(template.type !== 'plugin')) return [3 /*break*/, 15];
|
116
|
-
return [4 /*yield*/, (0,
|
118
|
+
return [4 /*yield*/, (0, select_db_1.selectDb)(this.args, projectName)];
|
117
119
|
case 10:
|
118
|
-
|
120
|
+
dbDetails = _e.sent();
|
119
121
|
return [4 /*yield*/, (0, generate_secret_1.generateSecret)()];
|
120
122
|
case 11:
|
121
123
|
payloadSecret = _e.sent();
|
@@ -126,11 +128,12 @@ var Main = /** @class */ (function () {
|
|
126
128
|
projectDir: projectDir,
|
127
129
|
template: template,
|
128
130
|
packageManager: packageManager,
|
131
|
+
dbDetails: dbDetails,
|
129
132
|
})];
|
130
133
|
case 12:
|
131
134
|
_e.sent();
|
132
135
|
return [4 /*yield*/, (0, write_env_file_1.writeEnvFile)({
|
133
|
-
databaseUri:
|
136
|
+
databaseUri: dbDetails.dbUri,
|
134
137
|
payloadSecret: payloadSecret,
|
135
138
|
template: template,
|
136
139
|
projectDir: projectDir,
|
@@ -173,21 +176,37 @@ function getPackageManager(args) {
|
|
173
176
|
return __generator(this, function (_a) {
|
174
177
|
switch (_a.label) {
|
175
178
|
case 0:
|
179
|
+
packageManager = 'npm';
|
176
180
|
if (!args['--use-npm']) return [3 /*break*/, 1];
|
177
181
|
packageManager = 'npm';
|
178
|
-
return [3 /*break*/,
|
182
|
+
return [3 /*break*/, 9];
|
179
183
|
case 1:
|
180
|
-
|
181
|
-
return [4 /*yield*/, (0, command_exists_1.default)('yarn')];
|
182
|
-
case 2:
|
183
|
-
_a.sent();
|
184
|
+
if (!args['--use-yarn']) return [3 /*break*/, 2];
|
184
185
|
packageManager = 'yarn';
|
185
|
-
return [3 /*break*/,
|
186
|
+
return [3 /*break*/, 9];
|
187
|
+
case 2:
|
188
|
+
if (!args['--use-pnpm']) return [3 /*break*/, 3];
|
189
|
+
packageManager = 'pnpm';
|
190
|
+
return [3 /*break*/, 9];
|
186
191
|
case 3:
|
192
|
+
_a.trys.push([3, 8, , 9]);
|
193
|
+
return [4 /*yield*/, (0, command_exists_1.default)('yarn')];
|
194
|
+
case 4:
|
195
|
+
if (!_a.sent()) return [3 /*break*/, 5];
|
196
|
+
packageManager = 'yarn';
|
197
|
+
return [3 /*break*/, 7];
|
198
|
+
case 5: return [4 /*yield*/, (0, command_exists_1.default)('pnpm')];
|
199
|
+
case 6:
|
200
|
+
if (_a.sent()) {
|
201
|
+
packageManager = 'pnpm';
|
202
|
+
}
|
203
|
+
_a.label = 7;
|
204
|
+
case 7: return [3 /*break*/, 9];
|
205
|
+
case 8:
|
187
206
|
error_2 = _a.sent();
|
188
207
|
packageManager = 'npm';
|
189
|
-
return [3 /*break*/,
|
190
|
-
case
|
208
|
+
return [3 /*break*/, 9];
|
209
|
+
case 9: return [2 /*return*/, packageManager];
|
191
210
|
}
|
192
211
|
});
|
193
212
|
});
|
package/dist/utils/messages.js
CHANGED
@@ -62,7 +62,7 @@ function helpMessage() {
|
|
62
62
|
case 0: return [4 /*yield*/, (0, templates_1.getValidTemplates)()];
|
63
63
|
case 1:
|
64
64
|
validTemplates = _a.sent();
|
65
|
-
return [2 /*return*/, (0, chalk_1.default)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n {bold USAGE}\n\n {dim $} {bold npx create-payload-app}\n {dim $} {bold npx create-payload-app} my-project\n {dim $} {bold npx create-payload-app} -n my-project -t blog\n\n {bold OPTIONS}\n\n -n {underline my-payload-app} Set project name\n -t {underline template_name} Choose specific template\n\n {dim Available templates: ", "}\n\n --use-npm Use npm to install dependencies\n --no-deps Do not install any dependencies\n -h Show help\n"], ["\n {bold USAGE}\n\n {dim $} {bold npx create-payload-app}\n {dim $} {bold npx create-payload-app} my-project\n {dim $} {bold npx create-payload-app} -n my-project -t blog\n\n {bold OPTIONS}\n\n -n {underline my-payload-app} Set project name\n -t {underline template_name} Choose specific template\n\n {dim Available templates: ", "}\n\n --use-npm Use npm to install dependencies\n --no-deps Do not install any dependencies\n -h Show help\n"])), formatTemplates(validTemplates))];
|
65
|
+
return [2 /*return*/, (0, chalk_1.default)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n {bold USAGE}\n\n {dim $} {bold npx create-payload-app}\n {dim $} {bold npx create-payload-app} my-project\n {dim $} {bold npx create-payload-app} -n my-project -t blog\n\n {bold OPTIONS}\n\n -n {underline my-payload-app} Set project name\n -t {underline template_name} Choose specific template\n\n {dim Available templates: ", "}\n\n --use-npm Use npm to install dependencies\n --use-yarn Use yarn to install dependencies\n --use-pnpm Use pnpm to install dependencies\n --no-deps Do not install any dependencies\n -h Show help\n"], ["\n {bold USAGE}\n\n {dim $} {bold npx create-payload-app}\n {dim $} {bold npx create-payload-app} my-project\n {dim $} {bold npx create-payload-app} -n my-project -t blog\n\n {bold OPTIONS}\n\n -n {underline my-payload-app} Set project name\n -t {underline template_name} Choose specific template\n\n {dim Available templates: ", "}\n\n --use-npm Use npm to install dependencies\n --use-yarn Use yarn to install dependencies\n --use-pnpm Use pnpm to install dependencies\n --no-deps Do not install any dependencies\n -h Show help\n"])), formatTemplates(validTemplates))];
|
66
66
|
}
|
67
67
|
});
|
68
68
|
});
|