create-payload-app 0.5.2 → 1.0.0-beta.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,184 +1,111 @@
1
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());
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
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 (g && (g = 0, op[0] && (_ = 0)), _) 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 };
10
+ }
11
+ _export(exports, {
12
+ createProject: function() {
13
+ return createProject;
14
+ },
15
+ updatePackageJSON: function() {
16
+ return updatePackageJSON;
36
17
  }
37
- };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.updatePackageJSON = exports.createProject = void 0;
43
- var path_1 = __importDefault(require("path"));
44
- var chalk_1 = __importDefault(require("chalk"));
45
- var fs_extra_1 = __importDefault(require("fs-extra"));
46
- var execa_1 = __importDefault(require("execa"));
47
- var ora_1 = __importDefault(require("ora"));
48
- var degit_1 = __importDefault(require("degit"));
49
- var log_1 = require("../utils/log");
50
- var configure_payload_config_1 = require("./configure-payload-config");
51
- function createOrFindProjectDir(projectDir) {
52
- return __awaiter(this, void 0, void 0, function () {
53
- var pathExists;
54
- return __generator(this, function (_a) {
55
- switch (_a.label) {
56
- case 0: return [4 /*yield*/, fs_extra_1.default.pathExists(projectDir)];
57
- case 1:
58
- pathExists = _a.sent();
59
- if (!!pathExists) return [3 /*break*/, 3];
60
- return [4 /*yield*/, fs_extra_1.default.mkdir(projectDir)];
61
- case 2:
62
- _a.sent();
63
- _a.label = 3;
64
- case 3: return [2 /*return*/];
65
- }
66
- });
67
- });
18
+ });
19
+ const _chalk = /*#__PURE__*/ _interop_require_default(require("chalk"));
20
+ const _degit = /*#__PURE__*/ _interop_require_default(require("degit"));
21
+ const _execa = /*#__PURE__*/ _interop_require_default(require("execa"));
22
+ const _fsextra = /*#__PURE__*/ _interop_require_default(require("fs-extra"));
23
+ const _ora = /*#__PURE__*/ _interop_require_default(require("ora"));
24
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
25
+ const _log = require("../utils/log");
26
+ const _configurepayloadconfig = require("./configure-payload-config");
27
+ function _interop_require_default(obj) {
28
+ return obj && obj.__esModule ? obj : {
29
+ default: obj
30
+ };
68
31
  }
