@diagramers/cli 1.0.20 → 1.0.22
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/README.md +6 -6
- package/dist/commands/api.js +2 -2
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/update.js +2 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/services/project-updater.d.ts +0 -1
- package/dist/services/project-updater.d.ts.map +1 -1
- package/dist/services/project-updater.js +20 -26
- package/dist/services/project-updater.js.map +1 -1
- package/dist/services/relation-generator.js +14 -14
- package/dist/services/relation-generator.js.map +1 -1
- package/dist/services/template-updater.d.ts +19 -0
- package/dist/services/template-updater.d.ts.map +1 -0
- package/dist/services/template-updater.js +183 -0
- package/dist/services/template-updater.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/api.ts +2 -2
- package/src/commands/update.ts +2 -2
- package/src/services/project-updater.ts +23 -31
- package/src/services/relation-generator.ts +14 -14
- package/src/services/template-updater.ts +184 -0
package/README.md
CHANGED
@@ -309,7 +309,7 @@ diagramers api generate:relation comment user one-to-many
|
|
309
309
|
interface IProduct {
|
310
310
|
_id: ObjectId;
|
311
311
|
name: string;
|
312
|
-
|
312
|
+
_categoryId: ObjectId; // Reference to category (with _ prefix)
|
313
313
|
category?: ICategory; // Populated field
|
314
314
|
}
|
315
315
|
|
@@ -327,15 +327,15 @@ interface ICategory {
|
|
327
327
|
interface IProduct {
|
328
328
|
_id: ObjectId;
|
329
329
|
name: string;
|
330
|
-
|
330
|
+
_tagIds: ObjectId[]; // Array of references (with _ prefix)
|
331
331
|
tags?: ITag[]; // Populated field
|
332
332
|
}
|
333
333
|
|
334
334
|
interface ITag {
|
335
335
|
_id: ObjectId;
|
336
336
|
name: string;
|
337
|
-
|
338
|
-
products?: IProduct[];
|
337
|
+
_productIds: ObjectId[]; // Array of references (with _ prefix)
|
338
|
+
products?: IProduct[]; // Virtual field
|
339
339
|
}
|
340
340
|
```
|
341
341
|
|
@@ -346,7 +346,7 @@ interface ITag {
|
|
346
346
|
interface IUser {
|
347
347
|
_id: ObjectId;
|
348
348
|
email: string;
|
349
|
-
|
349
|
+
_profileId: ObjectId; // Reference to profile (with _ prefix)
|
350
350
|
profile?: IProfile; // Populated field
|
351
351
|
}
|
352
352
|
|
@@ -354,7 +354,7 @@ interface IProfile {
|
|
354
354
|
_id: ObjectId;
|
355
355
|
firstName: string;
|
356
356
|
lastName: string;
|
357
|
-
|
357
|
+
_userId: ObjectId; // Reference back to user (with _ prefix)
|
358
358
|
user?: IUser; // Populated field
|
359
359
|
}
|
360
360
|
```
|
package/dist/commands/api.js
CHANGED
@@ -60,12 +60,12 @@ function apiCommand(program) {
|
|
60
60
|
});
|
61
61
|
// Generate relation command
|
62
62
|
api
|
63
|
-
.command('generate:relation <table1> <table2>
|
63
|
+
.command('generate:relation <table1> <table2>')
|
64
64
|
.description('Generate a relationship between two existing tables')
|
65
65
|
.option('-t, --type <type>', 'Relationship type: one-to-one, one-to-many, many-to-many', 'one-to-one')
|
66
66
|
.action(async (table1, table2, options) => {
|
67
67
|
try {
|
68
|
-
const relationType = options
|
68
|
+
const relationType = options?.type || 'one-to-one';
|
69
69
|
console.log(chalk_1.default.blue(`🔗 Creating ${relationType} relationship between ${table1} and ${table2}...`));
|
70
70
|
await (0, relation_generator_1.generateRelation)(table1, table2, relationType);
|
71
71
|
console.log(chalk_1.default.green(`✅ Relationship created successfully!`));
|
package/dist/commands/api.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":";;;;;AAOA,gCAoEC;AA1ED,6DAA2D;AAC3D,iEAA4D;AAC5D,uEAAkE;AAClE,uEAAiE;AACjE,kDAA0B;AAE1B,SAAgB,UAAU,CAAC,OAAgB;IACzC,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,+CAA+C,CAAC,CAAC;IAEhE,0BAA0B;IAC1B,GAAG;SACA,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,4EAA4E,CAAC;SACzF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,MAAM,IAAA,8BAAc,EAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,IAAI,2BAA2B,CAAC,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,2BAA2B;IAC3B,GAAG;SACA,OAAO,CAAC,yBAAyB,CAAC;SAClC,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC,CAAC;YACvE,MAAM,IAAA,oCAAe,EAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,wCAAwC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,yBAAyB;IACzB,GAAG;SACA,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,MAAM,IAAA,+BAAa,EAAC,IAAI,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,IAAI,2BAA2B,CAAC,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,4BAA4B;IAC5B,GAAG;SACA,OAAO,CAAC,
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/update.js
CHANGED
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.updateCommand = updateCommand;
|
7
|
-
const
|
7
|
+
const template_updater_1 = require("../services/template-updater");
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
9
9
|
function updateCommand(program) {
|
10
10
|
program
|
@@ -15,7 +15,7 @@ function updateCommand(program) {
|
|
15
15
|
.action(async (options) => {
|
16
16
|
try {
|
17
17
|
console.log(chalk_1.default.blue('🔄 Checking for template updates...'));
|
18
|
-
const updater = new
|
18
|
+
const updater = new template_updater_1.TemplateUpdater();
|
19
19
|
await updater.update(options);
|
20
20
|
console.log(chalk_1.default.green('✅ Project updated successfully!'));
|
21
21
|
console.log(chalk_1.default.yellow('📝 Review the changes and test your application'));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;;;AAIA,sCAoBC;AAvBD,
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;;;AAIA,sCAoBC;AAvBD,mEAA+D;AAC/D,kDAA0B;AAE1B,SAAgB,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,aAAa,EAAE,yCAAyC,CAAC;SAChE,MAAM,CAAC,cAAc,EAAE,+BAA+B,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAE/D,MAAM,OAAO,GAAG,IAAI,kCAAe,EAAE,CAAC;YACtC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"project-updater.d.ts","sourceRoot":"","sources":["../../src/services/project-updater.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,
|
1
|
+
{"version":3,"file":"project-updater.d.ts","sourceRoot":"","sources":["../../src/services/project-updater.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,kBAAkB,CAAS;;IAM7B,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YA8BrC,cAAc;YAOd,YAAY;YAgBZ,kBAAkB;YAkBlB,cAAc;YAgBd,aAAa;CAY5B"}
|
@@ -39,11 +39,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.ProjectUpdater = void 0;
|
40
40
|
const fs = __importStar(require("fs-extra"));
|
41
41
|
const path = __importStar(require("path"));
|
42
|
-
const glob = __importStar(require("glob"));
|
43
42
|
const chalk_1 = __importDefault(require("chalk"));
|
44
43
|
class ProjectUpdater {
|
45
44
|
constructor() {
|
46
|
-
this.templatePath = path.resolve(__dirname, '../../..');
|
47
45
|
this.currentProjectPath = process.cwd();
|
48
46
|
}
|
49
47
|
async update(options) {
|
@@ -88,46 +86,42 @@ class ProjectUpdater {
|
|
88
86
|
console.log(chalk_1.default.blue(`📦 Backup created at: ${backupPath}`));
|
89
87
|
}
|
90
88
|
async getUpdateableFiles() {
|
91
|
-
|
92
|
-
|
93
|
-
'src/
|
94
|
-
'src/
|
89
|
+
// For now, we'll update specific files that are commonly modified in templates
|
90
|
+
const updateableFiles = [
|
91
|
+
'src/helpers/dbcontext.ts',
|
92
|
+
'src/helpers/result.ts',
|
93
|
+
'src/helpers/enums.ts',
|
94
|
+
'src/config/index.ts',
|
95
|
+
'src/config/development.ts',
|
96
|
+
'src/config/staging.ts',
|
97
|
+
'src/config/production.ts',
|
98
|
+
'src/server/index.ts',
|
95
99
|
'webpack.config.js',
|
96
100
|
'tsconfig.json'
|
97
101
|
];
|
98
|
-
|
99
|
-
for (const pattern of templateFiles) {
|
100
|
-
const matches = glob.sync(pattern, { cwd: this.templatePath });
|
101
|
-
files.push(...matches);
|
102
|
-
}
|
103
|
-
return files;
|
102
|
+
return updateableFiles.filter(file => fs.existsSync(path.join(this.currentProjectPath, file)));
|
104
103
|
}
|
105
104
|
async checkConflicts(files) {
|
106
105
|
const conflicts = [];
|
107
106
|
for (const file of files) {
|
108
|
-
const templatePath = path.join(this.templatePath, file);
|
109
107
|
const projectPath = path.join(this.currentProjectPath, file);
|
110
108
|
if (await fs.pathExists(projectPath)) {
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
if (templateContent !== projectContent) {
|
115
|
-
conflicts.push(file);
|
116
|
-
}
|
109
|
+
// For now, we'll consider all files as potentially conflicting
|
110
|
+
// In a real implementation, you'd compare with the template version
|
111
|
+
conflicts.push(file);
|
117
112
|
}
|
118
113
|
}
|
119
114
|
return conflicts;
|
120
115
|
}
|
121
116
|
async performUpdate(files) {
|
117
|
+
console.log(chalk_1.default.blue('📝 Updating project files...'));
|
118
|
+
// For now, we'll just report what would be updated
|
119
|
+
// In a real implementation, you'd copy from the latest template
|
122
120
|
for (const file of files) {
|
123
|
-
|
124
|
-
const projectPath = path.join(this.currentProjectPath, file);
|
125
|
-
if (await fs.pathExists(templatePath)) {
|
126
|
-
await fs.ensureDir(path.dirname(projectPath));
|
127
|
-
await fs.copy(templatePath, projectPath);
|
128
|
-
console.log(chalk_1.default.green(`✅ Updated: ${file}`));
|
129
|
-
}
|
121
|
+
console.log(chalk_1.default.green(`✅ Would update: ${file}`));
|
130
122
|
}
|
123
|
+
console.log(chalk_1.default.yellow('⚠️ Update mechanism is being improved.'));
|
124
|
+
console.log(chalk_1.default.yellow(' For now, manual updates are recommended.'));
|
131
125
|
}
|
132
126
|
}
|
133
127
|
exports.ProjectUpdater = ProjectUpdater;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"project-updater.js","sourceRoot":"","sources":["../../src/services/project-updater.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,2CAA6B;
|
1
|
+
{"version":3,"file":"project-updater.js","sourceRoot":"","sources":["../../src/services/project-updater.ts"],"names":[],"mappings":"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"}
|
@@ -139,17 +139,17 @@ function generateEntityFields(tableCapitalized, relatedTableCapitalized, relatio
|
|
139
139
|
}
|
140
140
|
case 'one-to-many':
|
141
141
|
if (direction === 'forward') {
|
142
|
-
return
|
142
|
+
return `_${relatedTableCapitalized.toLowerCase()}Id: ObjectId,\n ${relatedTableCapitalized.toLowerCase()}?: I${relatedTableCapitalized}`;
|
143
143
|
}
|
144
144
|
else {
|
145
145
|
return `${tableCapitalized.toLowerCase()}s?: I${tableCapitalized}[]`;
|
146
146
|
}
|
147
147
|
case 'many-to-many':
|
148
148
|
if (direction === 'forward') {
|
149
|
-
return
|
149
|
+
return `_${relatedTableCapitalized.toLowerCase()}Ids: ObjectId[],\n ${relatedTableCapitalized.toLowerCase()}s?: I${relatedTableCapitalized}[]`;
|
150
150
|
}
|
151
151
|
else {
|
152
|
-
return
|
152
|
+
return `_${tableCapitalized.toLowerCase()}Ids: ObjectId[],\n ${tableCapitalized.toLowerCase()}s?: I${tableCapitalized}[]`;
|
153
153
|
}
|
154
154
|
default:
|
155
155
|
return '';
|
@@ -159,24 +159,24 @@ function generateSchemaFields(tableCapitalized, relatedTableCapitalized, relatio
|
|
159
159
|
switch (relationType) {
|
160
160
|
case 'one-to-one':
|
161
161
|
if (direction === 'forward') {
|
162
|
-
return
|
162
|
+
return `_${relatedTableCapitalized.toLowerCase()}Id: {\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${relatedTableCapitalized.toLowerCase()}',\n required: false\n }`;
|
163
163
|
}
|
164
164
|
else {
|
165
|
-
return
|
165
|
+
return `_${tableCapitalized.toLowerCase()}Id: {\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${tableCapitalized.toLowerCase()}',\n required: false\n }`;
|
166
166
|
}
|
167
167
|
case 'one-to-many':
|
168
168
|
if (direction === 'forward') {
|
169
|
-
return
|
169
|
+
return `_${relatedTableCapitalized.toLowerCase()}Id: {\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${relatedTableCapitalized.toLowerCase()}',\n required: false\n }`;
|
170
170
|
}
|
171
171
|
else {
|
172
172
|
return ''; // No field needed for reverse one-to-many
|
173
173
|
}
|
174
174
|
case 'many-to-many':
|
175
175
|
if (direction === 'forward') {
|
176
|
-
return
|
176
|
+
return `_${relatedTableCapitalized.toLowerCase()}Ids: [{\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${relatedTableCapitalized.toLowerCase()}'\n }]`;
|
177
177
|
}
|
178
178
|
else {
|
179
|
-
return
|
179
|
+
return `_${tableCapitalized.toLowerCase()}Ids: [{\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${tableCapitalized.toLowerCase()}'\n }]`;
|
180
180
|
}
|
181
181
|
default:
|
182
182
|
return '';
|
@@ -186,24 +186,24 @@ function generateVirtualFields(tableCapitalized, relatedTableCapitalized, relati
|
|
186
186
|
switch (relationType) {
|
187
187
|
case 'one-to-one':
|
188
188
|
if (direction === 'forward') {
|
189
|
-
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '${relatedTableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
189
|
+
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '_${relatedTableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
190
190
|
}
|
191
191
|
else {
|
192
|
-
return `// Virtual populate for ${tableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '${tableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
192
|
+
return `// Virtual populate for ${tableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '_${tableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
193
193
|
}
|
194
194
|
case 'one-to-many':
|
195
195
|
if (direction === 'forward') {
|
196
|
-
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '${relatedTableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
196
|
+
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '_${relatedTableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
197
197
|
}
|
198
198
|
else {
|
199
|
-
return `// Virtual populate for ${tableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}s', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '_id',\n foreignField: '${tableCapitalized.toLowerCase()}Id'\n});`;
|
199
|
+
return `// Virtual populate for ${tableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}s', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '_id',\n foreignField: '_${tableCapitalized.toLowerCase()}Id'\n});`;
|
200
200
|
}
|
201
201
|
case 'many-to-many':
|
202
202
|
if (direction === 'forward') {
|
203
|
-
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}s', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '${relatedTableCapitalized.toLowerCase()}Ids',\n foreignField: '_id'\n});`;
|
203
|
+
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}s', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '_${relatedTableCapitalized.toLowerCase()}Ids',\n foreignField: '_id'\n});`;
|
204
204
|
}
|
205
205
|
else {
|
206
|
-
return `// Virtual populate for ${tableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}s', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '${tableCapitalized.toLowerCase()}Ids',\n foreignField: '_id'\n});`;
|
206
|
+
return `// Virtual populate for ${tableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}s', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '_${tableCapitalized.toLowerCase()}Ids',\n foreignField: '_id'\n});`;
|
207
207
|
}
|
208
208
|
default:
|
209
209
|
return '';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"relation-generator.js","sourceRoot":"","sources":["../../src/services/relation-generator.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"relation-generator.js","sourceRoot":"","sources":["../../src/services/relation-generator.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
export interface TemplateUpdateOptions {
|
2
|
+
force?: boolean;
|
3
|
+
backup?: boolean;
|
4
|
+
template?: string;
|
5
|
+
}
|
6
|
+
export declare class TemplateUpdater {
|
7
|
+
private currentProjectPath;
|
8
|
+
private tempTemplatePath;
|
9
|
+
constructor();
|
10
|
+
update(options: TemplateUpdateOptions): Promise<void>;
|
11
|
+
private isValidProject;
|
12
|
+
private createBackup;
|
13
|
+
private downloadTemplate;
|
14
|
+
private getUpdateableFiles;
|
15
|
+
private checkConflicts;
|
16
|
+
private performUpdate;
|
17
|
+
private cleanup;
|
18
|
+
}
|
19
|
+
//# sourceMappingURL=template-updater.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"template-updater.d.ts","sourceRoot":"","sources":["../../src/services/template-updater.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAS;;IAO3B,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;YAyC7C,cAAc;YAOd,YAAY;YA8BZ,gBAAgB;YAyBhB,kBAAkB;YAmBlB,cAAc;YAqBd,aAAa;YAeb,OAAO;CAKtB"}
|
@@ -0,0 +1,183 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
19
|
+
var ownKeys = function(o) {
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
21
|
+
var ar = [];
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
23
|
+
return ar;
|
24
|
+
};
|
25
|
+
return ownKeys(o);
|
26
|
+
};
|
27
|
+
return function (mod) {
|
28
|
+
if (mod && mod.__esModule) return mod;
|
29
|
+
var result = {};
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
31
|
+
__setModuleDefault(result, mod);
|
32
|
+
return result;
|
33
|
+
};
|
34
|
+
})();
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
37
|
+
};
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
39
|
+
exports.TemplateUpdater = void 0;
|
40
|
+
const fs = __importStar(require("fs-extra"));
|
41
|
+
const path = __importStar(require("path"));
|
42
|
+
const glob = __importStar(require("glob"));
|
43
|
+
const chalk_1 = __importDefault(require("chalk"));
|
44
|
+
class TemplateUpdater {
|
45
|
+
constructor() {
|
46
|
+
this.currentProjectPath = process.cwd();
|
47
|
+
this.tempTemplatePath = path.join(this.currentProjectPath, '.temp-template');
|
48
|
+
}
|
49
|
+
async update(options) {
|
50
|
+
// Check if we're in a valid project directory
|
51
|
+
if (!await this.isValidProject()) {
|
52
|
+
throw new Error('Not a valid project directory. Please run this command from your project root.');
|
53
|
+
}
|
54
|
+
console.log(chalk_1.default.blue('🔄 Checking for template updates...'));
|
55
|
+
// Create backup if requested
|
56
|
+
if (options.backup) {
|
57
|
+
await this.createBackup();
|
58
|
+
}
|
59
|
+
try {
|
60
|
+
// Download latest template
|
61
|
+
await this.downloadTemplate(options.template || '@diagramers/api');
|
62
|
+
// Get list of files that can be updated
|
63
|
+
const updateableFiles = await this.getUpdateableFiles();
|
64
|
+
// Check for conflicts
|
65
|
+
const conflicts = await this.checkConflicts(updateableFiles);
|
66
|
+
if (conflicts.length > 0 && !options.force) {
|
67
|
+
console.log(chalk_1.default.yellow('⚠️ Conflicts detected in the following files:'));
|
68
|
+
conflicts.forEach(file => console.log(chalk_1.default.yellow(` - ${file}`)));
|
69
|
+
console.log(chalk_1.default.yellow('Use --force to overwrite these files'));
|
70
|
+
throw new Error('Update aborted due to conflicts');
|
71
|
+
}
|
72
|
+
// Perform the update
|
73
|
+
await this.performUpdate(updateableFiles, options.force);
|
74
|
+
console.log(chalk_1.default.green('✅ Project updated successfully!'));
|
75
|
+
console.log(chalk_1.default.yellow('📝 Review the changes and test your application'));
|
76
|
+
}
|
77
|
+
finally {
|
78
|
+
// Clean up temporary template
|
79
|
+
await this.cleanup();
|
80
|
+
}
|
81
|
+
}
|
82
|
+
async isValidProject() {
|
83
|
+
const packageJsonPath = path.join(this.currentProjectPath, 'package.json');
|
84
|
+
const mainTsPath = path.join(this.currentProjectPath, 'main.ts');
|
85
|
+
return await fs.pathExists(packageJsonPath) && await fs.pathExists(mainTsPath);
|
86
|
+
}
|
87
|
+
async createBackup() {
|
88
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
89
|
+
const backupPath = path.join(this.currentProjectPath, `backup-${timestamp}`);
|
90
|
+
// Create backup directory first
|
91
|
+
await fs.ensureDir(backupPath);
|
92
|
+
// Copy files individually to avoid the subdirectory issue
|
93
|
+
const filesToBackup = [
|
94
|
+
'src',
|
95
|
+
'main.ts',
|
96
|
+
'package.json',
|
97
|
+
'tsconfig.json',
|
98
|
+
'webpack.config.js',
|
99
|
+
'README.md',
|
100
|
+
'.gitignore'
|
101
|
+
];
|
102
|
+
for (const item of filesToBackup) {
|
103
|
+
const sourcePath = path.join(this.currentProjectPath, item);
|
104
|
+
const destPath = path.join(backupPath, item);
|
105
|
+
if (await fs.pathExists(sourcePath)) {
|
106
|
+
await fs.copy(sourcePath, destPath);
|
107
|
+
}
|
108
|
+
}
|
109
|
+
console.log(chalk_1.default.blue(`📦 Backup created at: ${backupPath}`));
|
110
|
+
}
|
111
|
+
async downloadTemplate(templatePackage) {
|
112
|
+
console.log(chalk_1.default.blue(`📦 Downloading latest template: ${templatePackage}`));
|
113
|
+
// Create temporary directory
|
114
|
+
await fs.ensureDir(this.tempTemplatePath);
|
115
|
+
// For now, we'll simulate downloading by copying from the CLI package
|
116
|
+
// In a real implementation, you'd use npm to download the latest version
|
117
|
+
const cliTemplatePath = path.resolve(__dirname, '../../../diagramers-api');
|
118
|
+
if (await fs.pathExists(cliTemplatePath)) {
|
119
|
+
await fs.copy(cliTemplatePath, this.tempTemplatePath, {
|
120
|
+
filter: (src) => {
|
121
|
+
const relativePath = path.relative(cliTemplatePath, src);
|
122
|
+
return !relativePath.startsWith('node_modules') &&
|
123
|
+
!relativePath.startsWith('.git') &&
|
124
|
+
!relativePath.startsWith('dist') &&
|
125
|
+
!relativePath.startsWith('lib');
|
126
|
+
}
|
127
|
+
});
|
128
|
+
}
|
129
|
+
else {
|
130
|
+
throw new Error('Template source not found. Please ensure the CLI is properly installed.');
|
131
|
+
}
|
132
|
+
}
|
133
|
+
async getUpdateableFiles() {
|
134
|
+
const updateablePatterns = [
|
135
|
+
'src/helpers/**/*',
|
136
|
+
'src/config/**/*',
|
137
|
+
'src/server/**/*',
|
138
|
+
'webpack.config.js',
|
139
|
+
'tsconfig.json'
|
140
|
+
];
|
141
|
+
const files = [];
|
142
|
+
for (const pattern of updateablePatterns) {
|
143
|
+
const matches = glob.sync(pattern, { cwd: this.tempTemplatePath });
|
144
|
+
files.push(...matches);
|
145
|
+
}
|
146
|
+
return files;
|
147
|
+
}
|
148
|
+
async checkConflicts(files) {
|
149
|
+
const conflicts = [];
|
150
|
+
for (const file of files) {
|
151
|
+
const templatePath = path.join(this.tempTemplatePath, file);
|
152
|
+
const projectPath = path.join(this.currentProjectPath, file);
|
153
|
+
if (await fs.pathExists(templatePath) && await fs.pathExists(projectPath)) {
|
154
|
+
const templateContent = await fs.readFile(templatePath, 'utf8');
|
155
|
+
const projectContent = await fs.readFile(projectPath, 'utf8');
|
156
|
+
// Simple conflict detection - if files are different
|
157
|
+
if (templateContent !== projectContent) {
|
158
|
+
conflicts.push(file);
|
159
|
+
}
|
160
|
+
}
|
161
|
+
}
|
162
|
+
return conflicts;
|
163
|
+
}
|
164
|
+
async performUpdate(files, force = false) {
|
165
|
+
console.log(chalk_1.default.blue('📝 Updating project files...'));
|
166
|
+
for (const file of files) {
|
167
|
+
const templatePath = path.join(this.tempTemplatePath, file);
|
168
|
+
const projectPath = path.join(this.currentProjectPath, file);
|
169
|
+
if (await fs.pathExists(templatePath)) {
|
170
|
+
await fs.ensureDir(path.dirname(projectPath));
|
171
|
+
await fs.copy(templatePath, projectPath);
|
172
|
+
console.log(chalk_1.default.green(`✅ Updated: ${file}`));
|
173
|
+
}
|
174
|
+
}
|
175
|
+
}
|
176
|
+
async cleanup() {
|
177
|
+
if (await fs.pathExists(this.tempTemplatePath)) {
|
178
|
+
await fs.remove(this.tempTemplatePath);
|
179
|
+
}
|
180
|
+
}
|
181
|
+
}
|
182
|
+
exports.TemplateUpdater = TemplateUpdater;
|
183
|
+
//# sourceMappingURL=template-updater.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"template-updater.js","sourceRoot":"","sources":["../../src/services/template-updater.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/commands/api.ts
CHANGED
@@ -57,12 +57,12 @@ export function apiCommand(program: Command) {
|
|
57
57
|
|
58
58
|
// Generate relation command
|
59
59
|
api
|
60
|
-
.command('generate:relation <table1> <table2>
|
60
|
+
.command('generate:relation <table1> <table2>')
|
61
61
|
.description('Generate a relationship between two existing tables')
|
62
62
|
.option('-t, --type <type>', 'Relationship type: one-to-one, one-to-many, many-to-many', 'one-to-one')
|
63
63
|
.action(async (table1: string, table2: string, options: any) => {
|
64
64
|
try {
|
65
|
-
const relationType = options
|
65
|
+
const relationType = options?.type || 'one-to-one';
|
66
66
|
console.log(chalk.blue(`🔗 Creating ${relationType} relationship between ${table1} and ${table2}...`));
|
67
67
|
await generateRelation(table1, table2, relationType);
|
68
68
|
console.log(chalk.green(`✅ Relationship created successfully!`));
|
package/src/commands/update.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Command } from 'commander';
|
2
|
-
import {
|
2
|
+
import { TemplateUpdater } from '../services/template-updater';
|
3
3
|
import chalk from 'chalk';
|
4
4
|
|
5
5
|
export function updateCommand(program: Command) {
|
@@ -12,7 +12,7 @@ export function updateCommand(program: Command) {
|
|
12
12
|
try {
|
13
13
|
console.log(chalk.blue('🔄 Checking for template updates...'));
|
14
14
|
|
15
|
-
const updater = new
|
15
|
+
const updater = new TemplateUpdater();
|
16
16
|
await updater.update(options);
|
17
17
|
|
18
18
|
console.log(chalk.green('✅ Project updated successfully!'));
|
@@ -9,11 +9,9 @@ export interface UpdateOptions {
|
|
9
9
|
}
|
10
10
|
|
11
11
|
export class ProjectUpdater {
|
12
|
-
private templatePath: string;
|
13
12
|
private currentProjectPath: string;
|
14
13
|
|
15
14
|
constructor() {
|
16
|
-
this.templatePath = path.resolve(__dirname, '../../..');
|
17
15
|
this.currentProjectPath = process.cwd();
|
18
16
|
}
|
19
17
|
|
@@ -71,39 +69,33 @@ export class ProjectUpdater {
|
|
71
69
|
}
|
72
70
|
|
73
71
|
private async getUpdateableFiles(): Promise<string[]> {
|
74
|
-
|
75
|
-
|
76
|
-
'src/
|
77
|
-
'src/
|
72
|
+
// For now, we'll update specific files that are commonly modified in templates
|
73
|
+
const updateableFiles = [
|
74
|
+
'src/helpers/dbcontext.ts',
|
75
|
+
'src/helpers/result.ts',
|
76
|
+
'src/helpers/enums.ts',
|
77
|
+
'src/config/index.ts',
|
78
|
+
'src/config/development.ts',
|
79
|
+
'src/config/staging.ts',
|
80
|
+
'src/config/production.ts',
|
81
|
+
'src/server/index.ts',
|
78
82
|
'webpack.config.js',
|
79
83
|
'tsconfig.json'
|
80
84
|
];
|
81
85
|
|
82
|
-
|
83
|
-
|
84
|
-
for (const pattern of templateFiles) {
|
85
|
-
const matches = glob.sync(pattern, { cwd: this.templatePath });
|
86
|
-
files.push(...matches);
|
87
|
-
}
|
88
|
-
|
89
|
-
return files;
|
86
|
+
return updateableFiles.filter(file => fs.existsSync(path.join(this.currentProjectPath, file)));
|
90
87
|
}
|
91
88
|
|
92
89
|
private async checkConflicts(files: string[]): Promise<string[]> {
|
93
90
|
const conflicts: string[] = [];
|
94
91
|
|
95
92
|
for (const file of files) {
|
96
|
-
const templatePath = path.join(this.templatePath, file);
|
97
93
|
const projectPath = path.join(this.currentProjectPath, file);
|
98
|
-
|
94
|
+
|
99
95
|
if (await fs.pathExists(projectPath)) {
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
// Simple conflict detection - if files are different
|
104
|
-
if (templateContent !== projectContent) {
|
105
|
-
conflicts.push(file);
|
106
|
-
}
|
96
|
+
// For now, we'll consider all files as potentially conflicting
|
97
|
+
// In a real implementation, you'd compare with the template version
|
98
|
+
conflicts.push(file);
|
107
99
|
}
|
108
100
|
}
|
109
101
|
|
@@ -111,15 +103,15 @@ export class ProjectUpdater {
|
|
111
103
|
}
|
112
104
|
|
113
105
|
private async performUpdate(files: string[]): Promise<void> {
|
106
|
+
console.log(chalk.blue('📝 Updating project files...'));
|
107
|
+
|
108
|
+
// For now, we'll just report what would be updated
|
109
|
+
// In a real implementation, you'd copy from the latest template
|
114
110
|
for (const file of files) {
|
115
|
-
|
116
|
-
const projectPath = path.join(this.currentProjectPath, file);
|
117
|
-
|
118
|
-
if (await fs.pathExists(templatePath)) {
|
119
|
-
await fs.ensureDir(path.dirname(projectPath));
|
120
|
-
await fs.copy(templatePath, projectPath);
|
121
|
-
console.log(chalk.green(`✅ Updated: ${file}`));
|
122
|
-
}
|
111
|
+
console.log(chalk.green(`✅ Would update: ${file}`));
|
123
112
|
}
|
113
|
+
|
114
|
+
console.log(chalk.yellow('⚠️ Update mechanism is being improved.'));
|
115
|
+
console.log(chalk.yellow(' For now, manual updates are recommended.'));
|
124
116
|
}
|
125
117
|
}
|
@@ -129,16 +129,16 @@ function generateEntityFields(tableCapitalized: string, relatedTableCapitalized:
|
|
129
129
|
|
130
130
|
case 'one-to-many':
|
131
131
|
if (direction === 'forward') {
|
132
|
-
return
|
132
|
+
return `_${relatedTableCapitalized.toLowerCase()}Id: ObjectId,\n ${relatedTableCapitalized.toLowerCase()}?: I${relatedTableCapitalized}`;
|
133
133
|
} else {
|
134
134
|
return `${tableCapitalized.toLowerCase()}s?: I${tableCapitalized}[]`;
|
135
135
|
}
|
136
136
|
|
137
137
|
case 'many-to-many':
|
138
138
|
if (direction === 'forward') {
|
139
|
-
return
|
139
|
+
return `_${relatedTableCapitalized.toLowerCase()}Ids: ObjectId[],\n ${relatedTableCapitalized.toLowerCase()}s?: I${relatedTableCapitalized}[]`;
|
140
140
|
} else {
|
141
|
-
return
|
141
|
+
return `_${tableCapitalized.toLowerCase()}Ids: ObjectId[],\n ${tableCapitalized.toLowerCase()}s?: I${tableCapitalized}[]`;
|
142
142
|
}
|
143
143
|
|
144
144
|
default:
|
@@ -150,23 +150,23 @@ function generateSchemaFields(tableCapitalized: string, relatedTableCapitalized:
|
|
150
150
|
switch (relationType) {
|
151
151
|
case 'one-to-one':
|
152
152
|
if (direction === 'forward') {
|
153
|
-
return
|
153
|
+
return `_${relatedTableCapitalized.toLowerCase()}Id: {\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${relatedTableCapitalized.toLowerCase()}',\n required: false\n }`;
|
154
154
|
} else {
|
155
|
-
return
|
155
|
+
return `_${tableCapitalized.toLowerCase()}Id: {\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${tableCapitalized.toLowerCase()}',\n required: false\n }`;
|
156
156
|
}
|
157
157
|
|
158
158
|
case 'one-to-many':
|
159
159
|
if (direction === 'forward') {
|
160
|
-
return
|
160
|
+
return `_${relatedTableCapitalized.toLowerCase()}Id: {\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${relatedTableCapitalized.toLowerCase()}',\n required: false\n }`;
|
161
161
|
} else {
|
162
162
|
return ''; // No field needed for reverse one-to-many
|
163
163
|
}
|
164
164
|
|
165
165
|
case 'many-to-many':
|
166
166
|
if (direction === 'forward') {
|
167
|
-
return
|
167
|
+
return `_${relatedTableCapitalized.toLowerCase()}Ids: [{\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${relatedTableCapitalized.toLowerCase()}'\n }]`;
|
168
168
|
} else {
|
169
|
-
return
|
169
|
+
return `_${tableCapitalized.toLowerCase()}Ids: [{\n type: mongoose.SchemaTypes.ObjectId,\n ref: '${tableCapitalized.toLowerCase()}'\n }]`;
|
170
170
|
}
|
171
171
|
|
172
172
|
default:
|
@@ -178,23 +178,23 @@ function generateVirtualFields(tableCapitalized: string, relatedTableCapitalized
|
|
178
178
|
switch (relationType) {
|
179
179
|
case 'one-to-one':
|
180
180
|
if (direction === 'forward') {
|
181
|
-
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '${relatedTableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
181
|
+
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '_${relatedTableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
182
182
|
} else {
|
183
|
-
return `// Virtual populate for ${tableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '${tableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
183
|
+
return `// Virtual populate for ${tableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '_${tableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
184
184
|
}
|
185
185
|
|
186
186
|
case 'one-to-many':
|
187
187
|
if (direction === 'forward') {
|
188
|
-
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '${relatedTableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
188
|
+
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '_${relatedTableCapitalized.toLowerCase()}Id',\n foreignField: '_id',\n justOne: true\n});`;
|
189
189
|
} else {
|
190
|
-
return `// Virtual populate for ${tableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}s', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '_id',\n foreignField: '${tableCapitalized.toLowerCase()}Id'\n});`;
|
190
|
+
return `// Virtual populate for ${tableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}s', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '_id',\n foreignField: '_${tableCapitalized.toLowerCase()}Id'\n});`;
|
191
191
|
}
|
192
192
|
|
193
193
|
case 'many-to-many':
|
194
194
|
if (direction === 'forward') {
|
195
|
-
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}s', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '${relatedTableCapitalized.toLowerCase()}Ids',\n foreignField: '_id'\n});`;
|
195
|
+
return `// Virtual populate for ${relatedTableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${relatedTableCapitalized.toLowerCase()}s', {\n ref: '${relatedTableCapitalized.toLowerCase()}',\n localField: '_${relatedTableCapitalized.toLowerCase()}Ids',\n foreignField: '_id'\n});`;
|
196
196
|
} else {
|
197
|
-
return `// Virtual populate for ${tableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}s', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '${tableCapitalized.toLowerCase()}Ids',\n foreignField: '_id'\n});`;
|
197
|
+
return `// Virtual populate for ${tableCapitalized.toLowerCase()}s\n${tableCapitalized.toLowerCase()}Schema.virtual('${tableCapitalized.toLowerCase()}s', {\n ref: '${tableCapitalized.toLowerCase()}',\n localField: '_${tableCapitalized.toLowerCase()}Ids',\n foreignField: '_id'\n});`;
|
198
198
|
}
|
199
199
|
|
200
200
|
default:
|
@@ -0,0 +1,184 @@
|
|
1
|
+
import * as fs from 'fs-extra';
|
2
|
+
import * as path from 'path';
|
3
|
+
import * as glob from 'glob';
|
4
|
+
import chalk from 'chalk';
|
5
|
+
|
6
|
+
export interface TemplateUpdateOptions {
|
7
|
+
force?: boolean;
|
8
|
+
backup?: boolean;
|
9
|
+
template?: string;
|
10
|
+
}
|
11
|
+
|
12
|
+
export class TemplateUpdater {
|
13
|
+
private currentProjectPath: string;
|
14
|
+
private tempTemplatePath: string;
|
15
|
+
|
16
|
+
constructor() {
|
17
|
+
this.currentProjectPath = process.cwd();
|
18
|
+
this.tempTemplatePath = path.join(this.currentProjectPath, '.temp-template');
|
19
|
+
}
|
20
|
+
|
21
|
+
async update(options: TemplateUpdateOptions): Promise<void> {
|
22
|
+
// Check if we're in a valid project directory
|
23
|
+
if (!await this.isValidProject()) {
|
24
|
+
throw new Error('Not a valid project directory. Please run this command from your project root.');
|
25
|
+
}
|
26
|
+
|
27
|
+
console.log(chalk.blue('🔄 Checking for template updates...'));
|
28
|
+
|
29
|
+
// Create backup if requested
|
30
|
+
if (options.backup) {
|
31
|
+
await this.createBackup();
|
32
|
+
}
|
33
|
+
|
34
|
+
try {
|
35
|
+
// Download latest template
|
36
|
+
await this.downloadTemplate(options.template || '@diagramers/api');
|
37
|
+
|
38
|
+
// Get list of files that can be updated
|
39
|
+
const updateableFiles = await this.getUpdateableFiles();
|
40
|
+
|
41
|
+
// Check for conflicts
|
42
|
+
const conflicts = await this.checkConflicts(updateableFiles);
|
43
|
+
|
44
|
+
if (conflicts.length > 0 && !options.force) {
|
45
|
+
console.log(chalk.yellow('⚠️ Conflicts detected in the following files:'));
|
46
|
+
conflicts.forEach(file => console.log(chalk.yellow(` - ${file}`)));
|
47
|
+
console.log(chalk.yellow('Use --force to overwrite these files'));
|
48
|
+
throw new Error('Update aborted due to conflicts');
|
49
|
+
}
|
50
|
+
|
51
|
+
// Perform the update
|
52
|
+
await this.performUpdate(updateableFiles, options.force);
|
53
|
+
|
54
|
+
console.log(chalk.green('✅ Project updated successfully!'));
|
55
|
+
console.log(chalk.yellow('📝 Review the changes and test your application'));
|
56
|
+
} finally {
|
57
|
+
// Clean up temporary template
|
58
|
+
await this.cleanup();
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
private async isValidProject(): Promise<boolean> {
|
63
|
+
const packageJsonPath = path.join(this.currentProjectPath, 'package.json');
|
64
|
+
const mainTsPath = path.join(this.currentProjectPath, 'main.ts');
|
65
|
+
|
66
|
+
return await fs.pathExists(packageJsonPath) && await fs.pathExists(mainTsPath);
|
67
|
+
}
|
68
|
+
|
69
|
+
private async createBackup(): Promise<void> {
|
70
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
71
|
+
const backupPath = path.join(this.currentProjectPath, `backup-${timestamp}`);
|
72
|
+
|
73
|
+
// Create backup directory first
|
74
|
+
await fs.ensureDir(backupPath);
|
75
|
+
|
76
|
+
// Copy files individually to avoid the subdirectory issue
|
77
|
+
const filesToBackup = [
|
78
|
+
'src',
|
79
|
+
'main.ts',
|
80
|
+
'package.json',
|
81
|
+
'tsconfig.json',
|
82
|
+
'webpack.config.js',
|
83
|
+
'README.md',
|
84
|
+
'.gitignore'
|
85
|
+
];
|
86
|
+
|
87
|
+
for (const item of filesToBackup) {
|
88
|
+
const sourcePath = path.join(this.currentProjectPath, item);
|
89
|
+
const destPath = path.join(backupPath, item);
|
90
|
+
|
91
|
+
if (await fs.pathExists(sourcePath)) {
|
92
|
+
await fs.copy(sourcePath, destPath);
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
console.log(chalk.blue(`📦 Backup created at: ${backupPath}`));
|
97
|
+
}
|
98
|
+
|
99
|
+
private async downloadTemplate(templatePackage: string): Promise<void> {
|
100
|
+
console.log(chalk.blue(`📦 Downloading latest template: ${templatePackage}`));
|
101
|
+
|
102
|
+
// Create temporary directory
|
103
|
+
await fs.ensureDir(this.tempTemplatePath);
|
104
|
+
|
105
|
+
// For now, we'll simulate downloading by copying from the CLI package
|
106
|
+
// In a real implementation, you'd use npm to download the latest version
|
107
|
+
const cliTemplatePath = path.resolve(__dirname, '../../../diagramers-api');
|
108
|
+
|
109
|
+
if (await fs.pathExists(cliTemplatePath)) {
|
110
|
+
await fs.copy(cliTemplatePath, this.tempTemplatePath, {
|
111
|
+
filter: (src) => {
|
112
|
+
const relativePath = path.relative(cliTemplatePath, src);
|
113
|
+
return !relativePath.startsWith('node_modules') &&
|
114
|
+
!relativePath.startsWith('.git') &&
|
115
|
+
!relativePath.startsWith('dist') &&
|
116
|
+
!relativePath.startsWith('lib');
|
117
|
+
}
|
118
|
+
});
|
119
|
+
} else {
|
120
|
+
throw new Error('Template source not found. Please ensure the CLI is properly installed.');
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
private async getUpdateableFiles(): Promise<string[]> {
|
125
|
+
const updateablePatterns = [
|
126
|
+
'src/helpers/**/*',
|
127
|
+
'src/config/**/*',
|
128
|
+
'src/server/**/*',
|
129
|
+
'webpack.config.js',
|
130
|
+
'tsconfig.json'
|
131
|
+
];
|
132
|
+
|
133
|
+
const files: string[] = [];
|
134
|
+
|
135
|
+
for (const pattern of updateablePatterns) {
|
136
|
+
const matches = glob.sync(pattern, { cwd: this.tempTemplatePath });
|
137
|
+
files.push(...matches);
|
138
|
+
}
|
139
|
+
|
140
|
+
return files;
|
141
|
+
}
|
142
|
+
|
143
|
+
private async checkConflicts(files: string[]): Promise<string[]> {
|
144
|
+
const conflicts: string[] = [];
|
145
|
+
|
146
|
+
for (const file of files) {
|
147
|
+
const templatePath = path.join(this.tempTemplatePath, file);
|
148
|
+
const projectPath = path.join(this.currentProjectPath, file);
|
149
|
+
|
150
|
+
if (await fs.pathExists(templatePath) && await fs.pathExists(projectPath)) {
|
151
|
+
const templateContent = await fs.readFile(templatePath, 'utf8');
|
152
|
+
const projectContent = await fs.readFile(projectPath, 'utf8');
|
153
|
+
|
154
|
+
// Simple conflict detection - if files are different
|
155
|
+
if (templateContent !== projectContent) {
|
156
|
+
conflicts.push(file);
|
157
|
+
}
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
return conflicts;
|
162
|
+
}
|
163
|
+
|
164
|
+
private async performUpdate(files: string[], force: boolean = false): Promise<void> {
|
165
|
+
console.log(chalk.blue('📝 Updating project files...'));
|
166
|
+
|
167
|
+
for (const file of files) {
|
168
|
+
const templatePath = path.join(this.tempTemplatePath, file);
|
169
|
+
const projectPath = path.join(this.currentProjectPath, file);
|
170
|
+
|
171
|
+
if (await fs.pathExists(templatePath)) {
|
172
|
+
await fs.ensureDir(path.dirname(projectPath));
|
173
|
+
await fs.copy(templatePath, projectPath);
|
174
|
+
console.log(chalk.green(`✅ Updated: ${file}`));
|
175
|
+
}
|
176
|
+
}
|
177
|
+
}
|
178
|
+
|
179
|
+
private async cleanup(): Promise<void> {
|
180
|
+
if (await fs.pathExists(this.tempTemplatePath)) {
|
181
|
+
await fs.remove(this.tempTemplatePath);
|
182
|
+
}
|
183
|
+
}
|
184
|
+
}
|