@lenne.tech/cli 1.7.0 → 1.9.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/build/commands/blocks/add.js +4 -3
- package/build/commands/blocks/blocks.js +1 -1
- package/build/commands/claude/plugins.js +17 -12
- package/build/commands/cli/create.js +7 -6
- package/build/commands/cli/rename.js +2 -2
- package/build/commands/completion.js +1 -1
- package/build/commands/components/add.js +4 -3
- package/build/commands/components/components.js +1 -1
- package/build/commands/config/help.js +1 -1
- package/build/commands/config/validate.js +11 -1
- package/build/commands/directus/docker-setup.js +1 -1
- package/build/commands/directus/remove.js +2 -3
- package/build/commands/directus/typegen.js +4 -4
- package/build/commands/doctor.js +15 -26
- package/build/commands/frontend/angular.js +1 -1
- package/build/commands/frontend/nuxt.js +2 -2
- package/build/commands/fullstack/init.js +59 -45
- package/build/commands/git/clean.js +6 -6
- package/build/commands/git/create.js +2 -2
- package/build/commands/git/force-pull.js +6 -3
- package/build/commands/git/get.js +3 -4
- package/build/commands/git/install-scripts.js +2 -2
- package/build/commands/git/rebase.js +5 -2
- package/build/commands/git/rename.js +3 -4
- package/build/commands/git/reset.js +15 -12
- package/build/commands/git/squash.js +5 -2
- package/build/commands/git/undo.js +6 -3
- package/build/commands/git/update.js +5 -5
- package/build/commands/history.js +1 -1
- package/build/commands/mongodb/s3-restore.js +10 -7
- package/build/commands/npm/reinit.js +12 -10
- package/build/commands/qdrant/delete.js +2 -2
- package/build/commands/qdrant/stats.js +2 -11
- package/build/commands/server/add-property.js +47 -32
- package/build/commands/server/create.js +10 -6
- package/build/commands/server/module.js +33 -14
- package/build/commands/server/object.js +2 -2
- package/build/commands/server/permissions.js +318 -0
- package/build/commands/server/set-secrets.js +2 -2
- package/build/commands/starter/chrome-extension.js +5 -5
- package/build/commands/status.js +17 -21
- package/build/commands/templates/list.js +4 -4
- package/build/commands/templates/llm.js +8 -14
- package/build/commands/tools/install-scripts.js +105 -0
- package/build/commands/tools/regex.js +1 -1
- package/build/commands/typescript/create.js +6 -6
- package/build/extensions/api-mode.js +3 -2
- package/build/extensions/config.js +5 -5
- package/build/extensions/frontend-helper.js +10 -6
- package/build/extensions/git.js +11 -11
- package/build/extensions/history.js +1 -1
- package/build/extensions/logger.js +3 -6
- package/build/extensions/package-manager.js +249 -0
- package/build/extensions/parse-properties.js +4 -4
- package/build/extensions/server.js +91 -36
- package/build/extensions/template.js +5 -5
- package/build/extensions/tools.js +23 -5
- package/build/extensions/typescript.js +2 -2
- package/build/lib/claude-cli.js +2 -6
- package/build/lib/fallback-scanner.js +852 -0
- package/build/lib/marketplace.js +7 -7
- package/build/lib/nuxt-base-components.js +9 -8
- package/build/lib/plugin-utils.js +9 -13
- package/build/lib/shell-config.js +5 -8
- package/build/lib/validation.js +5 -5
- package/build/templates/bash-scripts/tools/pcf +9 -0
- package/build/templates/permissions/report.html.ejs +402 -0
- package/docs/commands.md +28 -2
- package/docs/lt.config.md +53 -3
- package/package.json +5 -4
|
@@ -0,0 +1,318 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const child_process_1 = require("child_process");
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
16
|
+
// Helper functions (alphabetically sorted per ESLint rules)
|
|
17
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
18
|
+
/**
|
|
19
|
+
* Find the project root containing src/server/modules/
|
|
20
|
+
* (CLI-local version needed before scanner is loaded)
|
|
21
|
+
*/
|
|
22
|
+
function findProjectRoot(startPath) {
|
|
23
|
+
let current = startPath;
|
|
24
|
+
for (let i = 0; i < 10; i++) {
|
|
25
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(current, 'src', 'server', 'modules'))) {
|
|
26
|
+
return current;
|
|
27
|
+
}
|
|
28
|
+
const parent = (0, path_1.join)(current, '..');
|
|
29
|
+
if (parent === current)
|
|
30
|
+
break;
|
|
31
|
+
current = parent;
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Minimal markdown fallback if scanner.generateMarkdownReport is not available
|
|
37
|
+
* (only happens with nest-server versions that export scanPermissions but not generateMarkdownReport)
|
|
38
|
+
*/
|
|
39
|
+
function generateFallbackMarkdown(report, projectPath) {
|
|
40
|
+
return JSON.stringify(Object.assign(Object.assign({}, report), { project: projectPath }), null, 2);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Generate HTML report via EJS template
|
|
44
|
+
*/
|
|
45
|
+
function generateHtml(report, projectPath, templateFn) {
|
|
46
|
+
return templateFn.generate({
|
|
47
|
+
props: {
|
|
48
|
+
generated: report.generated,
|
|
49
|
+
modules: report.modules,
|
|
50
|
+
objects: report.objects,
|
|
51
|
+
projectPath,
|
|
52
|
+
roleEnums: report.roleEnums,
|
|
53
|
+
stats: report.stats,
|
|
54
|
+
warnings: report.warnings,
|
|
55
|
+
},
|
|
56
|
+
target: undefined,
|
|
57
|
+
template: 'permissions/report.html.ejs',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Generate JSON report
|
|
62
|
+
*/
|
|
63
|
+
function generateJson(report, projectPath) {
|
|
64
|
+
return JSON.stringify({
|
|
65
|
+
generated: report.generated,
|
|
66
|
+
modules: report.modules,
|
|
67
|
+
objects: report.objects,
|
|
68
|
+
project: projectPath,
|
|
69
|
+
roleEnums: report.roleEnums,
|
|
70
|
+
stats: report.stats,
|
|
71
|
+
warnings: report.warnings,
|
|
72
|
+
}, null, 2);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Try to dynamically load the permissions scanner module.
|
|
76
|
+
*
|
|
77
|
+
* Strategy (in order of preference):
|
|
78
|
+
* 1. Load from project's @lenne.tech/nest-server (>= 11.17.0) — single source of truth
|
|
79
|
+
* 2. Use CLI's bundled fallback scanner (standalone copy using ts-morph)
|
|
80
|
+
*
|
|
81
|
+
* Returns an object with scanPermissions + generateMarkdownReport, or null if neither is available.
|
|
82
|
+
*/
|
|
83
|
+
function loadScanner(projectPath) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
// Try 1: Load from project's nest-server (preferred)
|
|
86
|
+
const scannerPaths = [
|
|
87
|
+
(0, path_1.join)(projectPath, 'node_modules', '@lenne.tech', 'nest-server', 'dist', 'core', 'modules', 'permissions', 'permissions-scanner'),
|
|
88
|
+
(0, path_1.join)(projectPath, 'node_modules', '@lenne.tech', 'nest-server', 'dist', 'core', 'modules', 'permissions', 'permissions-scanner.js'),
|
|
89
|
+
];
|
|
90
|
+
for (const scannerPath of scannerPaths) {
|
|
91
|
+
try {
|
|
92
|
+
const mod = require(scannerPath);
|
|
93
|
+
if (typeof mod.scanPermissions === 'function') {
|
|
94
|
+
return {
|
|
95
|
+
generateMarkdownReport: typeof mod.generateMarkdownReport === 'function' ? mod.generateMarkdownReport : null,
|
|
96
|
+
scanPermissions: mod.scanPermissions,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (_a) {
|
|
101
|
+
// Not available at this path
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Try 2: Use CLI's bundled fallback scanner
|
|
105
|
+
try {
|
|
106
|
+
const fallback = require('../../lib/fallback-scanner');
|
|
107
|
+
if (typeof fallback.scanPermissions === 'function') {
|
|
108
|
+
return {
|
|
109
|
+
generateMarkdownReport: typeof fallback.generateMarkdownReport === 'function' ? fallback.generateMarkdownReport : null,
|
|
110
|
+
scanPermissions: fallback.scanPermissions,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (_b) {
|
|
115
|
+
// Fallback not available
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Open a file in the default browser/application
|
|
122
|
+
*/
|
|
123
|
+
function openFile(filePath) {
|
|
124
|
+
const platform = process.platform;
|
|
125
|
+
const cmd = platform === 'darwin' ? 'open' : platform === 'win32' ? 'start' : 'xdg-open';
|
|
126
|
+
(0, child_process_1.exec)(`${cmd} "${filePath}"`);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Print console summary
|
|
130
|
+
*/
|
|
131
|
+
function printConsoleSummary(print, report) {
|
|
132
|
+
print.info('');
|
|
133
|
+
print.info('Summary:');
|
|
134
|
+
print.info('');
|
|
135
|
+
const tableData = [['Module', 'Models', 'Inputs', 'Outputs', 'Ctrl', 'Resolver', 'Warn']];
|
|
136
|
+
for (const mod of report.modules) {
|
|
137
|
+
const modWarnings = report.warnings.filter((w) => w.module === mod.name).length;
|
|
138
|
+
tableData.push([
|
|
139
|
+
mod.name,
|
|
140
|
+
String(mod.models.length),
|
|
141
|
+
String(mod.inputs.length),
|
|
142
|
+
String(mod.outputs.length),
|
|
143
|
+
String(mod.controllers.length),
|
|
144
|
+
String(mod.resolvers.length),
|
|
145
|
+
String(modWarnings),
|
|
146
|
+
]);
|
|
147
|
+
}
|
|
148
|
+
print.table(tableData);
|
|
149
|
+
print.info(`Endpoint Coverage: ${report.stats.endpointCoverage}% | Security Coverage: ${report.stats.securityCoverage}%`);
|
|
150
|
+
if (report.objects.length > 0) {
|
|
151
|
+
print.info(`SubObjects: ${report.objects.length}`);
|
|
152
|
+
}
|
|
153
|
+
if (report.warnings.length > 0) {
|
|
154
|
+
print.info('');
|
|
155
|
+
print.warning(`${report.warnings.length} Warning(s):`);
|
|
156
|
+
for (const w of report.warnings) {
|
|
157
|
+
const fileName = w.file.split('/').pop() || w.file;
|
|
158
|
+
print.warning(` [${w.type}] ${w.module}/${fileName}: ${w.details}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
163
|
+
// Command
|
|
164
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
165
|
+
/**
|
|
166
|
+
* Scan server permissions and generate report
|
|
167
|
+
*/
|
|
168
|
+
const PermissionsCommand = {
|
|
169
|
+
alias: ['p'],
|
|
170
|
+
description: 'Scan server permissions',
|
|
171
|
+
hidden: false,
|
|
172
|
+
name: 'permissions',
|
|
173
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
174
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
175
|
+
const { config, filesystem, parameters, print, print: { error, info, spin, success }, template, } = toolbox;
|
|
176
|
+
info('Scan server permissions');
|
|
177
|
+
// Hint for non-interactive callers
|
|
178
|
+
toolbox.tools.nonInteractiveHint('lt server permissions --path <dir> --format <md|json|html> --noConfirm');
|
|
179
|
+
// Load configuration
|
|
180
|
+
const ltConfig = config.loadConfig();
|
|
181
|
+
const permConfig = (_b = (_a = ltConfig === null || ltConfig === void 0 ? void 0 : ltConfig.commands) === null || _a === void 0 ? void 0 : _a.server) === null || _b === void 0 ? void 0 : _b.permissions;
|
|
182
|
+
// Determine noConfirm
|
|
183
|
+
config.getNoConfirm({
|
|
184
|
+
cliValue: parameters.options.noConfirm,
|
|
185
|
+
commandConfig: permConfig,
|
|
186
|
+
config: ltConfig,
|
|
187
|
+
});
|
|
188
|
+
// Intelligent defaults based on TTY
|
|
189
|
+
const isTTY = process.stdin.isTTY;
|
|
190
|
+
const defaultFormat = isTTY ? 'html' : 'md';
|
|
191
|
+
const defaultOpen = !!isTTY;
|
|
192
|
+
const defaultConsole = false;
|
|
193
|
+
const defaultFailOnWarnings = false;
|
|
194
|
+
// Resolve parameters with config priority
|
|
195
|
+
const format = config.getValue({
|
|
196
|
+
cliValue: parameters.options.format,
|
|
197
|
+
configValue: permConfig === null || permConfig === void 0 ? void 0 : permConfig.format,
|
|
198
|
+
defaultValue: defaultFormat,
|
|
199
|
+
}) || defaultFormat;
|
|
200
|
+
const shouldOpen = (_d = config.getValue({
|
|
201
|
+
cliValue: (_c = parameters.options.open) !== null && _c !== void 0 ? _c : (parameters.options['no-open'] === true ? false : undefined),
|
|
202
|
+
configValue: permConfig === null || permConfig === void 0 ? void 0 : permConfig.open,
|
|
203
|
+
defaultValue: defaultOpen,
|
|
204
|
+
})) !== null && _d !== void 0 ? _d : defaultOpen;
|
|
205
|
+
const shouldConsole = (_e = config.getValue({
|
|
206
|
+
cliValue: parameters.options.console,
|
|
207
|
+
configValue: permConfig === null || permConfig === void 0 ? void 0 : permConfig.console,
|
|
208
|
+
defaultValue: defaultConsole,
|
|
209
|
+
})) !== null && _e !== void 0 ? _e : defaultConsole;
|
|
210
|
+
const failOnWarnings = (_g = config.getValue({
|
|
211
|
+
cliValue: (_f = parameters.options['fail-on-warnings']) !== null && _f !== void 0 ? _f : parameters.options.failOnWarnings,
|
|
212
|
+
configValue: permConfig === null || permConfig === void 0 ? void 0 : permConfig.failOnWarnings,
|
|
213
|
+
defaultValue: defaultFailOnWarnings,
|
|
214
|
+
})) !== null && _g !== void 0 ? _g : defaultFailOnWarnings;
|
|
215
|
+
// Determine project path
|
|
216
|
+
let projectPath = config.getValue({
|
|
217
|
+
cliValue: parameters.options.path,
|
|
218
|
+
configValue: permConfig === null || permConfig === void 0 ? void 0 : permConfig.path,
|
|
219
|
+
});
|
|
220
|
+
if (!projectPath) {
|
|
221
|
+
projectPath = findProjectRoot(filesystem.cwd());
|
|
222
|
+
}
|
|
223
|
+
if (!projectPath) {
|
|
224
|
+
error('No NestJS project found. Use --path <dir> to specify the project path.');
|
|
225
|
+
error('Expected: src/server/modules/ directory');
|
|
226
|
+
if (!parameters.options.fromGluegunMenu)
|
|
227
|
+
process.exit(1);
|
|
228
|
+
return 'permissions: project not found';
|
|
229
|
+
}
|
|
230
|
+
info(`Project: ${projectPath}`);
|
|
231
|
+
// Output file
|
|
232
|
+
const defaultOutputName = `permissions.${format}`;
|
|
233
|
+
const outputFile = config.getValue({
|
|
234
|
+
cliValue: parameters.options.output,
|
|
235
|
+
configValue: permConfig === null || permConfig === void 0 ? void 0 : permConfig.output,
|
|
236
|
+
defaultValue: defaultOutputName,
|
|
237
|
+
}) || defaultOutputName;
|
|
238
|
+
const outputPath = (0, path_1.join)(projectPath, outputFile);
|
|
239
|
+
// Load scanner from project's @lenne.tech/nest-server
|
|
240
|
+
const spinner = spin('Loading permissions scanner...');
|
|
241
|
+
const scanner = yield loadScanner(projectPath);
|
|
242
|
+
if (!scanner) {
|
|
243
|
+
spinner.fail('Permissions scanner not available');
|
|
244
|
+
error('');
|
|
245
|
+
error("Neither the project's @lenne.tech/nest-server scanner (>= 11.17.0) nor the CLI fallback scanner could be loaded.");
|
|
246
|
+
error('Please ensure ts-morph is installed: npm install ts-morph');
|
|
247
|
+
if (!parameters.options.fromGluegunMenu)
|
|
248
|
+
process.exit(1);
|
|
249
|
+
return 'permissions: scanner not available';
|
|
250
|
+
}
|
|
251
|
+
// Scan permissions
|
|
252
|
+
spinner.text = 'Scanning modules...';
|
|
253
|
+
let report;
|
|
254
|
+
try {
|
|
255
|
+
report = scanner.scanPermissions(projectPath, {
|
|
256
|
+
log: (msg) => {
|
|
257
|
+
spinner.text = msg;
|
|
258
|
+
},
|
|
259
|
+
warn: (msg) => {
|
|
260
|
+
print.warning(` ${msg}`);
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
spinner.fail('Permissions scan failed');
|
|
266
|
+
error(String(err));
|
|
267
|
+
if (!parameters.options.fromGluegunMenu)
|
|
268
|
+
process.exit(1);
|
|
269
|
+
return 'permissions: scan failed';
|
|
270
|
+
}
|
|
271
|
+
spinner.succeed(`Scanned ${report.stats.totalModules} modules, ${report.stats.totalSubObjects} objects, found ${report.stats.totalWarnings} warnings`);
|
|
272
|
+
// Generate report
|
|
273
|
+
const reportSpinner = spin(`Generating ${format} report...`);
|
|
274
|
+
let reportContent;
|
|
275
|
+
if (format === 'json') {
|
|
276
|
+
reportContent = generateJson(report, projectPath);
|
|
277
|
+
}
|
|
278
|
+
else if (format === 'html') {
|
|
279
|
+
reportContent = (yield generateHtml(report, projectPath, template)) || '';
|
|
280
|
+
if (!reportContent) {
|
|
281
|
+
// Fallback: generate markdown if HTML template not available
|
|
282
|
+
reportContent =
|
|
283
|
+
((_h = scanner.generateMarkdownReport) === null || _h === void 0 ? void 0 : _h.call(scanner, report, projectPath)) || generateFallbackMarkdown(report, projectPath);
|
|
284
|
+
reportSpinner.warn('HTML template not found, falling back to markdown');
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
reportContent =
|
|
289
|
+
((_j = scanner.generateMarkdownReport) === null || _j === void 0 ? void 0 : _j.call(scanner, report, projectPath)) || generateFallbackMarkdown(report, projectPath);
|
|
290
|
+
}
|
|
291
|
+
// Write file
|
|
292
|
+
filesystem.write(outputPath, reportContent);
|
|
293
|
+
reportSpinner.succeed(`Report saved to ${outputFile}`);
|
|
294
|
+
// Console summary
|
|
295
|
+
if (shouldConsole) {
|
|
296
|
+
printConsoleSummary(print, report);
|
|
297
|
+
}
|
|
298
|
+
// Open in browser
|
|
299
|
+
if (shouldOpen && (format === 'html' || format === 'md')) {
|
|
300
|
+
openFile(outputPath);
|
|
301
|
+
info(`Report opened in default application`);
|
|
302
|
+
}
|
|
303
|
+
// Summary line (always shown)
|
|
304
|
+
success(`${report.stats.totalModules} modules, ${report.stats.totalSubObjects} objects, ${report.stats.totalWarnings} warnings → ${outputFile}`);
|
|
305
|
+
// Exit code for CI
|
|
306
|
+
if (failOnWarnings && report.warnings.length > 0) {
|
|
307
|
+
error(`${report.warnings.length} warning(s) found (--fail-on-warnings is active)`);
|
|
308
|
+
if (!parameters.options.fromGluegunMenu)
|
|
309
|
+
process.exit(1);
|
|
310
|
+
}
|
|
311
|
+
if (!parameters.options.fromGluegunMenu) {
|
|
312
|
+
process.exit();
|
|
313
|
+
}
|
|
314
|
+
return `permissions report generated: ${outputFile}`;
|
|
315
|
+
}),
|
|
316
|
+
};
|
|
317
|
+
exports.default = PermissionsCommand;
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc2VydmVyL3Blcm1pc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsaURBQXFDO0FBQ3JDLDJCQUFnQztBQUNoQywrQkFBNEI7QUF3RzVCLCtFQUErRTtBQUMvRSw0REFBNEQ7QUFDNUQsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLFNBQWlCO0lBQ3hDLElBQUksT0FBTyxHQUFHLFNBQVMsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDNUIsSUFBSSxJQUFBLGVBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUEsV0FBSSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sS0FBSyxPQUFPO1lBQUUsTUFBTTtRQUM5QixPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHdCQUF3QixDQUFDLE1BQXlCLEVBQUUsV0FBbUI7SUFDOUUsT0FBTyxJQUFJLENBQUMsU0FBUyxpQ0FBTSxNQUFNLEtBQUUsT0FBTyxFQUFFLFdBQVcsS0FBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsTUFBeUIsRUFBRSxXQUFtQixFQUFFLFVBQWU7SUFDbkYsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO1FB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
|
|
@@ -29,7 +29,7 @@ const NewCommand = {
|
|
|
29
29
|
}
|
|
30
30
|
// Set secrets
|
|
31
31
|
const prepareSpinner = spin(`Setting secrets in server configuration: ${filePath}`);
|
|
32
|
-
yield patching.update(filePath, content => server.replaceSecretOrPrivateKeys(content));
|
|
32
|
+
yield patching.update(filePath, (content) => server.replaceSecretOrPrivateKeys(content));
|
|
33
33
|
prepareSpinner.succeed(`Secrets set in server configuration ${filePath}`);
|
|
34
34
|
if (!toolbox.parameters.options.fromGluegunMenu) {
|
|
35
35
|
process.exit();
|
|
@@ -39,4 +39,4 @@ const NewCommand = {
|
|
|
39
39
|
}),
|
|
40
40
|
};
|
|
41
41
|
exports.default = NewCommand;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LXNlY3JldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc2VydmVyL3NldC1zZWNyZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBSUE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBbUI7SUFDakMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ2QsV0FBVyxFQUFFLG9CQUFvQjtJQUNqQyxNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osVUFBVSxFQUNWLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFDNUIsTUFBTSxHQUNQLEdBQUcsT0FBTyxDQUFDO1FBRVosdUJBQXVCO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksbUJBQW1CLENBQUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDVCxLQUFLLENBQUMsMEJBQTBCLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDN0MsT0FBTztRQUNULENBQUM7UUFFRCxjQUFjO1FBQ2QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDRDQUE0QyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLGNBQWMsQ0FBQyxPQUFPLENBQUMsdUNBQXVDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFMUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsWUFBWTtRQUNaLE9BQU8scUNBQXFDLENBQUM7SUFDL0MsQ0FBQyxDQUFBO0NBQ0YsQ0FBQztBQUVGLGtCQUFlLFVBQVUsQ0FBQyJ9
|
|
@@ -100,10 +100,10 @@ const NewCommand = {
|
|
|
100
100
|
yield patching.replace(`./${projectDir}/angular/src/app/app.component.html`, 'Chrome Extension Starter', name);
|
|
101
101
|
yield patching.replace(`./${projectDir}/angular/src/app/app.component.html`, 'Chrome Extension starter', name);
|
|
102
102
|
prepareSpinner.succeed('Files prepared');
|
|
103
|
-
//
|
|
104
|
-
const installSpinner = spin('Install
|
|
105
|
-
yield system.run(`cd ${projectDir} &&
|
|
106
|
-
installSpinner.succeed('
|
|
103
|
+
// Install packages
|
|
104
|
+
const installSpinner = spin('Install packages');
|
|
105
|
+
yield system.run(`cd ${projectDir} && ${toolbox.pm.install(toolbox.pm.detect(projectDir))}`);
|
|
106
|
+
installSpinner.succeed('Packages installed');
|
|
107
107
|
// Init git
|
|
108
108
|
const initGitSpinner = spin('Initialize git');
|
|
109
109
|
yield system.run(`cd ${projectDir} && git init && git add . && git commit -am "Init via lenne.Tech CLI ${meta.version()}"`);
|
|
@@ -117,4 +117,4 @@ const NewCommand = {
|
|
|
117
117
|
}),
|
|
118
118
|
};
|
|
119
119
|
exports.default = NewCommand;
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyb21lLWV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdGFydGVyL2Nocm9tZS1leHRlbnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFtQjtJQUNqQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDYixXQUFXLEVBQUUsZ0NBQWdDO0lBQzdDLE1BQU0sRUFBRSxLQUFLO0lBQ2IsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QixHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDN0MsNkJBQTZCO1FBQzdCLE1BQU0sRUFDSixVQUFVLEVBQ1YsR0FBRyxFQUNILE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxFQUNWLFFBQVEsRUFDUixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFDckMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQ3RCLE1BQU0sR0FDUCxHQUFHLE9BQU8sQ0FBQztRQUVaLGNBQWM7UUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBRTlDLFlBQVk7UUFDWixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFFRCxXQUFXO1FBQ1gsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7WUFDbkQsSUFBSSxFQUFFLGNBQWM7WUFDcEIsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTztRQUNULENBQUM7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
|
package/build/commands/status.js
CHANGED
|
@@ -141,16 +141,18 @@ const StatusCommand = {
|
|
|
141
141
|
info('');
|
|
142
142
|
info(colors.bold('Environment:'));
|
|
143
143
|
if (projectInfo.nodeVersion) {
|
|
144
|
-
info(` Node:
|
|
144
|
+
info(` Node: ${projectInfo.nodeVersion}`);
|
|
145
145
|
}
|
|
146
146
|
if (projectInfo.npmVersion) {
|
|
147
|
-
info(` npm:
|
|
147
|
+
info(` npm: v${projectInfo.npmVersion}`);
|
|
148
148
|
}
|
|
149
|
+
const detectedPm = toolbox.pm.detect();
|
|
150
|
+
info(` Package Manager: ${detectedPm}`);
|
|
149
151
|
// Show available commands based on project type
|
|
150
152
|
info('');
|
|
151
153
|
info(colors.bold('Available Commands:'));
|
|
152
154
|
const commands = getAvailableCommands(projectInfo.projectType);
|
|
153
|
-
commands.forEach(cmd => info(` ${colors.cyan(cmd.command)} - ${cmd.description}`));
|
|
155
|
+
commands.forEach((cmd) => info(` ${colors.cyan(cmd.command)} - ${cmd.description}`));
|
|
154
156
|
info('');
|
|
155
157
|
// For tests
|
|
156
158
|
return `status ${projectInfo.projectType}`;
|
|
@@ -158,15 +160,15 @@ const StatusCommand = {
|
|
|
158
160
|
};
|
|
159
161
|
function formatProjectType(type) {
|
|
160
162
|
const typeMap = {
|
|
161
|
-
|
|
163
|
+
angular: 'Angular',
|
|
162
164
|
'nest-server': 'lenne.tech Nest Server',
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
nestjs: 'NestJS',
|
|
166
|
+
node: 'Node.js',
|
|
167
|
+
nuxt: 'Nuxt',
|
|
168
|
+
react: 'React',
|
|
169
|
+
typescript: 'TypeScript',
|
|
170
|
+
unknown: 'Unknown',
|
|
171
|
+
vue: 'Vue',
|
|
170
172
|
};
|
|
171
173
|
return typeMap[type] || type;
|
|
172
174
|
}
|
|
@@ -177,22 +179,16 @@ function getAvailableCommands(projectType) {
|
|
|
177
179
|
{ command: 'lt npm', description: 'NPM utilities' },
|
|
178
180
|
];
|
|
179
181
|
const typeCommands = {
|
|
180
|
-
'angular':
|
|
181
|
-
{ command: 'lt frontend angular', description: 'Angular tools' },
|
|
182
|
-
],
|
|
182
|
+
angular: [{ command: 'lt frontend angular', description: 'Angular tools' }],
|
|
183
183
|
'nest-server': [
|
|
184
184
|
{ command: 'lt server module', description: 'Create server module' },
|
|
185
185
|
{ command: 'lt server object', description: 'Create object type' },
|
|
186
186
|
{ command: 'lt server add-property', description: 'Add property to module' },
|
|
187
187
|
],
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
],
|
|
191
|
-
'nuxt': [
|
|
192
|
-
{ command: 'lt frontend nuxt', description: 'Nuxt tools' },
|
|
193
|
-
],
|
|
188
|
+
nestjs: [{ command: 'lt server', description: 'NestJS server tools' }],
|
|
189
|
+
nuxt: [{ command: 'lt frontend nuxt', description: 'Nuxt tools' }],
|
|
194
190
|
};
|
|
195
191
|
return [...commonCommands, ...(typeCommands[projectType] || [])];
|
|
196
192
|
}
|
|
197
193
|
exports.default = StatusCommand;
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3N0YXR1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBLCtCQUE0QjtBQWtCNUI7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBbUI7SUFDcEMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2IsV0FBVyxFQUFFLHFCQUFxQjtJQUNsQyxNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxRQUFRO0lBQ2QsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFOztRQUM3QyxNQUFNLEVBQ0osVUFBVSxFQUNWLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUN6QyxNQUFNLEdBQ1AsR0FBRyxPQUFPLENBQUM7UUFFWixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sV0FBVyxHQUFnQjtZQUMvQixXQUFXLEVBQUUsRUFBRTtZQUNmLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUk7WUFDYixNQUFNLEVBQUUsS0FBSztZQUNiLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7UUFFRixzQkFBc0I7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
|
|
@@ -29,7 +29,7 @@ const ListTemplatesCommand = {
|
|
|
29
29
|
if (builtInTemplates.length > 0) {
|
|
30
30
|
info('');
|
|
31
31
|
info(colors.bold('Built-in Templates:'));
|
|
32
|
-
builtInTemplates.forEach(template => {
|
|
32
|
+
builtInTemplates.forEach((template) => {
|
|
33
33
|
info(` ${colors.cyan(template.name)} ${colors.dim(`(${template.type})`)}`);
|
|
34
34
|
});
|
|
35
35
|
}
|
|
@@ -39,7 +39,7 @@ const ListTemplatesCommand = {
|
|
|
39
39
|
if (customTemplates.length > 0) {
|
|
40
40
|
info('');
|
|
41
41
|
info(colors.bold('Custom Templates:'));
|
|
42
|
-
customTemplates.forEach(template => {
|
|
42
|
+
customTemplates.forEach((template) => {
|
|
43
43
|
info(` ${colors.cyan(template.name)} ${colors.dim(`(${template.type})`)}`);
|
|
44
44
|
});
|
|
45
45
|
}
|
|
@@ -54,7 +54,7 @@ const ListTemplatesCommand = {
|
|
|
54
54
|
if (projectTemplates.length > 0) {
|
|
55
55
|
info('');
|
|
56
56
|
info(colors.bold('Project Templates:'));
|
|
57
|
-
projectTemplates.forEach(template => {
|
|
57
|
+
projectTemplates.forEach((template) => {
|
|
58
58
|
info(` ${colors.cyan(template.name)} ${colors.dim(`(${template.type})`)}`);
|
|
59
59
|
});
|
|
60
60
|
}
|
|
@@ -104,4 +104,4 @@ function getTemplatesFromDirectory(filesystem, dirPath) {
|
|
|
104
104
|
return templates.sort((a, b) => a.name.localeCompare(b.name));
|
|
105
105
|
}
|
|
106
106
|
exports.default = ListTemplatesCommand;
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy90ZW1wbGF0ZXMvbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBLCtCQUE0QjtBQUk1Qjs7R0FFRztBQUNILE1BQU0sb0JBQW9CLEdBQW1CO0lBQzNDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQztJQUNiLFdBQVcsRUFBRSwwQkFBMEI7SUFDdkMsTUFBTSxFQUFFLEtBQUs7SUFDYixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxDQUFPLE9BQStCLEVBQUUsRUFBRTtRQUM3QyxNQUFNLEVBQ0osVUFBVSxFQUNWLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQ2hDLE9BQU8sR0FDUixHQUFHLE9BQU8sQ0FBQztRQUVaLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQyxxQkFBcUI7UUFDckIsTUFBTSxXQUFXLEdBQUcsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFNUUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxD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
|