69
- function installDeps(args) {
70
- return __awaiter(this, void 0, void 0, function () {
71
- var cliArgs, projectDir, packageManager, installCmd, err_1;
72
- return __generator(this, function (_a) {
73
- switch (_a.label) {
74
- case 0:
75
- cliArgs = args.cliArgs, projectDir = args.projectDir, packageManager = args.packageManager;
76
- if (cliArgs['--no-deps']) {
77
- return [2 /*return*/, true];
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
- }
86
- _a.label = 1;
87
- case 1:
88
- _a.trys.push([1, 3, , 4]);
89
- return [4 /*yield*/, execa_1.default.command(installCmd, {
90
- cwd: path_1.default.resolve(projectDir),
91
- })];
92
- case 2:
93
- _a.sent();
94
- return [2 /*return*/, true];
95
- case 3:
96
- err_1 = _a.sent();
97
- console.log({ err: err_1 });
98
- return [2 /*return*/, false];
99
- case 4: return [2 /*return*/];
100
- }
101
- });
102
- });
32
+ async function createOrFindProjectDir(projectDir) {
33
+ const pathExists = await _fsextra.default.pathExists(projectDir);
34
+ if (!pathExists) {
35
+ await _fsextra.default.mkdir(projectDir);
36
+ }
103
37
  }
104
- function createProject(args) {
105
- return __awaiter(this, void 0, void 0, function () {
106
- var cliArgs, projectName, projectDir, template, packageManager, dbDetails, emitter, spinner, lockPath, result;
107
- return __generator(this, function (_a) {
108
- switch (_a.label) {
109
- case 0:
110
- cliArgs = args.cliArgs, projectName = args.projectName, projectDir = args.projectDir, template = args.template, packageManager = args.packageManager, dbDetails = args.dbDetails;
111
- return [4 /*yield*/, createOrFindProjectDir(projectDir)];
112
- case 1:
113
- _a.sent();
114
- console.log("\n Creating project in ".concat(chalk_1.default.green(path_1.default.resolve(projectDir)), "\n"));
115
- if (!('url' in template)) return [3 /*break*/, 3];
116
- emitter = (0, degit_1.default)(template.url);
117
- return [4 /*yield*/, emitter.clone(projectDir)];
118
- case 2:
119
- _a.sent();
120
- _a.label = 3;
121
- case 3:
122
- spinner = (0, ora_1.default)('Checking latest Payload version...').start();
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 })
127
- // Remove yarn.lock file. This is only desired in Payload Cloud.
128
- ];
129
- case 5:
130
- _a.sent();
131
- lockPath = path_1.default.resolve(projectDir, 'yarn.lock');
132
- if (!fs_extra_1.default.existsSync(lockPath)) return [3 /*break*/, 7];
133
- return [4 /*yield*/, fs_extra_1.default.remove(lockPath)];
134
- case 6:
135
- _a.sent();
136
- _a.label = 7;
137
- case 7:
138
- spinner.text = 'Installing dependencies...';
139
- return [4 /*yield*/, installDeps({ cliArgs: cliArgs, projectDir: projectDir, packageManager: packageManager })];
140
- case 8:
141
- result = _a.sent();
142
- spinner.stop();
143
- spinner.clear();
144
- if (result) {
145
- (0, log_1.success)('Dependencies installed');
146
- }
147
- else {
148
- (0, log_1.error)('Error installing dependencies');
149
- }
150
- return [2 /*return*/];
151
- }
38
+ async function installDeps(args) {
39
+ const { cliArgs, packageManager, projectDir } = args;
40
+ if (cliArgs['--no-deps']) {
41
+ return true;
42
+ }
43
+ let installCmd = 'npm install --legacy-peer-deps';
44
+ if (packageManager === 'yarn') {
45
+ installCmd = 'yarn';
46
+ } else if (packageManager === 'pnpm') {
47
+ installCmd = 'pnpm install';
48
+ }
49
+ try {
50
+ await _execa.default.command(installCmd, {
51
+ cwd: _path.default.resolve(projectDir)
52
+ });
53
+ return true;
54
+ } catch (err) {
55
+ console.log({
56
+ err
152
57
  });
58
+ return false;
59
+ }
60
+ }
61
+ async function createProject(args) {
62
+ const { cliArgs, dbDetails, packageManager, projectDir, projectName, template } = args;
63
+ await createOrFindProjectDir(projectDir);
64
+ console.log(`\n Creating project in ${_chalk.default.green(_path.default.resolve(projectDir))}\n`);
65
+ if ('url' in template) {
66
+ const emitter = (0, _degit.default)(template.url);
67
+ await emitter.clone(projectDir);
68
+ }
69
+ const spinner = (0, _ora.default)('Checking latest Payload version...').start();
70
+ await updatePackageJSON({
71
+ projectDir,
72
+ projectName
153
73
  });
74
+ await (0, _configurepayloadconfig.configurePayloadConfig)({
75
+ dbDetails,
76
+ projectDir
77
+ });
78
+ // Remove yarn.lock file. This is only desired in Payload Cloud.
79
+ const lockPath = _path.default.resolve(projectDir, 'yarn.lock');
80
+ if (_fsextra.default.existsSync(lockPath)) {
81
+ await _fsextra.default.remove(lockPath);
82
+ }
83
+ spinner.text = 'Installing dependencies...';
84
+ const result = await installDeps({
85
+ cliArgs,
86
+ packageManager,
87
+ projectDir
88
+ });
89
+ spinner.stop();
90
+ spinner.clear();
91
+ if (result) {
92
+ (0, _log.success)('Dependencies installed');
93
+ } else {
94
+ (0, _log.error)('Error installing dependencies');
95
+ }
154
96
  }
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
- }
97
+ async function updatePackageJSON(args) {
98
+ const { projectDir, projectName } = args;
99
+ const packageJsonPath = _path.default.resolve(projectDir, 'package.json');
100
+ try {
101
+ const packageObj = await _fsextra.default.readJson(packageJsonPath);
102
+ packageObj.name = projectName;
103
+ await _fsextra.default.writeJson(packageJsonPath, packageObj, {
104
+ spaces: 2
181
105
  });
182
- });
106
+ } catch (err) {
107
+ (0, _log.warning)('Unable to update name in package.json');
108
+ }
183
109
  }
