@lenne.tech/cli 0.0.125 → 1.0.1

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.
Files changed (46) hide show
  1. package/bin/lt +145 -14
  2. package/build/commands/claude/install-commands.js +332 -0
  3. package/build/commands/claude/install-skills.js +626 -0
  4. package/build/commands/config/config.js +25 -0
  5. package/build/commands/config/help.js +167 -0
  6. package/build/commands/config/init.js +143 -0
  7. package/build/commands/config/show.js +68 -0
  8. package/build/commands/server/add-property.js +163 -46
  9. package/build/commands/server/create.js +66 -4
  10. package/build/commands/server/module.js +133 -20
  11. package/build/commands/server/object.js +23 -15
  12. package/build/extensions/config.js +157 -0
  13. package/build/extensions/server.js +194 -63
  14. package/build/interfaces/lt-config.interface.js +3 -0
  15. package/build/templates/claude-commands/code-cleanup.md +82 -0
  16. package/build/templates/claude-commands/mr-description-clipboard.md +48 -0
  17. package/build/templates/claude-commands/mr-description.md +33 -0
  18. package/build/templates/claude-commands/sec-review.md +62 -0
  19. package/build/templates/claude-commands/skill-optimize.md +140 -0
  20. package/build/templates/claude-commands/test-generate.md +45 -0
  21. package/build/templates/claude-skills/lt-cli/SKILL.md +190 -259
  22. package/build/templates/claude-skills/lt-cli/examples.md +433 -203
  23. package/build/templates/claude-skills/lt-cli/reference.md +400 -226
  24. package/build/templates/claude-skills/nest-server-generator/SKILL.md +1891 -0
  25. package/build/templates/claude-skills/nest-server-generator/configuration.md +279 -0
  26. package/build/templates/claude-skills/nest-server-generator/declare-keyword-warning.md +124 -0
  27. package/build/templates/claude-skills/nest-server-generator/description-management.md +217 -0
  28. package/build/templates/claude-skills/nest-server-generator/examples.md +886 -0
  29. package/build/templates/claude-skills/nest-server-generator/quality-review.md +855 -0
  30. package/build/templates/claude-skills/nest-server-generator/reference.md +471 -0
  31. package/build/templates/claude-skills/nest-server-generator/security-rules.md +358 -0
  32. package/build/templates/claude-skills/story-tdd/SKILL.md +1173 -0
  33. package/build/templates/claude-skills/story-tdd/code-quality.md +266 -0
  34. package/build/templates/claude-skills/story-tdd/database-indexes.md +173 -0
  35. package/build/templates/claude-skills/story-tdd/examples.md +1332 -0
  36. package/build/templates/claude-skills/story-tdd/reference.md +1180 -0
  37. package/build/templates/claude-skills/story-tdd/security-review.md +299 -0
  38. package/build/templates/nest-server-module/inputs/template-create.input.ts.ejs +1 -3
  39. package/build/templates/nest-server-module/inputs/template.input.ts.ejs +1 -1
  40. package/build/templates/nest-server-module/template.controller.ts.ejs +24 -13
  41. package/build/templates/nest-server-module/template.model.ts.ejs +2 -2
  42. package/build/templates/nest-server-module/template.module.ts.ejs +4 -0
  43. package/build/templates/nest-server-module/template.service.ts.ejs +6 -6
  44. package/build/templates/nest-server-object/template.object.ts.ejs +2 -2
  45. package/package.json +13 -11
  46. package/build/commands/claude/install-skill.js +0 -93
@@ -14,18 +14,20 @@ const ts_morph_1 = require("ts-morph");
14
14
  const module_1 = require("./module");
15
15
  const object_1 = require("./object");
16
16
  /**
17
- * Create a new server module
17
+ * Add property to module or object
18
18
  */
