@foal/cli 3.0.2 → 3.2.0
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/README.md +0 -13
- package/lib/generate/file-system.d.ts +18 -0
- package/lib/generate/file-system.js +39 -0
- package/lib/generate/generators/app/create-app.js +27 -84
- package/lib/generate/generators/index.d.ts +1 -0
- package/lib/generate/generators/index.js +1 -0
- package/lib/generate/generators/upgrade/index.d.ts +1 -0
- package/lib/generate/generators/upgrade/index.js +5 -0
- package/lib/generate/generators/upgrade/upgrade.d.ts +8 -0
- package/lib/generate/generators/upgrade/upgrade.js +37 -0
- package/lib/generate/templates/app/.eslintrc.js +1 -0
- package/lib/generate/templates/app/package.json +3 -3
- package/lib/generate/templates/app/package.mongodb.json +3 -3
- package/lib/generate/utils/index.d.ts +2 -0
- package/lib/generate/utils/index.js +5 -1
- package/lib/generate/utils/install-dependencies.d.ts +3 -0
- package/lib/generate/utils/install-dependencies.js +52 -0
- package/lib/generate/utils/logger.d.ts +4 -0
- package/lib/generate/utils/logger.js +24 -0
- package/lib/index.js +8 -0
- package/package.json +6 -5
- package/lib/generate/templates/app/package.mongodb.yaml.json +0 -43
- package/lib/generate/templates/app/package.yaml.json +0 -47
package/README.md
CHANGED
|
@@ -8,13 +8,6 @@
|
|
|
8
8
|
<a href="https://github.com/FoalTS/foal/blob/master/LICENSE">
|
|
9
9
|
<img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT">
|
|
10
10
|
</a>
|
|
11
|
-
<img src="https://img.shields.io/badge/node-%3E%3D10-brightgreen.svg" alt="node version">
|
|
12
|
-
<a href="https://badge.fury.io/js/%40foal%2Fcli">
|
|
13
|
-
<img src="https://badge.fury.io/js/%40foal%2Fcli.svg" alt="npm version">
|
|
14
|
-
</a>
|
|
15
|
-
<a href="https://github.com/FoalTS/foal/actions">
|
|
16
|
-
<img src="https://github.com/FoalTS/foal/workflows/Test/badge.svg" alt="Build Status">
|
|
17
|
-
</a>
|
|
18
11
|
<a href="https://snyk.io/test/npm/@foal/cli">
|
|
19
12
|
<img src="https://snyk.io/test/npm/@foal/cli/badge.svg" alt="Known Vulnerabilities">
|
|
20
13
|
</a>
|
|
@@ -24,12 +17,6 @@
|
|
|
24
17
|
<a href="https://github.com/FoalTS/foal/commits/master">
|
|
25
18
|
<img src="https://img.shields.io/github/last-commit/FoalTS/foal.svg" alt="Last commit">
|
|
26
19
|
</a>
|
|
27
|
-
<a href="https://img.shields.io/badge/2FA-npm,%20GitHub-green.svg">
|
|
28
|
-
<img src="https://img.shields.io/badge/2FA-npm,%20GitHub-green.svg" alt="2FA">
|
|
29
|
-
</a>
|
|
30
|
-
<a href="https://discord.gg/QUrJv98">
|
|
31
|
-
<img src="https://img.shields.io/badge/Chat-Discord-blue.svg" alt="2FA">
|
|
32
|
-
</a>
|
|
33
20
|
</p>
|
|
34
21
|
|
|
35
22
|
## What is Foal?
|
|
@@ -198,6 +198,18 @@ export declare class FileSystem {
|
|
|
198
198
|
name: string;
|
|
199
199
|
version: string;
|
|
200
200
|
}[];
|
|
201
|
+
/**
|
|
202
|
+
* Sets or updates a dependency in the project package.json.
|
|
203
|
+
*
|
|
204
|
+
* @returns {this}
|
|
205
|
+
*/
|
|
206
|
+
setOrUpdateProjectDependency(name: string, version: string): this;
|
|
207
|
+
/**
|
|
208
|
+
* Set or updates a dependency in the project package.json if the condition is true.
|
|
209
|
+
*
|
|
210
|
+
* @returns {this}
|
|
211
|
+
*/
|
|
212
|
+
setOrUpdateProjectDependencyOnlyIf(condition: boolean, name: string, version: string): this;
|
|
201
213
|
/**
|
|
202
214
|
* Returns the dev dependencies of the project package.json.
|
|
203
215
|
*
|
|
@@ -207,6 +219,12 @@ export declare class FileSystem {
|
|
|
207
219
|
name: string;
|
|
208
220
|
version: string;
|
|
209
221
|
}[];
|
|
222
|
+
/**
|
|
223
|
+
* Sets or updates a dev dependency in the project package.json.
|
|
224
|
+
*
|
|
225
|
+
* @returns {this}
|
|
226
|
+
*/
|
|
227
|
+
setOrUpdateProjectDevDependency(name: string, version: string): this;
|
|
210
228
|
/************************
|
|
211
229
|
Testing Methods
|
|
212
230
|
************************/
|
|
@@ -403,6 +403,31 @@ class FileSystem {
|
|
|
403
403
|
return Object.keys(pkg.dependencies)
|
|
404
404
|
.map(name => ({ name, version: pkg.dependencies[name] }));
|
|
405
405
|
}
|
|
406
|
+
/**
|
|
407
|
+
* Sets or updates a dependency in the project package.json.
|
|
408
|
+
*
|
|
409
|
+
* @returns {this}
|
|
410
|
+
*/
|
|
411
|
+
setOrUpdateProjectDependency(name, version) {
|
|
412
|
+
const initialCurrentDir = this.currentDir;
|
|
413
|
+
this.cdProjectRootDir();
|
|
414
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)(this.parse('package.json'), 'utf8'));
|
|
415
|
+
pkg.dependencies[name] = version;
|
|
416
|
+
(0, fs_1.writeFileSync)(this.parse('package.json'), JSON.stringify(pkg, null, 2));
|
|
417
|
+
this.currentDir = initialCurrentDir;
|
|
418
|
+
return this;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Set or updates a dependency in the project package.json if the condition is true.
|
|
422
|
+
*
|
|
423
|
+
* @returns {this}
|
|
424
|
+
*/
|
|
425
|
+
setOrUpdateProjectDependencyOnlyIf(condition, name, version) {
|
|
426
|
+
if (condition) {
|
|
427
|
+
this.setOrUpdateProjectDependency(name, version);
|
|
428
|
+
}
|
|
429
|
+
return this;
|
|
430
|
+
}
|
|
406
431
|
/**
|
|
407
432
|
* Returns the dev dependencies of the project package.json.
|
|
408
433
|
*
|
|
@@ -416,6 +441,20 @@ class FileSystem {
|
|
|
416
441
|
return Object.keys(pkg.devDependencies)
|
|
417
442
|
.map(name => ({ name, version: pkg.devDependencies[name] }));
|
|
418
443
|
}
|
|
444
|
+
/**
|
|
445
|
+
* Sets or updates a dev dependency in the project package.json.
|
|
446
|
+
*
|
|
447
|
+
* @returns {this}
|
|
448
|
+
*/
|
|
449
|
+
setOrUpdateProjectDevDependency(name, version) {
|
|
450
|
+
const initialCurrentDir = this.currentDir;
|
|
451
|
+
this.cdProjectRootDir();
|
|
452
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)(this.parse('package.json'), 'utf8'));
|
|
453
|
+
pkg.devDependencies[name] = version;
|
|
454
|
+
(0, fs_1.writeFileSync)(this.parse('package.json'), JSON.stringify(pkg, null, 2));
|
|
455
|
+
this.currentDir = initialCurrentDir;
|
|
456
|
+
return this;
|
|
457
|
+
}
|
|
419
458
|
/************************
|
|
420
459
|
Testing Methods
|
|
421
460
|
************************/
|
|
@@ -1,68 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createApp = void 0;
|
|
4
|
-
// std
|
|
5
|
-
const child_process_1 = require("child_process");
|
|
6
4
|
// 3p
|
|
7
|
-
const cli_spinner_1 = require("cli-spinner");
|
|
8
5
|
const safe_1 = require("colors/safe");
|
|
9
6
|
// FoalTS
|
|
10
7
|
const file_system_1 = require("../../file-system");
|
|
11
8
|
const utils_1 = require("../../utils");
|
|
12
|
-
function isYarnInstalled() {
|
|
13
|
-
try {
|
|
14
|
-
(0, child_process_1.execSync)('yarn --version', { stdio: 'ignore' });
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function log(msg = '', spinner = false) {
|
|
22
|
-
// Do not print logs during testing.
|
|
23
|
-
if (process.env.P1Z7kEbSUUPMxF8GqPwD8Gx_FOAL_CLI_TEST === 'true') {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (spinner) {
|
|
27
|
-
const spinner = new cli_spinner_1.Spinner(msg);
|
|
28
|
-
spinner.setSpinnerString(18);
|
|
29
|
-
spinner.start();
|
|
30
|
-
return spinner;
|
|
31
|
-
}
|
|
32
|
-
console.log(msg);
|
|
33
|
-
}
|
|
34
|
-
function logCommand(msg) {
|
|
35
|
-
log(` $ ${(0, safe_1.cyan)(msg)}`);
|
|
36
|
-
}
|
|
37
9
|
async function createApp({ name, autoInstall, initRepo, mongodb = false, yaml = false }) {
|
|
38
10
|
const names = (0, utils_1.getNames)(name);
|
|
39
|
-
log();
|
|
40
|
-
log(' ------------------------------------------------- ');
|
|
41
|
-
log('| |');
|
|
42
|
-
log('| Foal |');
|
|
43
|
-
log('| |');
|
|
44
|
-
log(' ------------------------------------------------- ');
|
|
11
|
+
utils_1.logger.log();
|
|
12
|
+
utils_1.logger.log(' ------------------------------------------------- ');
|
|
13
|
+
utils_1.logger.log('| |');
|
|
14
|
+
utils_1.logger.log('| Foal |');
|
|
15
|
+
utils_1.logger.log('| |');
|
|
16
|
+
utils_1.logger.log(' ------------------------------------------------- ');
|
|
17
|
+
utils_1.logger.log();
|
|
45
18
|
const locals = names;
|
|
46
19
|
const fs = new file_system_1.FileSystem();
|
|
47
20
|
if (fs.exists(names.kebabName)) {
|
|
48
|
-
log();
|
|
49
|
-
log(
|
|
50
|
-
log(
|
|
51
|
-
log();
|
|
21
|
+
utils_1.logger.log((0, safe_1.red)(' Error: ') + `The target directory "${names.kebabName}" already exists.`);
|
|
22
|
+
utils_1.logger.log('Please remove it before proceeding.');
|
|
23
|
+
utils_1.logger.log();
|
|
52
24
|
return;
|
|
53
25
|
}
|
|
54
26
|
fs
|
|
55
27
|
.ensureDir(names.kebabName)
|
|
56
28
|
.cd(names.kebabName);
|
|
57
|
-
log();
|
|
58
|
-
log(
|
|
29
|
+
utils_1.logger.log(' 📂 Creating files...');
|
|
30
|
+
utils_1.logger.log();
|
|
59
31
|
fs
|
|
60
32
|
.hideLogs()
|
|
61
33
|
.copy('app/gitignore', '.gitignore')
|
|
62
|
-
.renderOnlyIf(!mongodb
|
|
63
|
-
.renderOnlyIf(
|
|
64
|
-
.
|
|
65
|
-
.renderOnlyIf(mongodb && yaml, 'app/package.mongodb.yaml.json', 'package.json', locals)
|
|
34
|
+
.renderOnlyIf(!mongodb, 'app/package.json', 'package.json', locals)
|
|
35
|
+
.renderOnlyIf(mongodb, 'app/package.mongodb.json', 'package.json', locals)
|
|
36
|
+
.setOrUpdateProjectDependencyOnlyIf(yaml, 'yamljs', '~0.3.0')
|
|
66
37
|
.copy('app/tsconfig.app.json', 'tsconfig.app.json')
|
|
67
38
|
.copy('app/tsconfig.e2e.json', 'tsconfig.e2e.json')
|
|
68
39
|
.copy('app/tsconfig.json', 'tsconfig.json')
|
|
@@ -140,53 +111,25 @@ async function createApp({ name, autoInstall, initRepo, mongodb = false, yaml =
|
|
|
140
111
|
.cd('scripts')
|
|
141
112
|
.copy('app/src/scripts/create-user.ts', 'create-user.ts');
|
|
142
113
|
if (autoInstall) {
|
|
143
|
-
const
|
|
144
|
-
log();
|
|
145
|
-
|
|
146
|
-
// TODO: in version 3, remove the hack "--ignore-engines"
|
|
147
|
-
const args = ['install', '--ignore-engines'];
|
|
148
|
-
const options = {
|
|
149
|
-
cwd: names.kebabName,
|
|
150
|
-
shell: true,
|
|
151
|
-
stdio: 'ignore',
|
|
152
|
-
};
|
|
153
|
-
const success = await new Promise(resolve => {
|
|
154
|
-
(0, child_process_1.spawn)(packageManager, args, options)
|
|
155
|
-
.on('close', (code) => resolve(code === 0));
|
|
156
|
-
});
|
|
157
|
-
if (spinner) {
|
|
158
|
-
spinner.stop(true);
|
|
159
|
-
}
|
|
160
|
-
if (!success) {
|
|
161
|
-
log(` ❗ Installing dependencies (${packageManager})...`);
|
|
162
|
-
log();
|
|
163
|
-
log((0, safe_1.red)(' Error: ') + 'A problem occurred during the installation of');
|
|
164
|
-
log('the dependencies. Try installing them manually by running');
|
|
165
|
-
log('the following commands:');
|
|
166
|
-
log();
|
|
167
|
-
logCommand(`cd ${names.kebabName}`);
|
|
168
|
-
logCommand(`${packageManager} install`);
|
|
169
|
-
log();
|
|
114
|
+
const { failed } = await (0, utils_1.installDependencies)(names.kebabName);
|
|
115
|
+
utils_1.logger.log();
|
|
116
|
+
if (failed) {
|
|
170
117
|
return;
|
|
171
118
|
}
|
|
172
|
-
else {
|
|
173
|
-
log(` 📦 Installing dependencies (${packageManager})...`);
|
|
174
|
-
}
|
|
175
119
|
}
|
|
176
120
|
if (initRepo) {
|
|
177
|
-
log();
|
|
178
|
-
log(
|
|
121
|
+
utils_1.logger.log(' 📔 Initializing git repository...');
|
|
122
|
+
utils_1.logger.log();
|
|
179
123
|
await (0, utils_1.initGitRepo)(names.kebabName);
|
|
180
124
|
}
|
|
181
|
-
log();
|
|
182
|
-
log('
|
|
183
|
-
log(
|
|
184
|
-
|
|
185
|
-
logCommand(`cd ${names.kebabName}`);
|
|
125
|
+
utils_1.logger.log('✨ Project successfully created.');
|
|
126
|
+
utils_1.logger.log('👉 Here are the next steps:');
|
|
127
|
+
utils_1.logger.log();
|
|
128
|
+
utils_1.logger.logCommand(`cd ${names.kebabName}`);
|
|
186
129
|
if (!autoInstall) {
|
|
187
|
-
logCommand('npm install');
|
|
130
|
+
utils_1.logger.logCommand('npm install');
|
|
188
131
|
}
|
|
189
|
-
logCommand('npm run dev');
|
|
190
|
-
log();
|
|
132
|
+
utils_1.logger.logCommand('npm run dev');
|
|
133
|
+
utils_1.logger.log();
|
|
191
134
|
}
|
|
192
135
|
exports.createApp = createApp;
|
|
@@ -23,4 +23,5 @@ __exportStar(require("./react"), exports);
|
|
|
23
23
|
__exportStar(require("./rest-api"), exports);
|
|
24
24
|
__exportStar(require("./script"), exports);
|
|
25
25
|
__exportStar(require("./service"), exports);
|
|
26
|
+
__exportStar(require("./upgrade"), exports);
|
|
26
27
|
__exportStar(require("./vue"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { upgrade } from './upgrade';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upgrade = void 0;
|
|
4
|
+
// 3p
|
|
5
|
+
const fetch = require("node-fetch");
|
|
6
|
+
// FoalTS
|
|
7
|
+
const file_system_1 = require("../../file-system");
|
|
8
|
+
const utils_1 = require("../../utils");
|
|
9
|
+
async function getLatestVersion() {
|
|
10
|
+
const response = await fetch('https://registry.npmjs.org/@foal/core/latest');
|
|
11
|
+
const { version } = await response.json();
|
|
12
|
+
return version;
|
|
13
|
+
}
|
|
14
|
+
async function upgrade({ version, autoInstall }, options = { getLatestVersion }) {
|
|
15
|
+
version ??= await options.getLatestVersion();
|
|
16
|
+
utils_1.logger.log();
|
|
17
|
+
utils_1.logger.log(` Upgrading @foal/* dependencies to version ${version}...`);
|
|
18
|
+
utils_1.logger.log();
|
|
19
|
+
const fs = new file_system_1.FileSystem();
|
|
20
|
+
const dependencies = fs.getProjectDependencies();
|
|
21
|
+
for (const dependency of dependencies) {
|
|
22
|
+
if (dependency.name.startsWith('@foal/')) {
|
|
23
|
+
fs.setOrUpdateProjectDependency(dependency.name, version);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const devDependencies = fs.getProjectDevDependencies();
|
|
27
|
+
for (const devDependency of devDependencies) {
|
|
28
|
+
if (devDependency.name.startsWith('@foal/')) {
|
|
29
|
+
fs.setOrUpdateProjectDevDependency(devDependency.name, version);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (autoInstall) {
|
|
33
|
+
await (0, utils_1.installDependencies)();
|
|
34
|
+
utils_1.logger.log();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.upgrade = upgrade;
|
|
@@ -40,6 +40,7 @@ module.exports = {
|
|
|
40
40
|
'@typescript-eslint/no-unsafe-call': 'off',
|
|
41
41
|
'@typescript-eslint/no-unsafe-member-access': 'off',
|
|
42
42
|
'@typescript-eslint/no-unsafe-return': 'off',
|
|
43
|
+
'@typescript-eslint/no-non-null-assertion': 'off',
|
|
43
44
|
},
|
|
44
45
|
ignorePatterns: [
|
|
45
46
|
'src/migrations/*.ts'
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
"@foal/cli": "^3.0.0",
|
|
35
35
|
"@types/mocha": "9.1.1",
|
|
36
36
|
"@types/node": "16.11.7",
|
|
37
|
-
"concurrently": "~7.
|
|
38
|
-
"mocha": "~
|
|
39
|
-
"supertest": "~6.2.
|
|
37
|
+
"concurrently": "~7.5.0",
|
|
38
|
+
"mocha": "~10.1.0",
|
|
39
|
+
"supertest": "~6.2.4",
|
|
40
40
|
"supervisor": "~0.12.0",
|
|
41
41
|
"eslint": "~8.17.0",
|
|
42
42
|
"@typescript-eslint/eslint-plugin": "~5.27.1",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"@foal/cli": "^3.0.0",
|
|
31
31
|
"@types/mocha": "9.1.1",
|
|
32
32
|
"@types/node": "16.11.7",
|
|
33
|
-
"concurrently": "~7.
|
|
34
|
-
"mocha": "~
|
|
35
|
-
"supertest": "~6.2.
|
|
33
|
+
"concurrently": "~7.5.0",
|
|
34
|
+
"mocha": "~10.1.0",
|
|
35
|
+
"supertest": "~6.2.4",
|
|
36
36
|
"supervisor": "~0.12.0",
|
|
37
37
|
"eslint": "~8.17.0",
|
|
38
38
|
"@typescript-eslint/eslint-plugin": "~5.27.1",
|
|
@@ -2,3 +2,5 @@ export { initGitRepo } from './init-git-repo';
|
|
|
2
2
|
export { rmDirAndFilesIfExist } from './rm-dir-and-files-if-exist';
|
|
3
3
|
export { mkdirIfDoesNotExist } from './mkdir-if-does-not-exist';
|
|
4
4
|
export { getNames } from './get-names';
|
|
5
|
+
export { logger } from './logger';
|
|
6
|
+
export { installDependencies } from './install-dependencies';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getNames = exports.mkdirIfDoesNotExist = exports.rmDirAndFilesIfExist = exports.initGitRepo = void 0;
|
|
3
|
+
exports.installDependencies = exports.logger = exports.getNames = exports.mkdirIfDoesNotExist = exports.rmDirAndFilesIfExist = exports.initGitRepo = void 0;
|
|
4
4
|
var init_git_repo_1 = require("./init-git-repo");
|
|
5
5
|
Object.defineProperty(exports, "initGitRepo", { enumerable: true, get: function () { return init_git_repo_1.initGitRepo; } });
|
|
6
6
|
var rm_dir_and_files_if_exist_1 = require("./rm-dir-and-files-if-exist");
|
|
@@ -9,3 +9,7 @@ var mkdir_if_does_not_exist_1 = require("./mkdir-if-does-not-exist");
|
|
|
9
9
|
Object.defineProperty(exports, "mkdirIfDoesNotExist", { enumerable: true, get: function () { return mkdir_if_does_not_exist_1.mkdirIfDoesNotExist; } });
|
|
10
10
|
var get_names_1 = require("./get-names");
|
|
11
11
|
Object.defineProperty(exports, "getNames", { enumerable: true, get: function () { return get_names_1.getNames; } });
|
|
12
|
+
var logger_1 = require("./logger");
|
|
13
|
+
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
14
|
+
var install_dependencies_1 = require("./install-dependencies");
|
|
15
|
+
Object.defineProperty(exports, "installDependencies", { enumerable: true, get: function () { return install_dependencies_1.installDependencies; } });
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installDependencies = void 0;
|
|
4
|
+
// std
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
const safe_1 = require("colors/safe");
|
|
7
|
+
// FoalTS
|
|
8
|
+
const logger_1 = require("./logger");
|
|
9
|
+
function isYarnInstalled() {
|
|
10
|
+
try {
|
|
11
|
+
(0, child_process_1.execSync)('yarn --version', { stdio: 'ignore' });
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function installDependencies(cwd = '') {
|
|
19
|
+
const packageManager = isYarnInstalled() ? 'yarn' : 'npm';
|
|
20
|
+
const spinner = logger_1.logger.log(`%s 📦 Installing dependencies (${packageManager})...`, true);
|
|
21
|
+
const args = ['install' /*, '--ignore-engines'*/];
|
|
22
|
+
const options = {
|
|
23
|
+
cwd,
|
|
24
|
+
shell: true,
|
|
25
|
+
stdio: 'ignore',
|
|
26
|
+
};
|
|
27
|
+
const success = await new Promise(resolve => {
|
|
28
|
+
(0, child_process_1.spawn)(packageManager, args, options)
|
|
29
|
+
.on('close', (code) => resolve(code === 0));
|
|
30
|
+
});
|
|
31
|
+
if (spinner) {
|
|
32
|
+
spinner.stop(true);
|
|
33
|
+
}
|
|
34
|
+
if (!success) {
|
|
35
|
+
logger_1.logger.log(` ❗ Installing dependencies (${packageManager})...`);
|
|
36
|
+
logger_1.logger.log();
|
|
37
|
+
logger_1.logger.log((0, safe_1.red)(' Error: ') + 'A problem occurred during the installation of');
|
|
38
|
+
logger_1.logger.log('the dependencies. Try installing them manually by running');
|
|
39
|
+
logger_1.logger.log('the following command(s):');
|
|
40
|
+
logger_1.logger.log();
|
|
41
|
+
if (cwd) {
|
|
42
|
+
logger_1.logger.logCommand(`cd ${cwd}`);
|
|
43
|
+
}
|
|
44
|
+
logger_1.logger.logCommand(`${packageManager} install`);
|
|
45
|
+
return { failed: true };
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
logger_1.logger.log(` 📦 Installing dependencies (${packageManager})...`);
|
|
49
|
+
return { failed: false };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.installDependencies = installDependencies;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logger = void 0;
|
|
4
|
+
// 3p
|
|
5
|
+
const cli_spinner_1 = require("cli-spinner");
|
|
6
|
+
const safe_1 = require("colors/safe");
|
|
7
|
+
exports.logger = {
|
|
8
|
+
log(msg = '', spinner = false) {
|
|
9
|
+
// Do not print logs during testing.
|
|
10
|
+
if (process.env.P1Z7kEbSUUPMxF8GqPwD8Gx_FOAL_CLI_TEST === 'true') {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (spinner) {
|
|
14
|
+
const spinner = new cli_spinner_1.Spinner(msg);
|
|
15
|
+
spinner.setSpinnerString(18);
|
|
16
|
+
spinner.start();
|
|
17
|
+
return spinner;
|
|
18
|
+
}
|
|
19
|
+
console.log(msg);
|
|
20
|
+
},
|
|
21
|
+
logCommand(msg) {
|
|
22
|
+
this.log(` $ ${(0, safe_1.cyan)(msg)}`);
|
|
23
|
+
}
|
|
24
|
+
};
|
package/lib/index.js
CHANGED
|
@@ -144,6 +144,14 @@ commander_1.program
|
|
|
144
144
|
throw error;
|
|
145
145
|
}
|
|
146
146
|
});
|
|
147
|
+
commander_1.program
|
|
148
|
+
.command('upgrade')
|
|
149
|
+
.argument('[version]', 'Name of the specific version to upgrade to')
|
|
150
|
+
.description('Upgrade the project to the latest version of FoalTS. If a version is provided, upgrade to that version.')
|
|
151
|
+
.option('-I, --no-install', 'Don\'t autoinstall packages using yarn or npm (uses first available)')
|
|
152
|
+
.action(async (version, options) => {
|
|
153
|
+
await (0, generate_1.upgrade)({ version, autoInstall: options.install });
|
|
154
|
+
});
|
|
147
155
|
commander_1.program
|
|
148
156
|
.on('command:*', (commands) => {
|
|
149
157
|
commander_1.program.outputHelp();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foal/cli",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "CLI tool for FoalTS",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -61,16 +61,17 @@
|
|
|
61
61
|
"ajv-formats": "~2.1.1",
|
|
62
62
|
"cli-spinner": "~0.2.10",
|
|
63
63
|
"colors": "1.4.0",
|
|
64
|
-
"commander": "~9.
|
|
64
|
+
"commander": "~9.4.1",
|
|
65
|
+
"node-fetch": "~2.6.7"
|
|
65
66
|
},
|
|
66
67
|
"devDependencies": {
|
|
67
68
|
"@types/mocha": "9.1.1",
|
|
68
69
|
"@types/node": "16.11.7",
|
|
69
70
|
"copyfiles": "~2.4.1",
|
|
70
|
-
"mocha": "~10.
|
|
71
|
+
"mocha": "~10.1.0",
|
|
71
72
|
"rimraf": "~3.0.2",
|
|
72
|
-
"ts-node": "~10.
|
|
73
|
+
"ts-node": "~10.9.1",
|
|
73
74
|
"typescript": "~4.7.4"
|
|
74
75
|
},
|
|
75
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "18795d8b1b8e9e55c1f5127bcda00dd0e7ee6ede"
|
|
76
77
|
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "/* kebabName */",
|
|
3
|
-
"version": "0.0.0",
|
|
4
|
-
"description": "description of the application",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"repository": {},
|
|
7
|
-
"scripts": {
|
|
8
|
-
"build": "foal rmdir build && tsc -p tsconfig.app.json",
|
|
9
|
-
"start": "node ./build/index.js",
|
|
10
|
-
"dev": "npm run build && concurrently -r \"tsc -p tsconfig.app.json -w\" \"supervisor -w ./build,./config -e js,json,yml --no-restart-on error ./build/index.js\"",
|
|
11
|
-
"build:test": "foal rmdir build && tsc -p tsconfig.test.json",
|
|
12
|
-
"start:test": "mocha --file ./build/test.js \"./build/**/*.spec.js\"",
|
|
13
|
-
"test": "npm run build:test && concurrently -r \"tsc -p tsconfig.test.json -w\" \"mocha --file ./build/test.js -w \\\"./build/**/*.spec.js\\\"\"",
|
|
14
|
-
"build:e2e": "foal rmdir build && tsc -p tsconfig.e2e.json",
|
|
15
|
-
"start:e2e": "mocha --timeout 4000 --file ./build/e2e.js \"./build/e2e/**/*.js\"",
|
|
16
|
-
"e2e": "npm run build:e2e && concurrently -r \"tsc -p tsconfig.e2e.json -w\" \"mocha --file ./build/e2e.js -w \\\"./build/e2e/**/*.js\\\"\"",
|
|
17
|
-
"lint": "eslint --ext ts src",
|
|
18
|
-
"lint:fix": "eslint --ext ts --fix src"
|
|
19
|
-
},
|
|
20
|
-
"engines": {
|
|
21
|
-
"node": ">=16.0.0"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"@foal/core": "^3.0.0",
|
|
25
|
-
"mongodb": "~3.7.3",
|
|
26
|
-
"source-map-support": "~0.5.21",
|
|
27
|
-
"typeorm": "0.3.10",
|
|
28
|
-
"yamljs": "~0.3.0"
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"@foal/cli": "^3.0.0",
|
|
32
|
-
"@types/mocha": "9.1.1",
|
|
33
|
-
"@types/node": "16.11.7",
|
|
34
|
-
"concurrently": "~7.2.2",
|
|
35
|
-
"mocha": "~8.2.0",
|
|
36
|
-
"supertest": "~6.2.3",
|
|
37
|
-
"supervisor": "~0.12.0",
|
|
38
|
-
"eslint": "~8.17.0",
|
|
39
|
-
"@typescript-eslint/eslint-plugin": "~5.27.1",
|
|
40
|
-
"@typescript-eslint/parser": "~5.27.1",
|
|
41
|
-
"typescript": "~4.7.4"
|
|
42
|
-
}
|
|
43
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "/* kebabName */",
|
|
3
|
-
"version": "0.0.0",
|
|
4
|
-
"description": "description of the application",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"repository": {},
|
|
7
|
-
"scripts": {
|
|
8
|
-
"build": "foal rmdir build && tsc -p tsconfig.app.json",
|
|
9
|
-
"start": "node ./build/index.js",
|
|
10
|
-
"dev": "npm run build && concurrently -r \"tsc -p tsconfig.app.json -w\" \"supervisor -w ./build,./config -e js,json,yml --no-restart-on error ./build/index.js\"",
|
|
11
|
-
"build:test": "foal rmdir build && tsc -p tsconfig.test.json",
|
|
12
|
-
"start:test": "mocha --file ./build/test.js \"./build/**/*.spec.js\"",
|
|
13
|
-
"test": "npm run build:test && concurrently -r \"tsc -p tsconfig.test.json -w\" \"mocha --file ./build/test.js -w \\\"./build/**/*.spec.js\\\"\"",
|
|
14
|
-
"build:e2e": "foal rmdir build && tsc -p tsconfig.e2e.json",
|
|
15
|
-
"start:e2e": "mocha --timeout 4000 --file ./build/e2e.js \"./build/e2e/**/*.js\"",
|
|
16
|
-
"e2e": "npm run build:e2e && concurrently -r \"tsc -p tsconfig.e2e.json -w\" \"mocha --file ./build/e2e.js -w \\\"./build/e2e/**/*.js\\\"\"",
|
|
17
|
-
"lint": "eslint --ext ts src",
|
|
18
|
-
"lint:fix": "eslint --ext ts --fix src",
|
|
19
|
-
"makemigrations": "foal rmdir build && tsc -p tsconfig.app.json && npx typeorm migration:generate src/migrations/migration -d build/db -p && tsc -p tsconfig.app.json",
|
|
20
|
-
"migrations": "npx typeorm migration:run -d build/db",
|
|
21
|
-
"revertmigration": "npx typeorm migration:revert -d build/db"
|
|
22
|
-
},
|
|
23
|
-
"engines": {
|
|
24
|
-
"node": ">=16.0.0"
|
|
25
|
-
},
|
|
26
|
-
"dependencies": {
|
|
27
|
-
"@foal/core": "^3.0.0",
|
|
28
|
-
"@foal/typeorm": "^3.0.0",
|
|
29
|
-
"source-map-support": "~0.5.21",
|
|
30
|
-
"better-sqlite3": "~7.5.0",
|
|
31
|
-
"typeorm": "0.3.10",
|
|
32
|
-
"yamljs": "~0.3.0"
|
|
33
|
-
},
|
|
34
|
-
"devDependencies": {
|
|
35
|
-
"@foal/cli": "^3.0.0",
|
|
36
|
-
"@types/mocha": "9.1.1",
|
|
37
|
-
"@types/node": "16.11.7",
|
|
38
|
-
"concurrently": "~7.2.2",
|
|
39
|
-
"mocha": "~8.2.0",
|
|
40
|
-
"supertest": "~6.2.3",
|
|
41
|
-
"supervisor": "~0.12.0",
|
|
42
|
-
"eslint": "~8.17.0",
|
|
43
|
-
"@typescript-eslint/eslint-plugin": "~5.27.1",
|
|
44
|
-
"@typescript-eslint/parser": "~5.27.1",
|
|
45
|
-
"typescript": "~4.7.4"
|
|
46
|
-
}
|
|
47
|
-
}
|