184
- exports.updatePackageJSON = updatePackageJSON;
110
+
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3JlYXRlLXByb2plY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IGRlZ2l0IGZyb20gJ2RlZ2l0J1xuaW1wb3J0IGV4ZWNhIGZyb20gJ2V4ZWNhJ1xuaW1wb3J0IGZzZSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBvcmEgZnJvbSAnb3JhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHR5cGUgeyBDbGlBcmdzLCBEYkRldGFpbHMsIFBhY2thZ2VNYW5hZ2VyLCBQcm9qZWN0VGVtcGxhdGUgfSBmcm9tICcuLi90eXBlcydcblxuaW1wb3J0IHsgZXJyb3IsIHN1Y2Nlc3MsIHdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9sb2cnXG5pbXBvcnQgeyBjb25maWd1cmVQYXlsb2FkQ29uZmlnIH0gZnJvbSAnLi9jb25maWd1cmUtcGF5bG9hZC1jb25maWcnXG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU9yRmluZFByb2plY3REaXIocHJvamVjdERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhdGhFeGlzdHMgPSBhd2FpdCBmc2UucGF0aEV4aXN0cyhwcm9qZWN0RGlyKVxuICBpZiAoIXBhdGhFeGlzdHMpIHtcbiAgICBhd2FpdCBmc2UubWtkaXIocHJvamVjdERpcilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsRGVwcyhhcmdzOiB7XG4gIGNsaUFyZ3M6IENsaUFyZ3NcbiAgcGFja2FnZU1hbmFnZXI6IFBhY2thZ2VNYW5hZ2VyXG4gIHByb2plY3REaXI6IHN0cmluZ1xufSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGNsaUFyZ3MsIHBhY2thZ2VNYW5hZ2VyLCBwcm9qZWN0RGlyIH0gPSBhcmdzXG4gIGlmIChjbGlBcmdzWyctLW5vLWRlcHMnXSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgbGV0IGluc3RhbGxDbWQgPSAnbnBtIGluc3RhbGwgLS1sZWdhY3ktcGVlci1kZXBzJ1xuXG4gIGlmIChwYWNrYWdlTWFuYWdlciA9PT0gJ3lhcm4nKSB7XG4gICAgaW5zdGFsbENtZCA9ICd5YXJuJ1xuICB9IGVsc2UgaWYgKHBhY2thZ2VNYW5hZ2VyID09PSAncG5wbScpIHtcbiAgICBpbnN0YWxsQ21kID0gJ3BucG0gaW5zdGFsbCdcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY2EuY29tbWFuZChpbnN0YWxsQ21kLCB7XG4gICAgICBjd2Q6IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyKSxcbiAgICB9KVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgIGNvbnNvbGUubG9nKHsgZXJyIH0pXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVByb2plY3QoYXJnczoge1xuICBjbGlBcmdzOiBDbGlBcmdzXG4gIGRiRGV0YWlscz86IERiRGV0YWlsc1xuICBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXJcbiAgcHJvamVjdERpcjogc3RyaW5nXG4gIHByb2plY3ROYW1lOiBzdHJpbmdcbiAgdGVtcGxhdGU6IFByb2plY3RUZW1wbGF0ZVxufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNsaUFyZ3MsIGRiRGV0YWlscywgcGFja2FnZU1hbmFnZXIsIHByb2plY3REaXIsIHByb2plY3ROYW1lLCB0ZW1wbGF0ZSB9ID0gYXJnc1xuXG4gIGF3YWl0IGNyZWF0ZU9yRmluZFByb2plY3REaXIocHJvamVjdERpcilcblxuICBjb25zb2xlLmxvZyhgXFxuICBDcmVhdGluZyBwcm9qZWN0IGluICR7Y2hhbGsuZ3JlZW4ocGF0aC5yZXNvbHZlKHByb2plY3REaXIpKX1cXG5gKVxuXG4gIGlmICgndXJsJyBpbiB0ZW1wbGF0ZSkge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSBkZWdpdCh0ZW1wbGF0ZS51cmwpXG4gICAgYXdhaXQgZW1pdHRlci5jbG9uZShwcm9qZWN0RGlyKVxuICB9XG5cbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnQ2hlY2tpbmcgbGF0ZXN0IFBheWxvYWQgdmVyc2lvbi4uLicpLnN0YXJ0KClcblxuICBhd2FpdCB1cGRhdGVQYWNrYWdlSlNPTih7IHByb2plY3REaXIsIHByb2plY3ROYW1lIH0pXG4gIGF3YWl0IGNvbmZpZ3VyZVBheWxvYWRDb25maWcoeyBkYkRldGFpbHMsIHByb2plY3REaXIgfSlcblxuICAvLyBSZW1vdmUgeWFybi5sb2NrIGZpbGUuIFRoaXMgaXMgb25seSBkZXNpcmVkIGluIFBheWxvYWQgQ2xvdWQuXG4gIGNvbnN0IGxvY2tQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3REaXIsICd5YXJuLmxvY2snKVxuICBpZiAoZnNlLmV4aXN0c1N5bmMobG9ja1BhdGgpKSB7XG4gICAgYXdhaXQgZnNlLnJlbW92ZShsb2NrUGF0aClcbiAgfVxuXG4gIHNwaW5uZXIudGV4dCA9ICdJbnN0YWxsaW5nIGRlcGVuZGVuY2llcy4uLidcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5zdGFsbERlcHMoeyBjbGlBcmdzLCBwYWNrYWdlTWFuYWdlciwgcHJvamVjdERpciB9KVxuICBzcGlubmVyLnN0b3AoKVxuICBzcGlubmVyLmNsZWFyKClcbiAgaWYgKHJlc3VsdCkge1xuICAgIHN1Y2Nlc3MoJ0RlcGVuZGVuY2llcyBpbnN0YWxsZWQnKVxuICB9IGVsc2Uge1xuICAgIGVycm9yKCdFcnJvciBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcycpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBhY2thZ2VKU09OKGFyZ3M6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nXG4gIHByb2plY3ROYW1lOiBzdHJpbmdcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBwcm9qZWN0RGlyLCBwcm9qZWN0TmFtZSB9ID0gYXJnc1xuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdERpciwgJ3BhY2thZ2UuanNvbicpXG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZU9iaiA9IGF3YWl0IGZzZS5yZWFkSnNvbihwYWNrYWdlSnNvblBhdGgpXG4gICAgcGFja2FnZU9iai5uYW1lID0gcHJvamVjdE5hbWVcbiAgICBhd2FpdCBmc2Uud3JpdGVKc29uKHBhY2thZ2VKc29uUGF0aCwgcGFja2FnZU9iaiwgeyBzcGFjZXM6IDIgfSlcbiAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgd2FybmluZygnVW5hYmxlIHRvIHVwZGF0ZSBuYW1lIGluIHBhY2thZ2UuanNvbicpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVQcm9qZWN0IiwidXBkYXRlUGFja2FnZUpTT04iLCJjcmVhdGVPckZpbmRQcm9qZWN0RGlyIiwicHJvamVjdERpciIsInBhdGhFeGlzdHMiLCJmc2UiLCJta2RpciIsImluc3RhbGxEZXBzIiwiYXJncyIsImNsaUFyZ3MiLCJwYWNrYWdlTWFuYWdlciIsImluc3RhbGxDbWQiLCJleGVjYSIsImNvbW1hbmQiLCJjd2QiLCJwYXRoIiwicmVzb2x2ZSIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJkYkRldGFpbHMiLCJwcm9qZWN0TmFtZSIsInRlbXBsYXRlIiwiY2hhbGsiLCJncmVlbiIsImVtaXR0ZXIiLCJkZWdpdCIsInVybCIsImNsb25lIiwic3Bpbm5lciIsIm9yYSIsInN0YXJ0IiwiY29uZmlndXJlUGF5bG9hZENvbmZpZyIsImxvY2tQYXRoIiwiZXhpc3RzU3luYyIsInJlbW92ZSIsInRleHQiLCJyZXN1bHQiLCJzdG9wIiwiY2xlYXIiLCJzdWNjZXNzIiwiZXJyb3IiLCJwYWNrYWdlSnNvblBhdGgiLCJwYWNrYWdlT2JqIiwicmVhZEpzb24iLCJuYW1lIiwid3JpdGVKc29uIiwic3BhY2VzIiwid2FybmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUErQ3NCQSxhQUFhO2VBQWJBOztJQXlDQUMsaUJBQWlCO2VBQWpC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