@diagramers/cli 1.0.57 → 1.0.61

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.
@@ -36,63 +36,92 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.generateTable = generateTable;
37
37
  const fs = __importStar(require("fs"));
38
38
  const path = __importStar(require("path"));
39
- async function generateTable(tableName) {
39
+ // Function to convert plural table names to singular for file names
40
+ function pluralToSingular(word) {
41
+ if (word.endsWith('ies')) {
42
+ return word.slice(0, -3) + 'y'; // categories -> category
43
+ }
44
+ else if (word.endsWith('es')) {
45
+ return word.slice(0, -2); // boxes -> box
46
+ }
47
+ else if (word.endsWith('s')) {
48
+ return word.slice(0, -1); // users -> user, products -> product
49
+ }
50
+ return word; // already singular
51
+ }
52
+ async function generateTable(tableName, options = {}) {
40
53
  // Validate table name
41
54
  if (!tableName || !/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(tableName)) {
42
55
  throw new Error('Invalid table name. Use only letters, numbers, hyphens, and underscores. Must start with a letter.');
43
56
  }
44
- const tableNameCapitalized = tableName.charAt(0).toUpperCase() + tableName.slice(1);
57
+ const singularName = pluralToSingular(tableName);
58
+ const tableNameCapitalized = singularName.charAt(0).toUpperCase() + singularName.slice(1);
45
59
  const currentDir = process.cwd();
46
60
  // Check for required API project structure
47
- const requiredDirs = [
48
- 'src/entities',
49
- 'src/schemas'
50
- ];
61
+ const requiredDirs = ['src/modules'];
51
62
  const missingDirs = requiredDirs.filter(dir => !fs.existsSync(path.join(currentDir, dir)));
52
63
  if (missingDirs.length > 0) {
53
64
  throw new Error(`This command should be run from a diagramers API project. Missing directories: ${missingDirs.join(', ')}`);
54
65
  }
55
- console.log('📝 Creating entity...');
56
- const entityContent = generateEntityContent(tableName, tableNameCapitalized);
57
- fs.writeFileSync(path.join(currentDir, 'src/entities', `${tableName}.ts`), entityContent);
58
- console.log('📋 Creating schema...');
59
- const schemaContent = generateSchemaContent(tableName, tableNameCapitalized);
60
- fs.writeFileSync(path.join(currentDir, 'src/schemas', `${tableName}.ts`), schemaContent);
61
- // Update dbcontext to include the new entity
62
- updateDbContext(currentDir, tableName, tableNameCapitalized);
66
+ // Create module directory structure
67
+ const modulePath = path.join(currentDir, 'src/modules', tableName);
68
+ if (!fs.existsSync(modulePath)) {
69
+ fs.mkdirSync(modulePath, { recursive: true });
70
+ fs.mkdirSync(path.join(modulePath, 'entities'), { recursive: true });
71
+ fs.mkdirSync(path.join(modulePath, 'schemas'), { recursive: true });
72
+ }
73
+ console.log(`📝 Creating entity for table '${tableName}'...`);
74
+ const entityContent = generateEntityContent(singularName, tableNameCapitalized, options);
75
+ fs.writeFileSync(path.join(modulePath, 'entities', `${singularName}.entity.ts`), entityContent);
76
+ console.log(`📋 Creating schema for table '${tableName}'...`);
77
+ const schemaContent = generateSchemaContent(singularName, tableNameCapitalized, tableName, options);
78
+ fs.writeFileSync(path.join(modulePath, 'schemas', `${singularName}.schema.ts`), schemaContent);
79
+ // Add to seeder
80
+ console.log(`🌱 Adding '${tableName}' to database seeder...`);
81
+ await addToSeeder(currentDir, tableName, singularName, tableNameCapitalized, options);
63
82
  console.log('✅ Table generation completed!');
64
- console.log(`📊 Entity: src/entities/${tableName}.ts`);
65
- console.log(`📋 Schema: src/schemas/${tableName}.ts`);
66
- console.log('🔄 dbcontext.ts updated');
83
+ console.log(`📊 Entity: src/modules/${tableName}/entities/${singularName}.entity.ts`);
84
+ console.log(`📋 Schema: src/modules/${tableName}/schemas/${singularName}.schema.ts`);
85
+ console.log('🌱 Added to database seeder');
67
86
  }
68
- function generateEntityContent(tableName, tableNameCapitalized) {
87
+ function generateEntityContent(singularName, tableNameCapitalized, options) {
88
+ const fields = options.fields || ['name', 'description'];
89
+ let fieldDefinitions = '';
90
+ fields.forEach((field) => {
91
+ const fieldType = getFieldType(field);
92
+ const isOptional = field === 'description' || field.includes('?');
93
+ const cleanField = field.replace('?', '');
94
+ fieldDefinitions += ` ${cleanField}${isOptional ? '?' : ''}: ${fieldType};\n`;
95
+ });
69
96
  return `import * as mongoose from 'mongoose';
70
97
  import { ObjectId } from "bson";
71
98
 
72
99
  export interface I${tableNameCapitalized} extends mongoose.Document {
73
- _id: ObjectId,
74
- name: string,
75
- description?: string,
76
- status: number,
77
- createdAt: Date,
78
- updatedAt: Date
100
+ _id: ObjectId;
101
+ ${fieldDefinitions} status: number;
102
+ createdAt: Date;
103
+ updatedAt: Date;
79
104
  }`;
80
105
  }
81
- function generateSchemaContent(tableName, tableNameCapitalized) {
106
+ function generateSchemaContent(singularName, tableNameCapitalized, tableName, options) {
107
+ const fields = options.fields || ['name', 'description'];
108
+ let schemaFields = '';
109
+ fields.forEach((field) => {
110
+ const isOptional = field === 'description' || field.includes('?');
111
+ const cleanField = field.replace('?', '');
112
+ const mongooseType = getMongooseType(cleanField);
113
+ const required = !isOptional;
114
+ schemaFields += ` ${cleanField}: {
115
+ type: ${mongooseType},
116
+ required: ${required},
117
+ },\n`;
118
+ });
82
119
  return `import * as mongoose from 'mongoose';
83
- import { I${tableNameCapitalized} } from '../entities/${tableName}';
120
+ import { I${tableNameCapitalized} } from '../entities/${singularName}.entity';
84
121
 
85
- export const ${tableName}Schema = new mongoose.Schema(
122
+ export const ${singularName}Schema = new mongoose.Schema(
86
123
  {
87
- name: {
88
- type: mongoose.SchemaTypes.String,
89
- required: true,
90
- },
91
- description: {
92
- type: mongoose.SchemaTypes.String,
93
- required: false,
94
- },
95
- status: {
124
+ ${schemaFields} status: {
96
125
  type: mongoose.SchemaTypes.Number,
97
126
  default: 1,
98
127
  }
@@ -100,38 +129,160 @@ export const ${tableName}Schema = new mongoose.Schema(
100
129
  { timestamps: true, suppressReservedKeysWarning: true },
101
130
  );
102
131
 
103
- export const ${tableNameCapitalized}Entity = mongoose.model<I${tableNameCapitalized}>('${tableName}', ${tableName}Schema);`;
132
+ export const ${tableNameCapitalized}Model = mongoose.model<I${tableNameCapitalized}>('${tableName}', ${singularName}Schema);`;
133
+ }
134
+ function getFieldType(field) {
135
+ const cleanField = field.replace('?', '').toLowerCase();
136
+ if (cleanField.includes('id') || cleanField === '_id')
137
+ return 'ObjectId';
138
+ if (cleanField.includes('email'))
139
+ return 'string';
140
+ if (cleanField.includes('password'))
141
+ return 'string';
142
+ if (cleanField.includes('phone'))
143
+ return 'string';
144
+ if (cleanField.includes('url'))
145
+ return 'string';
146
+ if (cleanField.includes('date') || cleanField.includes('time'))
147
+ return 'Date';
148
+ if (cleanField.includes('count') || cleanField.includes('number') || cleanField.includes('age'))
149
+ return 'number';
150
+ if (cleanField.includes('is') || cleanField.includes('has') || cleanField.includes('verified'))
151
+ return 'boolean';
152
+ if (cleanField.includes('status'))
153
+ return 'number';
154
+ return 'string'; // default
104
155
  }
105
- function updateDbContext(currentDir, tableName, tableNameCapitalized) {
106
- const dbcontextPath = path.join(currentDir, 'src/helpers/dbcontext.ts');
107
- if (!fs.existsSync(dbcontextPath)) {
108
- console.log('⚠️ dbcontext.ts not found, skipping dbcontext update');
156
+ function getMongooseType(field) {
157
+ const cleanField = field.toLowerCase();
158
+ if (cleanField.includes('id') || cleanField === '_id')
159
+ return 'mongoose.SchemaTypes.ObjectId';
160
+ if (cleanField.includes('date') || cleanField.includes('time'))
161
+ return 'mongoose.SchemaTypes.Date';
162
+ if (cleanField.includes('count') || cleanField.includes('number') || cleanField.includes('age'))
163
+ return 'mongoose.SchemaTypes.Number';
164
+ if (cleanField.includes('is') || cleanField.includes('has') || cleanField.includes('verified'))
165
+ return 'mongoose.SchemaTypes.Boolean';
166
+ if (cleanField.includes('status'))
167
+ return 'mongoose.SchemaTypes.Number';
168
+ return 'mongoose.SchemaTypes.String'; // default
169
+ }
170
+ async function addToSeeder(currentDir, tableName, singularName, tableNameCapitalized, options) {
171
+ const seederPath = path.join(currentDir, 'src/core/database/seeder.ts');
172
+ if (!fs.existsSync(seederPath)) {
173
+ console.log('⚠️ Seeder file not found, skipping seeder update');
109
174
  return;
110
175
  }
111
- let dbcontextContent = fs.readFileSync(dbcontextPath, 'utf8');
176
+ let seederContent = fs.readFileSync(seederPath, 'utf8');
112
177
  // Add import
113
- const importStatement = `import { ${tableNameCapitalized}Entity } from '../schemas/${tableName}';`;
114
- if (!dbcontextContent.includes(importStatement)) {
115
- // Find the last import statement and add after it
116
- const importRegex = /import.*from.*['"];?\s*$/gm;
117
- const matches = [...dbcontextContent.matchAll(importRegex)];
118
- if (matches.length > 0) {
119
- const lastImport = matches[matches.length - 1];
120
- const insertIndex = lastImport.index + lastImport[0].length;
121
- dbcontextContent = dbcontextContent.slice(0, insertIndex) + '\n' + importStatement + dbcontextContent.slice(insertIndex);
178
+ const importStatement = `import { ${tableNameCapitalized}Model } from '../../modules/${tableName}/schemas/${singularName}.schema';`;
179
+ if (!seederContent.includes(importStatement)) {
180
+ // Find the last import and add after it
181
+ const lastImportIndex = seederContent.lastIndexOf('import');
182
+ const nextLineIndex = seederContent.indexOf('\n', lastImportIndex);
183
+ seederContent = seederContent.slice(0, nextLineIndex) + '\n' + importStatement + seederContent.slice(nextLineIndex);
184
+ }
185
+ // Add to SeedData interface
186
+ const seedDataInterface = ` ${tableName}?: any[];`;
187
+ if (!seederContent.includes(seedDataInterface)) {
188
+ const interfaceMatch = seederContent.match(/export interface SeedData \{([^}]*)\}/s);
189
+ if (interfaceMatch) {
190
+ const beforeClosing = interfaceMatch[0].lastIndexOf('}');
191
+ const beforeText = interfaceMatch[0].slice(0, beforeClosing);
192
+ const afterText = interfaceMatch[0].slice(beforeClosing);
193
+ const newInterface = beforeText + seedDataInterface + '\n' + afterText;
194
+ seederContent = seederContent.replace(interfaceMatch[0], newInterface);
122
195
  }
123
196
  }
124
- // Add to dbcontext object
125
- const dbcontextObjectRegex = /export\s+default\s*\{([^}]*)\}/s;
126
- const match = dbcontextContent.match(dbcontextObjectRegex);
127
- if (match) {
128
- const objectContent = match[1];
129
- if (!objectContent.includes(`${tableNameCapitalized}Entity`)) {
130
- const newObjectContent = objectContent.trim() + `,\n ${tableNameCapitalized}Entity`;
131
- dbcontextContent = dbcontextContent.replace(dbcontextObjectRegex, `export default {$1${newObjectContent}\n}`);
197
+ // Add seeder method
198
+ const seederMethod = ` private async seed${tableNameCapitalized}s(data: any[]): Promise<void> {
199
+ if (data.length === 0) return;
200
+
201
+ logger.info(\`[DatabaseSeeder] Seeding \${data.length} ${tableName}...\`);
202
+
203
+ for (const ${singularName}Data of data) {
204
+ try {
205
+ const existing = await ${tableNameCapitalized}Model.findOne({ name: ${singularName}Data.name });
206
+ if (!existing) {
207
+ const ${singularName} = new ${tableNameCapitalized}Model({
208
+ ...${singularName}Data,
209
+ status: 1
210
+ });
211
+ await ${singularName}.save();
212
+ logger.info(\`[DatabaseSeeder] Created ${singularName}: \${${singularName}Data.name}\`);
213
+ } else {
214
+ logger.info(\`[DatabaseSeeder] ${tableNameCapitalized} \${${singularName}Data.name} already exists, skipping\`);
132
215
  }
216
+ } catch (error) {
217
+ logger.error(\`[DatabaseSeeder] Failed to create ${singularName} \${${singularName}Data.name}:\`, error);
218
+ }
219
+ }
220
+ }`;
221
+ // Add method before closing class brace
222
+ const classEndIndex = seederContent.lastIndexOf('}');
223
+ seederContent = seederContent.slice(0, classEndIndex) + seederMethod + '\n\n' + seederContent.slice(classEndIndex);
224
+ // Add seeder call in seed method
225
+ const seederCall = ` if (data.${tableName}) {
226
+ await this.seed${tableNameCapitalized}s(data.${tableName});
227
+ }`;
228
+ // Find the seed method and add the call
229
+ const seedMethodMatch = seederContent.match(/async seed\([^{]*\{([^}]*(?:\{[^}]*\}[^}]*)*)\}/s);
230
+ if (seedMethodMatch) {
231
+ const beforeClosing = seedMethodMatch[0].lastIndexOf('}');
232
+ const beforeText = seedMethodMatch[0].slice(0, beforeClosing);
233
+ const afterText = seedMethodMatch[0].slice(beforeClosing);
234
+ const newSeedMethod = beforeText + '\n' + seederCall + '\n ' + afterText;
235
+ seederContent = seederContent.replace(seedMethodMatch[0], newSeedMethod);
236
+ }
237
+ // Add default seed data
238
+ const defaultData = generateDefaultSeedData(tableName, options);
239
+ const defaultDataLine = ` ${tableName}: ${JSON.stringify(defaultData, null, 6)},`;
240
+ // Find defaultData object and add the line
241
+ const defaultDataMatch = seederContent.match(/const defaultData: SeedData = \{([^}]*(?:\{[^}]*\}[^}]*)*)\}/s);
242
+ if (defaultDataMatch) {
243
+ const beforeClosing = defaultDataMatch[0].lastIndexOf('}');
244
+ const beforeText = defaultDataMatch[0].slice(0, beforeClosing);
245
+ const afterText = defaultDataMatch[0].slice(beforeClosing);
246
+ const newDefaultData = beforeText + '\n' + defaultDataLine + '\n ' + afterText;
247
+ seederContent = seederContent.replace(defaultDataMatch[0], newDefaultData);
248
+ }
249
+ fs.writeFileSync(seederPath, seederContent);
250
+ }
251
+ function generateDefaultSeedData(tableName, options) {
252
+ const fields = options.fields || ['name', 'description'];
253
+ const sampleData = [];
254
+ // Generate 3 sample records
255
+ for (let i = 1; i <= 3; i++) {
256
+ const record = {};
257
+ fields.forEach((field) => {
258
+ const cleanField = field.replace('?', '');
259
+ if (cleanField === 'name') {
260
+ record[cleanField] = `Sample ${tableName.charAt(0).toUpperCase() + tableName.slice(1, -1)} ${i}`;
261
+ }
262
+ else if (cleanField === 'description') {
263
+ record[cleanField] = `Description for sample ${tableName.slice(0, -1)} ${i}`;
264
+ }
265
+ else if (cleanField.includes('email')) {
266
+ record[cleanField] = `sample${i}@example.com`;
267
+ }
268
+ else if (cleanField.includes('phone')) {
269
+ record[cleanField] = `+1234567890${i}`;
270
+ }
271
+ else if (cleanField.includes('url')) {
272
+ record[cleanField] = `https://example.com/${cleanField}${i}`;
273
+ }
274
+ else if (cleanField.includes('count') || cleanField.includes('number') || cleanField.includes('age')) {
275
+ record[cleanField] = i * 10;
276
+ }
277
+ else if (cleanField.includes('is') || cleanField.includes('has') || cleanField.includes('verified')) {
278
+ record[cleanField] = i % 2 === 1;
279
+ }
280
+ else {
281
+ record[cleanField] = `Sample ${cleanField} ${i}`;
282
+ }
283
+ });
284
+ sampleData.push(record);
133
285
  }
134
- fs.writeFileSync(dbcontextPath, dbcontextContent);
135
- console.log('📊 Updated dbcontext.ts');
286
+ return sampleData;
136
287
  }
137
288
  //# sourceMappingURL=table-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-generator.js","sourceRoot":"","sources":["../../src/services/table-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-generator.js","sourceRoot":"","sources":["../../src/services/table-generator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diagramers/cli",
3
- "version": "1.0.57",
3
+ "version": "1.0.61",
4
4
  "description": "Diagramers CLI - Command-line tools for managing Diagramers projects",
5
5
  "main": "dist/index.js",
6
6
  "bin": {