19
19
  const NewCommand = {
20
20
  alias: ['ap'],
21
21
  description: 'Adds a property to a module. Use --type (Module|Object), --element <name>, --prop-name-X <name>, --prop-type-X <type>, --prop-nullable-X (true|false), --prop-array-X (true|false), --prop-enum-X <EnumName>, --prop-schema-X <SchemaName>, --prop-reference-X <ReferenceName> for non-interactive mode.',
22
22
  hidden: false,
23
23
  name: 'addProp',
24
- run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
24
+ run: (toolbox, options) => __awaiter(void 0, void 0, void 0, function* () {
25
+ var _a, _b, _c, _d, _e;
26
+ // Options:
27
+ const { preventExitProcess } = Object.assign({ preventExitProcess: false }, options);
25
28
  // Retrieve the tools we need
26
- const { filesystem, print: { divider, error, info, spin, success }, prompt: { ask, confirm }, server, strings: { pascalCase }, system, } = toolbox;
29
+ const { config, filesystem, parameters, print: { divider, error, info, spin, success }, prompt: { ask, confirm }, server, strings: { pascalCase }, system, } = toolbox;
27
30
  const argProps = Object.keys(toolbox.parameters.options || {}).filter((key) => key.startsWith('prop'));
28
- const declare = server.useDefineForClassFieldsActivated();
29
31
  function getModules() {
30
32
  const cwd = filesystem.cwd();
31
33
  const path = cwd.substr(0, cwd.lastIndexOf('src'));
@@ -38,8 +40,11 @@ const NewCommand = {
38
40
  const objectDirs = (0, path_1.join)(path, 'src', 'server', 'common', 'objects');
39
41
  return filesystem.subdirectories(objectDirs, true);
40
42
  }
43
+ // Load configuration
44
+ const ltConfig = config.loadConfig();
45
+ const configSkipLint = (_c = (_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.addProp) === null || _c === void 0 ? void 0 : _c.skipLint;
41
46
  // Parse CLI arguments
42
- const { element: cliElement, type: cliType } = toolbox.parameters.options;
47
+ const { element: cliElement, skipLint: cliSkipLint, type: cliType } = parameters.options;
43
48
  const objectOrModule = cliType || (yield ask([
44
49
  {
45
50
  choices: ['Module', 'Object'],
@@ -113,55 +118,77 @@ const NewCommand = {
113
118
  // Go on
114
119
  continue;
115
120
  }
116
- const type = ['any', 'bigint', 'boolean', 'never', 'null', 'number', 'string', 'symbol', 'undefined', 'unknown', 'void'].includes(propObj.type) ? propObj.type : pascalCase(propObj.type);
117
121
  const description = `'${pascalCase(propObj.name)} of ${pascalCase(elementToEdit)}'`;
118
- const typeString = () => {
119
- switch (true) {
120
- case type === 'Json':
121
- return 'JSON';
122
- case !!propObj.enumRef:
123
- return propObj.enumRef;
124
- case !!propObj.schema:
125
- return propObj.schema;
126
- case propObj.type === 'ObjectId':
127
- return propObj.reference;
128
- default:
129
- return pascalCase(type);
130
- }
131
- };
122
+ // Use utility function to determine TypeScript type for Model
123
+ const tsType = server.getModelClassType(propObj);
132
124
  // Build @UnifiedField options; types vary and can't go in standardDeclaration
133
125
  function constructUnifiedFieldOptions(type) {
126
+ // Use utility functions from server helper
127
+ const enumConfig = server.getEnumConfig(propObj);
128
+ // Determine field type based on context
129
+ let fieldType;
130
+ if (type === 'model') {
131
+ fieldType = server.getModelFieldType(propObj);
132
+ }
133
+ else {
134
+ // Input or CreateInput
135
+ fieldType = server.getInputFieldType(propObj, { create: type === 'create' });
136
+ }
137
+ // Use utility function for type config
138
+ const typeConfig = server.getTypeConfig(fieldType, propObj.isArray);
139
+ // Build mongoose configuration for model type
140
+ let mongooseConfig = '';
141
+ if (type === 'model') {
142
+ if (propObj.type === 'ObjectId' && propObj.reference) {
143
+ mongooseConfig = `mongoose: ${propObj.isArray ? '[' : ''}{ ref: '${propObj.reference}', type: Schema.Types.ObjectId }${propObj.isArray ? ']' : ''},\n`;
144
+ }
145
+ else if (propObj.schema) {
146
+ mongooseConfig = `mongoose: ${propObj.isArray ? '[' : ''}{ type: ${propObj.schema}Schema }${propObj.isArray ? ']' : ''},\n`;
147
+ }
148
+ else if (propObj.enumRef) {
149
+ mongooseConfig = `mongoose: ${propObj.isArray ? '[' : ''}{ enum: ${propObj.nullable ? `Object.values(${propObj.enumRef}).concat([null])` : propObj.enumRef}, type: String }${propObj.isArray ? ']' : ''},\n`;
150
+ }
151
+ else if (propObj.type === 'Json') {
152
+ mongooseConfig = `mongoose: ${propObj.isArray ? '[' : ''}{ type: Object }${propObj.isArray ? ']' : ''},\n`;
153
+ }
154
+ else {
155
+ mongooseConfig = 'mongoose: true,\n';
156
+ }
157
+ }
134
158
  switch (type) {
135
159
  case 'create':
136
160
  return `{
137
- description: ${description},${propObj.nullable ? '\nisOptional: true,' : ''}
138
- roles: RoleEnum.ADMIN,${propObj.enumRef ? '' : `\ntype: () => ${typeString()}${propObj.type === 'ObjectId' || propObj.schema ? 'CreateInput' : ''}`}
161
+ description: ${description},${propObj.nullable ? '\nisOptional: true,' : '\nisOptional: false,'}
162
+ roles: RoleEnum.S_EVERYONE,
163
+ ${enumConfig}${typeConfig}
139
164
  }`;
140
165
  case 'input':
141
166
  return `{
142
167
  description: ${description},
143
168
  isOptional: true,
144
- roles: RoleEnum.ADMIN,
145
- ${propObj.enumRef ? `enum: { enum: ${propObj.enumRef} }` : `type: () => ${typeString()}${propObj.type === 'ObjectId' || propObj.schema ? 'Input' : ''}`}
169
+ roles: RoleEnum.S_EVERYONE,
170
+ ${enumConfig}${typeConfig}
146
171
  }`;
147
172
  case 'model':
148
173
  return `{
149
- description: ${description},${propObj.nullable ? '\nisOptional: true,' : ''}
150
- roles: RoleEnum.ADMIN,${propObj.enumRef ? '' : `\ntype: () => ${typeString()}`}
174
+ description: ${description},${propObj.nullable ? '\nisOptional: true,' : '\nisOptional: false,'}
175
+ ${mongooseConfig}roles: RoleEnum.S_EVERYONE,
176
+ ${enumConfig}${typeConfig}
151
177
  }`;
152
178
  }
153
179
  }
180
+ // Only use = undefined when useDefineForClassFieldsActivated is false or override keyword is set
181
+ const useDefineForClassFields = server.useDefineForClassFieldsActivated();
154
182
  const standardDeclaration = {
155
183
  decorators: [],
156
184
  hasQuestionToken: propObj.nullable,
157
- initializer: declare ? undefined : 'undefined',
185
+ initializer: useDefineForClassFields ? undefined : 'undefined',
158
186
  name: propObj.name,
159
187
  };
160
188
  // Patch model
161
189
  const newModelProperty = structuredClone(standardDeclaration);
162
- newModelProperty.decorators.push({ arguments: [`${propObj.type === 'ObjectId' || propObj.schema ? `{ ref: () => ${propObj.reference}, type: Schema.Types.ObjectId }` : ''}`], name: 'Prop' });
163
190
  newModelProperty.decorators.push({ arguments: [constructUnifiedFieldOptions('model')], name: 'UnifiedField' });
164
- newModelProperty.type = `${typeString()}${propObj.isArray ? '[]' : ''}`;
191
+ newModelProperty.type = `${tsType}${propObj.isArray ? '[]' : ''}`;
165
192
  let insertedModelProp;
166
193
  if (modelProperties.length > 0) {
167
194
  const lastModelProperty = modelProperties[modelProperties.length - 1];
@@ -175,8 +202,9 @@ const NewCommand = {
175
202
  // Patch input
176
203
  const newInputProperty = structuredClone(standardDeclaration);
177
204
  newInputProperty.decorators.push({ arguments: [constructUnifiedFieldOptions('input')], name: 'UnifiedField' });
178
- const inputSuffix = propObj.type === 'ObjectId' || propObj.schema ? 'Input' : '';
179
- newInputProperty.type = `${typeString()}${inputSuffix}${propObj.isArray ? '[]' : ''}`;
205
+ // Use utility function to determine TypeScript type for Input
206
+ const inputTsType = server.getInputClassType(propObj, { create: false });
207
+ newInputProperty.type = `${inputTsType}${propObj.isArray ? '[]' : ''}`;
180
208
  let insertedInputProp;
181
209
  if (inputProperties.length > 0) {
182
210
  const lastInputProperty = inputProperties[inputProperties.length - 1];
@@ -189,15 +217,15 @@ const NewCommand = {
189
217
  insertedInputProp.appendWhitespace('\n');
190
218
  // Patch create input
191
219
  const newCreateInputProperty = structuredClone(standardDeclaration);
192
- if (declare) {
193
- newCreateInputProperty.hasDeclareKeyword = true;
194
- }
195
- else {
220
+ // Use override (not declare) when useDefineForClassFieldsActivated is true
221
+ if (useDefineForClassFields) {
196
222
  newCreateInputProperty.hasOverrideKeyword = true;
223
+ newCreateInputProperty.initializer = 'undefined'; // Override requires = undefined
197
224
  }
198
225
  newCreateInputProperty.decorators.push({ arguments: [constructUnifiedFieldOptions('create')], name: 'UnifiedField' });
199
- const createSuffix = propObj.type === 'ObjectId' || propObj.schema ? 'CreateInput' : '';
200
- newCreateInputProperty.type = `${typeString()}${createSuffix}${propObj.isArray ? '[]' : ''}`;
226
+ // Use utility function to determine TypeScript type for CreateInput
227
+ const createTsType = server.getInputClassType(propObj, { create: true });
228
+ newCreateInputProperty.type = `${createTsType}${propObj.isArray ? '[]' : ''}`;
201
229
  let insertedCreateInputProp;
202
230
  if (createInputProperties.length > 0) {
203
231
  const lastCreateInputProperty = createInputProperties[createInputProperties.length - 1];
@@ -212,6 +240,85 @@ const NewCommand = {
212
240
  project.manipulationSettings.set({
213
241
  indentationText: ts_morph_1.IndentationText.TwoSpaces,
214
242
  });
243
+ // Update map method with mapClasses for non-native properties
244
+ const standardTypes = ['boolean', 'string', 'number', 'Date'];
245
+ const mapMethod = modelDeclaration.getMethod('map');
246
+ if (mapMethod) {
247
+ // Collect all properties that need mapClasses (non-native types)
248
+ const allModelProps = modelDeclaration.getMembers().filter(m => m.getKind() === ts_morph_1.SyntaxKind.PropertyDeclaration);
249
+ const mappings = {};
250
+ for (const prop of allModelProps) {
251
+ const propName = prop.getName();
252
+ const propType = prop.getType().getText();
253
+ // Skip if it's a standard type
254
+ if (standardTypes.some(t => propType.includes(t))) {
255
+ continue;
256
+ }
257
+ // Skip ObjectId, enum, and JSON types
258
+ if (propType.includes('string') || propType.includes('ObjectId') || propType.includes('Record<string, unknown>')) {
259
+ continue;
260
+ }
261
+ // Check if this property was in our newly added props and should be mapped
262
+ const newProp = props[propName];
263
+ if (newProp) {
264
+ const type = newProp.type;
265
+ const reference = ((_d = newProp.reference) === null || _d === void 0 ? void 0 : _d.trim()) ? pascalCase(newProp.reference.trim()) : '';
266
+ const schema = ((_e = newProp.schema) === null || _e === void 0 ? void 0 : _e.trim()) ? pascalCase(newProp.schema.trim()) : '';
267
+ if (reference) {
268
+ mappings[propName] = reference;
269
+ }
270
+ else if (schema) {
271
+ mappings[propName] = schema;
272
+ }
273
+ else if (!standardTypes.includes(type) && type !== 'ObjectId' && type !== 'Json') {
274
+ mappings[propName] = pascalCase(type);
275
+ }
276
+ }
277
+ }
278
+ // Update the map method's return statement
279
+ const returnStatement = mapMethod.getStatements().find(s => s.getKind() === ts_morph_1.SyntaxKind.ReturnStatement);
280
+ if (returnStatement && Object.keys(mappings).length > 0) {
281
+ const currentReturn = returnStatement.getText();
282
+ // Check if already using mapClasses
283
+ if (currentReturn.includes('mapClasses')) {
284
+ // Parse existing mapClasses call to merge with new mappings
285
+ const match = currentReturn.match(/mapClasses\(input,\s*\{([^}]*)\}/);
286
+ if (match) {
287
+ const existingMappings = match[1].trim();
288
+ const existingPairs = existingMappings ? existingMappings.split(',').map(p => p.trim()) : [];
289
+ // Merge with new mappings
290
+ const allMappings = {};
291
+ for (const pair of existingPairs) {
292
+ const [key, value] = pair.split(':').map(s => s.trim());
293
+ if (key && value) {
294
+ allMappings[key] = value;
295
+ }
296
+ }
297
+ // Add new mappings
298
+ for (const [key, value] of Object.entries(mappings)) {
299
+ allMappings[key] = value;
300
+ }
301
+ // Generate new mapClasses call
302
+ const mappingPairs = Object.entries(allMappings).map(([k, v]) => `${k}: ${v}`);
303
+ returnStatement.replaceWithText(`return mapClasses(input, { ${mappingPairs.join(', ')} }, this);`);
304
+ }
305
+ }
306
+ else if (currentReturn.includes('return this')) {
307
+ // Replace "return this" with mapClasses call
308
+ const mappingPairs = Object.entries(mappings).map(([k, v]) => `${k}: ${v}`);
309
+ returnStatement.replaceWithText(`return mapClasses(input, { ${mappingPairs.join(', ')} }, this);`);
310
+ }
311
+ // Ensure mapClasses is imported
312
+ const existingImports = moduleFile.getImportDeclaration('@lenne.tech/nest-server');
313
+ if (existingImports) {
314
+ const namedImports = existingImports.getNamedImports();
315
+ const hasMapClasses = namedImports.some(ni => ni.getName() === 'mapClasses');
316
+ if (!hasMapClasses) {
317
+ existingImports.addNamedImport('mapClasses');
318
+ }
319
+ }
320
+ }
321
+ }
215
322
  // Format files
216
323
  moduleFile.formatText();
217
324
  inputFile.formatText();
@@ -233,18 +340,28 @@ const NewCommand = {
233
340
  const nextObj = objectsToAdd.shift().object;
234
341
  yield object_1.default.run(toolbox, { currentItem: nextObj, objectsToAdd, preventExitProcess: true, referencesToAdd });
235
342
  }
236
- // Lint fix
237
- if (yield confirm('Run lint fix?', true)) {
238
- yield system.run('npm run lint:fix');
239
- }
240
- if (refsSet || schemaSet) {
241
- success('HINT: References / Schemata have been added, so it is necessary to add the corresponding imports!');
343
+ // Lint fix with priority: CLI parameter > config > default (false)
344
+ const skipLint = config.getValue({
345
+ cliValue: cliSkipLint,
346
+ configValue: configSkipLint,
347
+ defaultValue: false,
348
+ });
349
+ if (!skipLint) {
350
+ if (yield confirm('Run lint fix?', true)) {
351
+ yield system.run('npm run lint:fix');
352
+ }
242
353
  }
243
- if (!toolbox.parameters.options.fromGluegunMenu) {
244
- process.exit();
354
+ // We're done, so show what to do next
355
+ if (!preventExitProcess) {
356
+ if (refsSet || schemaSet) {
357
+ success('HINT: References / Schemata have been added, so it is necessary to add the corresponding imports!');
358
+ }
359
+ if (!toolbox.parameters.options.fromGluegunMenu) {
360
+ process.exit();
361
+ }
245
362
  }
246
363
  return `properties updated for ${elementToEdit}`;
247
364
  }),
248
365
  };
249
366
  exports.default = NewCommand;
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXByb3BlcnR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9hZGQtcHJvcGVydHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQSwrQkFBNEI7QUFDNUIsdUNBTWtCO0FBR2xCLHFDQUFpQztBQUNqQyxxQ0FBaUM7QUFFakM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBbUI7SUFDakMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2IsV0FBVyxFQUFFLDBTQUEwUztJQUN2VCxNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxTQUFTO0lBQ2YsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFO1FBQzdDLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osVUFBVSxFQUNWLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFDOUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUN4QixNQUFNLEVBQ04sT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQ3ZCLE1BQU0sR0FDUCxHQUFHLE9BQU8sQ0FBQztRQUVoQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTNHLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO1FBRTFELFNBQVMsVUFBVTtZQUNqQixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUs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
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXByb3BlcnR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9hZGQtcHJvcGVydHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSwrQkFBNEI7QUFDNUIsdUNBTWtCO0FBSWxCLHFDQUFpQztBQUNqQyxxQ0FBaUM7QUFFakM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBMkI7SUFDekMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2IsV0FBVyxFQUFFLDBTQUEwUztJQUN2VCxNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxTQUFTO0lBQ2YsR0FBRyxFQUFFLENBQ0gsT0FBK0IsRUFDL0IsT0FFQyxFQUNELEVBQUU7O1FBRUYsV0FBVztRQUNYLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxtQkFDMUIsa0JBQWtCLEVBQUUsS0FBSyxJQUN0QixPQUFPLENBQ1gsQ0FBQztRQUVGLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osTUFBTSxFQUNOLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUM5QyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQ3hCLE1BQU0sRUFDTixPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFDdkIsTUFBTSxHQUNQLEdBQUcsT0FBTyxDQUFDO1FBRVosTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUUvRyxTQUFTLFVBQVU7WUFDakIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdB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
@@ -20,7 +20,7 @@ const NewCommand = {
20
20
  run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
21
21
  var _a;
22
22
  // Retrieve the tools we need
23
- const { filesystem, git, helper, meta, parameters, patching, print: { error, info, spin, success }, prompt: { confirm }, server, strings: { kebabCase }, system, template, } = toolbox;
23
+ const { filesystem, git, helper, meta, parameters, patching, print: { error, info, spin, success }, prompt: { ask, confirm }, server, strings: { kebabCase }, system, template, } = toolbox;
24
24
  // Start timer
25
25
  const timer = system.startTimer();
26
26
  // Info
@@ -74,8 +74,19 @@ const NewCommand = {
74
74
  target: `./${projectDir}/README.md`,
75
75
  template: 'nest-server-starter/README.md.ejs',
76
76
  });
77
- // Replace secret or private keys and remove `nest-server`
78
- yield patching.update(`./${projectDir}/src/config.env.ts`, content => server.replaceSecretOrPrivateKeys(content).replace(/nest-server-/g, `${projectDir}-`));
77
+ // Replace secret or private keys and update database names
78
+ yield patching.update(`./${projectDir}/src/config.env.ts`, content => {
79
+ let updated = server.replaceSecretOrPrivateKeys(content);
80
+ // Replace database names in mongoose URIs (nest-server-ci -> projectName-ci, etc.)
81
+ updated = updated.replace(/nest-server-(ci|develop|local|prod|production|test)/g, `${projectDir}-$1`);
82
+ // Also replace any remaining nest-server references (without environment suffix)
83
+ updated = updated.replace(/nest-server/g, projectDir);
84
+ return updated;
85
+ });
86
+ // Update Swagger configuration in main.ts
87
+ yield patching.update(`./${projectDir}/src/main.ts`, content => content
88
+ .replace(/\.setTitle\('.*?'\)/, `.setTitle('${name}')`)
89
+ .replace(/\.setDescription\('.*?'\)/, `.setDescription('${description || name}')`));
79
90
  // Set package.json
80
91
  yield patching.update(`./${projectDir}/package.json`, (config) => {
81
92
  config.author = author;
@@ -116,6 +127,57 @@ const NewCommand = {
116
127
  }
117
128
  }
118
129
  }
130
+ // Configure default controller type for modules
131
+ info('');
132
+ info('📋 Project Configuration');
133
+ info('');
134
+ info('To streamline module creation, you can set a default controller type.');
135
+ info('This will be used for all new modules unless explicitly overridden.');
136
+ info('');
137
+ const configureDefaults = yield confirm('Would you like to configure default settings?', true);
138
+ if (configureDefaults) {
139
+ const controllerChoice = yield ask([{
140
+ choices: [
141
+ 'Rest - REST controllers only (no GraphQL)',
142
+ 'GraphQL - GraphQL resolvers only (includes subscriptions)',
143
+ 'Both - Both REST and GraphQL (hybrid approach)',
144
+ 'auto - Auto-detect from existing modules',
145
+ ],
146
+ initial: 2, // Default to "Both"
147
+ message: 'Default controller type for new modules?',
148
+ name: 'controller',
149
+ type: 'select',
150
+ }]);
151
+ // Extract the controller type from the choice
152
+ const controllerType = controllerChoice.controller.split(' - ')[0];
153
+ // Create lt.config.json
154
+ const ltConfig = {
155
+ commands: {
156
+ server: {
157
+ module: {
158
+ controller: controllerType,
159
+ },
160
+ },
161
+ },
162
+ meta: {
163
+ version: '1.0.0',
164
+ },
165
+ };
166
+ const configPath = filesystem.path(projectDir, 'lt.config.json');
167
+ filesystem.write(configPath, ltConfig, { jsonIndent: 2 });
168
+ info('');
169
+ success(`✅ Configuration saved to ${projectDir}/lt.config.json`);
170
+ info(` Default controller type: ${controllerType}`);
171
+ info('');
172
+ info('💡 You can change this anytime by:');
173
+ info(` - Editing ${projectDir}/lt.config.json directly`);
174
+ info(` - Running 'lt config init' in the project directory`);
175
+ }
176
+ else {
177
+ info('');
178
+ info('⏭️ Skipped configuration. You can set it up later with:');
179
+ info(` cd ${projectDir} && lt config init`);
180
+ }
119
181
  // We're done, so show what to do next
120
182
  info('');
121
183
  success(`Generated ${name} server with lenne.Tech CLI ${meta.version()} in ${helper.msToMinutesAndSeconds(timer())}m.`);
@@ -135,4 +197,4 @@ const NewCommand = {
135
197
  }),
136
198
  };
137
199
  exports.default = NewCommand;
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFtQjtJQUNqQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsc0JBQXNCO0lBQ25DLE1BQU0sRUFBRSxLQUFLO0lBQ2IsSUFBSSxFQUFFLFFBQVE7SUFDZCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7O1FBQzdDLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osVUFBVSxFQUNWLEdBQUcsRUFDSCxNQUFNLEVBQ04sSUFBSSxFQUNKLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQ3JDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUNuQixNQUFNLEVBQ04sT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQ3RCLE1BQU0sRUFDTixRQUFRLEdBQ1QsR0FBRyxPQUFPLENBQUM7UUFFWixjQUFjO1FBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxDLE9BQU87UUFDUCxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUU1QixZQUFZO1FBQ1osSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBRUQsV0FBVztRQUNYLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ25ELElBQUksRUFBRSxhQUFhO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxvQ0FBb0M7UUFDcEMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsS0FBSyxDQUFDLG1DQUFtQyxVQUFVLFNBQVMsQ0FBQyxDQUFDO1lBQzlELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDeEYsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLGtFQUFrRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQUMsQ0FBQztZQUMxQyxZQUFZLENBQUMsT0FBTyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7UUFDdEcsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxLQUFLLENBQUMsa0JBQWtCLFVBQVUseUJBQXlCLENBQUMsQ0FBQztZQUM3RCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzNELElBQUksRUFBRSxhQUFhO1lBQ25CLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQztRQUVILGFBQWE7UUFDYixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUN0RCxJQUFJLEVBQUUsUUFBUTtZQUNkLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU3QyxhQUFhO1FBQ2IsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDNUIsTUFBTSxFQUFFLEtBQUssVUFBVSxZQUFZO1lBQ25DLFFBQVEsRUFBRSxtQ0FBbUM7U0FDOUMsQ0FBQyxDQUFDO1FBRUgsMERBQTBEO1FBQzFELE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxHQUFHLFVBQzFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFVCxtQkFBbUI7UUFDbkIsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvRCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN2QixNQUFNLENBQUMsSUFBSSxHQUFHO2dCQUNaLEdBQUcsRUFBRSxFQUFFO2FBQ1IsQ0FBQztZQUNGLE1BQU0sQ0FBQyxXQUFXLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQztZQUN6QyxNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztZQUN6QixNQUFNLENBQUMsVUFBVSxHQUFHO2dCQUNsQixJQUFJLEVBQUUsS0FBSztnQkFDWCxHQUFHLEVBQUUsRUFBRTthQUNSLENBQUM7WUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN6QixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVILG1CQUFtQjtRQUNuQixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDM0QsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUNqQyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxjQUFjLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFekMsT0FBTztRQUNQLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQUM7UUFDOUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2pELElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixNQUFNLEtBQUssR0FBRyxNQUFBLENBQUMsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsMENBQUUsSUFBSSxFQUFFLENBQUM7WUFDaEYsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDOUMsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUNkLE1BQU0sVUFBVSx3RUFBd0UsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQzFHLENBQUM7b0JBQ0YsY0FBYyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsT0FBTyxDQUNMLGFBQWEsSUFBSSwrQkFBK0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQy9HLENBQUM7UUFDRixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsbUJBQW1CLFVBQVUsb0JBQW9CLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsaUNBQWlDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRVQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsWUFBWTtRQUNaLE9BQU8sY0FBYyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDLENBQUE7Q0FDRixDQUFDO0FBRUYsa0JBQWUsVUFBVSxDQUFDIn0=
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3NlcnZlci9jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFtQjtJQUNqQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDWixXQUFXLEVBQUUsc0JBQXNCO0lBQ25DLE1BQU0sRUFBRSxLQUFLO0lBQ2IsSUFBSSxFQUFFLFFBQVE7SUFDZCxHQUFHLEVBQUUsQ0FBTyxPQUErQixFQUFFLEVBQUU7O1FBQzdDLDZCQUE2QjtRQUM3QixNQUFNLEVBQ0osVUFBVSxFQUNWLEdBQUcsRUFDSCxNQUFNLEVBQ04sSUFBSSxFQUNKLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQ3JDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFDeEIsTUFBTSxFQUNOLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUN0QixNQUFNLEVBQ04sUUFBUSxHQUNULEdBQUcsT0FBTyxDQUFDO1FBRVosY0FBYztRQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFNUIsWUFBWTtRQUNaLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELFdBQVc7UUFDWCxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNuRCxJQUFJLEVBQUUsYUFBYTtZQUNuQixTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENB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