@autobe/compiler 0.5.2 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/AutoBeInterfaceCompiler.js +1 -1
- package/lib/AutoBeInterfaceCompiler.js.map +1 -1
- package/lib/AutoBePrismaCompiler.d.ts +1 -1
- package/lib/AutoBePrismaCompiler.js +2 -2
- package/lib/AutoBePrismaCompiler.js.map +1 -1
- package/lib/prisma/validatePrismaApplication.d.ts +1 -1
- package/lib/prisma/validatePrismaApplication.js +107 -67
- package/lib/prisma/validatePrismaApplication.js.map +1 -1
- package/lib/raw/AutoBeCompilerConstants.d.ts +1 -1
- package/lib/utils/StringUtil.d.ts +4 -0
- package/lib/utils/StringUtil.js +43 -0
- package/lib/utils/StringUtil.js.map +1 -0
- package/package.json +2 -2
- package/src/AutoBePrismaCompiler.ts +1 -2
- package/src/prisma/validatePrismaApplication.ts +120 -78
- package/src/raw/AutoBeCompilerConstants.ts +1 -1
- package/src/utils/StringUtil.ts +45 -0
|
@@ -40,7 +40,7 @@ class AutoBeInterfaceCompiler {
|
|
|
40
40
|
? yield beautify(value)
|
|
41
41
|
: value,
|
|
42
42
|
];
|
|
43
|
-
})))), { "packages/api/swagger.json": JSON.stringify(swagger, null, 2), "README.md": "# AutoBE Generated Backend Server\n\n\n\nA backend repository generated by [`@autobe`](https://github.com/wrtnlabs/autobe).\n\nThis backend program was automatically generated using [`@autobe`](https://github.com/wrtnlabs/autobe), the AI vibe coding agent for backend servers of below stack.\n\n- TypeScript\n- NestJS / Nestia\n- Prisma\n- Postgres\n\n## Project Structure\n\nThis template project has categorized directories like below.\n\
|
|
43
|
+
})))), { "packages/api/swagger.json": JSON.stringify(swagger, null, 2), "README.md": "# AutoBE Generated Backend Server\n\n\n\nA backend repository generated by [`@autobe`](https://github.com/wrtnlabs/autobe).\n\nThis backend program was automatically generated using [`@autobe`](https://github.com/wrtnlabs/autobe), the AI vibe coding agent for backend servers of below stack.\n\n- TypeScript\n- NestJS / Nestia\n- Prisma\n- Postgres\n\n## Project Structure\n\nThis template project has categorized directories like below.\n\nAt first, [`@autobe`](https://github.com/wrtnlabs/autobe) generated files are placed like below:\n\n- analysis agent: [docs/analysis](docs/analysis)\n- prisma agent\n - [prisma/schema](prisma/schema)\n - [docs/ERD.md](docs/ERD.md)\n- interface agent\n - [src/api/structures](src/api/structures): DTO structures\n - [src/api/controllers](src/controllers): API controller classes\n - [test/features](test/features): List of e2e test functions\n\nFrom a source code perspective, all backend files are organized within the `src` directory.\n\nWhen you build the TypeScript source files, compiled files will be placed in the `lib` directory according to the [tsconfig.json](tsconfig.json) configuration.\n\nOtherwise you build client [SDK](https://nestia.io/docs/sdk) library for npm publishing and their compiled files would be placed into the [packages/api](packages/api) directory.\n\n - [packages/api](packages/api): SDK module built by `npm run build:api`\n - [src](src): Backend source directory\n - [src/api](src/api): Client SDK that would be published to the `@ORGANIZATION/PROJECT-api`\n - [src/api/functional](src/api/functional): API functions generated by the [`nestia`](https://github.com/samchon/nestia)\n - [src/api/structures](src/api/structures): DTO structures\n - [src/controllers](src/controllers): Controller classes of the Main Program\n - [**test/**](test): Test Automation Program\n - [test/features](test/features): List of test functions\n - [nestia.config.ts](nestia.config.ts): Configuration file of [`nestia`](https://github.com/samchon/nestia)\n - [package.json](package.json): NPM configuration\n - [tsconfig.json](tsconfig.json): TypeScript configuration for the main program\n\n## NPM Run Commands\n\nList of the run commands defined in the [package.json](package.json) are like below:\n\n - Test\n - **`test`**: Run test automation program\n - `benchmark`: Run performance benchmark program\n - Build\n - `build`: Build everything\n - `build:main`: Build main program (`src` directory)\n - `build:test` Build test automation program (`test` directory)\n - `build:sdk`: Build SDK into main program only\n - `build:swagger`: Build Swagger Documents\n - **`dev`**: Incremental build for development (test program)\n - Deploy\n - `package:api`: Build and deploy the SDK library to the NPM\n - `start`: Start the backend server\n - `start:dev`: Start the backend server with incremental build and reload\n - Webpack\n - `webpack`: Run webpack bundler\n - `webpack:start`: Start the backend server built by webpack\n - `webpack:test`: Run test program to the webpack built\n\n## Specialization\n\nTransform this template project to be yours.\n\nWhen you've created a new backend project through this template project, you can specialize it to be suitable for you by changing some words. Replace below words through IDE specific function like `Edit > Replace in Files` (*Ctrl + Shift + H*), who've been supported by the VSCode.\n\n| Before | After\n|--------------|----------------------------------------\n| ORGANIZATION | Your account or corporation name\n| PROJECT | Your own project name\n| AUTHOR | Author name\n| https://github.com/samchon/nestia-start | Your repository URL" /* AutoBeCompilerConstants.README */ });
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoBeInterfaceCompiler.js","sourceRoot":"","sources":["../src/AutoBeInterfaceCompiler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,6CAA2D;AAC3D,8CAAwD;AACxD,yGAA+D;AAC/D,sDAA8B;AAC9B,uCAAkC;AAGlC,iDAA8C;AAE9C,MAAa,uBAAuB;IACrB,OAAO,CAClB,QAAiC;;YAEjC,MAAM,OAAO,GAAsB,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnE,MAAM,OAAO,GAA6B,IAAI,kCAAwB,CACpE,OAAO,CACR,CAAC;YACF,MAAM,KAAK,GAA2B,OAAO,CAAC,IAAI,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE;oBACN,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,0DAA0D;iBAClE;aACF,CAAC,CAAC;YACH,uCACK,MAAM,CAAC,WAAW,CACnB,MAAM,qBAAS,CAAC,QAAQ,CACtB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EACrB,KAAqB,EAAE,0CAAhB,CAAC,GAAG,EAAE,KAAK,CAAC;gBAAK,OAAA;oBACtB,GAAG;oBACH,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,KAAK;wBACpD,CAAC,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC;wBACvB,CAAC,CAAC,KAAK;iBACV,CAAA;cAAA,CACF,CACF,KACD,2BAA2B,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAC7D,WAAW,
|
|
1
|
+
{"version":3,"file":"AutoBeInterfaceCompiler.js","sourceRoot":"","sources":["../src/AutoBeInterfaceCompiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AutoBePrisma, IAutoBePrismaCompiler, IAutoBePrismaCompilerProps, IAutoBePrismaCompilerResult, IAutoBePrismaValidation } from "@autobe/interface";
|
|
2
2
|
export declare class AutoBePrismaCompiler implements IAutoBePrismaCompiler {
|
|
3
3
|
compile(props: IAutoBePrismaCompilerProps): Promise<IAutoBePrismaCompilerResult>;
|
|
4
|
-
validate(app: AutoBePrisma.IApplication
|
|
4
|
+
validate(app: AutoBePrisma.IApplication): Promise<IAutoBePrismaValidation>;
|
|
5
5
|
write(app: AutoBePrisma.IApplication): Promise<Record<string, string>>;
|
|
6
6
|
}
|
|
@@ -20,9 +20,9 @@ class AutoBePrismaCompiler {
|
|
|
20
20
|
return compiler.compile(props.files);
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
-
validate(app
|
|
23
|
+
validate(app) {
|
|
24
24
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
-
return (0, validatePrismaApplication_1.validatePrismaApplication)(app
|
|
25
|
+
return (0, validatePrismaApplication_1.validatePrismaApplication)(app);
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
write(app) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoBePrismaCompiler.js","sourceRoot":"","sources":["../src/AutoBePrismaCompiler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAOA,+CAA2C;AAE3C,kFAA+E;AAC/E,4EAAyE;AAEzE,MAAa,oBAAoB;IAClB,OAAO,CAClB,KAAiC;;YAEjC,MAAM,QAAQ,GAAgB,IAAI,0BAAW,EAAE,CAAC;YAChD,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;KAAA;IAEY,QAAQ,CACnB,GAA8B
|
|
1
|
+
{"version":3,"file":"AutoBePrismaCompiler.js","sourceRoot":"","sources":["../src/AutoBePrismaCompiler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAOA,+CAA2C;AAE3C,kFAA+E;AAC/E,4EAAyE;AAEzE,MAAa,oBAAoB;IAClB,OAAO,CAClB,KAAiC;;YAEjC,MAAM,QAAQ,GAAgB,IAAI,0BAAW,EAAE,CAAC;YAChD,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;KAAA;IAEY,QAAQ,CACnB,GAA8B;;YAE9B,OAAO,IAAA,qDAAyB,EAAC,GAAG,CAAC,CAAC;QACxC,CAAC;KAAA;IAEY,KAAK,CAChB,GAA8B;;YAE9B,OAAO,IAAA,+CAAsB,EAAC,GAAG,CAAC,CAAC;QACrC,CAAC;KAAA;CACF;AAnBD,oDAmBC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { AutoBePrisma, IAutoBePrismaValidation } from "@autobe/interface";
|
|
2
|
-
export declare function validatePrismaApplication(application: AutoBePrisma.IApplication
|
|
2
|
+
export declare function validatePrismaApplication(application: AutoBePrisma.IApplication): IAutoBePrismaValidation;
|
|
@@ -3,11 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.validatePrismaApplication = validatePrismaApplication;
|
|
4
4
|
const tstl_1 = require("tstl");
|
|
5
5
|
const MapUtil_1 = require("../utils/MapUtil");
|
|
6
|
-
|
|
6
|
+
const StringUtil_1 = require("../utils/StringUtil");
|
|
7
|
+
function validatePrismaApplication(application) {
|
|
7
8
|
const dict = new Map(application.files
|
|
8
|
-
.map((file) => file.models)
|
|
9
|
-
.
|
|
10
|
-
|
|
9
|
+
.map((file, fi) => file.models.map((model, mi) => [
|
|
10
|
+
model.name,
|
|
11
|
+
{
|
|
12
|
+
file,
|
|
13
|
+
model,
|
|
14
|
+
fileIndex: fi,
|
|
15
|
+
modelIndex: mi,
|
|
16
|
+
},
|
|
17
|
+
]))
|
|
18
|
+
.flat());
|
|
11
19
|
const errors = [
|
|
12
20
|
...validateDuplicatedFiles(application),
|
|
13
21
|
...validateDuplicatedModels(application),
|
|
@@ -22,19 +30,17 @@ function validatePrismaApplication(application, previous) {
|
|
|
22
30
|
];
|
|
23
31
|
}))
|
|
24
32
|
.flat(2),
|
|
25
|
-
...(previous ? validateOmissions(application, previous) : []),
|
|
26
33
|
];
|
|
27
34
|
return errors.length === 0
|
|
28
|
-
? {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return [];
|
|
35
|
+
? {
|
|
36
|
+
success: true,
|
|
37
|
+
data: application,
|
|
38
|
+
}
|
|
39
|
+
: {
|
|
40
|
+
success: false,
|
|
41
|
+
data: application,
|
|
42
|
+
errors,
|
|
43
|
+
};
|
|
38
44
|
}
|
|
39
45
|
/* -----------------------------------------------------------
|
|
40
46
|
DUPLICATES
|
|
@@ -130,14 +136,14 @@ function validateDuplicatedFields(dict, model, accessor) {
|
|
|
130
136
|
path: `${accessor}.plainFields[${i}].name`,
|
|
131
137
|
table: model.name,
|
|
132
138
|
field: field.name,
|
|
133
|
-
message:
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
message: StringUtil_1.StringUtil.trim `
|
|
140
|
+
There's a same named table in the application.
|
|
141
|
+
|
|
142
|
+
Check whether the field has been designed for denormalization
|
|
143
|
+
like pre-calculation. If do so, remove the field.
|
|
144
|
+
|
|
145
|
+
Otherwise, change the field name to something else.
|
|
146
|
+
`,
|
|
141
147
|
});
|
|
142
148
|
});
|
|
143
149
|
return errors;
|
|
@@ -185,14 +191,14 @@ function validateDuplicatedIndexes(model, accessor) {
|
|
|
185
191
|
path: `${accessor}.uniqueIndexes[${i}].fieldNames[0]`,
|
|
186
192
|
table: model.name,
|
|
187
193
|
field: null,
|
|
188
|
-
message:
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
message: StringUtil_1.StringUtil.trim `
|
|
195
|
+
Duplicated unique index found (${subset[0]}).
|
|
196
|
+
|
|
197
|
+
You have defined an unique index that is already included,
|
|
198
|
+
in the foreign field with unique constraint.
|
|
199
|
+
|
|
200
|
+
Remove this unique index to avoid the duplication.
|
|
201
|
+
`,
|
|
196
202
|
});
|
|
197
203
|
const cIndex = model.uniqueIndexes.findIndex((u) => u.fieldNames.length === subset.length &&
|
|
198
204
|
u.fieldNames.every((name, k) => name === subset[k]));
|
|
@@ -201,15 +207,15 @@ function validateDuplicatedIndexes(model, accessor) {
|
|
|
201
207
|
path: `${accessor}.uniqueIndexes[${i}].fieldNames`,
|
|
202
208
|
table: model.name,
|
|
203
209
|
field: null,
|
|
204
|
-
message:
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
210
|
+
message: StringUtil_1.StringUtil.trim `
|
|
211
|
+
Subset unique index found (${subset.join(", ")}).
|
|
212
|
+
|
|
213
|
+
You have defined an unique index with multiple fields,
|
|
214
|
+
but its subset is already defined as an unique index.
|
|
215
|
+
|
|
216
|
+
Consider to change the unique index to a plain index,
|
|
217
|
+
or drop the redundant unique index please.
|
|
218
|
+
`,
|
|
213
219
|
});
|
|
214
220
|
});
|
|
215
221
|
});
|
|
@@ -224,14 +230,14 @@ function validateDuplicatedIndexes(model, accessor) {
|
|
|
224
230
|
path: `${accessor}.plainIndexes[${i}].fieldNames`,
|
|
225
231
|
table: model.name,
|
|
226
232
|
field: null,
|
|
227
|
-
message:
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
233
|
+
message: StringUtil_1.StringUtil.trim `
|
|
234
|
+
Superset plain index found (${y.fieldNames.join(", ")}).
|
|
235
|
+
|
|
236
|
+
You have defined a plain index with multiple fields,
|
|
237
|
+
but its superset is already defined as another plain index.
|
|
238
|
+
|
|
239
|
+
As subset index is vulnerable, drop this plain index please.
|
|
240
|
+
`,
|
|
235
241
|
});
|
|
236
242
|
});
|
|
237
243
|
});
|
|
@@ -242,12 +248,13 @@ function validateDuplicatedIndexes(model, accessor) {
|
|
|
242
248
|
path: `${accessor}.ginIndexes[].fieldName`,
|
|
243
249
|
table: model.name,
|
|
244
250
|
field: null,
|
|
245
|
-
message:
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
+
message: StringUtil_1.StringUtil.trim `
|
|
252
|
+
Duplicated GIN index found.
|
|
253
|
+
|
|
254
|
+
GIN index can only be used once per field.
|
|
255
|
+
|
|
256
|
+
Please remove the duplicated GIN indexes.
|
|
257
|
+
`,
|
|
251
258
|
});
|
|
252
259
|
return errors;
|
|
253
260
|
}
|
|
@@ -305,24 +312,24 @@ function validateIndexes(model, accessor) {
|
|
|
305
312
|
path: `${accessor}.ginIndexes[${i}].fieldName`,
|
|
306
313
|
table: model.name,
|
|
307
314
|
field: null,
|
|
308
|
-
message:
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
315
|
+
message: StringUtil_1.StringUtil.trim `
|
|
316
|
+
GIN index can only be used on string typed field.
|
|
317
|
+
However, the target field ${gin.fieldName} does not exist
|
|
318
|
+
in the {@link plainFields}.
|
|
319
|
+
`,
|
|
313
320
|
});
|
|
314
321
|
else if (model.plainFields[pIndex].type !== "string")
|
|
315
322
|
errors.push({
|
|
316
323
|
path: `${accessor}.ginIndexes[${i}].fieldName`,
|
|
317
324
|
table: model.name,
|
|
318
325
|
field: model.plainFields[pIndex].name,
|
|
319
|
-
message:
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
+
message: StringUtil_1.StringUtil.trim `
|
|
327
|
+
GIN index can only be used on string typed field.
|
|
328
|
+
However, the target field ${gin.fieldName} is not string,
|
|
329
|
+
but ${model.plainFields[pIndex].type}.
|
|
330
|
+
|
|
331
|
+
- accessor of the wrong typed field: ${`${accessor}.plainFields[${pIndex}].type`},
|
|
332
|
+
`,
|
|
326
333
|
});
|
|
327
334
|
},
|
|
328
335
|
});
|
|
@@ -332,13 +339,46 @@ function validateReferences(model, accessor, dict) {
|
|
|
332
339
|
const errors = [];
|
|
333
340
|
model.foreignFields.forEach((field, i) => {
|
|
334
341
|
const target = dict.get(field.relation.targetModel);
|
|
335
|
-
if (target === undefined)
|
|
342
|
+
if (target === undefined) {
|
|
343
|
+
// CHECK EXISTENCE
|
|
336
344
|
errors.push({
|
|
337
345
|
path: `${accessor}.foreignFields[${i}].relation.targetModel`,
|
|
338
346
|
table: model.name,
|
|
339
347
|
field: field.name,
|
|
340
348
|
message: `Target model ${field.relation.targetModel} does not exist.`,
|
|
341
349
|
});
|
|
350
|
+
}
|
|
351
|
+
else if (target.model !== model) {
|
|
352
|
+
// CHECK CROSS REFERENCE
|
|
353
|
+
target.model.foreignFields.forEach((oppo, j) => {
|
|
354
|
+
if (oppo.relation.targetModel === model.name) {
|
|
355
|
+
errors.push({
|
|
356
|
+
path: `${accessor}.foreignFields[${i}].relation.targetModel`,
|
|
357
|
+
table: model.name,
|
|
358
|
+
field: field.name,
|
|
359
|
+
message: StringUtil_1.StringUtil.trim `
|
|
360
|
+
Cross-reference dependency detected between models.
|
|
361
|
+
|
|
362
|
+
- accessor of opposite side: application.files[${target.fileIndex}].models[${target.modelIndex}].foreignFields[${j}].relation.targetModel
|
|
363
|
+
|
|
364
|
+
Cross-references (circular dependencies) are not permitted in AutoBe Prisma schemas.
|
|
365
|
+
|
|
366
|
+
To resolve this issue:
|
|
367
|
+
|
|
368
|
+
1. Remove one of the foreign key fields from either model
|
|
369
|
+
2. Keep only the foreign key that represents the primary relationship direction
|
|
370
|
+
3. Remove any related indexes that reference the deleted foreign key field
|
|
371
|
+
|
|
372
|
+
The foreign key field to remove is typically:
|
|
373
|
+
|
|
374
|
+
- A redundant field that can be computed from the existing relationship
|
|
375
|
+
- A field that duplicates information already accessible through the primary relationship
|
|
376
|
+
|
|
377
|
+
Please eliminate the circular dependency and try again.`,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
}
|
|
342
382
|
});
|
|
343
383
|
return errors;
|
|
344
384
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatePrismaApplication.js","sourceRoot":"","sources":["../../src/prisma/validatePrismaApplication.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validatePrismaApplication.js","sourceRoot":"","sources":["../../src/prisma/validatePrismaApplication.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare const enum AutoBeCompilerConstants {
|
|
2
|
-
README = "# AutoBE Generated Backend Server\n\n\n\nA backend repository generated by [`@autobe`](https://github.com/wrtnlabs/autobe).\n\nThis backend program was automatically generated using [`@autobe`](https://github.com/wrtnlabs/autobe), the AI vibe coding agent for backend servers of below stack.\n\n- TypeScript\n- NestJS / Nestia\n- Prisma\n- Postgres\n\n## Project Structure\n\nThis template project has categorized directories like below.\n\
|
|
2
|
+
README = "# AutoBE Generated Backend Server\n\n\n\nA backend repository generated by [`@autobe`](https://github.com/wrtnlabs/autobe).\n\nThis backend program was automatically generated using [`@autobe`](https://github.com/wrtnlabs/autobe), the AI vibe coding agent for backend servers of below stack.\n\n- TypeScript\n- NestJS / Nestia\n- Prisma\n- Postgres\n\n## Project Structure\n\nThis template project has categorized directories like below.\n\nAt first, [`@autobe`](https://github.com/wrtnlabs/autobe) generated files are placed like below:\n\n- analysis agent: [docs/analysis](docs/analysis)\n- prisma agent\n - [prisma/schema](prisma/schema)\n - [docs/ERD.md](docs/ERD.md)\n- interface agent\n - [src/api/structures](src/api/structures): DTO structures\n - [src/api/controllers](src/controllers): API controller classes\n - [test/features](test/features): List of e2e test functions\n\nFrom a source code perspective, all backend files are organized within the `src` directory.\n\nWhen you build the TypeScript source files, compiled files will be placed in the `lib` directory according to the [tsconfig.json](tsconfig.json) configuration.\n\nOtherwise you build client [SDK](https://nestia.io/docs/sdk) library for npm publishing and their compiled files would be placed into the [packages/api](packages/api) directory.\n\n - [packages/api](packages/api): SDK module built by `npm run build:api`\n - [src](src): Backend source directory\n - [src/api](src/api): Client SDK that would be published to the `@ORGANIZATION/PROJECT-api`\n - [src/api/functional](src/api/functional): API functions generated by the [`nestia`](https://github.com/samchon/nestia)\n - [src/api/structures](src/api/structures): DTO structures\n - [src/controllers](src/controllers): Controller classes of the Main Program\n - [**test/**](test): Test Automation Program\n - [test/features](test/features): List of test functions\n - [nestia.config.ts](nestia.config.ts): Configuration file of [`nestia`](https://github.com/samchon/nestia)\n - [package.json](package.json): NPM configuration\n - [tsconfig.json](tsconfig.json): TypeScript configuration for the main program\n\n## NPM Run Commands\n\nList of the run commands defined in the [package.json](package.json) are like below:\n\n - Test\n - **`test`**: Run test automation program\n - `benchmark`: Run performance benchmark program\n - Build\n - `build`: Build everything\n - `build:main`: Build main program (`src` directory)\n - `build:test` Build test automation program (`test` directory)\n - `build:sdk`: Build SDK into main program only\n - `build:swagger`: Build Swagger Documents\n - **`dev`**: Incremental build for development (test program)\n - Deploy\n - `package:api`: Build and deploy the SDK library to the NPM\n - `start`: Start the backend server\n - `start:dev`: Start the backend server with incremental build and reload\n - Webpack\n - `webpack`: Run webpack bundler\n - `webpack:start`: Start the backend server built by webpack\n - `webpack:test`: Run test program to the webpack built\n\n## Specialization\n\nTransform this template project to be yours.\n\nWhen you've created a new backend project through this template project, you can specialize it to be suitable for you by changing some words. Replace below words through IDE specific function like `Edit > Replace in Files` (*Ctrl + Shift + H*), who've been supported by the VSCode.\n\n| Before | After\n|--------------|----------------------------------------\n| ORGANIZATION | Your account or corporation name\n| PROJECT | Your own project name\n| AUTHOR | Author name\n| https://github.com/samchon/nestia-start | Your repository URL"
|
|
3
3
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StringUtil = void 0;
|
|
4
|
+
var StringUtil;
|
|
5
|
+
(function (StringUtil) {
|
|
6
|
+
function trim(strings, ...values) {
|
|
7
|
+
var _a;
|
|
8
|
+
let result = strings[0];
|
|
9
|
+
for (let i = 0; i < values.length; i++) {
|
|
10
|
+
result += String(values[i]) + strings[i + 1];
|
|
11
|
+
}
|
|
12
|
+
const lines = result.split("\n");
|
|
13
|
+
while (lines.length > 0 && lines[0].trim() === "") {
|
|
14
|
+
lines.shift();
|
|
15
|
+
}
|
|
16
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === "") {
|
|
17
|
+
lines.pop();
|
|
18
|
+
}
|
|
19
|
+
if (lines.length === 0)
|
|
20
|
+
return "";
|
|
21
|
+
const firstNonEmptyLine = lines.find((line) => line.trim() !== "");
|
|
22
|
+
if (!firstNonEmptyLine)
|
|
23
|
+
return "";
|
|
24
|
+
const leadingWhitespace = ((_a = firstNonEmptyLine.match(/^[ \t]*/)) === null || _a === void 0 ? void 0 : _a[0]) || "";
|
|
25
|
+
const indentLength = leadingWhitespace.length;
|
|
26
|
+
const trimmedLines = lines.map((line) => {
|
|
27
|
+
if (line.trim() === "")
|
|
28
|
+
return "";
|
|
29
|
+
return line.slice(indentLength);
|
|
30
|
+
});
|
|
31
|
+
return trimmedLines.join("\n");
|
|
32
|
+
}
|
|
33
|
+
StringUtil.trim = trim;
|
|
34
|
+
function singleLine(strings, ...values) {
|
|
35
|
+
let result = strings[0];
|
|
36
|
+
for (let i = 0; i < values.length; i++) {
|
|
37
|
+
result += String(values[i]) + strings[i + 1];
|
|
38
|
+
}
|
|
39
|
+
return result.replace(/\n/g, " ").replace(/\s+/g, " ").trim();
|
|
40
|
+
}
|
|
41
|
+
StringUtil.singleLine = singleLine;
|
|
42
|
+
})(StringUtil || (exports.StringUtil = StringUtil = {}));
|
|
43
|
+
//# sourceMappingURL=StringUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringUtil.js","sourceRoot":"","sources":["../../src/utils/StringUtil.ts"],"names":[],"mappings":";;;AAAA,IAAiB,UAAU,CA4C1B;AA5CD,WAAiB,UAAU;IACzB,SAAgB,IAAI,CAClB,OAA6B,EAC7B,GAAG,MAAa;;QAEhB,IAAI,MAAM,GAAW,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,KAAK,GAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACjE,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,iBAAiB,GAAuB,KAAK,CAAC,IAAI,CACtD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAC7B,CAAC;QACF,IAAI,CAAC,iBAAiB;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,iBAAiB,GACrB,CAAA,MAAA,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,0CAAG,CAAC,CAAC,KAAI,EAAE,CAAC;QAChD,MAAM,YAAY,GAAW,iBAAiB,CAAC,MAAM,CAAC;QACtD,MAAM,YAAY,GAAa,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,OAAO,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IA/Be,eAAI,OA+BnB,CAAA;IAED,SAAgB,UAAU,CACxB,OAA6B,EAC7B,GAAG,MAAa;QAEhB,IAAI,MAAM,GAAW,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IATe,qBAAU,aASzB,CAAA;AACH,CAAC,EA5CgB,UAAU,0BAAV,UAAU,QA4C1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autobe/compiler",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "AI backend server code generator",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"author": "Wrtn Technologies",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"prisma-markdown": "^3.0.0",
|
|
26
26
|
"tstl": "^3.0.0",
|
|
27
27
|
"typia": "^9.3.1",
|
|
28
|
-
"@autobe/interface": "^0.
|
|
28
|
+
"@autobe/interface": "^0.7.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^22.15.3",
|
|
@@ -20,9 +20,8 @@ export class AutoBePrismaCompiler implements IAutoBePrismaCompiler {
|
|
|
20
20
|
|
|
21
21
|
public async validate(
|
|
22
22
|
app: AutoBePrisma.IApplication,
|
|
23
|
-
previous?: AutoBePrisma.IApplication | undefined,
|
|
24
23
|
): Promise<IAutoBePrismaValidation> {
|
|
25
|
-
return validatePrismaApplication(app
|
|
24
|
+
return validatePrismaApplication(app);
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
public async write(
|
|
@@ -2,16 +2,28 @@ import { AutoBePrisma, IAutoBePrismaValidation } from "@autobe/interface";
|
|
|
2
2
|
import { HashMap, hash } from "tstl";
|
|
3
3
|
|
|
4
4
|
import { MapUtil } from "../utils/MapUtil";
|
|
5
|
+
import { StringUtil } from "../utils/StringUtil";
|
|
5
6
|
|
|
6
7
|
export function validatePrismaApplication(
|
|
7
8
|
application: AutoBePrisma.IApplication,
|
|
8
|
-
previous?: AutoBePrisma.IApplication | undefined,
|
|
9
9
|
): IAutoBePrismaValidation {
|
|
10
|
-
const dict: Map<string,
|
|
10
|
+
const dict: Map<string, IModelContainer> = new Map(
|
|
11
11
|
application.files
|
|
12
|
-
.map((file) =>
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
.map((file, fi) =>
|
|
13
|
+
file.models.map(
|
|
14
|
+
(model, mi) =>
|
|
15
|
+
[
|
|
16
|
+
model.name,
|
|
17
|
+
{
|
|
18
|
+
file,
|
|
19
|
+
model,
|
|
20
|
+
fileIndex: fi,
|
|
21
|
+
modelIndex: mi,
|
|
22
|
+
},
|
|
23
|
+
] satisfies [string, IModelContainer],
|
|
24
|
+
),
|
|
25
|
+
)
|
|
26
|
+
.flat(),
|
|
15
27
|
);
|
|
16
28
|
const errors: IAutoBePrismaValidation.IError[] = [
|
|
17
29
|
...validateDuplicatedFiles(application),
|
|
@@ -29,23 +41,24 @@ export function validatePrismaApplication(
|
|
|
29
41
|
}),
|
|
30
42
|
)
|
|
31
43
|
.flat(2),
|
|
32
|
-
...(previous ? validateOmissions(application, previous) : []),
|
|
33
44
|
];
|
|
34
45
|
return errors.length === 0
|
|
35
|
-
? {
|
|
36
|
-
|
|
46
|
+
? {
|
|
47
|
+
success: true,
|
|
48
|
+
data: application,
|
|
49
|
+
}
|
|
50
|
+
: {
|
|
51
|
+
success: false,
|
|
52
|
+
data: application,
|
|
53
|
+
errors,
|
|
54
|
+
};
|
|
37
55
|
}
|
|
38
56
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
prev: AutoBePrisma.IApplication,
|
|
45
|
-
): IAutoBePrismaValidation.IError[] {
|
|
46
|
-
app;
|
|
47
|
-
prev;
|
|
48
|
-
return [];
|
|
57
|
+
interface IModelContainer {
|
|
58
|
+
file: AutoBePrisma.IFile;
|
|
59
|
+
model: AutoBePrisma.IModel;
|
|
60
|
+
fileIndex: number;
|
|
61
|
+
modelIndex: number;
|
|
49
62
|
}
|
|
50
63
|
|
|
51
64
|
/* -----------------------------------------------------------
|
|
@@ -89,12 +102,6 @@ function validateDuplicatedFiles(
|
|
|
89
102
|
function validateDuplicatedModels(
|
|
90
103
|
app: AutoBePrisma.IApplication,
|
|
91
104
|
): IAutoBePrismaValidation.IError[] {
|
|
92
|
-
interface IModelContainer {
|
|
93
|
-
file: AutoBePrisma.IFile;
|
|
94
|
-
model: AutoBePrisma.IModel;
|
|
95
|
-
fileIndex: number;
|
|
96
|
-
modelIndex: number;
|
|
97
|
-
}
|
|
98
105
|
const modelContainers: Map<string, IModelContainer[]> = new Map();
|
|
99
106
|
app.files.forEach((file, fileIndex) => {
|
|
100
107
|
file.models.forEach((model, modelIndex) => {
|
|
@@ -134,7 +141,7 @@ function validateDuplicatedModels(
|
|
|
134
141
|
}
|
|
135
142
|
|
|
136
143
|
function validateDuplicatedFields(
|
|
137
|
-
dict: Map<string,
|
|
144
|
+
dict: Map<string, IModelContainer>,
|
|
138
145
|
model: AutoBePrisma.IModel,
|
|
139
146
|
accessor: string,
|
|
140
147
|
): IAutoBePrismaValidation.IError[] {
|
|
@@ -179,14 +186,14 @@ function validateDuplicatedFields(
|
|
|
179
186
|
path: `${accessor}.plainFields[${i}].name`,
|
|
180
187
|
table: model.name,
|
|
181
188
|
field: field.name,
|
|
182
|
-
message:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
189
|
+
message: StringUtil.trim`
|
|
190
|
+
There's a same named table in the application.
|
|
191
|
+
|
|
192
|
+
Check whether the field has been designed for denormalization
|
|
193
|
+
like pre-calculation. If do so, remove the field.
|
|
194
|
+
|
|
195
|
+
Otherwise, change the field name to something else.
|
|
196
|
+
`,
|
|
190
197
|
});
|
|
191
198
|
});
|
|
192
199
|
return errors;
|
|
@@ -251,14 +258,14 @@ function validateDuplicatedIndexes(
|
|
|
251
258
|
path: `${accessor}.uniqueIndexes[${i}].fieldNames[0]`,
|
|
252
259
|
table: model.name,
|
|
253
260
|
field: null,
|
|
254
|
-
message:
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
261
|
+
message: StringUtil.trim`
|
|
262
|
+
Duplicated unique index found (${subset[0]}).
|
|
263
|
+
|
|
264
|
+
You have defined an unique index that is already included,
|
|
265
|
+
in the foreign field with unique constraint.
|
|
266
|
+
|
|
267
|
+
Remove this unique index to avoid the duplication.
|
|
268
|
+
`,
|
|
262
269
|
});
|
|
263
270
|
const cIndex: number = model.uniqueIndexes.findIndex(
|
|
264
271
|
(u) =>
|
|
@@ -270,15 +277,15 @@ function validateDuplicatedIndexes(
|
|
|
270
277
|
path: `${accessor}.uniqueIndexes[${i}].fieldNames`,
|
|
271
278
|
table: model.name,
|
|
272
279
|
field: null,
|
|
273
|
-
message:
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
280
|
+
message: StringUtil.trim`
|
|
281
|
+
Subset unique index found (${subset.join(", ")}).
|
|
282
|
+
|
|
283
|
+
You have defined an unique index with multiple fields,
|
|
284
|
+
but its subset is already defined as an unique index.
|
|
285
|
+
|
|
286
|
+
Consider to change the unique index to a plain index,
|
|
287
|
+
or drop the redundant unique index please.
|
|
288
|
+
`,
|
|
282
289
|
});
|
|
283
290
|
});
|
|
284
291
|
});
|
|
@@ -295,14 +302,14 @@ function validateDuplicatedIndexes(
|
|
|
295
302
|
path: `${accessor}.plainIndexes[${i}].fieldNames`,
|
|
296
303
|
table: model.name,
|
|
297
304
|
field: null,
|
|
298
|
-
message:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
305
|
+
message: StringUtil.trim`
|
|
306
|
+
Superset plain index found (${y.fieldNames.join(", ")}).
|
|
307
|
+
|
|
308
|
+
You have defined a plain index with multiple fields,
|
|
309
|
+
but its superset is already defined as another plain index.
|
|
310
|
+
|
|
311
|
+
As subset index is vulnerable, drop this plain index please.
|
|
312
|
+
`,
|
|
306
313
|
});
|
|
307
314
|
});
|
|
308
315
|
});
|
|
@@ -316,12 +323,13 @@ function validateDuplicatedIndexes(
|
|
|
316
323
|
path: `${accessor}.ginIndexes[].fieldName`,
|
|
317
324
|
table: model.name,
|
|
318
325
|
field: null,
|
|
319
|
-
message:
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
326
|
+
message: StringUtil.trim`
|
|
327
|
+
Duplicated GIN index found.
|
|
328
|
+
|
|
329
|
+
GIN index can only be used once per field.
|
|
330
|
+
|
|
331
|
+
Please remove the duplicated GIN indexes.
|
|
332
|
+
`,
|
|
325
333
|
});
|
|
326
334
|
|
|
327
335
|
return errors;
|
|
@@ -400,24 +408,24 @@ function validateIndexes(
|
|
|
400
408
|
path: `${accessor}.ginIndexes[${i}].fieldName`,
|
|
401
409
|
table: model.name,
|
|
402
410
|
field: null,
|
|
403
|
-
message:
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
411
|
+
message: StringUtil.trim`
|
|
412
|
+
GIN index can only be used on string typed field.
|
|
413
|
+
However, the target field ${gin.fieldName} does not exist
|
|
414
|
+
in the {@link plainFields}.
|
|
415
|
+
`,
|
|
408
416
|
});
|
|
409
417
|
else if (model.plainFields[pIndex].type !== "string")
|
|
410
418
|
errors.push({
|
|
411
419
|
path: `${accessor}.ginIndexes[${i}].fieldName`,
|
|
412
420
|
table: model.name,
|
|
413
421
|
field: model.plainFields[pIndex].name,
|
|
414
|
-
message:
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
422
|
+
message: StringUtil.trim`
|
|
423
|
+
GIN index can only be used on string typed field.
|
|
424
|
+
However, the target field ${gin.fieldName} is not string,
|
|
425
|
+
but ${model.plainFields[pIndex].type}.
|
|
426
|
+
|
|
427
|
+
- accessor of the wrong typed field: ${`${accessor}.plainFields[${pIndex}].type`},
|
|
428
|
+
`,
|
|
421
429
|
});
|
|
422
430
|
},
|
|
423
431
|
});
|
|
@@ -427,18 +435,52 @@ function validateIndexes(
|
|
|
427
435
|
function validateReferences(
|
|
428
436
|
model: AutoBePrisma.IModel,
|
|
429
437
|
accessor: string,
|
|
430
|
-
dict: Map<string,
|
|
438
|
+
dict: Map<string, IModelContainer>,
|
|
431
439
|
): IAutoBePrismaValidation.IError[] {
|
|
432
440
|
const errors: IAutoBePrismaValidation.IError[] = [];
|
|
441
|
+
|
|
433
442
|
model.foreignFields.forEach((field, i) => {
|
|
434
443
|
const target = dict.get(field.relation.targetModel);
|
|
435
|
-
if (target === undefined)
|
|
444
|
+
if (target === undefined) {
|
|
445
|
+
// CHECK EXISTENCE
|
|
436
446
|
errors.push({
|
|
437
447
|
path: `${accessor}.foreignFields[${i}].relation.targetModel`,
|
|
438
448
|
table: model.name,
|
|
439
449
|
field: field.name,
|
|
440
450
|
message: `Target model ${field.relation.targetModel} does not exist.`,
|
|
441
451
|
});
|
|
452
|
+
} else if (target.model !== model) {
|
|
453
|
+
// CHECK CROSS REFERENCE
|
|
454
|
+
target.model.foreignFields.forEach((oppo, j) => {
|
|
455
|
+
if (oppo.relation.targetModel === model.name) {
|
|
456
|
+
errors.push({
|
|
457
|
+
path: `${accessor}.foreignFields[${i}].relation.targetModel`,
|
|
458
|
+
table: model.name,
|
|
459
|
+
field: field.name,
|
|
460
|
+
message: StringUtil.trim`
|
|
461
|
+
Cross-reference dependency detected between models.
|
|
462
|
+
|
|
463
|
+
- accessor of opposite side: application.files[${target.fileIndex}].models[${target.modelIndex}].foreignFields[${j}].relation.targetModel
|
|
464
|
+
|
|
465
|
+
Cross-references (circular dependencies) are not permitted in AutoBe Prisma schemas.
|
|
466
|
+
|
|
467
|
+
To resolve this issue:
|
|
468
|
+
|
|
469
|
+
1. Remove one of the foreign key fields from either model
|
|
470
|
+
2. Keep only the foreign key that represents the primary relationship direction
|
|
471
|
+
3. Remove any related indexes that reference the deleted foreign key field
|
|
472
|
+
|
|
473
|
+
The foreign key field to remove is typically:
|
|
474
|
+
|
|
475
|
+
- A redundant field that can be computed from the existing relationship
|
|
476
|
+
- A field that duplicates information already accessible through the primary relationship
|
|
477
|
+
|
|
478
|
+
Please eliminate the circular dependency and try again.`,
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
}
|
|
442
483
|
});
|
|
484
|
+
|
|
443
485
|
return errors;
|
|
444
486
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export const enum AutoBeCompilerConstants {
|
|
2
|
-
README = "# AutoBE Generated Backend Server\n\n\n\nA backend repository generated by [`@autobe`](https://github.com/wrtnlabs/autobe).\n\nThis backend program was automatically generated using [`@autobe`](https://github.com/wrtnlabs/autobe), the AI vibe coding agent for backend servers of below stack.\n\n- TypeScript\n- NestJS / Nestia\n- Prisma\n- Postgres\n\n## Project Structure\n\nThis template project has categorized directories like below.\n\
|
|
2
|
+
README = "# AutoBE Generated Backend Server\n\n\n\nA backend repository generated by [`@autobe`](https://github.com/wrtnlabs/autobe).\n\nThis backend program was automatically generated using [`@autobe`](https://github.com/wrtnlabs/autobe), the AI vibe coding agent for backend servers of below stack.\n\n- TypeScript\n- NestJS / Nestia\n- Prisma\n- Postgres\n\n## Project Structure\n\nThis template project has categorized directories like below.\n\nAt first, [`@autobe`](https://github.com/wrtnlabs/autobe) generated files are placed like below:\n\n- analysis agent: [docs/analysis](docs/analysis)\n- prisma agent\n - [prisma/schema](prisma/schema)\n - [docs/ERD.md](docs/ERD.md)\n- interface agent\n - [src/api/structures](src/api/structures): DTO structures\n - [src/api/controllers](src/controllers): API controller classes\n - [test/features](test/features): List of e2e test functions\n\nFrom a source code perspective, all backend files are organized within the `src` directory.\n\nWhen you build the TypeScript source files, compiled files will be placed in the `lib` directory according to the [tsconfig.json](tsconfig.json) configuration.\n\nOtherwise you build client [SDK](https://nestia.io/docs/sdk) library for npm publishing and their compiled files would be placed into the [packages/api](packages/api) directory.\n\n - [packages/api](packages/api): SDK module built by `npm run build:api`\n - [src](src): Backend source directory\n - [src/api](src/api): Client SDK that would be published to the `@ORGANIZATION/PROJECT-api`\n - [src/api/functional](src/api/functional): API functions generated by the [`nestia`](https://github.com/samchon/nestia)\n - [src/api/structures](src/api/structures): DTO structures\n - [src/controllers](src/controllers): Controller classes of the Main Program\n - [**test/**](test): Test Automation Program\n - [test/features](test/features): List of test functions\n - [nestia.config.ts](nestia.config.ts): Configuration file of [`nestia`](https://github.com/samchon/nestia)\n - [package.json](package.json): NPM configuration\n - [tsconfig.json](tsconfig.json): TypeScript configuration for the main program\n\n## NPM Run Commands\n\nList of the run commands defined in the [package.json](package.json) are like below:\n\n - Test\n - **`test`**: Run test automation program\n - `benchmark`: Run performance benchmark program\n - Build\n - `build`: Build everything\n - `build:main`: Build main program (`src` directory)\n - `build:test` Build test automation program (`test` directory)\n - `build:sdk`: Build SDK into main program only\n - `build:swagger`: Build Swagger Documents\n - **`dev`**: Incremental build for development (test program)\n - Deploy\n - `package:api`: Build and deploy the SDK library to the NPM\n - `start`: Start the backend server\n - `start:dev`: Start the backend server with incremental build and reload\n - Webpack\n - `webpack`: Run webpack bundler\n - `webpack:start`: Start the backend server built by webpack\n - `webpack:test`: Run test program to the webpack built\n\n## Specialization\n\nTransform this template project to be yours.\n\nWhen you've created a new backend project through this template project, you can specialize it to be suitable for you by changing some words. Replace below words through IDE specific function like `Edit > Replace in Files` (*Ctrl + Shift + H*), who've been supported by the VSCode.\n\n| Before | After\n|--------------|----------------------------------------\n| ORGANIZATION | Your account or corporation name\n| PROJECT | Your own project name\n| AUTHOR | Author name\n| https://github.com/samchon/nestia-start | Your repository URL"
|
|
3
3
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export namespace StringUtil {
|
|
2
|
+
export function trim(
|
|
3
|
+
strings: TemplateStringsArray,
|
|
4
|
+
...values: any[]
|
|
5
|
+
): string {
|
|
6
|
+
let result: string = strings[0];
|
|
7
|
+
for (let i = 0; i < values.length; i++) {
|
|
8
|
+
result += String(values[i]) + strings[i + 1];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const lines: string[] = result.split("\n");
|
|
12
|
+
while (lines.length > 0 && lines[0].trim() === "") {
|
|
13
|
+
lines.shift();
|
|
14
|
+
}
|
|
15
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === "") {
|
|
16
|
+
lines.pop();
|
|
17
|
+
}
|
|
18
|
+
if (lines.length === 0) return "";
|
|
19
|
+
|
|
20
|
+
const firstNonEmptyLine: string | undefined = lines.find(
|
|
21
|
+
(line) => line.trim() !== "",
|
|
22
|
+
);
|
|
23
|
+
if (!firstNonEmptyLine) return "";
|
|
24
|
+
|
|
25
|
+
const leadingWhitespace: string =
|
|
26
|
+
firstNonEmptyLine.match(/^[ \t]*/)?.[0] || "";
|
|
27
|
+
const indentLength: number = leadingWhitespace.length;
|
|
28
|
+
const trimmedLines: string[] = lines.map((line) => {
|
|
29
|
+
if (line.trim() === "") return "";
|
|
30
|
+
return line.slice(indentLength);
|
|
31
|
+
});
|
|
32
|
+
return trimmedLines.join("\n");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function singleLine(
|
|
36
|
+
strings: TemplateStringsArray,
|
|
37
|
+
...values: any[]
|
|
38
|
+
): string {
|
|
39
|
+
let result: string = strings[0];
|
|
40
|
+
for (let i = 0; i < values.length; i++) {
|
|
41
|
+
result += String(values[i]) + strings[i + 1];
|
|
42
|
+
}
|
|
43
|
+
return result.replace(/\n/g, " ").replace(/\s+/g, " ").trim();
|
|
44
|
+
}
|
|
45
|
+
}
|