@lenne.tech/cli 0.0.124 → 1.0.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/bin/lt +145 -14
- package/build/commands/claude/claude.js +25 -0
- package/build/commands/claude/install-skills.js +622 -0
- package/build/commands/config/config.js +25 -0
- package/build/commands/config/help.js +167 -0
- package/build/commands/config/init.js +143 -0
- package/build/commands/config/show.js +68 -0
- package/build/commands/fullstack/init.js +38 -16
- package/build/commands/server/add-property.js +199 -36
- package/build/commands/server/create.js +66 -4
- package/build/commands/server/module.js +150 -27
- package/build/commands/server/object.js +38 -22
- package/build/extensions/config.js +157 -0
- package/build/extensions/parse-properties.js +119 -0
- package/build/extensions/server.js +82 -47
- package/build/interfaces/lt-config.interface.js +3 -0
- package/build/templates/claude-skills/lt-cli/SKILL.md +272 -0
- package/build/templates/claude-skills/lt-cli/examples.md +542 -0
- package/build/templates/claude-skills/lt-cli/reference.md +506 -0
- package/build/templates/claude-skills/nest-server-generator/SKILL.md +2833 -0
- package/build/templates/claude-skills/nest-server-generator/examples.md +760 -0
- package/build/templates/claude-skills/nest-server-generator/reference.md +417 -0
- package/build/templates/nest-server-module/inputs/template-create.input.ts.ejs +1 -3
- package/build/templates/nest-server-module/inputs/template.input.ts.ejs +1 -1
- package/build/templates/nest-server-module/template.controller.ts.ejs +24 -13
- package/build/templates/nest-server-module/template.model.ts.ejs +2 -2
- package/build/templates/nest-server-module/template.module.ts.ejs +4 -0
- package/build/templates/nest-server-module/template.service.ts.ejs +6 -6
- package/build/templates/nest-server-object/template.object.ts.ejs +2 -2
- package/package.json +13 -11
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Config commands
|
|
14
|
+
*/
|
|
15
|
+
module.exports = {
|
|
16
|
+
alias: ['cfg'],
|
|
17
|
+
description: 'Configuration file management',
|
|
18
|
+
hidden: false,
|
|
19
|
+
name: 'config',
|
|
20
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
yield toolbox.helper.showMenu('config');
|
|
22
|
+
return 'config';
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbmZpZy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDZixLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDZCxXQUFXLEVBQUUsK0JBQStCO0lBQzVDLE1BQU0sRUFBRSxLQUFLO0lBQ2IsSUFBSSxFQUFFLFFBQVE7SUFDZCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDN0MsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUE7Q0FDRixDQUFDIn0=
|
|
@@ -0,0 +1,167 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Show help information about lt.config.json
|
|
14
|
+
*/
|
|
15
|
+
const HelpCommand = {
|
|
16
|
+
alias: ['h', 'info'],
|
|
17
|
+
description: 'Show help information about lt.config.json usage',
|
|
18
|
+
hidden: false,
|
|
19
|
+
name: 'help',
|
|
20
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
const { print: { divider, info }, } = toolbox;
|
|
22
|
+
divider();
|
|
23
|
+
info('lt.config.json - Configuration File Help');
|
|
24
|
+
divider();
|
|
25
|
+
info('');
|
|
26
|
+
info('📄 What is lt.config.json?');
|
|
27
|
+
info('');
|
|
28
|
+
info('The lt.config.json file allows you to configure default values for lenne.tech CLI commands.');
|
|
29
|
+
info('This eliminates the need for repeated CLI parameters or interactive prompts.');
|
|
30
|
+
info('');
|
|
31
|
+
divider();
|
|
32
|
+
info('📂 File Hierarchy');
|
|
33
|
+
divider();
|
|
34
|
+
info('');
|
|
35
|
+
info('The CLI searches for lt.config.json files from the current directory up to the root directory.');
|
|
36
|
+
info('Configuration files are merged with the following priority (lowest to highest):');
|
|
37
|
+
info('');
|
|
38
|
+
info(' 1. Default values (hardcoded in CLI)');
|
|
39
|
+
info(' 2. Parent directory configs (root → current)');
|
|
40
|
+
info(' 3. Current directory config');
|
|
41
|
+
info(' 4. CLI parameters (--flag value)');
|
|
42
|
+
info(' 5. Interactive user input');
|
|
43
|
+
info('');
|
|
44
|
+
info('This means:');
|
|
45
|
+
info(' • Configs in child directories override parent configs');
|
|
46
|
+
info(' • CLI parameters override config file values');
|
|
47
|
+
info(' • Interactive input overrides everything');
|
|
48
|
+
info('');
|
|
49
|
+
divider();
|
|
50
|
+
info('📝 Configuration Structure');
|
|
51
|
+
divider();
|
|
52
|
+
info('');
|
|
53
|
+
info('Example lt.config.json:');
|
|
54
|
+
info('');
|
|
55
|
+
info(JSON.stringify({
|
|
56
|
+
commands: {
|
|
57
|
+
fullstack: {
|
|
58
|
+
frontend: 'angular',
|
|
59
|
+
git: true,
|
|
60
|
+
},
|
|
61
|
+
server: {
|
|
62
|
+
addProp: {
|
|
63
|
+
skipLint: false,
|
|
64
|
+
},
|
|
65
|
+
module: {
|
|
66
|
+
controller: 'Both',
|
|
67
|
+
skipLint: false,
|
|
68
|
+
},
|
|
69
|
+
object: {
|
|
70
|
+
skipLint: false,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
meta: {
|
|
75
|
+
description: 'Project description',
|
|
76
|
+
name: 'My Project',
|
|
77
|
+
version: '1.0.0',
|
|
78
|
+
},
|
|
79
|
+
}, null, 2));
|
|
80
|
+
info('');
|
|
81
|
+
divider();
|
|
82
|
+
info('🔧 Available Configuration Options');
|
|
83
|
+
divider();
|
|
84
|
+
info('');
|
|
85
|
+
info('Meta Information:');
|
|
86
|
+
info(' meta.version - Config file version');
|
|
87
|
+
info(' meta.name - Project name');
|
|
88
|
+
info(' meta.description - Project description');
|
|
89
|
+
info('');
|
|
90
|
+
info('Server Commands:');
|
|
91
|
+
info(' commands.server.module.controller - Default controller type (Rest|GraphQL|Both|auto)');
|
|
92
|
+
info(' commands.server.module.skipLint - Skip lint after module creation (boolean)');
|
|
93
|
+
info(' commands.server.object.skipLint - Skip lint after object creation (boolean)');
|
|
94
|
+
info(' commands.server.addProp.skipLint - Skip lint after adding property (boolean)');
|
|
95
|
+
info('');
|
|
96
|
+
info('Fullstack Commands:');
|
|
97
|
+
info(' commands.fullstack.frontend - Default frontend framework (angular|nuxt)');
|
|
98
|
+
info(' commands.fullstack.git - Initialize git by default (boolean)');
|
|
99
|
+
info('');
|
|
100
|
+
divider();
|
|
101
|
+
info('💡 Usage Examples');
|
|
102
|
+
divider();
|
|
103
|
+
info('');
|
|
104
|
+
info('1. Initialize a new config:');
|
|
105
|
+
info(' $ lt config init');
|
|
106
|
+
info('');
|
|
107
|
+
info('2. Show current merged config:');
|
|
108
|
+
info(' $ lt config show');
|
|
109
|
+
info('');
|
|
110
|
+
info('3. Create module using config defaults:');
|
|
111
|
+
info(' $ lt server module --name Product');
|
|
112
|
+
info(' (uses controller type from config)');
|
|
113
|
+
info('');
|
|
114
|
+
info('4. Override config with CLI parameter:');
|
|
115
|
+
info(' $ lt server module --name Product --controller Rest');
|
|
116
|
+
info(' (ignores config, uses Rest)');
|
|
117
|
+
info('');
|
|
118
|
+
info('5. Hierarchical config example:');
|
|
119
|
+
info('');
|
|
120
|
+
info(' /projects/lt.config.json: ← Parent config');
|
|
121
|
+
info(' {');
|
|
122
|
+
info(' "commands": {');
|
|
123
|
+
info(' "server": {');
|
|
124
|
+
info(' "module": { "controller": "Both" }');
|
|
125
|
+
info(' }');
|
|
126
|
+
info(' }');
|
|
127
|
+
info(' }');
|
|
128
|
+
info('');
|
|
129
|
+
info(' /projects/api/lt.config.json: ← Child config (overrides parent)');
|
|
130
|
+
info(' {');
|
|
131
|
+
info(' "commands": {');
|
|
132
|
+
info(' "server": {');
|
|
133
|
+
info(' "module": { "controller": "Rest" }');
|
|
134
|
+
info(' }');
|
|
135
|
+
info(' }');
|
|
136
|
+
info(' }');
|
|
137
|
+
info('');
|
|
138
|
+
info(' When running "lt server module" in /projects/api/:');
|
|
139
|
+
info(' → Uses "Rest" (child config overrides parent)');
|
|
140
|
+
info('');
|
|
141
|
+
divider();
|
|
142
|
+
info('🚀 Quick Start');
|
|
143
|
+
divider();
|
|
144
|
+
info('');
|
|
145
|
+
info('1. Navigate to your project root:');
|
|
146
|
+
info(' $ cd /path/to/project');
|
|
147
|
+
info('');
|
|
148
|
+
info('2. Initialize config:');
|
|
149
|
+
info(' $ lt config init');
|
|
150
|
+
info('');
|
|
151
|
+
info('3. Edit lt.config.json to your needs');
|
|
152
|
+
info('');
|
|
153
|
+
info('4. Run commands without repeated parameters:');
|
|
154
|
+
info(' $ lt server module --name User');
|
|
155
|
+
info(' $ lt server module --name Product');
|
|
156
|
+
info(' (both use the same controller type from config)');
|
|
157
|
+
info('');
|
|
158
|
+
divider();
|
|
159
|
+
info('');
|
|
160
|
+
info('For more information, visit:');
|
|
161
|
+
info('https://github.com/lenneTech/cli');
|
|
162
|
+
info('');
|
|
163
|
+
return 'config help';
|
|
164
|
+
}),
|
|
165
|
+
};
|
|
166
|
+
exports.default = HelpCommand;
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb25maWcvaGVscC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQTJCO0lBQzFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDcEIsV0FBVyxFQUFFLGtEQUFrRDtJQUMvRCxNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxNQUFNO0lBQ1osR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLE1BQU0sRUFDSixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQ3pCLEdBQUcsT0FBTyxDQUFDO1FBRVosT0FBTyxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUNqRCxPQUFPLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVULElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNULElBQUksQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVULE9BQU8sRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDMUIsT0FBTyxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVCxJQUFJLENBQUMsZ0dBQWdHLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsaUZBQWlGLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVCxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FB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
|
|
@@ -0,0 +1,143 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Initialize a new lt.config.json file
|
|
14
|
+
*/
|
|
15
|
+
const InitCommand = {
|
|
16
|
+
alias: ['i'],
|
|
17
|
+
description: 'Initialize a new lt.config.json file in the current directory',
|
|
18
|
+
hidden: false,
|
|
19
|
+
name: 'init',
|
|
20
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
const { config, filesystem, parameters, print: { error, info, success }, prompt: { ask, confirm }, } = toolbox;
|
|
22
|
+
// Check if config already exists
|
|
23
|
+
const configPath = filesystem.path(filesystem.cwd(), 'lt.config.json');
|
|
24
|
+
if (filesystem.exists(configPath)) {
|
|
25
|
+
const overwrite = yield confirm('lt.config.json already exists. Overwrite?', false);
|
|
26
|
+
if (!overwrite) {
|
|
27
|
+
info('Configuration initialization cancelled.');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Get configuration options from CLI or interactive mode
|
|
32
|
+
const { controller, frontend, git: initGit, interactive = true } = parameters.options;
|
|
33
|
+
const newConfig = {
|
|
34
|
+
commands: {},
|
|
35
|
+
meta: {
|
|
36
|
+
version: '1.0.0',
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
if (interactive) {
|
|
40
|
+
// Interactive mode - ask for configuration
|
|
41
|
+
info('Creating lt.config.json configuration...');
|
|
42
|
+
info('');
|
|
43
|
+
// Ask for server module configuration
|
|
44
|
+
const serverConfig = yield ask([
|
|
45
|
+
{
|
|
46
|
+
initial: true,
|
|
47
|
+
message: 'Configure server module defaults?',
|
|
48
|
+
name: 'configureServer',
|
|
49
|
+
type: 'confirm',
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
if (serverConfig.configureServer) {
|
|
53
|
+
const serverOptions = yield ask([
|
|
54
|
+
{
|
|
55
|
+
choices: ['Rest', 'GraphQL', 'Both', 'auto'],
|
|
56
|
+
initial: 2, // Both
|
|
57
|
+
message: 'Default controller type for new modules?',
|
|
58
|
+
name: 'controller',
|
|
59
|
+
type: 'select',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
initial: false,
|
|
63
|
+
message: 'Skip lint by default?',
|
|
64
|
+
name: 'skipLint',
|
|
65
|
+
type: 'confirm',
|
|
66
|
+
},
|
|
67
|
+
]);
|
|
68
|
+
newConfig.commands.server = {
|
|
69
|
+
addProp: {
|
|
70
|
+
skipLint: serverOptions.skipLint,
|
|
71
|
+
},
|
|
72
|
+
module: {
|
|
73
|
+
controller: serverOptions.controller,
|
|
74
|
+
skipLint: serverOptions.skipLint,
|
|
75
|
+
},
|
|
76
|
+
object: {
|
|
77
|
+
skipLint: serverOptions.skipLint,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Ask for fullstack configuration
|
|
82
|
+
const fullstackConfig = yield ask([
|
|
83
|
+
{
|
|
84
|
+
initial: false,
|
|
85
|
+
message: 'Configure fullstack defaults?',
|
|
86
|
+
name: 'configureFullstack',
|
|
87
|
+
type: 'confirm',
|
|
88
|
+
},
|
|
89
|
+
]);
|
|
90
|
+
if (fullstackConfig.configureFullstack) {
|
|
91
|
+
const fullstackOptions = yield ask([
|
|
92
|
+
{
|
|
93
|
+
choices: ['angular', 'nuxt'],
|
|
94
|
+
initial: 0,
|
|
95
|
+
message: 'Default frontend framework?',
|
|
96
|
+
name: 'frontend',
|
|
97
|
+
type: 'select',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
initial: true,
|
|
101
|
+
message: 'Initialize git by default?',
|
|
102
|
+
name: 'git',
|
|
103
|
+
type: 'confirm',
|
|
104
|
+
},
|
|
105
|
+
]);
|
|
106
|
+
newConfig.commands.fullstack = {
|
|
107
|
+
frontend: fullstackOptions.frontend,
|
|
108
|
+
git: fullstackOptions.git,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Non-interactive mode - use CLI parameters
|
|
114
|
+
if (controller) {
|
|
115
|
+
newConfig.commands.server = {
|
|
116
|
+
module: {
|
|
117
|
+
controller: controller,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (frontend) {
|
|
122
|
+
newConfig.commands.fullstack = {
|
|
123
|
+
frontend: frontend,
|
|
124
|
+
git: initGit !== undefined ? initGit === 'true' : undefined,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Save configuration
|
|
129
|
+
try {
|
|
130
|
+
config.saveConfig(newConfig);
|
|
131
|
+
info('');
|
|
132
|
+
success('lt.config.json created successfully!');
|
|
133
|
+
info('');
|
|
134
|
+
info(`Configuration saved to: ${configPath}`);
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
error(`Failed to create configuration file: ${e.message}`);
|
|
138
|
+
}
|
|
139
|
+
return 'config init';
|
|
140
|
+
}),
|
|
141
|
+
};
|
|
142
|
+
exports.default = InitCommand;
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb25maWcvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUlBOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQTJCO0lBQzFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNaLFdBQVcsRUFBRSwrREFBK0Q7SUFDNUUsTUFBTSxFQUFFLEtBQUs7SUFDYixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxDQUFPLE9BQStCLEVBQUUsRUFBRTtRQUM3QyxNQUFNLEVBQ0osTUFBTSxFQUNOLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFDL0IsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUN6QixHQUFHLE9BQU8sQ0FBQztRQUVaLGlDQUFpQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDaEQsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO1FBRUQseURBQXlEO1FBQ3pELE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFFdEYsTUFBTSxTQUFTLEdBQWE7WUFDMUIsUUFBUSxFQUFF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
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Show current configuration (merged from all lt.config.json files)
|
|
14
|
+
*/
|
|
15
|
+
const ShowCommand = {
|
|
16
|
+
alias: ['s'],
|
|
17
|
+
description: 'Show current configuration (merged from all lt.config.json files in hierarchy)',
|
|
18
|
+
hidden: false,
|
|
19
|
+
name: 'show',
|
|
20
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
const { config, filesystem, print: { divider, info }, } = toolbox;
|
|
22
|
+
info('Loading configuration from lt.config.json files...');
|
|
23
|
+
info('');
|
|
24
|
+
// Load merged configuration
|
|
25
|
+
const mergedConfig = config.loadConfig();
|
|
26
|
+
if (!mergedConfig || Object.keys(mergedConfig).length === 0) {
|
|
27
|
+
info('No configuration found.');
|
|
28
|
+
info('Run "lt config init" to create a new configuration file.');
|
|
29
|
+
return 'config show';
|
|
30
|
+
}
|
|
31
|
+
divider();
|
|
32
|
+
info('Merged Configuration:');
|
|
33
|
+
divider();
|
|
34
|
+
// Display configuration as JSON
|
|
35
|
+
info(JSON.stringify(mergedConfig, null, 2));
|
|
36
|
+
divider();
|
|
37
|
+
info('');
|
|
38
|
+
// Show which config files were found
|
|
39
|
+
info('Configuration files in hierarchy:');
|
|
40
|
+
let currentPath = filesystem.cwd();
|
|
41
|
+
const root = filesystem.separator === '/' ? '/' : /^[A-Z]:\\$/i;
|
|
42
|
+
const foundConfigs = [];
|
|
43
|
+
while (true) {
|
|
44
|
+
const configPath = filesystem.path(currentPath, 'lt.config.json');
|
|
45
|
+
if (filesystem.exists(configPath)) {
|
|
46
|
+
foundConfigs.push(configPath);
|
|
47
|
+
}
|
|
48
|
+
const parent = filesystem.path(currentPath, '..');
|
|
49
|
+
if (parent === currentPath || (typeof root !== 'string' && root.test(currentPath))) {
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
currentPath = parent;
|
|
53
|
+
}
|
|
54
|
+
if (foundConfigs.length > 0) {
|
|
55
|
+
foundConfigs.reverse(); // Show from root to current
|
|
56
|
+
foundConfigs.forEach((path, index) => {
|
|
57
|
+
info(` ${index + 1}. ${path}`);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
info(' (none)');
|
|
62
|
+
}
|
|
63
|
+
info('');
|
|
64
|
+
return 'config show';
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
exports.default = ShowCommand;
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb25maWcvc2hvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQTJCO0lBQzFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNaLFdBQVcsRUFBRSxnRkFBZ0Y7SUFDN0YsTUFBTSxFQUFFLEtBQUs7SUFDYixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxDQUFPLE9BQStCLEVBQUUsRUFBRTtRQUM3QyxNQUFNLEVBQ0osTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQ3pCLEdBQUcsT0FBTyxDQUFDO1FBRVosSUFBSSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRVQsNEJBQTRCO1FBQzVCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV6QyxJQUFJLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sRUFBRSxDQUFDO1FBRVYsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QyxPQUFPLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVULHFDQUFxQztRQUNyQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUMxQyxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ2hFLE1BQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUVsQyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNsRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRixNQUFNO1lBQ1IsQ0FBQztZQUNELFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyw0QkFBNEI7WUFDcEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUVELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVULE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQTtDQUNGLENBQUM7QUFFRixrQkFBZSxXQUFXLENBQUMifQ==
|
|
@@ -15,7 +15,7 @@ const gluegun_1 = require("gluegun");
|
|
|
15
15
|
*/
|
|
16
16
|
const NewCommand = {
|
|
17
17
|
alias: ['init'],
|
|
18
|
-
description: 'Creates a new fullstack workspace',
|
|
18
|
+
description: 'Creates a new fullstack workspace. Use --name <WorkspaceName>, --frontend (angular|nuxt), --git (true|false), --git-link <GitURL> for non-interactive mode.',
|
|
19
19
|
hidden: false,
|
|
20
20
|
name: 'init',
|
|
21
21
|
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -29,11 +29,13 @@ const NewCommand = {
|
|
|
29
29
|
if (!(yield git.gitInstalled())) {
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
+
// Parse CLI arguments
|
|
33
|
+
const { frontend: cliFrontend, git: cliGit, 'git-link': cliGitLink, name: cliName } = parameters.options;
|
|
32
34
|
// Get name of the workspace
|
|
33
|
-
const name = yield helper.getInput(parameters.first, {
|
|
35
|
+
const name = cliName || (yield helper.getInput(parameters.first, {
|
|
34
36
|
name: 'workspace name',
|
|
35
37
|
showError: true,
|
|
36
|
-
});
|
|
38
|
+
}));
|
|
37
39
|
if (!name) {
|
|
38
40
|
return;
|
|
39
41
|
}
|
|
@@ -45,23 +47,43 @@ const NewCommand = {
|
|
|
45
47
|
error(`There's already a folder named "${projectDir}" here.`);
|
|
46
48
|
return undefined;
|
|
47
49
|
}
|
|
48
|
-
let frontend
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
else if (frontend === 'n') {
|
|
57
|
-
frontend = 'nuxt';
|
|
50
|
+
let frontend;
|
|
51
|
+
if (cliFrontend) {
|
|
52
|
+
frontend = cliFrontend === 'angular' ? 'angular' : cliFrontend === 'nuxt' ? 'nuxt' : null;
|
|
53
|
+
if (!frontend) {
|
|
54
|
+
error('Invalid frontend option. Use "angular" or "nuxt".');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
58
57
|
}
|
|
59
58
|
else {
|
|
60
|
-
|
|
59
|
+
frontend = (yield ask({
|
|
60
|
+
message: 'Angular (a) or Nuxt 3 (n)',
|
|
61
|
+
name: 'frontend',
|
|
62
|
+
type: 'input',
|
|
63
|
+
})).frontend;
|
|
64
|
+
if (frontend === 'a') {
|
|
65
|
+
frontend = 'angular';
|
|
66
|
+
}
|
|
67
|
+
else if (frontend === 'n') {
|
|
68
|
+
frontend = 'nuxt';
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
process.exit();
|
|
72
|
+
}
|
|
61
73
|
}
|
|
62
74
|
let addToGit = false;
|
|
63
75
|
let gitLink;
|
|
64
|
-
if (
|
|
76
|
+
if (cliGit !== undefined) {
|
|
77
|
+
addToGit = cliGit === 'true' || cliGit === true;
|
|
78
|
+
if (addToGit && cliGitLink) {
|
|
79
|
+
gitLink = cliGitLink;
|
|
80
|
+
}
|
|
81
|
+
else if (addToGit) {
|
|
82
|
+
error('--git-link is required when --git is true');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (parameters.third !== 'false') {
|
|
65
87
|
addToGit = parameters.third === 'true' || (yield confirm('Add workspace to a new git repository?'));
|
|
66
88
|
// Check if git init is active
|
|
67
89
|
if (addToGit) {
|
|
@@ -167,4 +189,4 @@ const NewCommand = {
|
|
|
167
189
|
}),
|
|
168
190
|
};
|
|
169
191
|
exports.default = NewCommand;
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9mdWxsc3RhY2svaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLHFDQUFtRDtBQUtuRDs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFtQjtJQUNqQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDZixXQUFXLEVBQUUsNkpBQTZKO0lBQzFLLE1BQU0sRUFBRSxLQUFLO0lBQ2IsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7UUFDN0MsNkJBQTZCO1FBQzdCLE1BQU0sRUFDSixVQUFVLEVBQ1YsR0FBRyxFQUNILE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQ3JDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFDeEIsTUFBTSxFQUNOLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUN0QixNQUFNLEdBQ1AsR0FBRyxPQUFPLENBQUM7UUFFWixjQUFjO1FBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxDLE9BQU87UUFDUCxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUV6QyxZQUFZO1FBQ1osSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUV6Ryw0QkFBNEI7UUFDNUIsTUFBTSxJQUFJLEdB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
|