@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.
- package/bin/lt +145 -14
- package/build/commands/claude/install-commands.js +332 -0
- package/build/commands/claude/install-skills.js +626 -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/server/add-property.js +163 -46
- package/build/commands/server/create.js +66 -4
- package/build/commands/server/module.js +133 -20
- package/build/commands/server/object.js +23 -15
- package/build/extensions/config.js +157 -0
- package/build/extensions/server.js +194 -63
- package/build/interfaces/lt-config.interface.js +3 -0
- package/build/templates/claude-commands/code-cleanup.md +82 -0
- package/build/templates/claude-commands/mr-description-clipboard.md +48 -0
- package/build/templates/claude-commands/mr-description.md +33 -0
- package/build/templates/claude-commands/sec-review.md +62 -0
- package/build/templates/claude-commands/skill-optimize.md +140 -0
- package/build/templates/claude-commands/test-generate.md +45 -0
- package/build/templates/claude-skills/lt-cli/SKILL.md +190 -259
- package/build/templates/claude-skills/lt-cli/examples.md +433 -203
- package/build/templates/claude-skills/lt-cli/reference.md +400 -226
- package/build/templates/claude-skills/nest-server-generator/SKILL.md +1891 -0
- package/build/templates/claude-skills/nest-server-generator/configuration.md +279 -0
- package/build/templates/claude-skills/nest-server-generator/declare-keyword-warning.md +124 -0
- package/build/templates/claude-skills/nest-server-generator/description-management.md +217 -0
- package/build/templates/claude-skills/nest-server-generator/examples.md +886 -0
- package/build/templates/claude-skills/nest-server-generator/quality-review.md +855 -0
- package/build/templates/claude-skills/nest-server-generator/reference.md +471 -0
- package/build/templates/claude-skills/nest-server-generator/security-rules.md +358 -0
- package/build/templates/claude-skills/story-tdd/SKILL.md +1173 -0
- package/build/templates/claude-skills/story-tdd/code-quality.md +266 -0
- package/build/templates/claude-skills/story-tdd/database-indexes.md +173 -0
- package/build/templates/claude-skills/story-tdd/examples.md +1332 -0
- package/build/templates/claude-skills/story-tdd/reference.md +1180 -0
- package/build/templates/claude-skills/story-tdd/security-review.md +299 -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
- package/build/commands/claude/install-skill.js +0 -93
|
@@ -224,16 +224,140 @@ class Server {
|
|
|
224
224
|
}
|
|
225
225
|
return false;
|
|
226
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Determine GraphQL Field type for UnifiedField decorator
|
|
229
|
+
* Used for Model, Input, and CreateInput
|
|
230
|
+
*/
|
|
231
|
+
getInputFieldType(item, options) {
|
|
232
|
+
var _a, _b, _c;
|
|
233
|
+
const { create } = Object.assign({ create: false }, options);
|
|
234
|
+
const reference = ((_a = item.reference) === null || _a === void 0 ? void 0 : _a.trim()) ? this.pascalCase(item.reference.trim()) : '';
|
|
235
|
+
const schema = ((_b = item.schema) === null || _b === void 0 ? void 0 : _b.trim()) ? this.pascalCase(item.schema.trim()) : '';
|
|
236
|
+
const enumRef = ((_c = item.enumRef) === null || _c === void 0 ? void 0 : _c.trim()) ? this.pascalCase(item.enumRef.trim()) : '';
|
|
237
|
+
if (schema) {
|
|
238
|
+
// SubObject → Schema + Input/CreateInput suffix
|
|
239
|
+
return schema + (create ? 'CreateInput' : 'Input');
|
|
240
|
+
}
|
|
241
|
+
else if (reference) {
|
|
242
|
+
// ObjectId/Reference → always String for IDs
|
|
243
|
+
return 'String';
|
|
244
|
+
}
|
|
245
|
+
else if (enumRef) {
|
|
246
|
+
// Enum → use enum name
|
|
247
|
+
return enumRef;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
// Standard types or custom types
|
|
251
|
+
let fieldType = this.inputFieldTypes[this.pascalCase(item.type)]
|
|
252
|
+
|| this.pascalCase(item.type) + (create ? 'CreateInput' : 'Input');
|
|
253
|
+
fieldType = this.modelFieldTypes[item.type]
|
|
254
|
+
? this.modelFieldTypes[item.type]
|
|
255
|
+
: fieldType;
|
|
256
|
+
return fieldType;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Determine TypeScript property type for Input/CreateInput classes
|
|
261
|
+
*/
|
|
262
|
+
getInputClassType(item, options) {
|
|
263
|
+
var _a, _b, _c;
|
|
264
|
+
const { create } = Object.assign({ create: false }, options);
|
|
265
|
+
const reference = ((_a = item.reference) === null || _a === void 0 ? void 0 : _a.trim()) ? this.pascalCase(item.reference.trim()) : '';
|
|
266
|
+
const schema = ((_b = item.schema) === null || _b === void 0 ? void 0 : _b.trim()) ? this.pascalCase(item.schema.trim()) : '';
|
|
267
|
+
const enumRef = ((_c = item.enumRef) === null || _c === void 0 ? void 0 : _c.trim()) ? this.pascalCase(item.enumRef.trim()) : '';
|
|
268
|
+
if (schema) {
|
|
269
|
+
// SubObject → Schema + Input/CreateInput suffix
|
|
270
|
+
return schema + (create ? 'CreateInput' : 'Input');
|
|
271
|
+
}
|
|
272
|
+
else if (reference) {
|
|
273
|
+
// ObjectId/Reference → string for IDs
|
|
274
|
+
return 'string';
|
|
275
|
+
}
|
|
276
|
+
else if (enumRef) {
|
|
277
|
+
// Enum → use enum name
|
|
278
|
+
return enumRef;
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// Standard types or custom types
|
|
282
|
+
return this.inputClassTypes[this.pascalCase(item.type)]
|
|
283
|
+
|| (this.standardTypes.includes(item.type)
|
|
284
|
+
? item.type
|
|
285
|
+
: this.pascalCase(item.type) + (create ? 'CreateInput' : 'Input'));
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Determine GraphQL Field type for UnifiedField decorator in Model
|
|
290
|
+
*/
|
|
291
|
+
getModelFieldType(item) {
|
|
292
|
+
var _a, _b, _c;
|
|
293
|
+
const reference = ((_a = item.reference) === null || _a === void 0 ? void 0 : _a.trim()) ? this.pascalCase(item.reference.trim()) : '';
|
|
294
|
+
const schema = ((_b = item.schema) === null || _b === void 0 ? void 0 : _b.trim()) ? this.pascalCase(item.schema.trim()) : '';
|
|
295
|
+
const enumRef = ((_c = item.enumRef) === null || _c === void 0 ? void 0 : _c.trim()) ? this.pascalCase(item.enumRef.trim()) : '';
|
|
296
|
+
if (reference) {
|
|
297
|
+
return reference;
|
|
298
|
+
}
|
|
299
|
+
else if (schema) {
|
|
300
|
+
return schema;
|
|
301
|
+
}
|
|
302
|
+
else if (enumRef) {
|
|
303
|
+
return enumRef;
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
return this.modelFieldTypes[this.pascalCase(item.type)] || this.pascalCase(item.type);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Determine TypeScript property type for Model class
|
|
311
|
+
*/
|
|
312
|
+
getModelClassType(item) {
|
|
313
|
+
var _a, _b, _c;
|
|
314
|
+
const reference = ((_a = item.reference) === null || _a === void 0 ? void 0 : _a.trim()) ? this.pascalCase(item.reference.trim()) : '';
|
|
315
|
+
const schema = ((_b = item.schema) === null || _b === void 0 ? void 0 : _b.trim()) ? this.pascalCase(item.schema.trim()) : '';
|
|
316
|
+
const enumRef = ((_c = item.enumRef) === null || _c === void 0 ? void 0 : _c.trim()) ? this.pascalCase(item.enumRef.trim()) : '';
|
|
317
|
+
if (reference) {
|
|
318
|
+
return reference;
|
|
319
|
+
}
|
|
320
|
+
else if (schema) {
|
|
321
|
+
return schema;
|
|
322
|
+
}
|
|
323
|
+
else if (enumRef) {
|
|
324
|
+
return enumRef;
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
return this.modelClassTypes[this.pascalCase(item.type)]
|
|
328
|
+
|| (this.standardTypes.includes(item.type) ? item.type : this.pascalCase(item.type));
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Generate enum configuration for UnifiedField decorator
|
|
333
|
+
*/
|
|
334
|
+
getEnumConfig(item) {
|
|
335
|
+
var _a;
|
|
336
|
+
const enumRef = ((_a = item.enumRef) === null || _a === void 0 ? void 0 : _a.trim()) ? this.pascalCase(item.enumRef.trim()) : '';
|
|
337
|
+
if (!enumRef) {
|
|
338
|
+
return '';
|
|
339
|
+
}
|
|
340
|
+
return item.isArray
|
|
341
|
+
? `enum: { enum: ${enumRef}, options: { each: true } },\n `
|
|
342
|
+
: `enum: { enum: ${enumRef} },\n `;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Generate type configuration for UnifiedField decorator
|
|
346
|
+
*/
|
|
347
|
+
getTypeConfig(fieldType, isArray) {
|
|
348
|
+
// Type is always needed for all properties
|
|
349
|
+
return `type: () => ${isArray ? '[' : ''}${fieldType}${isArray ? ']' : ''}`;
|
|
350
|
+
}
|
|
227
351
|
/**
|
|
228
352
|
* Create template string for properties in model
|
|
229
353
|
*/
|
|
230
354
|
propsForModel(props, options) {
|
|
231
|
-
var _a, _b, _c
|
|
355
|
+
var _a, _b, _c;
|
|
232
356
|
// Preparations
|
|
233
357
|
const config = Object.assign({ useDefault: true }, options);
|
|
234
358
|
const { modelName, useDefault } = config;
|
|
235
|
-
|
|
236
|
-
const undefinedString =
|
|
359
|
+
// Only use = undefined when useDefineForClassFieldsActivated is false or override/declare keyword is set
|
|
360
|
+
const undefinedString = this.useDefineForClassFieldsActivated() ? ';' : ' = undefined;';
|
|
237
361
|
let result = '';
|
|
238
362
|
// Check parameters
|
|
239
363
|
if (!props || !(typeof props !== 'object') || !Object.keys(props).length) {
|
|
@@ -251,7 +375,13 @@ class Server {
|
|
|
251
375
|
*/
|
|
252
376
|
@Restricted(RoleEnum.ADMIN, RoleEnum.S_CREATOR)
|
|
253
377
|
@Field(() => [String], { description: 'Properties of ${this.pascalCase(modelName)}', nullable: 'items'})
|
|
254
|
-
@
|
|
378
|
+
@UnifiedField({
|
|
379
|
+
description: 'Properties of ${this.pascalCase(modelName)}',
|
|
380
|
+
isOptional: false,
|
|
381
|
+
mongoose: [String],
|
|
382
|
+
roles: RoleEnum.S_EVERYONE,
|
|
383
|
+
type: () => [String],
|
|
384
|
+
})
|
|
255
385
|
properties: string[]${undefinedString}
|
|
256
386
|
|
|
257
387
|
/**
|
|
@@ -260,9 +390,10 @@ class Server {
|
|
|
260
390
|
@UnifiedField({
|
|
261
391
|
description: 'User who has tested the ${this.pascalCase(modelName)}',
|
|
262
392
|
isOptional: true,
|
|
393
|
+
mongoose: { type: Schema.Types.ObjectId, ref: 'User' },
|
|
394
|
+
roles: RoleEnum.S_EVERYONE,
|
|
263
395
|
type: () => User,
|
|
264
396
|
})
|
|
265
|
-
@Prop({ type: Schema.Types.ObjectId, ref: 'User' })
|
|
266
397
|
testedBy: User${undefinedString}
|
|
267
398
|
`,
|
|
268
399
|
};
|
|
@@ -273,15 +404,13 @@ class Server {
|
|
|
273
404
|
const mappings = {};
|
|
274
405
|
for (const [name, item] of Object.entries(props)) {
|
|
275
406
|
const propName = this.camelCase(name);
|
|
276
|
-
const reference = ((
|
|
277
|
-
const schema = ((
|
|
278
|
-
const enumRef = ((
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
407
|
+
const reference = ((_a = item.reference) === null || _a === void 0 ? void 0 : _a.trim()) ? this.pascalCase(item.reference.trim()) : '';
|
|
408
|
+
const schema = ((_b = item.schema) === null || _b === void 0 ? void 0 : _b.trim()) ? this.pascalCase(item.schema.trim()) : '';
|
|
409
|
+
const enumRef = ((_c = item.enumRef) === null || _c === void 0 ? void 0 : _c.trim()) ? this.pascalCase(item.enumRef.trim()) : '';
|
|
410
|
+
// Use utility functions to determine types
|
|
411
|
+
const modelFieldType = this.getModelFieldType(item);
|
|
412
|
+
const modelClassType = this.getModelClassType(item);
|
|
282
413
|
const isArray = item.isArray;
|
|
283
|
-
const modelClassType = this.modelClassTypes[this.pascalCase(item.type)]
|
|
284
|
-
|| (this.standardTypes.includes(item.type) ? item.type : this.pascalCase(item.type));
|
|
285
414
|
const type = this.standardTypes.includes(item.type) ? item.type : this.pascalCase(item.type);
|
|
286
415
|
if (!this.standardTypes.includes(type) && type !== 'ObjectId' && type !== 'Enum' && type !== 'Json') {
|
|
287
416
|
mappings[propName] = type;
|
|
@@ -289,14 +418,17 @@ class Server {
|
|
|
289
418
|
if (reference) {
|
|
290
419
|
mappings[propName] = reference;
|
|
291
420
|
}
|
|
421
|
+
if (schema) {
|
|
422
|
+
mappings[propName] = schema;
|
|
423
|
+
}
|
|
292
424
|
if (this.imports[modelClassType]) {
|
|
293
425
|
imports[modelClassType] = this.imports[modelClassType];
|
|
294
426
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
427
|
+
// Use utility functions for enum and type config
|
|
428
|
+
const enumConfig = this.getEnumConfig(item);
|
|
429
|
+
const typeConfig = this.getTypeConfig(modelFieldType, isArray);
|
|
430
|
+
// Build mongoose configuration
|
|
431
|
+
const mongooseConfig = reference
|
|
300
432
|
? `${isArray ? '[' : ''}{ ref: '${reference}', type: Schema.Types.ObjectId }${isArray ? ']' : ''}`
|
|
301
433
|
: schema
|
|
302
434
|
? `${isArray ? '[' : ''}{ type: ${schema}Schema }${isArray ? ']' : ''}`
|
|
@@ -304,14 +436,19 @@ class Server {
|
|
|
304
436
|
? `${isArray ? '[' : ''}{ enum: ${item.nullable ? `Object.values(${enumRef}).concat([null])` : enumRef}, type: String }${isArray ? ']' : ''}`
|
|
305
437
|
: type === 'Json'
|
|
306
438
|
? `${isArray ? '[' : ''}{ type: Object }${isArray ? ']' : ''}`
|
|
307
|
-
: ''
|
|
439
|
+
: 'true';
|
|
440
|
+
result += `
|
|
441
|
+
/**
|
|
442
|
+
* ${this.pascalCase(propName) + (modelName ? ` of ${this.pascalCase(modelName)}` : '')}
|
|
443
|
+
*/
|
|
308
444
|
@UnifiedField({
|
|
309
445
|
description: '${this.pascalCase(propName) + (modelName ? ` of ${this.pascalCase(modelName)}` : '')}',
|
|
310
|
-
isOptional: ${item.nullable},
|
|
446
|
+
${enumConfig}isOptional: ${item.nullable},
|
|
447
|
+
mongoose: ${mongooseConfig},
|
|
311
448
|
roles: RoleEnum.S_EVERYONE,
|
|
312
|
-
|
|
449
|
+
${typeConfig}
|
|
313
450
|
})
|
|
314
|
-
${propName}: ${(reference ? reference : enumRef || modelClassType) + (isArray ? '[]' : '')}${undefinedString}
|
|
451
|
+
${propName}: ${(reference ? reference : schema ? schema : enumRef || modelClassType) + (isArray ? '[]' : '')}${undefinedString}
|
|
315
452
|
`;
|
|
316
453
|
}
|
|
317
454
|
// Process imports
|
|
@@ -335,12 +472,11 @@ class Server {
|
|
|
335
472
|
* Create template string for properties in input
|
|
336
473
|
*/
|
|
337
474
|
propsForInput(props, options) {
|
|
338
|
-
var _a;
|
|
339
475
|
// Preparations
|
|
340
476
|
const config = Object.assign({ useDefault: true }, options);
|
|
341
477
|
const { create, modelName, nullable, useDefault } = config;
|
|
342
|
-
|
|
343
|
-
const undefinedString =
|
|
478
|
+
// Only use = undefined when useDefineForClassFieldsActivated is false or override keyword is set
|
|
479
|
+
const undefinedString = this.useDefineForClassFieldsActivated() ? ';' : ' = undefined;';
|
|
344
480
|
let result = '';
|
|
345
481
|
// Check parameters
|
|
346
482
|
if (!props || !(typeof props !== 'object') || !Object.keys(props).length) {
|
|
@@ -373,39 +509,39 @@ class Server {
|
|
|
373
509
|
// Process configuration
|
|
374
510
|
const imports = {};
|
|
375
511
|
for (const [name, item] of Object.entries(props)) {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
const inputClassType = this.inputClassTypes[this.pascalCase(item.type)]
|
|
384
|
-
|| (this.standardTypes.includes(item.type)
|
|
385
|
-
? item.type
|
|
386
|
-
: item.enumRef
|
|
387
|
-
? this.pascalCase(item.enumRef)
|
|
388
|
-
: this.pascalCase(item.type) + (create ? 'CreateInput' : 'Input'));
|
|
512
|
+
// Skip optional properties in CreateInput (they are inherited from Input)
|
|
513
|
+
if (create && item.nullable) {
|
|
514
|
+
continue;
|
|
515
|
+
}
|
|
516
|
+
// Use utility functions to determine types
|
|
517
|
+
const inputFieldType = this.getInputFieldType(item, { create });
|
|
518
|
+
const inputClassType = this.getInputClassType(item, { create });
|
|
389
519
|
const propertySuffix = this.propertySuffixTypes[this.pascalCase(item.type)] || '';
|
|
390
|
-
|
|
520
|
+
// Use override (not declare) for decorator properties when useDefineForClassFieldsActivated is true
|
|
521
|
+
const overrideString = this.useDefineForClassFieldsActivated() ? 'override ' : '';
|
|
391
522
|
const overrideFlag = create ? overrideString : '';
|
|
523
|
+
// When override is set, always use = undefined
|
|
524
|
+
const propertyUndefinedString = overrideFlag ? ' = undefined;' : undefinedString;
|
|
392
525
|
if (this.imports[inputFieldType]) {
|
|
393
526
|
imports[inputFieldType] = this.imports[inputFieldType];
|
|
394
527
|
}
|
|
395
528
|
if (this.imports[inputClassType]) {
|
|
396
529
|
imports[inputClassType] = this.imports[inputClassType];
|
|
397
530
|
}
|
|
531
|
+
// Use utility functions for enum and type config
|
|
532
|
+
const enumConfig = this.getEnumConfig(item);
|
|
533
|
+
const typeConfig = this.getTypeConfig(inputFieldType, item.isArray);
|
|
398
534
|
result += `
|
|
399
535
|
/**
|
|
400
536
|
* ${this.pascalCase(name) + propertySuffix + (modelName ? ` of ${this.pascalCase(modelName)}` : '')}
|
|
401
537
|
*/
|
|
402
538
|
@UnifiedField({
|
|
403
539
|
description: '${this.pascalCase(name) + propertySuffix + (modelName ? ` of ${this.pascalCase(modelName)}` : '')}',
|
|
404
|
-
isOptional: ${nullable},
|
|
540
|
+
${enumConfig}isOptional: ${nullable || item.nullable},
|
|
405
541
|
roles: RoleEnum.S_EVERYONE,
|
|
406
|
-
|
|
542
|
+
${typeConfig}
|
|
407
543
|
})
|
|
408
|
-
${overrideFlag + this.camelCase(name)}${nullable || item.nullable ? '?' : ''}: ${inputClassType}${item.isArray ? '[]' : ''}${
|
|
544
|
+
${overrideFlag + this.camelCase(name)}${nullable || item.nullable ? '?' : ''}: ${inputClassType}${item.isArray ? '[]' : ''}${propertyUndefinedString}
|
|
409
545
|
`;
|
|
410
546
|
}
|
|
411
547
|
// Process imports
|
|
@@ -424,29 +560,24 @@ class Server {
|
|
|
424
560
|
* Replace secret or private keys in string (e.g. for config files)
|
|
425
561
|
*/
|
|
426
562
|
replaceSecretOrPrivateKeys(configContent) {
|
|
427
|
-
//
|
|
428
|
-
|
|
429
|
-
const
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
const secretArr = [];
|
|
434
|
-
// -1 because we don't need to replace the first occurrence.
|
|
435
|
-
for (let i = 0; i < count(configContent, regex) - 1; i++) {
|
|
436
|
-
secretArr.push(crypto.randomBytes(512).toString('base64'));
|
|
563
|
+
// Match all occurrences of SECRET_OR_PRIVATE_KEY with optional suffix (e.g., _CI, _DEV_REFRESH)
|
|
564
|
+
// This regex matches the pattern within quotes: 'SECRET_OR_PRIVATE_KEY...'
|
|
565
|
+
const regex = /'SECRET_OR_PRIVATE_KEY[^']*'/g;
|
|
566
|
+
const matches = configContent.match(regex);
|
|
567
|
+
if (!matches || matches.length === 0) {
|
|
568
|
+
return configContent;
|
|
437
569
|
}
|
|
438
|
-
//
|
|
439
|
-
|
|
440
|
-
let occurrenceCount = 0;
|
|
570
|
+
// Create a map to store unique secrets for each unique placeholder
|
|
571
|
+
const secretMap = new Map();
|
|
441
572
|
return configContent.replace(regex, (match) => {
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
573
|
+
// Remove quotes to get the placeholder
|
|
574
|
+
const placeholder = match.slice(1, -1);
|
|
575
|
+
// If we haven't generated a secret for this placeholder yet, create one
|
|
576
|
+
if (!secretMap.has(placeholder)) {
|
|
577
|
+
secretMap.set(placeholder, crypto.randomBytes(512).toString('base64'));
|
|
446
578
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
return secret;
|
|
579
|
+
// Return the secret with quotes
|
|
580
|
+
return `'${secretMap.get(placeholder)}'`;
|
|
450
581
|
});
|
|
451
582
|
}
|
|
452
583
|
}
|
|
@@ -457,4 +588,4 @@ exports.Server = Server;
|
|
|
457
588
|
exports.default = (toolbox) => {
|
|
458
589
|
toolbox.server = new Server(toolbox);
|
|
459
590
|
};
|
|
460
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4dGVuc2lvbnMvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFpQztBQUlqQywrQkFBNEI7QUFDNUIsaUNBQWlDO0FBUWpDOztHQUVHO0FBQ0gsTUFBYSxNQUFNO0lBOEZqQjs7T0FFRztJQUNILFlBQXNCLE9BQStCO1FBQS9CLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBckZyRCx1Q0FBdUM7UUFDdkMsWUFBTyxHQUEyQjtZQUNoQyxjQUFjLEVBQUUsMkRBQTJEO1lBQzNFLFlBQVksRUFBRSx1RUFBdUU7WUFDckYsZUFBZSxFQUFFLHFFQUFxRTtZQUN0Rix5QkFBeUIsRUFBRSxtREFBbUQ7U0FDL0UsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxvQkFBZSxHQUEyQjtZQUN4QyxPQUFPLEVBQUUsU0FBUztZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxlQUFlO1lBQ3JCLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLEVBQUUsRUFBRSxRQUFRO1lBQ1osRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLFFBQVE7WUFDaEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsTUFBTSxFQUFFLFFBQVE7WUFDaEIsTUFBTSxFQUFFLGVBQWU7U0FDeEIsQ0FBQztRQUVGLGlEQUFpRDtRQUNqRCxvQkFBZSxHQUEyQjtZQUN4QyxPQUFPLEVBQUUsU0FBUztZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxZQUFZO1lBQ2xCLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLEVBQUUsRUFBRSxRQUFRO1lBQ1osRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUseUJBQXlCO1lBQy9CLElBQUksRUFBRSx5QkFBeUI7WUFDL0IsTUFBTSxFQUFFLFFBQVE7WUFDaEIs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
|
|
591
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4dGVuc2lvbnMvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFpQztBQUlqQywrQkFBNEI7QUFDNUIsaUNBQWlDO0FBUWpDOztHQUVHO0FBQ0gsTUFBYSxNQUFNO0lBOEZqQjs7T0FFRztJQUNILFlBQXNCLE9BQStCO1FBQS9CLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBckZyRCx1Q0FBdUM7UUFDdkMsWUFBTyxHQUEyQjtZQUNoQyxjQUFjLEVBQUUsMkRBQTJEO1lBQzNFLFlBQVksRUFBRSx1RUFBdUU7WUFDckYsZUFBZSxFQUFFLHFFQUFxRTtZQUN0Rix5QkFBeUIsRUFBRSxtREFBbUQ7U0FDL0UsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxvQkFBZSxHQUEyQjtZQUN4QyxPQUFPLEVBQUUsU0FBUztZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxlQUFlO1lBQ3JCLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLEVBQUUsRUFBRSxRQUFRO1lBQ1osRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLFFBQVE7WUFDaEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsTUFBTSxFQUFFLFFBQVE7WUFDaEIsTUFBTSxFQUFFLGVBQWU7U0FDeEIsQ0FBQztRQUVGLGlEQUFpRDtRQUNqRCxvQkFBZSxHQUEyQjtZQUN4QyxPQUFPLEVBQUUsU0FBUztZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxZQUFZO1lBQ2xCLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLEVBQUUsRUFBRSxRQUFRO1lBQ1osRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUseUJBQXlCO1lBQy9CLElBQUksRUFBRSx5QkFBeUI7WUFDL0IsTUFBTSxFQUFFLFFBQVE7WUFDaEIs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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHQtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL2x0LWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Clean up and optimize code quality
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Perform a complete code cleanup:
|
|
6
|
+
|
|
7
|
+
## 📦 1. Import Optimization
|
|
8
|
+
|
|
9
|
+
For all modified TypeScript files:
|
|
10
|
+
- [ ] Sort imports alphabetically
|
|
11
|
+
- [ ] Grouping: External → @lenne.tech → Local
|
|
12
|
+
- [ ] Remove unused imports
|
|
13
|
+
- [ ] Remove duplicate imports
|
|
14
|
+
|
|
15
|
+
## 🔤 2. Property Ordering
|
|
16
|
+
|
|
17
|
+
For all Model/Input/Object files:
|
|
18
|
+
- [ ] Sort properties alphabetically
|
|
19
|
+
- [ ] Decorators consistently ordered
|
|
20
|
+
- [ ] Same order in Model, CreateInput, UpdateInput
|
|
21
|
+
|
|
22
|
+
## 📝 3. Description Management
|
|
23
|
+
|
|
24
|
+
Check all descriptions:
|
|
25
|
+
- [ ] Format: "ENGLISH (DEUTSCH)" for German terms
|
|
26
|
+
- [ ] Format: "ENGLISH" for English terms
|
|
27
|
+
- [ ] Consistency: Same description in Model + Inputs
|
|
28
|
+
- [ ] Class-level descriptions present (@ObjectType, @InputType)
|
|
29
|
+
- [ ] No missing descriptions
|
|
30
|
+
|
|
31
|
+
## ♻️ 4. Code Refactoring
|
|
32
|
+
|
|
33
|
+
Search for duplicated code:
|
|
34
|
+
- [ ] Is code repeated 2+ times?
|
|
35
|
+
- [ ] Can it be extracted into private methods?
|
|
36
|
+
- [ ] Are similar code paths consolidatable?
|
|
37
|
+
- [ ] Helper functions useful?
|
|
38
|
+
|
|
39
|
+
## 🧹 5. Debug Code Removal
|
|
40
|
+
|
|
41
|
+
Remove development code:
|
|
42
|
+
- [ ] All console.log() statements
|
|
43
|
+
- [ ] All console.debug/warn/error (except production logging)
|
|
44
|
+
- [ ] Commented-out code
|
|
45
|
+
- [ ] Review TODO/FIXME comments
|
|
46
|
+
|
|
47
|
+
## ✨ 6. Formatting
|
|
48
|
+
|
|
49
|
+
Check code formatting:
|
|
50
|
+
- [ ] Consistent indentation (2 or 4 spaces)
|
|
51
|
+
- [ ] No extra blank lines
|
|
52
|
+
- [ ] Add missing blank lines between sections
|
|
53
|
+
- [ ] Remove trailing whitespace
|
|
54
|
+
|
|
55
|
+
## 🔧 7. Build & Lint
|
|
56
|
+
|
|
57
|
+
Run automatic checks:
|
|
58
|
+
```bash
|
|
59
|
+
# TypeScript Compilation
|
|
60
|
+
npm run build
|
|
61
|
+
|
|
62
|
+
# Linting
|
|
63
|
+
npm run lint
|
|
64
|
+
|
|
65
|
+
# Optional: Auto-Fix
|
|
66
|
+
npm run lint:fix
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Fix all errors and warnings!
|
|
70
|
+
|
|
71
|
+
## ✅ Final Check
|
|
72
|
+
|
|
73
|
+
- [ ] All imports optimized
|
|
74
|
+
- [ ] All properties sorted
|
|
75
|
+
- [ ] All descriptions correct
|
|
76
|
+
- [ ] Code refactored (DRY)
|
|
77
|
+
- [ ] Debug code removed
|
|
78
|
+
- [ ] Build successful
|
|
79
|
+
- [ ] Lint successful
|
|
80
|
+
- [ ] Tests still passing
|
|
81
|
+
|
|
82
|
+
**Only when everything is ✅: Cleanup completed!**
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate MR description and save to clipboard
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Create a comprehensive summary of the changes in English for a Merge Request description.
|
|
6
|
+
|
|
7
|
+
Please structure the description as follows:
|
|
8
|
+
- **Summary**: Brief summary (1-2 sentences)
|
|
9
|
+
- **Changes**: List of the most important changes
|
|
10
|
+
- **Technical Details**: Relevant technical details if necessary
|
|
11
|
+
- **Testing**: How was it tested / how can it be tested
|
|
12
|
+
|
|
13
|
+
Keep it short and concise - focus on what's essential for code reviewers.
|
|
14
|
+
|
|
15
|
+
**IMPORTANT - CLIPBOARD WORKFLOW:**
|
|
16
|
+
|
|
17
|
+
1. First, create the MR description in this format:
|
|
18
|
+
|
|
19
|
+
```markdown
|
|
20
|
+
## Summary
|
|
21
|
+
[Your summary here]
|
|
22
|
+
|
|
23
|
+
## Changes
|
|
24
|
+
- Change 1
|
|
25
|
+
- Change 2
|
|
26
|
+
|
|
27
|
+
## Technical Details
|
|
28
|
+
[Details if necessary]
|
|
29
|
+
|
|
30
|
+
## Testing
|
|
31
|
+
[Testing approach]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
2. After presenting the description, provide this shell command:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
cat << 'EOF' | pbcopy
|
|
38
|
+
[PASTE THE EXACT MR DESCRIPTION HERE]
|
|
39
|
+
EOF
|
|
40
|
+
echo "✅ MR description copied to clipboard!"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
3. User can run this command to copy the description to clipboard automatically.
|
|
44
|
+
|
|
45
|
+
**Platform-specific commands:**
|
|
46
|
+
- macOS: `pbcopy`
|
|
47
|
+
- Linux: `xclip -selection clipboard` or `xsel --clipboard`
|
|
48
|
+
- Windows: `clip`
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate Merge Request description
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Create a comprehensive summary of the changes in English so I can use it as a description in a Merge Request. Only include the essential points.
|
|
6
|
+
|
|
7
|
+
Please structure the description as follows:
|
|
8
|
+
- **Summary**: Brief summary (1-2 sentences)
|
|
9
|
+
- **Changes**: List of the most important changes
|
|
10
|
+
- **Technical Details**: Relevant technical details if necessary
|
|
11
|
+
- **Testing**: How was it tested / how can it be tested
|
|
12
|
+
|
|
13
|
+
Keep it short and concise - focus on what's essential for code reviewers.
|
|
14
|
+
|
|
15
|
+
**IMPORTANT OUTPUT FORMAT:**
|
|
16
|
+
Present the final MR description in a clearly marked code block that is easy to copy:
|
|
17
|
+
|
|
18
|
+
```markdown
|
|
19
|
+
## Summary
|
|
20
|
+
[Your summary here]
|
|
21
|
+
|
|
22
|
+
## Changes
|
|
23
|
+
- Change 1
|
|
24
|
+
- Change 2
|
|
25
|
+
|
|
26
|
+
## Technical Details
|
|
27
|
+
[Details if necessary]
|
|
28
|
+
|
|
29
|
+
## Testing
|
|
30
|
+
[Testing approach]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Then add: "✂️ **Copy the markdown block above to use it in your Merge Request.**"
|