@lenne.tech/cli-plugin-helper 0.0.12 → 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.
@@ -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>;
@@ -73,6 +73,21 @@ 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
  */
@@ -83,6 +98,7 @@ class Npm {
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
103
  showError: false,
88
104
  }, options);
@@ -91,10 +107,25 @@ class Npm {
91
107
  if (!path) {
92
108
  return false;
93
109
  }
94
- // Install npm packages
95
- const npmSpin = spin('Install npm packages');
96
- yield system.run(`cd ${(0, path_1.dirname)(path)} && npm i`);
97
- npmSpin.succeed();
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
  }
@@ -129,8 +160,23 @@ class Npm {
129
160
  updateSpin.succeed();
130
161
  // Install packages
131
162
  if (opts.install) {
132
- const installSpin = spin('Install npm packages');
133
- yield system.run(`cd ${(0, path_1.dirname)(path)} && npm i`);
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":"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"}
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.12",
3
+ "version": "0.0.13",
4
4
  "description": "Helper plugin for Gluegun CLI Projects",
5
5
  "keywords": [
6
6
  "lenne.Tech",
@@ -39,24 +39,24 @@
39
39
  "@lenne.tech/gluegun-menu": "0.0.7"
40
40
  },
41
41
  "devDependencies": {
42
- "@lenne.tech/eslint-config-ts": "2.0.1",
42
+ "@lenne.tech/eslint-config-ts": "2.1.3",
43
43
  "@lenne.tech/npm-package-helper": "0.0.12",
44
- "@types/jest": "29.5.14",
45
- "@types/node": "22.15.17",
46
- "@typescript-eslint/eslint-plugin": "8.32.0",
47
- "@typescript-eslint/parser": "8.32.0",
48
- "eslint": "9.26.0",
49
- "eslint-config-prettier": "10.1.5",
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",
50
50
  "find-file-up": "2.0.1",
51
51
  "gluegun": "5.2.0",
52
52
  "husky": "9.1.7",
53
- "jest": "29.7.0",
54
- "prettier": "3.5.3",
55
- "pretty-quick": "4.1.1",
53
+ "jest": "30.0.5",
54
+ "prettier": "3.6.2",
55
+ "pretty-quick": "4.2.2",
56
56
  "rimraf": "6.0.1",
57
- "ts-jest": "29.3.2",
57
+ "ts-jest": "29.4.1",
58
58
  "ts-node": "10.9.2",
59
- "typescript": "5.8.3"
59
+ "typescript": "5.9.2"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "find-file-up": ">=2",
@@ -66,7 +66,9 @@
66
66
  "apisauce@*": "3.1.1",
67
67
  "cross-spawn@*": "7.0.6",
68
68
  "ejs@*": "3.1.10",
69
- "semver@*": "7.7.1"
69
+ "semver@*": "7.7.1",
70
+ "lodash.trim@*": "npm:lodash@4.17.21",
71
+ "lodash.trimend@*": "npm:lodash@4.17.21"
70
72
  },
71
73
  "jest": {
72
74
  "preset": "ts-jest",
@@ -82,10 +82,27 @@ export class Npm {
82
82
  return path;
83
83
  }
84
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
+
85
102
  /**
86
103
  * Install npm packages
87
104
  */
88
- public async install(options: { cwd?: string; errorMessage?: string; showError?: boolean } = {}) {
105
+ public async install(options: { cwd?: string; detectPackageManager?: boolean; errorMessage?: string; showError?: boolean } = {}) {
89
106
  // Toolbox features
90
107
  const {
91
108
  filesystem,
@@ -97,6 +114,7 @@ export class Npm {
97
114
  const opts = Object.assign(
98
115
  {
99
116
  cwd: filesystem.cwd(),
117
+ detectPackageManager: true,
100
118
  errorMessage: 'No package.json found!',
101
119
  showError: false,
102
120
  },
@@ -109,10 +127,28 @@ export class Npm {
109
127
  return false;
110
128
  }
111
129
 
112
- // Install npm packages
113
- const npmSpin = spin('Install npm packages');
114
- await system.run(`cd ${dirname(path)} && npm i`);
115
- npmSpin.succeed();
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();
116
152
  return true;
117
153
  }
118
154
 
@@ -165,8 +201,25 @@ export class Npm {
165
201
 
166
202
  // Install packages
167
203
  if (opts.install) {
168
- const installSpin = spin('Install npm packages');
169
- await system.run(`cd ${dirname(path)} && npm i`);
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}`);
170
223
  installSpin.succeed();
171
224
  }
172
225