@lenne.tech/cli-plugin-helper 0.0.11 → 0.0.13
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/dist/extensions/helper.extension.d.ts +3 -3
- package/dist/extensions/helper.extension.js +16 -16
- package/dist/extensions/helper.extension.js.map +1 -1
- package/dist/extensions/npm.extension.d.ts +7 -2
- package/dist/extensions/npm.extension.js +69 -23
- package/dist/extensions/npm.extension.js.map +1 -1
- package/package.json +29 -20
- package/src/extensions/helper.extension.ts +26 -25
- package/src/extensions/npm.extension.ts +77 -23
- package/src/interfaces/extended-gluegun-toolbox.interface.ts +1 -0
|
@@ -20,9 +20,9 @@ export declare class Helper {
|
|
|
20
20
|
* Get input if not set
|
|
21
21
|
*/
|
|
22
22
|
getInput(input: string, options?: {
|
|
23
|
+
errorMessage?: string;
|
|
23
24
|
initial?: string;
|
|
24
25
|
name?: string;
|
|
25
|
-
errorMessage?: string;
|
|
26
26
|
showError?: boolean;
|
|
27
27
|
}): Promise<string>;
|
|
28
28
|
/**
|
|
@@ -50,12 +50,12 @@ export declare class Helper {
|
|
|
50
50
|
*/
|
|
51
51
|
showMenu(parentCommands?: string, options?: {
|
|
52
52
|
checkUpdate?: boolean;
|
|
53
|
-
level?: number;
|
|
54
53
|
headline?: string;
|
|
54
|
+
level?: number;
|
|
55
55
|
}): Promise<void>;
|
|
56
56
|
}
|
|
57
|
-
declare const _default: (toolbox: IHelperExtendedGluegunToolbox) => void;
|
|
58
57
|
/**
|
|
59
58
|
* Extend toolbox
|
|
60
59
|
*/
|
|
60
|
+
declare const _default: (toolbox: IHelperExtendedGluegunToolbox) => void;
|
|
61
61
|
export default _default;
|
|
@@ -30,11 +30,11 @@ class Helper {
|
|
|
30
30
|
getConfig() {
|
|
31
31
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
32
|
// Toolbox feature
|
|
33
|
-
const { config, filesystem, runtime: { brand } } = this.toolbox;
|
|
33
|
+
const { config, filesystem, runtime: { brand }, } = this.toolbox;
|
|
34
34
|
// Configuration in home directory (~/.brand)
|
|
35
35
|
let homeDirConfig = {};
|
|
36
36
|
try {
|
|
37
|
-
const homeDirConfigFile = (0, path_1.join)(filesystem.homedir(),
|
|
37
|
+
const homeDirConfigFile = (0, path_1.join)(filesystem.homedir(), `.${brand}`);
|
|
38
38
|
if (yield filesystem.existsAsync(homeDirConfigFile)) {
|
|
39
39
|
homeDirConfig = JSON.parse(yield filesystem.readAsync(homeDirConfigFile));
|
|
40
40
|
}
|
|
@@ -45,7 +45,7 @@ class Helper {
|
|
|
45
45
|
// Configuration in current directory (./.brand)
|
|
46
46
|
let currentDirConfig = {};
|
|
47
47
|
try {
|
|
48
|
-
const currentDirConfigFile = (0, path_1.join)(filesystem.cwd(),
|
|
48
|
+
const currentDirConfigFile = (0, path_1.join)(filesystem.cwd(), `.${brand}`);
|
|
49
49
|
if (yield filesystem.existsAsync(currentDirConfigFile)) {
|
|
50
50
|
currentDirConfig = JSON.parse(yield filesystem.readAsync(currentDirConfigFile));
|
|
51
51
|
}
|
|
@@ -76,20 +76,20 @@ class Helper {
|
|
|
76
76
|
const opts = Object.assign({
|
|
77
77
|
initial: '',
|
|
78
78
|
name: 'name',
|
|
79
|
-
showError: false
|
|
79
|
+
showError: false,
|
|
80
80
|
}, options);
|
|
81
81
|
if (!opts.errorMessage) {
|
|
82
82
|
opts.errorMessage = `You must provide a valid ${opts.name}!`;
|
|
83
83
|
}
|
|
84
84
|
// Toolbox features
|
|
85
|
-
const { print: { error }, prompt: { ask } } = this.toolbox;
|
|
85
|
+
const { print: { error }, prompt: { ask }, } = this.toolbox;
|
|
86
86
|
// Get input
|
|
87
87
|
if (!input || !this.trim(input)) {
|
|
88
88
|
const answers = yield ask({
|
|
89
89
|
initial: opts.initial,
|
|
90
|
-
|
|
90
|
+
message: `Enter ${opts.name}`,
|
|
91
91
|
name: 'input',
|
|
92
|
-
|
|
92
|
+
type: 'input',
|
|
93
93
|
});
|
|
94
94
|
input = answers.input;
|
|
95
95
|
if (!input && opts.showError) {
|
|
@@ -106,7 +106,7 @@ class Helper {
|
|
|
106
106
|
msToMinutesAndSeconds(ms) {
|
|
107
107
|
const minutes = Math.floor((ms / 1000 / 60) << 0);
|
|
108
108
|
const seconds = Math.floor((ms / 1000) % 60);
|
|
109
|
-
return minutes
|
|
109
|
+
return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
112
112
|
* Read a file
|
|
@@ -148,7 +148,7 @@ class Helper {
|
|
|
148
148
|
updateCli(options) {
|
|
149
149
|
return __awaiter(this, void 0, void 0, function* () {
|
|
150
150
|
// Toolbox
|
|
151
|
-
const { helper, meta, print: { info, spin, success }, runtime: { brand, defaultPlugin }, system: { run, startTimer } } = this.toolbox;
|
|
151
|
+
const { helper, meta, print: { info, spin, success }, runtime: { brand, defaultPlugin }, system: { run, startTimer }, } = this.toolbox;
|
|
152
152
|
// Start timer
|
|
153
153
|
const timer = startTimer();
|
|
154
154
|
// Get package.json
|
|
@@ -157,7 +157,7 @@ class Helper {
|
|
|
157
157
|
const opts = Object.assign({
|
|
158
158
|
global: true,
|
|
159
159
|
packageName: packageJson ? packageJson.name : '',
|
|
160
|
-
showInfos: false
|
|
160
|
+
showInfos: false,
|
|
161
161
|
}, options);
|
|
162
162
|
// Run without infos
|
|
163
163
|
if (!opts.showInfos) {
|
|
@@ -182,16 +182,16 @@ class Helper {
|
|
|
182
182
|
showMenu(parentCommands, options) {
|
|
183
183
|
return __awaiter(this, void 0, void 0, function* () {
|
|
184
184
|
// Toolbox feature
|
|
185
|
-
const { config, filesystem: { existsAsync }, meta, runtime: { brand, defaultPlugin } } = this.toolbox;
|
|
185
|
+
const { config, filesystem: { existsAsync }, meta, runtime: { brand, defaultPlugin }, } = this.toolbox;
|
|
186
186
|
// Process options
|
|
187
187
|
const { checkUpdate } = Object.assign({
|
|
188
|
-
checkUpdate: true
|
|
188
|
+
checkUpdate: true,
|
|
189
189
|
}, options);
|
|
190
190
|
// Check for updates
|
|
191
|
-
if (checkUpdate
|
|
192
|
-
config[brand].checkForUpdate
|
|
193
|
-
(yield this.getConfig()).checkForUpdate
|
|
194
|
-
!(yield existsAsync((0, path_1.join)(meta.src ? meta.src : defaultPlugin.directory, '..', 'src'))) // not development environment
|
|
191
|
+
if (checkUpdate // parameter
|
|
192
|
+
&& config[brand].checkForUpdate // current configuration
|
|
193
|
+
&& (yield this.getConfig()).checkForUpdate // extra configuration
|
|
194
|
+
&& !(yield existsAsync((0, path_1.join)(meta.src ? meta.src : defaultPlugin.directory, '..', 'src'))) // not development environment
|
|
195
195
|
) {
|
|
196
196
|
config[brand].checkForUpdate = false;
|
|
197
197
|
// tslint:disable-next-line:no-floating-promises
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.extension.js","sourceRoot":"","sources":["../../src/extensions/helper.extension.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2DAAgD;AAChD,yBAAyB;AACzB,yBAAyB;AACzB,+BAAiC;
|
|
1
|
+
{"version":3,"file":"helper.extension.js","sourceRoot":"","sources":["../../src/extensions/helper.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,8 @@ export declare class Npm {
|
|
|
16
16
|
errorMessage?: string;
|
|
17
17
|
showError?: boolean;
|
|
18
18
|
}): Promise<{
|
|
19
|
-
path: string;
|
|
20
19
|
data: any;
|
|
20
|
+
path: string;
|
|
21
21
|
}>;
|
|
22
22
|
/**
|
|
23
23
|
* Set data for package.json
|
|
@@ -29,11 +29,16 @@ export declare class Npm {
|
|
|
29
29
|
errorMessage?: string;
|
|
30
30
|
showError?: boolean;
|
|
31
31
|
}): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Detect which package manager is used in the project
|
|
34
|
+
*/
|
|
35
|
+
detectPackageManager(projectPath: string): 'npm' | 'pnpm' | 'yarn';
|
|
32
36
|
/**
|
|
33
37
|
* Install npm packages
|
|
34
38
|
*/
|
|
35
39
|
install(options?: {
|
|
36
40
|
cwd?: string;
|
|
41
|
+
detectPackageManager?: boolean;
|
|
37
42
|
errorMessage?: string;
|
|
38
43
|
showError?: boolean;
|
|
39
44
|
}): Promise<boolean>;
|
|
@@ -47,8 +52,8 @@ export declare class Npm {
|
|
|
47
52
|
showError?: boolean;
|
|
48
53
|
}): Promise<boolean>;
|
|
49
54
|
}
|
|
50
|
-
declare const _default: (toolbox: IHelperExtendedGluegunToolbox) => void;
|
|
51
55
|
/**
|
|
52
56
|
* Extend toolbox
|
|
53
57
|
*/
|
|
58
|
+
declare const _default: (toolbox: IHelperExtendedGluegunToolbox) => void;
|
|
54
59
|
export default _default;
|
|
@@ -26,15 +26,15 @@ class Npm {
|
|
|
26
26
|
/**
|
|
27
27
|
* Get package.json
|
|
28
28
|
*/
|
|
29
|
-
getPackageJson(
|
|
30
|
-
return __awaiter(this,
|
|
29
|
+
getPackageJson() {
|
|
30
|
+
return __awaiter(this, arguments, void 0, function* (options = {}) {
|
|
31
31
|
// Toolbox features
|
|
32
|
-
const { filesystem, helper, print: { error } } = this.toolbox;
|
|
32
|
+
const { filesystem, helper, print: { error }, } = this.toolbox;
|
|
33
33
|
// Prepare options
|
|
34
34
|
const opts = Object.assign({
|
|
35
35
|
cwd: filesystem.cwd(),
|
|
36
36
|
errorMessage: 'No package.json found!',
|
|
37
|
-
showError: false
|
|
37
|
+
showError: false,
|
|
38
38
|
}, options);
|
|
39
39
|
// Find package.json
|
|
40
40
|
const path = yield find('package.json', opts.cwd);
|
|
@@ -42,17 +42,17 @@ class Npm {
|
|
|
42
42
|
if (opts.showError) {
|
|
43
43
|
error(opts.errorMessage);
|
|
44
44
|
}
|
|
45
|
-
return {
|
|
45
|
+
return { data: null, path: '' };
|
|
46
46
|
}
|
|
47
47
|
// Everything ok
|
|
48
|
-
return {
|
|
48
|
+
return { data: yield helper.readFile(path), path };
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* Set data for package.json
|
|
53
53
|
*/
|
|
54
|
-
setPackageJson(
|
|
55
|
-
return __awaiter(this,
|
|
54
|
+
setPackageJson(data_1) {
|
|
55
|
+
return __awaiter(this, arguments, void 0, function* (data, options = {}) {
|
|
56
56
|
if (typeof data === 'object') {
|
|
57
57
|
data = JSON.stringify(data, null, 2);
|
|
58
58
|
}
|
|
@@ -73,44 +73,75 @@ class Npm {
|
|
|
73
73
|
return path;
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Detect which package manager is used in the project
|
|
78
|
+
*/
|
|
79
|
+
detectPackageManager(projectPath) {
|
|
80
|
+
const { filesystem } = this.toolbox;
|
|
81
|
+
// Check for lock files in the project directory
|
|
82
|
+
if (filesystem.exists(`${projectPath}/pnpm-lock.yaml`)) {
|
|
83
|
+
return 'pnpm';
|
|
84
|
+
}
|
|
85
|
+
if (filesystem.exists(`${projectPath}/yarn.lock`)) {
|
|
86
|
+
return 'yarn';
|
|
87
|
+
}
|
|
88
|
+
// Default to npm
|
|
89
|
+
return 'npm';
|
|
90
|
+
}
|
|
76
91
|
/**
|
|
77
92
|
* Install npm packages
|
|
78
93
|
*/
|
|
79
|
-
install(
|
|
80
|
-
return __awaiter(this,
|
|
94
|
+
install() {
|
|
95
|
+
return __awaiter(this, arguments, void 0, function* (options = {}) {
|
|
81
96
|
// Toolbox features
|
|
82
|
-
const { filesystem,
|
|
97
|
+
const { filesystem, print: { spin }, system, } = this.toolbox;
|
|
83
98
|
// Prepare options
|
|
84
99
|
const opts = Object.assign({
|
|
85
100
|
cwd: filesystem.cwd(),
|
|
101
|
+
detectPackageManager: true,
|
|
86
102
|
errorMessage: 'No package.json found!',
|
|
87
|
-
showError: false
|
|
103
|
+
showError: false,
|
|
88
104
|
}, options);
|
|
89
105
|
// Find package.json
|
|
90
106
|
const { path } = yield this.getPackageJson(opts);
|
|
91
107
|
if (!path) {
|
|
92
108
|
return false;
|
|
93
109
|
}
|
|
94
|
-
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
110
|
+
const projectDir = (0, path_1.dirname)(path);
|
|
111
|
+
const packageManager = opts.detectPackageManager ? this.detectPackageManager(projectDir) : 'npm';
|
|
112
|
+
// Install packages with the appropriate package manager
|
|
113
|
+
const installSpin = spin(`Install packages using ${packageManager}`);
|
|
114
|
+
let installCommand;
|
|
115
|
+
switch (packageManager) {
|
|
116
|
+
case 'pnpm':
|
|
117
|
+
installCommand = 'pnpm install';
|
|
118
|
+
break;
|
|
119
|
+
case 'yarn':
|
|
120
|
+
installCommand = 'yarn install';
|
|
121
|
+
break;
|
|
122
|
+
case 'npm':
|
|
123
|
+
default:
|
|
124
|
+
installCommand = 'npm i';
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
yield system.run(`cd ${projectDir} && ${installCommand}`);
|
|
128
|
+
installSpin.succeed();
|
|
98
129
|
return true;
|
|
99
130
|
});
|
|
100
131
|
}
|
|
101
132
|
/**
|
|
102
133
|
* Update package.json
|
|
103
134
|
*/
|
|
104
|
-
update(
|
|
105
|
-
return __awaiter(this,
|
|
135
|
+
update() {
|
|
136
|
+
return __awaiter(this, arguments, void 0, function* (options = {}) {
|
|
106
137
|
// Toolbox features
|
|
107
|
-
const { filesystem,
|
|
138
|
+
const { filesystem, print: { spin }, system, } = this.toolbox;
|
|
108
139
|
// Prepare options
|
|
109
140
|
const opts = Object.assign({
|
|
110
141
|
cwd: filesystem.cwd(),
|
|
111
142
|
errorMessage: 'No package.json found!',
|
|
112
143
|
install: false,
|
|
113
|
-
showError: false
|
|
144
|
+
showError: false,
|
|
114
145
|
}, options);
|
|
115
146
|
// Find package.json
|
|
116
147
|
const { path } = yield this.getPackageJson(opts);
|
|
@@ -125,12 +156,27 @@ class Npm {
|
|
|
125
156
|
}
|
|
126
157
|
// Update package.json
|
|
127
158
|
const updateSpin = spin('Update package.json');
|
|
128
|
-
yield system.run(
|
|
159
|
+
yield system.run(`ncu -u --packageFile ${path}`);
|
|
129
160
|
updateSpin.succeed();
|
|
130
161
|
// Install packages
|
|
131
162
|
if (opts.install) {
|
|
132
|
-
const
|
|
133
|
-
|
|
163
|
+
const projectDir = (0, path_1.dirname)(path);
|
|
164
|
+
const packageManager = this.detectPackageManager(projectDir);
|
|
165
|
+
const installSpin = spin(`Install packages using ${packageManager}`);
|
|
166
|
+
let installCommand;
|
|
167
|
+
switch (packageManager) {
|
|
168
|
+
case 'pnpm':
|
|
169
|
+
installCommand = 'pnpm install';
|
|
170
|
+
break;
|
|
171
|
+
case 'yarn':
|
|
172
|
+
installCommand = 'yarn install';
|
|
173
|
+
break;
|
|
174
|
+
case 'npm':
|
|
175
|
+
default:
|
|
176
|
+
installCommand = 'npm i';
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
yield system.run(`cd ${projectDir} && ${installCommand}`);
|
|
134
180
|
installSpin.succeed();
|
|
135
181
|
}
|
|
136
182
|
// Success
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm.extension.js","sourceRoot":"","sources":["../../src/extensions/npm.extension.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAqC;AACrC,yBAAyB;AACzB,+BAA+B;
|
|
1
|
+
{"version":3,"file":"npm.extension.js","sourceRoot":"","sources":["../../src/extensions/npm.extension.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lenne.tech/cli-plugin-helper",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "Helper plugin for Gluegun CLI Projects",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lenne.Tech",
|
|
@@ -28,39 +28,48 @@
|
|
|
28
28
|
"compile": "tsc -p .",
|
|
29
29
|
"coverage": "jest --coverage",
|
|
30
30
|
"format": "prettier --write 'src/**/*.{js,ts,tsx,json}'",
|
|
31
|
-
"lint": "eslint
|
|
31
|
+
"lint": "eslint './src/**/*.{ts,js,vue}'",
|
|
32
|
+
"lint:fix": "eslint './src/**/*.{ts,js,vue}' --fix",
|
|
32
33
|
"prepack": "npm run build",
|
|
33
34
|
"preversion": "npm run lint",
|
|
34
35
|
"test": "jest",
|
|
35
|
-
"watch": "jest --watch"
|
|
36
|
-
"prepare": "husky install"
|
|
36
|
+
"watch": "jest --watch"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@lenne.tech/gluegun-menu": "0.0.
|
|
39
|
+
"@lenne.tech/gluegun-menu": "0.0.7"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
+
"@lenne.tech/eslint-config-ts": "2.1.3",
|
|
42
43
|
"@lenne.tech/npm-package-helper": "0.0.12",
|
|
43
|
-
"@types/jest": "
|
|
44
|
-
"@types/node": "
|
|
45
|
-
"@typescript-eslint/eslint-plugin": "
|
|
46
|
-
"@typescript-eslint/parser": "
|
|
47
|
-
"eslint": "
|
|
48
|
-
"eslint-config-prettier": "
|
|
44
|
+
"@types/jest": "30.0.0",
|
|
45
|
+
"@types/node": "24.3.0",
|
|
46
|
+
"@typescript-eslint/eslint-plugin": "8.40.0",
|
|
47
|
+
"@typescript-eslint/parser": "8.40.0",
|
|
48
|
+
"eslint": "9.33.0",
|
|
49
|
+
"eslint-config-prettier": "10.1.8",
|
|
49
50
|
"find-file-up": "2.0.1",
|
|
50
|
-
"gluegun": "5.
|
|
51
|
-
"husky": "
|
|
52
|
-
"jest": "
|
|
53
|
-
"prettier": "
|
|
54
|
-
"pretty-quick": "
|
|
55
|
-
"rimraf": "
|
|
56
|
-
"ts-jest": "
|
|
57
|
-
"ts-node": "10.
|
|
58
|
-
"typescript": "
|
|
51
|
+
"gluegun": "5.2.0",
|
|
52
|
+
"husky": "9.1.7",
|
|
53
|
+
"jest": "30.0.5",
|
|
54
|
+
"prettier": "3.6.2",
|
|
55
|
+
"pretty-quick": "4.2.2",
|
|
56
|
+
"rimraf": "6.0.1",
|
|
57
|
+
"ts-jest": "29.4.1",
|
|
58
|
+
"ts-node": "10.9.2",
|
|
59
|
+
"typescript": "5.9.2"
|
|
59
60
|
},
|
|
60
61
|
"peerDependencies": {
|
|
61
62
|
"find-file-up": ">=2",
|
|
62
63
|
"gluegun": ">=4"
|
|
63
64
|
},
|
|
65
|
+
"overrides": {
|
|
66
|
+
"apisauce@*": "3.1.1",
|
|
67
|
+
"cross-spawn@*": "7.0.6",
|
|
68
|
+
"ejs@*": "3.1.10",
|
|
69
|
+
"semver@*": "7.7.1",
|
|
70
|
+
"lodash.trim@*": "npm:lodash@4.17.21",
|
|
71
|
+
"lodash.trimend@*": "npm:lodash@4.17.21"
|
|
72
|
+
},
|
|
64
73
|
"jest": {
|
|
65
74
|
"preset": "ts-jest",
|
|
66
75
|
"testEnvironment": "node"
|
|
@@ -2,6 +2,7 @@ import { Menu } from '@lenne.tech/gluegun-menu';
|
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as os from 'os';
|
|
4
4
|
import { join, sep } from 'path';
|
|
5
|
+
|
|
5
6
|
import { IHelperExtendedGluegunToolbox } from '../interfaces/extended-gluegun-toolbox.interface';
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -21,13 +22,13 @@ export class Helper {
|
|
|
21
22
|
const {
|
|
22
23
|
config,
|
|
23
24
|
filesystem,
|
|
24
|
-
runtime: { brand }
|
|
25
|
+
runtime: { brand },
|
|
25
26
|
} = this.toolbox;
|
|
26
27
|
|
|
27
28
|
// Configuration in home directory (~/.brand)
|
|
28
29
|
let homeDirConfig = {};
|
|
29
30
|
try {
|
|
30
|
-
const homeDirConfigFile = join(filesystem.homedir(),
|
|
31
|
+
const homeDirConfigFile = join(filesystem.homedir(), `.${brand}`);
|
|
31
32
|
if (await filesystem.existsAsync(homeDirConfigFile)) {
|
|
32
33
|
homeDirConfig = JSON.parse(await filesystem.readAsync(homeDirConfigFile));
|
|
33
34
|
}
|
|
@@ -38,7 +39,7 @@ export class Helper {
|
|
|
38
39
|
// Configuration in current directory (./.brand)
|
|
39
40
|
let currentDirConfig = {};
|
|
40
41
|
try {
|
|
41
|
-
const currentDirConfigFile = join(filesystem.cwd(),
|
|
42
|
+
const currentDirConfigFile = join(filesystem.cwd(), `.${brand}`);
|
|
42
43
|
if (await filesystem.existsAsync(currentDirConfigFile)) {
|
|
43
44
|
currentDirConfig = JSON.parse(await filesystem.readAsync(currentDirConfigFile));
|
|
44
45
|
}
|
|
@@ -51,7 +52,7 @@ export class Helper {
|
|
|
51
52
|
...config.loadConfig(join('~', `.${brand}`), brand),
|
|
52
53
|
...homeDirConfig,
|
|
53
54
|
...config.loadConfig(join(filesystem.cwd(), `.${brand}`), brand),
|
|
54
|
-
...currentDirConfig
|
|
55
|
+
...currentDirConfig,
|
|
55
56
|
};
|
|
56
57
|
}
|
|
57
58
|
|
|
@@ -73,20 +74,20 @@ export class Helper {
|
|
|
73
74
|
public async getInput(
|
|
74
75
|
input: string,
|
|
75
76
|
options?: {
|
|
77
|
+
errorMessage?: string;
|
|
76
78
|
initial?: string;
|
|
77
79
|
name?: string;
|
|
78
|
-
errorMessage?: string;
|
|
79
80
|
showError?: boolean;
|
|
80
|
-
}
|
|
81
|
+
},
|
|
81
82
|
) {
|
|
82
83
|
// Process options
|
|
83
84
|
const opts = Object.assign(
|
|
84
85
|
{
|
|
85
86
|
initial: '',
|
|
86
87
|
name: 'name',
|
|
87
|
-
showError: false
|
|
88
|
+
showError: false,
|
|
88
89
|
},
|
|
89
|
-
options
|
|
90
|
+
options,
|
|
90
91
|
);
|
|
91
92
|
if (!opts.errorMessage) {
|
|
92
93
|
opts.errorMessage = `You must provide a valid ${opts.name}!`;
|
|
@@ -95,16 +96,16 @@ export class Helper {
|
|
|
95
96
|
// Toolbox features
|
|
96
97
|
const {
|
|
97
98
|
print: { error },
|
|
98
|
-
prompt: { ask }
|
|
99
|
+
prompt: { ask },
|
|
99
100
|
} = this.toolbox;
|
|
100
101
|
|
|
101
102
|
// Get input
|
|
102
103
|
if (!input || !this.trim(input)) {
|
|
103
104
|
const answers = await ask({
|
|
104
105
|
initial: opts.initial,
|
|
105
|
-
|
|
106
|
+
message: `Enter ${opts.name}`,
|
|
106
107
|
name: 'input',
|
|
107
|
-
|
|
108
|
+
type: 'input',
|
|
108
109
|
});
|
|
109
110
|
input = answers.input;
|
|
110
111
|
if (!input && opts.showError) {
|
|
@@ -122,7 +123,7 @@ export class Helper {
|
|
|
122
123
|
public msToMinutesAndSeconds(ms: number) {
|
|
123
124
|
const minutes = Math.floor((ms / 1000 / 60) << 0);
|
|
124
125
|
const seconds = Math.floor((ms / 1000) % 60);
|
|
125
|
-
return minutes
|
|
126
|
+
return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
/**
|
|
@@ -170,7 +171,7 @@ export class Helper {
|
|
|
170
171
|
meta,
|
|
171
172
|
print: { info, spin, success },
|
|
172
173
|
runtime: { brand, defaultPlugin },
|
|
173
|
-
system: { run, startTimer }
|
|
174
|
+
system: { run, startTimer },
|
|
174
175
|
} = this.toolbox;
|
|
175
176
|
|
|
176
177
|
// Start timer
|
|
@@ -178,7 +179,7 @@ export class Helper {
|
|
|
178
179
|
|
|
179
180
|
// Get package.json
|
|
180
181
|
const packageJson: any = await helper.readFile(
|
|
181
|
-
join(meta.src ? meta.src : defaultPlugin.directory, '..', 'package.json')
|
|
182
|
+
join(meta.src ? meta.src : defaultPlugin.directory, '..', 'package.json'),
|
|
182
183
|
);
|
|
183
184
|
|
|
184
185
|
// Process options
|
|
@@ -186,9 +187,9 @@ export class Helper {
|
|
|
186
187
|
{
|
|
187
188
|
global: true,
|
|
188
189
|
packageName: packageJson ? packageJson.name : '',
|
|
189
|
-
showInfos: false
|
|
190
|
+
showInfos: false,
|
|
190
191
|
},
|
|
191
|
-
options
|
|
192
|
+
options,
|
|
192
193
|
);
|
|
193
194
|
|
|
194
195
|
// Run without infos
|
|
@@ -218,32 +219,32 @@ export class Helper {
|
|
|
218
219
|
parentCommands?: string,
|
|
219
220
|
options?: {
|
|
220
221
|
checkUpdate?: boolean;
|
|
221
|
-
level?: number;
|
|
222
222
|
headline?: string;
|
|
223
|
-
|
|
223
|
+
level?: number;
|
|
224
|
+
},
|
|
224
225
|
) {
|
|
225
226
|
// Toolbox feature
|
|
226
227
|
const {
|
|
227
228
|
config,
|
|
228
229
|
filesystem: { existsAsync },
|
|
229
230
|
meta,
|
|
230
|
-
runtime: { brand, defaultPlugin }
|
|
231
|
+
runtime: { brand, defaultPlugin },
|
|
231
232
|
} = this.toolbox;
|
|
232
233
|
|
|
233
234
|
// Process options
|
|
234
235
|
const { checkUpdate } = Object.assign(
|
|
235
236
|
{
|
|
236
|
-
checkUpdate: true
|
|
237
|
+
checkUpdate: true,
|
|
237
238
|
},
|
|
238
|
-
options
|
|
239
|
+
options,
|
|
239
240
|
);
|
|
240
241
|
|
|
241
242
|
// Check for updates
|
|
242
243
|
if (
|
|
243
|
-
checkUpdate
|
|
244
|
-
config[brand].checkForUpdate
|
|
245
|
-
(await this.getConfig()).checkForUpdate
|
|
246
|
-
!(await existsAsync(join(meta.src ? meta.src : defaultPlugin.directory, '..', 'src'))) // not development environment
|
|
244
|
+
checkUpdate // parameter
|
|
245
|
+
&& config[brand].checkForUpdate // current configuration
|
|
246
|
+
&& (await this.getConfig()).checkForUpdate // extra configuration
|
|
247
|
+
&& !(await existsAsync(join(meta.src ? meta.src : defaultPlugin.directory, '..', 'src'))) // not development environment
|
|
247
248
|
) {
|
|
248
249
|
config[brand].checkForUpdate = false;
|
|
249
250
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as find from 'find-file-up';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import { dirname } from 'path';
|
|
4
|
+
|
|
4
5
|
import { IHelperExtendedGluegunToolbox } from '../interfaces/extended-gluegun-toolbox.interface';
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -16,13 +17,13 @@ export class Npm {
|
|
|
16
17
|
* Get package.json
|
|
17
18
|
*/
|
|
18
19
|
public async getPackageJson(
|
|
19
|
-
options: { cwd?: string; errorMessage?: string; showError?: boolean } = {}
|
|
20
|
-
): Promise<{
|
|
20
|
+
options: { cwd?: string; errorMessage?: string; showError?: boolean } = {},
|
|
21
|
+
): Promise<{ data: any; path: string }> {
|
|
21
22
|
// Toolbox features
|
|
22
23
|
const {
|
|
23
24
|
filesystem,
|
|
24
25
|
helper,
|
|
25
|
-
print: { error }
|
|
26
|
+
print: { error },
|
|
26
27
|
} = this.toolbox;
|
|
27
28
|
|
|
28
29
|
// Prepare options
|
|
@@ -30,9 +31,9 @@ export class Npm {
|
|
|
30
31
|
{
|
|
31
32
|
cwd: filesystem.cwd(),
|
|
32
33
|
errorMessage: 'No package.json found!',
|
|
33
|
-
showError: false
|
|
34
|
+
showError: false,
|
|
34
35
|
},
|
|
35
|
-
options
|
|
36
|
+
options,
|
|
36
37
|
);
|
|
37
38
|
|
|
38
39
|
// Find package.json
|
|
@@ -41,11 +42,11 @@ export class Npm {
|
|
|
41
42
|
if (opts.showError) {
|
|
42
43
|
error(opts.errorMessage);
|
|
43
44
|
}
|
|
44
|
-
return {
|
|
45
|
+
return { data: null, path: '' };
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
// Everything ok
|
|
48
|
-
return {
|
|
49
|
+
return { data: await helper.readFile(path), path };
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
/**
|
|
@@ -57,7 +58,7 @@ export class Npm {
|
|
|
57
58
|
cwd?: string;
|
|
58
59
|
errorMessage?: string;
|
|
59
60
|
showError?: boolean;
|
|
60
|
-
} = {}
|
|
61
|
+
} = {},
|
|
61
62
|
) {
|
|
62
63
|
if (typeof data === 'object') {
|
|
63
64
|
data = JSON.stringify(data, null, 2);
|
|
@@ -81,25 +82,43 @@ export class Npm {
|
|
|
81
82
|
return path;
|
|
82
83
|
}
|
|
83
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Detect which package manager is used in the project
|
|
87
|
+
*/
|
|
88
|
+
public detectPackageManager(projectPath: string): 'npm' | 'pnpm' | 'yarn' {
|
|
89
|
+
const { filesystem } = this.toolbox;
|
|
90
|
+
|
|
91
|
+
// Check for lock files in the project directory
|
|
92
|
+
if (filesystem.exists(`${projectPath}/pnpm-lock.yaml`)) {
|
|
93
|
+
return 'pnpm';
|
|
94
|
+
}
|
|
95
|
+
if (filesystem.exists(`${projectPath}/yarn.lock`)) {
|
|
96
|
+
return 'yarn';
|
|
97
|
+
}
|
|
98
|
+
// Default to npm
|
|
99
|
+
return 'npm';
|
|
100
|
+
}
|
|
101
|
+
|
|
84
102
|
/**
|
|
85
103
|
* Install npm packages
|
|
86
104
|
*/
|
|
87
|
-
public async install(options: { cwd?: string; errorMessage?: string; showError?: boolean } = {}) {
|
|
105
|
+
public async install(options: { cwd?: string; detectPackageManager?: boolean; errorMessage?: string; showError?: boolean } = {}) {
|
|
88
106
|
// Toolbox features
|
|
89
107
|
const {
|
|
90
108
|
filesystem,
|
|
109
|
+
print: { spin },
|
|
91
110
|
system,
|
|
92
|
-
print: { spin }
|
|
93
111
|
} = this.toolbox;
|
|
94
112
|
|
|
95
113
|
// Prepare options
|
|
96
114
|
const opts = Object.assign(
|
|
97
115
|
{
|
|
98
116
|
cwd: filesystem.cwd(),
|
|
117
|
+
detectPackageManager: true,
|
|
99
118
|
errorMessage: 'No package.json found!',
|
|
100
|
-
showError: false
|
|
119
|
+
showError: false,
|
|
101
120
|
},
|
|
102
|
-
options
|
|
121
|
+
options,
|
|
103
122
|
);
|
|
104
123
|
|
|
105
124
|
// Find package.json
|
|
@@ -108,10 +127,28 @@ export class Npm {
|
|
|
108
127
|
return false;
|
|
109
128
|
}
|
|
110
129
|
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
130
|
+
const projectDir = dirname(path);
|
|
131
|
+
const packageManager = opts.detectPackageManager ? this.detectPackageManager(projectDir) : 'npm';
|
|
132
|
+
|
|
133
|
+
// Install packages with the appropriate package manager
|
|
134
|
+
const installSpin = spin(`Install packages using ${packageManager}`);
|
|
135
|
+
|
|
136
|
+
let installCommand: string;
|
|
137
|
+
switch (packageManager) {
|
|
138
|
+
case 'pnpm':
|
|
139
|
+
installCommand = 'pnpm install';
|
|
140
|
+
break;
|
|
141
|
+
case 'yarn':
|
|
142
|
+
installCommand = 'yarn install';
|
|
143
|
+
break;
|
|
144
|
+
case 'npm':
|
|
145
|
+
default:
|
|
146
|
+
installCommand = 'npm i';
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
await system.run(`cd ${projectDir} && ${installCommand}`);
|
|
151
|
+
installSpin.succeed();
|
|
115
152
|
return true;
|
|
116
153
|
}
|
|
117
154
|
|
|
@@ -124,13 +161,13 @@ export class Npm {
|
|
|
124
161
|
errorMessage?: string;
|
|
125
162
|
install?: boolean;
|
|
126
163
|
showError?: boolean;
|
|
127
|
-
} = {}
|
|
164
|
+
} = {},
|
|
128
165
|
) {
|
|
129
166
|
// Toolbox features
|
|
130
167
|
const {
|
|
131
168
|
filesystem,
|
|
169
|
+
print: { spin },
|
|
132
170
|
system,
|
|
133
|
-
print: { spin }
|
|
134
171
|
} = this.toolbox;
|
|
135
172
|
|
|
136
173
|
// Prepare options
|
|
@@ -139,9 +176,9 @@ export class Npm {
|
|
|
139
176
|
cwd: filesystem.cwd(),
|
|
140
177
|
errorMessage: 'No package.json found!',
|
|
141
178
|
install: false,
|
|
142
|
-
showError: false
|
|
179
|
+
showError: false,
|
|
143
180
|
},
|
|
144
|
-
options
|
|
181
|
+
options,
|
|
145
182
|
);
|
|
146
183
|
|
|
147
184
|
// Find package.json
|
|
@@ -159,13 +196,30 @@ export class Npm {
|
|
|
159
196
|
|
|
160
197
|
// Update package.json
|
|
161
198
|
const updateSpin = spin('Update package.json');
|
|
162
|
-
await system.run(
|
|
199
|
+
await system.run(`ncu -u --packageFile ${path}`);
|
|
163
200
|
updateSpin.succeed();
|
|
164
201
|
|
|
165
202
|
// Install packages
|
|
166
203
|
if (opts.install) {
|
|
167
|
-
const
|
|
168
|
-
|
|
204
|
+
const projectDir = dirname(path);
|
|
205
|
+
const packageManager = this.detectPackageManager(projectDir);
|
|
206
|
+
const installSpin = spin(`Install packages using ${packageManager}`);
|
|
207
|
+
|
|
208
|
+
let installCommand: string;
|
|
209
|
+
switch (packageManager) {
|
|
210
|
+
case 'pnpm':
|
|
211
|
+
installCommand = 'pnpm install';
|
|
212
|
+
break;
|
|
213
|
+
case 'yarn':
|
|
214
|
+
installCommand = 'yarn install';
|
|
215
|
+
break;
|
|
216
|
+
case 'npm':
|
|
217
|
+
default:
|
|
218
|
+
installCommand = 'npm i';
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
await system.run(`cd ${projectDir} && ${installCommand}`);
|
|
169
223
|
installSpin.succeed();
|
|
170
224
|
}
|
|
171
225
|
|