@nestledjs/api 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/generators.json +5 -0
- package/package.json +3 -3
- package/src/app/files/src/main.ts__tmpl__ +19 -7
- package/src/config/files/src/lib/config.service.ts__tmpl__ +16 -2
- package/src/config/files/src/lib/configuration.ts__tmpl__ +1 -0
- package/src/config/generator.js +1 -1
- package/src/config/generator.js.map +1 -1
- package/src/core/files/helpers/src/index.ts__tmpl__ +1 -0
- package/src/core/files/helpers/src/lib/graphql-select.ts__tmpl__ +52 -0
- package/src/core/generator.js +6 -2
- package/src/core/generator.js.map +1 -1
- package/src/custom/generator.js +14 -6
- package/src/custom/generator.js.map +1 -1
- package/src/generate-crud/files/data-access/src/index.ts__tmpl__ +1 -0
- package/src/generate-crud/files/data-access/src/lib/api-crud-data-access.service.ts__tmpl__ +131 -11
- package/src/generate-crud/files/data-access/src/lib/dto/index.ts__tmpl__ +138 -150
- package/src/generate-crud/generator.d.ts +1 -17
- package/src/generate-crud/generator.js +27 -10
- package/src/generate-crud/generator.js.map +1 -1
- package/src/integrations/generator.d.ts +2 -0
- package/src/integrations/generator.js +15 -0
- package/src/integrations/generator.js.map +1 -0
- package/src/integrations/schema.json +8 -0
- package/src/setup/generator.js +2 -3
- package/src/setup/generator.js.map +1 -1
- package/src/utils/files/src/index.ts__tmpl__ +1 -0
- package/src/utils/files/src/lib/types/nest-context-type.ts__tmpl__ +4 -0
- /package/src/config/files/src/lib/{config.modules.ts__tmpl__ → config.module.ts__tmpl__} +0 -0
package/generators.json
CHANGED
|
@@ -64,6 +64,11 @@
|
|
|
64
64
|
"factory": "./src/utils/generator.js",
|
|
65
65
|
"schema": "./src/utils/schema.json",
|
|
66
66
|
"description": "Generate a utility plugin with auth utils."
|
|
67
|
+
},
|
|
68
|
+
"integrations": {
|
|
69
|
+
"factory": "./src/integrations/generator.js",
|
|
70
|
+
"schema": "./src/integrations/schema.json",
|
|
71
|
+
"description": "Generate a new Nx NestJS project called 'integrations' in libs/api."
|
|
67
72
|
}
|
|
68
73
|
}
|
|
69
74
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestledjs/api",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"generators": "./generators.json",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./src/index.js",
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
"tslib": "^2.3.0",
|
|
20
20
|
"@nx/devkit": "21.2.1",
|
|
21
21
|
"@nx/js": "21.2.1",
|
|
22
|
-
"@prisma/internals": "^6.
|
|
22
|
+
"@prisma/internals": "^6.11.0",
|
|
23
23
|
"pluralize": "^8.0.0",
|
|
24
24
|
"dotenv": "16.4.5",
|
|
25
25
|
"pg": "^8.13.0"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@nestledjs/utils": "0.1.
|
|
28
|
+
"@nestledjs/utils": "0.1.1"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Logger } from '@nestjs/common'
|
|
2
2
|
import { NestFactory } from '@nestjs/core'
|
|
3
|
-
import { ConfigService } from '
|
|
3
|
+
import { ConfigService } from '@<%= npmScope %>/api/config'
|
|
4
4
|
import cookieParser from 'cookie-parser'
|
|
5
5
|
|
|
6
6
|
import { AppModule } from './app.module'
|
|
@@ -10,16 +10,28 @@ async function bootstrap() {
|
|
|
10
10
|
const configService = app.get(ConfigService)
|
|
11
11
|
|
|
12
12
|
// Get individual properties with fallbacks
|
|
13
|
-
const prefix = configService.
|
|
14
|
-
const port = configService.
|
|
15
|
-
const host = configService.
|
|
13
|
+
const prefix = configService.prefix || 'api';
|
|
14
|
+
const port = configService.port || 3000;
|
|
15
|
+
const host = configService.host || 'localhost';
|
|
16
16
|
|
|
17
17
|
app.setGlobalPrefix(prefix)
|
|
18
|
+
|
|
19
|
+
// Use the apiCorsOrigins getter and handle as array
|
|
20
|
+
const origins = configService.apiCorsOrigins.length
|
|
21
|
+
? configService.apiCorsOrigins
|
|
22
|
+
: ['http://localhost:4200']; // fallback for dev
|
|
23
|
+
|
|
18
24
|
app.enableCors({
|
|
19
25
|
credentials: true,
|
|
20
|
-
origin:
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
origin: (origin, callback) => {
|
|
27
|
+
if (!origin) return callback(null, true);
|
|
28
|
+
if (origins.includes(origin)) {
|
|
29
|
+
return callback(null, true);
|
|
30
|
+
}
|
|
31
|
+
return callback(new Error('Not allowed by CORS'));
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
app.use(cookieParser(configService.cookie.secret || 'secret'));
|
|
23
35
|
|
|
24
36
|
await app.listen(port, host, () => {
|
|
25
37
|
Logger.log(`Listening at http://${host}:${port}/${prefix}`)
|
|
@@ -14,8 +14,22 @@ export class ConfigService {
|
|
|
14
14
|
return this.config.get<string[]>('api.cors.origin') ?? []
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
get cookie(): { name: string; options: CookieOptions } {
|
|
18
|
-
return this.config.getOrThrow<{ name: string; options: CookieOptions }>(
|
|
17
|
+
get cookie(): { name: string; secret: string; options: CookieOptions } {
|
|
18
|
+
return this.config.getOrThrow<{ name: string; secret: string; options: CookieOptions }>(
|
|
19
|
+
'api.cookie',
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get prefix(): string {
|
|
24
|
+
return this.config.getOrThrow<string>('prefix')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get port(): number {
|
|
28
|
+
return this.config.getOrThrow<number>('port')
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
get host(): string {
|
|
32
|
+
return this.config.getOrThrow<string>('host')
|
|
19
33
|
}
|
|
20
34
|
|
|
21
35
|
get appEmail(): string {
|
package/src/config/generator.js
CHANGED
|
@@ -8,7 +8,7 @@ function generateLibraries(tree_1) {
|
|
|
8
8
|
return tslib_1.__awaiter(this, arguments, void 0, function* (tree, options = {}) {
|
|
9
9
|
const templateRootPath = (0, devkit_1.joinPathFragments)(__dirname, './files');
|
|
10
10
|
const overwrite = options.overwrite === true;
|
|
11
|
-
yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'config', overwrite }, templateRootPath);
|
|
11
|
+
yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'config', overwrite, customName: true }, templateRootPath);
|
|
12
12
|
yield (0, devkit_1.formatFiles)(tree);
|
|
13
13
|
return () => {
|
|
14
14
|
(0, devkit_1.installPackagesTask)(tree);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/config/generator.ts"],"names":[],"mappings":";;AAIA,oCAWC;;AAfD,uCAAsF;AACtF,4CAAsD;AAGtD,SAA8B,iBAAiB;iEAAC,IAAU,EAAE,UAAoC,EAAE;QAChG,MAAM,gBAAgB,GAAG,IAAA,0BAAiB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;QAE5C,MAAM,IAAA,2BAAmB,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/config/generator.ts"],"names":[],"mappings":";;AAIA,oCAWC;;AAfD,uCAAsF;AACtF,4CAAsD;AAGtD,SAA8B,iBAAiB;iEAAC,IAAU,EAAE,UAAoC,EAAE;QAChG,MAAM,gBAAgB,GAAG,IAAA,0BAAiB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;QAE5C,MAAM,IAAA,2BAAmB,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAA;QAElG,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;QAEvB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;IACH,CAAC;CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib/graphql-select'
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import graphqlFields from 'graphql-fields'
|
|
2
|
+
import { Prisma } from '@<%= npmScope %>/api/prisma'
|
|
3
|
+
import type { DMMF } from '@prisma/client/runtime/library'
|
|
4
|
+
import { GraphQLResolveInfo } from 'graphql/type'
|
|
5
|
+
|
|
6
|
+
const dmmf = Prisma.dmmf
|
|
7
|
+
|
|
8
|
+
function getNamedType(type: any): string {
|
|
9
|
+
if (type.ofType) return getNamedType(type.ofType)
|
|
10
|
+
return type.name
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function getModelFromTypeName(typeName: string) {
|
|
14
|
+
return dmmf.datamodel.models.find(m => m.name === typeName)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function buildSelectTree(fieldTree: any, model: any): any {
|
|
18
|
+
const result: Record<string, any> = {}
|
|
19
|
+
|
|
20
|
+
for (const key in fieldTree) {
|
|
21
|
+
const field = model.fields.find((f: DMMF.Field) => f.name === key)
|
|
22
|
+
if (!field) continue
|
|
23
|
+
|
|
24
|
+
if (field.relationName && typeof fieldTree[key] === 'object') {
|
|
25
|
+
const relatedModel = dmmf.datamodel.models.find(m => m.name === field.type)
|
|
26
|
+
if (relatedModel) {
|
|
27
|
+
result[key] = {
|
|
28
|
+
select: buildSelectTree(fieldTree[key], relatedModel),
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} else {
|
|
32
|
+
result[key] = true
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return result
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Automatically converts a GraphQL `info` object into a Prisma `select` object.
|
|
41
|
+
*/
|
|
42
|
+
export function createSelect(info: GraphQLResolveInfo) {
|
|
43
|
+
const returnTypeName = getNamedType(info.returnType)
|
|
44
|
+
const model = getModelFromTypeName(returnTypeName)
|
|
45
|
+
|
|
46
|
+
if (!model) {
|
|
47
|
+
throw new Error(`Model "${returnTypeName}" not found in Prisma schema.`)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const rawFields = graphqlFields(info)
|
|
51
|
+
return buildSelectTree(rawFields, model)
|
|
52
|
+
}
|
package/src/core/generator.js
CHANGED
|
@@ -14,14 +14,18 @@ function generateLibraries(tree_1) {
|
|
|
14
14
|
'@nestjs/common': '^10.0.0',
|
|
15
15
|
'@nestjs/passport': '^10.0.0',
|
|
16
16
|
'@nestjs/axios': '^3.0.0',
|
|
17
|
-
'@prisma/client': '^6.
|
|
17
|
+
'@prisma/client': '^6.11.0',
|
|
18
18
|
'@apollo/server': '^4.9.0',
|
|
19
|
+
'graphql-fields': '^2.0.3',
|
|
20
|
+
};
|
|
21
|
+
const devDependencies = {
|
|
22
|
+
'@types/graphql-fields': '^1.3.9',
|
|
19
23
|
};
|
|
20
|
-
const devDependencies = {};
|
|
21
24
|
yield (0, utils_1.installPlugins)(tree, dependencies, devDependencies);
|
|
22
25
|
yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'core', overwrite }, templateRootPath, 'data-access');
|
|
23
26
|
yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'core', overwrite }, templateRootPath, 'feature', true);
|
|
24
27
|
yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'core', overwrite }, templateRootPath, 'models');
|
|
28
|
+
yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'core', overwrite }, templateRootPath, 'helpers');
|
|
25
29
|
yield (0, devkit_1.formatFiles)(tree);
|
|
26
30
|
return () => {
|
|
27
31
|
(0, devkit_1.installPackagesTask)(tree);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/core/generator.ts"],"names":[],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/core/generator.ts"],"names":[],"mappings":";;AAIA,oCAkCC;;AAtCD,uCAAyG;AACzG,4CAAsE;AAGtE,SAA8B,iBAAiB;iEAC7C,IAAU,EACV,UAAkC,EAAE;QAEpC,MAAM,gBAAgB,GAAG,IAAA,0BAAiB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAA;QAE5C,MAAM,YAAY,GAAG;YACnB,mBAAmB,EAAE,QAAQ;YAC7B,iBAAiB,EAAE,SAAS;YAC5B,gBAAgB,EAAE,SAAS;YAC3B,kBAAkB,EAAE,SAAS;YAC7B,eAAe,EAAE,QAAQ;YACzB,gBAAgB,EAAE,SAAS;YAC3B,gBAAgB,EAAE,QAAQ;YAC1B,gBAAgB,EAAE,QAAQ;SAC3B,CAAA;QAED,MAAM,eAAe,GAAG;YACtB,uBAAuB,EAAE,QAAQ;SAClC,CAAA;QAED,MAAM,IAAA,sBAAc,EAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,CAAA;QAEzD,MAAM,IAAA,2BAAmB,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAA;QAC7F,MAAM,IAAA,2BAAmB,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;QAC/F,MAAM,IAAA,2BAAmB,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAA;QACxF,MAAM,IAAA,2BAAmB,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAA;QAEzF,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;QAEvB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;IACH,CAAC;CAAA"}
|
package/src/custom/generator.js
CHANGED
|
@@ -80,8 +80,11 @@ function generateCustomFiles(tree, customLibraryRoot, models, npmScope, dependen
|
|
|
80
80
|
const pluginsDir = dependencies.join(customLibraryRoot, 'src/lib/plugins');
|
|
81
81
|
yield ensureDirExists(tree, defaultDir);
|
|
82
82
|
yield ensureDirExists(tree, pluginsDir);
|
|
83
|
-
//
|
|
84
|
-
|
|
83
|
+
// Create empty index.ts in pluginsDir for custom plugins (only if it doesn't exist)
|
|
84
|
+
const pluginsIndexPath = dependencies.join(pluginsDir, 'index.ts');
|
|
85
|
+
if (!tree.exists(pluginsIndexPath)) {
|
|
86
|
+
tree.write(pluginsIndexPath, '');
|
|
87
|
+
}
|
|
85
88
|
for (const model of models) {
|
|
86
89
|
const kebabModel = toKebabCase(model.modelName);
|
|
87
90
|
const modelFolder = dependencies.join(defaultDir, kebabModel);
|
|
@@ -142,10 +145,10 @@ export class ${model.modelName}Module {}
|
|
|
142
145
|
importPath: `${npmScope}/api/custom`,
|
|
143
146
|
});
|
|
144
147
|
}
|
|
145
|
-
// Update index.ts to export all model modules
|
|
148
|
+
// Update default/index.ts to export all model modules
|
|
146
149
|
const modelFolders = models.map((m) => toKebabCase(m.modelName));
|
|
147
|
-
const
|
|
148
|
-
tree.write(dependencies.join(
|
|
150
|
+
const defaultIndexContent = modelFolders.map((m) => `export * from './${m}/${m}.module'`).join('\n');
|
|
151
|
+
tree.write(dependencies.join(defaultDir, 'index.ts'), defaultIndexContent);
|
|
149
152
|
});
|
|
150
153
|
}
|
|
151
154
|
function customGeneratorLogic(tree_1, schema_1) {
|
|
@@ -166,10 +169,15 @@ function customGeneratorLogic(tree_1, schema_1) {
|
|
|
166
169
|
console.warn(`Failed to remove existing library ${projectName}:`, error);
|
|
167
170
|
}
|
|
168
171
|
}
|
|
169
|
-
// Use the shared apiLibraryGenerator
|
|
172
|
+
// Use the shared apiLibraryGenerator but pass empty template to avoid conflicts
|
|
170
173
|
yield dependencies.apiLibraryGenerator(tree, { name }, '', undefined, false);
|
|
171
174
|
yield ensureDirExists(tree, dependencies.join(customLibraryRoot, 'src/lib/default'));
|
|
172
175
|
yield ensureDirExists(tree, dependencies.join(customLibraryRoot, 'src/lib/plugins'));
|
|
176
|
+
// Override the main index.ts created by apiLibraryGenerator with our stable version
|
|
177
|
+
const mainIndexContent = `export * from './lib/plugins'
|
|
178
|
+
export * from './lib/default'
|
|
179
|
+
`;
|
|
180
|
+
tree.write(dependencies.join(customLibraryRoot, 'src/index.ts'), mainIndexContent);
|
|
173
181
|
// Get all Prisma models
|
|
174
182
|
const models = yield getAllPrismaModels(tree, dependencies);
|
|
175
183
|
if (models.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/custom/generator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/custom/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common'
|
|
2
2
|
import { ApiCoreDataAccessService } from '@<%= npmScope %>/api/core/data-access'
|
|
3
|
-
import {
|
|
3
|
+
import { createSelect } from '@<%= npmScope %>/api/core/helpers'
|
|
4
4
|
import type { GraphQLResolveInfo } from 'graphql'
|
|
5
5
|
import * as dto from './dto'
|
|
6
6
|
|
|
@@ -8,24 +8,144 @@ import * as dto from './dto'
|
|
|
8
8
|
<% if (!model.modelName || !model.pluralModelName) { throw new Error('EJS template error: modelName or pluralModelName missing for model at index ' + idx + ': ' + JSON.stringify(model)); } %>
|
|
9
9
|
<% }) %>
|
|
10
10
|
|
|
11
|
+
<%
|
|
12
|
+
// Helper function to get relation fields for a model
|
|
13
|
+
function getRelationFields(model) {
|
|
14
|
+
return model.fields.filter(field => field.relationName && field.relationName.length > 0);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Helper function to get virtual relation fields for a model
|
|
18
|
+
function getVirtualRelationFields(model) {
|
|
19
|
+
const relationFields = getRelationFields(model);
|
|
20
|
+
const virtualFields = [];
|
|
21
|
+
|
|
22
|
+
relationFields.forEach(relationField => {
|
|
23
|
+
// Only generate virtual fields for relations that don't have explicit foreign keys
|
|
24
|
+
if (!relationField.relationFromFields || relationField.relationFromFields.length === 0) {
|
|
25
|
+
if (relationField.isList) {
|
|
26
|
+
// This is a multi-relation without foreign keys (many-to-many or one-to-many from parent)
|
|
27
|
+
// Generate a virtual foreign key field for connecting
|
|
28
|
+
const virtualFieldName = relationField.name + 'Ids';
|
|
29
|
+
// Check if there's already a scalar field with this name
|
|
30
|
+
const existingField = model.fields.find(f => f.name === virtualFieldName && (!f.relationName || f.relationName.length === 0));
|
|
31
|
+
if (!existingField) {
|
|
32
|
+
virtualFields.push({
|
|
33
|
+
name: virtualFieldName,
|
|
34
|
+
type: 'String',
|
|
35
|
+
isList: true,
|
|
36
|
+
isOptional: true,
|
|
37
|
+
isVirtual: true,
|
|
38
|
+
relationName: relationField.relationName,
|
|
39
|
+
relatedField: relationField.name
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
// This is a single relation without foreign keys (one-to-one or one-to-many from parent)
|
|
44
|
+
// Generate a virtual foreign key field for connecting
|
|
45
|
+
const virtualFieldName = relationField.name + 'Id';
|
|
46
|
+
// Check if there's already a scalar field with this name
|
|
47
|
+
const existingField = model.fields.find(f => f.name === virtualFieldName && (!f.relationName || f.relationName.length === 0));
|
|
48
|
+
if (!existingField) {
|
|
49
|
+
virtualFields.push({
|
|
50
|
+
name: virtualFieldName,
|
|
51
|
+
type: 'String',
|
|
52
|
+
isList: false,
|
|
53
|
+
isOptional: true,
|
|
54
|
+
isVirtual: true,
|
|
55
|
+
relationName: relationField.relationName,
|
|
56
|
+
relatedField: relationField.name
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return virtualFields;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Helper function to get foreign key fields that need relation handling
|
|
67
|
+
function getForeignKeyRelationFields(model) {
|
|
68
|
+
const relationFields = getRelationFields(model);
|
|
69
|
+
const foreignKeyFields = [];
|
|
70
|
+
|
|
71
|
+
relationFields.forEach(relationField => {
|
|
72
|
+
if (relationField.relationFromFields && relationField.relationFromFields.length > 0) {
|
|
73
|
+
// This relation has explicit foreign key fields
|
|
74
|
+
relationField.relationFromFields.forEach(fkFieldName => {
|
|
75
|
+
const fkField = model.fields.find(f => f.name === fkFieldName);
|
|
76
|
+
if (fkField) {
|
|
77
|
+
foreignKeyFields.push({
|
|
78
|
+
fieldName: fkFieldName,
|
|
79
|
+
relationName: relationField.name,
|
|
80
|
+
isRequired: !fkField.isOptional
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return foreignKeyFields;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Helper function to generate relation handling code
|
|
91
|
+
function generateRelationHandling(model, operation) {
|
|
92
|
+
const virtualRelationFields = getVirtualRelationFields(model);
|
|
93
|
+
const foreignKeyFields = getForeignKeyRelationFields(model);
|
|
94
|
+
const allRelationFields = [...virtualRelationFields, ...foreignKeyFields];
|
|
95
|
+
|
|
96
|
+
if (allRelationFields.length === 0) {
|
|
97
|
+
return ' const data = input;';
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let code = ' const { ';
|
|
101
|
+
code += virtualRelationFields.map(field => field.name).join(', ');
|
|
102
|
+
if (foreignKeyFields.length > 0) {
|
|
103
|
+
if (virtualRelationFields.length > 0) code += ', ';
|
|
104
|
+
code += foreignKeyFields.map(field => field.fieldName).join(', ');
|
|
105
|
+
}
|
|
106
|
+
code += ', ...regularFields } = input;\n';
|
|
107
|
+
code += ' const data: any = regularFields;\n\n';
|
|
108
|
+
|
|
109
|
+
// Handle virtual relation fields (many-to-many without explicit FKs)
|
|
110
|
+
virtualRelationFields.forEach(field => {
|
|
111
|
+
code += ` if (${field.name}) {\n`;
|
|
112
|
+
if (field.isList) {
|
|
113
|
+
code += ` data.${field.relatedField} = { ${operation === 'create' ? 'connect' : 'set'}: ${field.name}.map(id => ({ id })) };\n`;
|
|
114
|
+
} else {
|
|
115
|
+
code += ` data.${field.relatedField} = { connect: { id: ${field.name} } };\n`;
|
|
116
|
+
}
|
|
117
|
+
code += ' }\n';
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Handle foreign key fields (explicit FK relations)
|
|
121
|
+
foreignKeyFields.forEach(field => {
|
|
122
|
+
code += ` if (${field.fieldName}) {\n`;
|
|
123
|
+
code += ` data.${field.relationName} = { connect: { id: ${field.fieldName} } };\n`;
|
|
124
|
+
code += ' }\n';
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
return code;
|
|
128
|
+
}
|
|
129
|
+
%>
|
|
130
|
+
|
|
11
131
|
@Injectable()
|
|
12
132
|
export class ApiCrudDataAccessService {
|
|
13
133
|
constructor(private readonly data: ApiCoreDataAccessService) {}
|
|
14
134
|
|
|
15
135
|
<% for (const model of models) { %>
|
|
16
136
|
async create<%= model.modelName.charAt(0).toUpperCase() + model.modelName.slice(1) %>(info: GraphQLResolveInfo, input: dto.Create<%= model.modelName %>Input) {
|
|
17
|
-
|
|
137
|
+
<%- generateRelationHandling(model, 'create') %>
|
|
138
|
+
|
|
18
139
|
return this.data['<%= model.modelPropertyName %>'].create({
|
|
19
|
-
data
|
|
20
|
-
|
|
140
|
+
data,
|
|
141
|
+
select: createSelect(info),
|
|
21
142
|
});
|
|
22
143
|
}
|
|
23
144
|
|
|
24
145
|
async <%= (model.pluralModelName === model.modelName ? model.pluralModelName + 'List' : model.pluralModelName).charAt(0).toLowerCase() + (model.pluralModelName === model.modelName ? model.pluralModelName + 'List' : model.pluralModelName).slice(1) %>(info: GraphQLResolveInfo, input?: dto.List<%= model.modelName %>Input) {
|
|
25
|
-
const select = new PrismaSelect(info).value
|
|
26
146
|
return this.data['<%= model.modelPropertyName %>'].findMany({
|
|
27
147
|
...this.data.filter(input),
|
|
28
|
-
|
|
148
|
+
select: createSelect(info),
|
|
29
149
|
});
|
|
30
150
|
}
|
|
31
151
|
|
|
@@ -47,19 +167,19 @@ export class ApiCrudDataAccessService {
|
|
|
47
167
|
}
|
|
48
168
|
|
|
49
169
|
async <%= model.modelName.charAt(0).toLowerCase() + model.modelName.slice(1) %>(info: GraphQLResolveInfo, id: string) {
|
|
50
|
-
const select = new PrismaSelect(info).value
|
|
51
170
|
return this.data['<%= model.modelPropertyName %>'].findUnique({
|
|
52
171
|
where: { id },
|
|
53
|
-
|
|
172
|
+
select: createSelect(info),
|
|
54
173
|
});
|
|
55
174
|
}
|
|
56
175
|
|
|
57
176
|
async update<%= model.modelName.charAt(0).toUpperCase() + model.modelName.slice(1) %>(info: GraphQLResolveInfo, id: string, input: dto.Update<%= model.modelName %>Input) {
|
|
58
|
-
|
|
177
|
+
<%- generateRelationHandling(model, 'update') %>
|
|
178
|
+
|
|
59
179
|
return this.data['<%= model.modelPropertyName %>'].update({
|
|
60
180
|
where: { id },
|
|
61
|
-
data
|
|
62
|
-
|
|
181
|
+
data,
|
|
182
|
+
select: createSelect(info),
|
|
63
183
|
});
|
|
64
184
|
}
|
|
65
185
|
|
|
@@ -6,26 +6,73 @@ let usesInt = false;
|
|
|
6
6
|
let usesFloat = false;
|
|
7
7
|
let usesID = false;
|
|
8
8
|
let enumNames = new Set();
|
|
9
|
+
let usesPartialType = false;
|
|
10
|
+
const alwaysOptionalFields = ['id', 'createdAt', 'updatedAt'];
|
|
11
|
+
|
|
12
|
+
// Helper function to get relation fields for a model
|
|
13
|
+
function getRelationFields(model) {
|
|
14
|
+
return model.fields.filter(field => field.relationName && field.relationName.length > 0);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Helper function to get virtual relation fields for a model
|
|
18
|
+
function getVirtualRelationFields(model) {
|
|
19
|
+
const relationFields = getRelationFields(model);
|
|
20
|
+
const virtualFields = [];
|
|
21
|
+
|
|
22
|
+
relationFields.forEach(relationField => {
|
|
23
|
+
// Only generate virtual fields for relations that don't have explicit foreign keys
|
|
24
|
+
if (!relationField.relationFromFields || relationField.relationFromFields.length === 0) {
|
|
25
|
+
if (relationField.isList) {
|
|
26
|
+
// This is a multi-relation without foreign keys (many-to-many or one-to-many from parent)
|
|
27
|
+
// Generate a virtual foreign key field for connecting
|
|
28
|
+
const virtualFieldName = relationField.name + 'Ids';
|
|
29
|
+
// Check if there's already a scalar field with this name
|
|
30
|
+
const existingField = model.fields.find(f => f.name === virtualFieldName && (!f.relationName || f.relationName.length === 0));
|
|
31
|
+
if (!existingField) {
|
|
32
|
+
virtualFields.push({
|
|
33
|
+
name: virtualFieldName,
|
|
34
|
+
type: 'String',
|
|
35
|
+
isList: true,
|
|
36
|
+
isOptional: true,
|
|
37
|
+
isVirtual: true, // Mark as virtual so we know it's generated
|
|
38
|
+
relationName: relationField.relationName,
|
|
39
|
+
relatedField: relationField.name
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
// This is a single relation without foreign keys (one-to-one or one-to-many from parent)
|
|
44
|
+
// Generate a virtual foreign key field for connecting
|
|
45
|
+
const virtualFieldName = relationField.name + 'Id';
|
|
46
|
+
// Check if there's already a scalar field with this name
|
|
47
|
+
const existingField = model.fields.find(f => f.name === virtualFieldName && (!f.relationName || f.relationName.length === 0));
|
|
48
|
+
if (!existingField) {
|
|
49
|
+
virtualFields.push({
|
|
50
|
+
name: virtualFieldName,
|
|
51
|
+
type: 'String',
|
|
52
|
+
isList: false,
|
|
53
|
+
isOptional: true,
|
|
54
|
+
isVirtual: true, // Mark as virtual so we know it's generated
|
|
55
|
+
relationName: relationField.relationName,
|
|
56
|
+
relatedField: relationField.name
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return virtualFields;
|
|
64
|
+
}
|
|
9
65
|
|
|
10
66
|
// First pass to determine necessary imports and enums
|
|
11
67
|
for (const model of models) {
|
|
12
68
|
for (const field of model.fields) {
|
|
69
|
+
if (field.relationName && field.relationName.length > 0) continue; // Skip relation object fields
|
|
13
70
|
if (field.type === 'Int') usesInt = true;
|
|
14
71
|
if (field.type === 'Float' || field.type === 'Decimal') usesFloat = true;
|
|
15
72
|
if (field.type === 'Json') usesGraphQLJSON = true;
|
|
16
|
-
|
|
17
|
-
if (field.
|
|
18
|
-
|
|
19
|
-
} else if (field.kind === 'object') {
|
|
20
|
-
// Check if a corresponding scalar ID field (e.g., 'userId') exists for this object field (e.g., 'user')
|
|
21
|
-
const correspondingIdFieldName = `${field.name}Id`;
|
|
22
|
-
const hasCorrespondingIdField = model.fields.some(f => f.name === correspondingIdFieldName && f.kind !== 'object');
|
|
23
|
-
if (!hasCorrespondingIdField) {
|
|
24
|
-
// If no pre-existing '...Id' scalar, we'll generate one, so 'ID' import is needed.
|
|
25
|
-
usesID = true;
|
|
26
|
-
}
|
|
27
|
-
} else if (field.kind === 'enum') {
|
|
28
|
-
enumNames.add(field.type);
|
|
73
|
+
if (field.type === 'ID') usesID = true;
|
|
74
|
+
if (field.kind === 'enum') {
|
|
75
|
+
enumNames.add(field.type);
|
|
29
76
|
}
|
|
30
77
|
}
|
|
31
78
|
}
|
|
@@ -33,191 +80,132 @@ for (const model of models) {
|
|
|
33
80
|
if (usesInt) gqlImports.add('Int');
|
|
34
81
|
if (usesFloat) gqlImports.add('Float');
|
|
35
82
|
if (usesID) gqlImports.add('ID');
|
|
83
|
+
usesPartialType = models.length > 0; // If we generate any Update input, we need PartialType
|
|
36
84
|
%>
|
|
37
85
|
import { <%= Array.from(gqlImports).join(', ') %> } from '@nestjs/graphql'
|
|
38
|
-
|
|
39
86
|
<% if (enumNames.size > 0) { %>import { <%= Array.from(enumNames).join(', ') %> } from '@<%= npmScope %>/api/core/models'
|
|
40
87
|
<% } %><% if (usesGraphQLJSON) { %>import { GraphQLJSON } from 'graphql-type-json'<% } %>
|
|
41
88
|
import { CorePagingInput } from '@<%= npmScope %>/api/core/data-access'
|
|
42
89
|
|
|
43
90
|
<% for (const model of models) { %>
|
|
91
|
+
<%
|
|
92
|
+
// Get all regular fields (non-relation) and virtual relation fields
|
|
93
|
+
const regularFields = model.fields.filter(field => !field.relationName || field.relationName.length === 0);
|
|
94
|
+
const virtualRelationFields = getVirtualRelationFields(model);
|
|
95
|
+
const allFields = [...regularFields, ...virtualRelationFields];
|
|
96
|
+
%>
|
|
44
97
|
@InputType()
|
|
45
98
|
export class Create<%= model.modelName %>Input {
|
|
46
|
-
<% for (const field of
|
|
99
|
+
<% for (const field of allFields) { %>
|
|
47
100
|
<%
|
|
48
|
-
let shouldSkipField = false;
|
|
49
101
|
let baseGqlType;
|
|
50
102
|
let tsType;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (field.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
effectiveFieldName = correspondingIdFieldName;
|
|
63
|
-
}
|
|
103
|
+
if (field.type === 'String') { baseGqlType = 'String'; tsType = 'string'; }
|
|
104
|
+
else if (field.type === 'Int') { baseGqlType = 'Int'; tsType = 'number'; }
|
|
105
|
+
else if (field.type === 'Float') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
106
|
+
else if (field.type === 'Decimal') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
107
|
+
else if (field.type === 'Boolean') { baseGqlType = 'Boolean'; tsType = 'boolean'; }
|
|
108
|
+
else if (field.type === 'DateTime') { baseGqlType = 'Date'; tsType = 'Date'; }
|
|
109
|
+
else if (field.type === 'Json') { baseGqlType = 'GraphQLJSON'; tsType = 'typeof GraphQLJSON'; }
|
|
110
|
+
else if (field.type === 'ID') { baseGqlType = 'ID'; tsType = 'string'; }
|
|
111
|
+
else if (field.kind === 'enum') {
|
|
112
|
+
baseGqlType = field.type;
|
|
113
|
+
tsType = field.type;
|
|
64
114
|
} else {
|
|
65
|
-
|
|
66
|
-
effectiveFieldName = field.name;
|
|
67
|
-
if (field.type === 'String') { baseGqlType = 'String'; tsType = 'string'; }
|
|
68
|
-
else if (field.type === 'Int') { baseGqlType = 'Int'; tsType = 'number'; }
|
|
69
|
-
else if (field.type === 'Float') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
70
|
-
else if (field.type === 'Decimal') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
71
|
-
else if (field.type === 'Boolean') { baseGqlType = 'Boolean'; tsType = 'boolean'; }
|
|
72
|
-
else if (field.type === 'DateTime') { baseGqlType = 'Date'; tsType = 'Date'; }
|
|
73
|
-
else if (field.type === 'Json') { baseGqlType = 'GraphQLJSON'; tsType = 'typeof GraphQLJSON'; }
|
|
74
|
-
else if (field.type === 'ID') { baseGqlType = 'ID'; tsType = 'string'; }
|
|
75
|
-
else if (field.kind === 'enum') {
|
|
76
|
-
baseGqlType = field.type;
|
|
77
|
-
tsType = field.type;
|
|
78
|
-
} else { // Fallback, should ideally not be reached if all model types are known
|
|
79
|
-
baseGqlType = 'String'; tsType = 'string';
|
|
80
|
-
}
|
|
115
|
+
baseGqlType = 'String'; tsType = 'string';
|
|
81
116
|
}
|
|
82
|
-
|
|
83
117
|
let fieldDecoratorTypeArg = '';
|
|
84
118
|
let finalTsType = tsType;
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
119
|
+
let isOptional = false;
|
|
120
|
+
if (field.isList) {
|
|
121
|
+
fieldDecoratorTypeArg = `() => [${baseGqlType}]`;
|
|
122
|
+
finalTsType = tsType + '[]';
|
|
123
|
+
} else {
|
|
124
|
+
if (baseGqlType !== 'String' && baseGqlType !== 'Boolean') {
|
|
125
|
+
fieldDecoratorTypeArg = `() => ${baseGqlType}`;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Always optional for id, createdAt, updatedAt, and virtual fields
|
|
129
|
+
if (alwaysOptionalFields.includes(field.name) || field.isVirtual) {
|
|
130
|
+
isOptional = true;
|
|
131
|
+
} else {
|
|
132
|
+
isOptional = field.isOptional;
|
|
97
133
|
}
|
|
98
134
|
%>
|
|
99
|
-
<% if (
|
|
100
|
-
|
|
101
|
-
<%= effectiveFieldName %>?: <%= finalTsType %>
|
|
102
|
-
<% } %>
|
|
135
|
+
@Field(<% if (fieldDecoratorTypeArg) { %><%- fieldDecoratorTypeArg %>, <% } %>{ nullable: <%= isOptional ? 'true' : 'false' %> })
|
|
136
|
+
<%= field.name %><%= isOptional ? '?' : '!' %>: <%= finalTsType %>
|
|
103
137
|
<% } %>
|
|
104
138
|
}
|
|
105
139
|
|
|
106
140
|
@InputType()
|
|
107
141
|
export class Update<%= model.modelName %>Input {
|
|
108
|
-
<% for (const field of
|
|
142
|
+
<% for (const field of allFields) { %>
|
|
109
143
|
<%
|
|
110
|
-
let shouldSkipField = false;
|
|
111
144
|
let baseGqlType;
|
|
112
145
|
let tsType;
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (field.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
146
|
+
if (field.type === 'String') { baseGqlType = 'String'; tsType = 'string'; }
|
|
147
|
+
else if (field.type === 'Int') { baseGqlType = 'Int'; tsType = 'number'; }
|
|
148
|
+
else if (field.type === 'Float') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
149
|
+
else if (field.type === 'Decimal') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
150
|
+
else if (field.type === 'Boolean') { baseGqlType = 'Boolean'; tsType = 'boolean'; }
|
|
151
|
+
else if (field.type === 'DateTime') { baseGqlType = 'Date'; tsType = 'Date'; }
|
|
152
|
+
else if (field.type === 'Json') { baseGqlType = 'GraphQLJSON'; tsType = 'typeof GraphQLJSON'; }
|
|
153
|
+
else if (field.type === 'ID') { baseGqlType = 'ID'; tsType = 'string'; }
|
|
154
|
+
else if (field.kind === 'enum') {
|
|
155
|
+
baseGqlType = field.type;
|
|
156
|
+
tsType = field.type;
|
|
125
157
|
} else {
|
|
126
|
-
|
|
127
|
-
if (field.type === 'String') { baseGqlType = 'String'; tsType = 'string'; }
|
|
128
|
-
else if (field.type === 'Int') { baseGqlType = 'Int'; tsType = 'number'; }
|
|
129
|
-
else if (field.type === 'Float') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
130
|
-
else if (field.type === 'Decimal') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
131
|
-
else if (field.type === 'Boolean') { baseGqlType = 'Boolean'; tsType = 'boolean'; }
|
|
132
|
-
else if (field.type === 'DateTime') { baseGqlType = 'Date'; tsType = 'Date'; }
|
|
133
|
-
else if (field.type === 'Json') { baseGqlType = 'GraphQLJSON'; tsType = 'typeof GraphQLJSON'; }
|
|
134
|
-
else if (field.type === 'ID') { baseGqlType = 'ID'; tsType = 'string'; }
|
|
135
|
-
else if (field.kind === 'enum') {
|
|
136
|
-
baseGqlType = field.type;
|
|
137
|
-
tsType = field.type;
|
|
138
|
-
} else {
|
|
139
|
-
baseGqlType = 'String'; tsType = 'string';
|
|
140
|
-
}
|
|
158
|
+
baseGqlType = 'String'; tsType = 'string';
|
|
141
159
|
}
|
|
142
|
-
|
|
143
160
|
let fieldDecoratorTypeArg = '';
|
|
144
161
|
let finalTsType = tsType;
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
fieldDecoratorTypeArg = `() => ${baseGqlType}`;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
162
|
+
if (field.isList) {
|
|
163
|
+
fieldDecoratorTypeArg = `() => [${baseGqlType}]`;
|
|
164
|
+
finalTsType = tsType + '[]';
|
|
165
|
+
} else {
|
|
166
|
+
if (baseGqlType !== 'String' && baseGqlType !== 'Boolean') {
|
|
167
|
+
fieldDecoratorTypeArg = `() => ${baseGqlType}`;
|
|
168
|
+
}
|
|
155
169
|
}
|
|
156
170
|
%>
|
|
157
|
-
<% if (!shouldSkipField) { %>
|
|
158
171
|
@Field(<% if (fieldDecoratorTypeArg) { %><%- fieldDecoratorTypeArg %>, <% } %>{ nullable: true })
|
|
159
|
-
<%=
|
|
160
|
-
<% } %>
|
|
172
|
+
<%= field.name %>?: <%= finalTsType %>
|
|
161
173
|
<% } %>
|
|
162
174
|
}
|
|
163
175
|
|
|
164
176
|
@InputType()
|
|
165
177
|
export class List<%= model.modelName %>Input extends CorePagingInput {
|
|
166
|
-
<% for (const field of
|
|
178
|
+
<% for (const field of allFields) { %>
|
|
167
179
|
<%
|
|
168
|
-
let shouldSkipField = false;
|
|
169
180
|
let baseGqlType;
|
|
170
181
|
let tsType;
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (field.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
effectiveFieldName = correspondingIdFieldName;
|
|
183
|
-
}
|
|
182
|
+
if (field.type === 'String') { baseGqlType = 'String'; tsType = 'string'; }
|
|
183
|
+
else if (field.type === 'Int') { baseGqlType = 'Int'; tsType = 'number'; }
|
|
184
|
+
else if (field.type === 'Float') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
185
|
+
else if (field.type === 'Decimal') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
186
|
+
else if (field.type === 'Boolean') { baseGqlType = 'Boolean'; tsType = 'boolean'; }
|
|
187
|
+
else if (field.type === 'DateTime') { baseGqlType = 'Date'; tsType = 'Date'; }
|
|
188
|
+
else if (field.type === 'Json') { baseGqlType = 'GraphQLJSON'; tsType = 'typeof GraphQLJSON'; }
|
|
189
|
+
else if (field.type === 'ID') { baseGqlType = 'ID'; tsType = 'string'; }
|
|
190
|
+
else if (field.kind === 'enum') {
|
|
191
|
+
baseGqlType = field.type;
|
|
192
|
+
tsType = field.type;
|
|
184
193
|
} else {
|
|
185
|
-
|
|
186
|
-
effectiveFieldName = field.name;
|
|
187
|
-
if (field.type === 'String') { baseGqlType = 'String'; tsType = 'string'; }
|
|
188
|
-
else if (field.type === 'Int') { baseGqlType = 'Int'; tsType = 'number'; }
|
|
189
|
-
else if (field.type === 'Float') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
190
|
-
else if (field.type === 'Decimal') { baseGqlType = 'Float'; tsType = 'number'; }
|
|
191
|
-
else if (field.type === 'Boolean') { baseGqlType = 'Boolean'; tsType = 'boolean'; }
|
|
192
|
-
else if (field.type === 'DateTime') { baseGqlType = 'Date'; tsType = 'Date'; }
|
|
193
|
-
else if (field.type === 'Json') { baseGqlType = 'GraphQLJSON'; tsType = 'typeof GraphQLJSON'; }
|
|
194
|
-
else if (field.type === 'ID') { baseGqlType = 'ID'; tsType = 'string'; }
|
|
195
|
-
else if (field.kind === 'enum') {
|
|
196
|
-
baseGqlType = field.type;
|
|
197
|
-
tsType = field.type;
|
|
198
|
-
} else {
|
|
199
|
-
baseGqlType = 'String'; tsType = 'string';
|
|
200
|
-
}
|
|
194
|
+
baseGqlType = 'String'; tsType = 'string';
|
|
201
195
|
}
|
|
202
|
-
|
|
203
196
|
let fieldDecoratorTypeArg = '';
|
|
204
197
|
let finalTsType = tsType;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
fieldDecoratorTypeArg = `() => ${baseGqlType}`;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
198
|
+
if (field.isList) {
|
|
199
|
+
fieldDecoratorTypeArg = `() => [${baseGqlType}]`;
|
|
200
|
+
finalTsType = tsType + '[]';
|
|
201
|
+
} else {
|
|
202
|
+
if (baseGqlType !== 'String' && baseGqlType !== 'Boolean') {
|
|
203
|
+
fieldDecoratorTypeArg = `() => ${baseGqlType}`;
|
|
204
|
+
}
|
|
215
205
|
}
|
|
216
206
|
%>
|
|
217
|
-
<% if (!shouldSkipField) { %>
|
|
218
207
|
@Field(<% if (fieldDecoratorTypeArg) { %><%- fieldDecoratorTypeArg %>, <% } %>{ nullable: true })
|
|
219
|
-
<%=
|
|
220
|
-
<% } %>
|
|
208
|
+
<%= field.name %>?: <%= finalTsType %>
|
|
221
209
|
<% } %>
|
|
222
210
|
}
|
|
223
211
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { formatFiles, generateFiles, installPackagesTask, joinPathFragments, names, Tree } from '@nx/devkit';
|
|
2
2
|
import { getDMMF } from '@prisma/internals';
|
|
3
|
-
import { apiLibraryGenerator, getPrismaSchemaPath, readPrismaSchema } from '@nestledjs/utils';
|
|
3
|
+
import { apiLibraryGenerator, getPrismaSchemaPath, readPrismaSchema, ModelType } from '@nestledjs/utils';
|
|
4
4
|
import { GenerateCrudGeneratorSchema } from './schema';
|
|
5
5
|
import { getNpmScope } from '@nx/js/src/utils/package-json/get-npm-scope';
|
|
6
|
-
import pluralize from 'pluralize';
|
|
7
6
|
interface CrudAuthConfig {
|
|
8
7
|
readOne?: string;
|
|
9
8
|
readMany?: string;
|
|
@@ -12,20 +11,6 @@ interface CrudAuthConfig {
|
|
|
12
11
|
update?: string;
|
|
13
12
|
delete?: string;
|
|
14
13
|
}
|
|
15
|
-
interface ModelType {
|
|
16
|
-
name: string;
|
|
17
|
-
pluralName: string;
|
|
18
|
-
fields: ReadonlyArray<Record<string, unknown> & {
|
|
19
|
-
name: string;
|
|
20
|
-
type: string;
|
|
21
|
-
}>;
|
|
22
|
-
primaryField: string;
|
|
23
|
-
modelName: string;
|
|
24
|
-
modelPropertyName: string;
|
|
25
|
-
pluralModelName: string;
|
|
26
|
-
pluralModelPropertyName: string;
|
|
27
|
-
auth?: CrudAuthConfig;
|
|
28
|
-
}
|
|
29
14
|
export interface GenerateCrudGeneratorDependencies {
|
|
30
15
|
formatFiles: typeof formatFiles;
|
|
31
16
|
generateFiles: typeof generateFiles;
|
|
@@ -37,7 +22,6 @@ export interface GenerateCrudGeneratorDependencies {
|
|
|
37
22
|
getPrismaSchemaPath: typeof getPrismaSchemaPath;
|
|
38
23
|
readPrismaSchema: typeof readPrismaSchema;
|
|
39
24
|
getNpmScope: typeof getNpmScope;
|
|
40
|
-
pluralize: typeof pluralize;
|
|
41
25
|
}
|
|
42
26
|
export declare function parseCrudAuth(comment: string): CrudAuthConfig | null;
|
|
43
27
|
export declare function getCrudAuthForModel(schema: string, modelName: string): CrudAuthConfig;
|
|
@@ -13,7 +13,6 @@ const devkit_1 = require("@nx/devkit");
|
|
|
13
13
|
const internals_1 = require("@prisma/internals");
|
|
14
14
|
const utils_1 = require("@nestledjs/utils");
|
|
15
15
|
const get_npm_scope_1 = require("@nx/js/src/utils/package-json/get-npm-scope");
|
|
16
|
-
const pluralize_1 = tslib_1.__importDefault(require("pluralize"));
|
|
17
16
|
// STEP 2: DEFINE PURE HELPER & CONTENT GENERATION FUNCTIONS
|
|
18
17
|
// These functions are side-effect free and can be tested independently.
|
|
19
18
|
function parseCrudAuth(comment) {
|
|
@@ -188,10 +187,6 @@ function generateFeatureIndexContent(models) {
|
|
|
188
187
|
// This function contains all the generator's logic but uses injected dependencies, making it testable.
|
|
189
188
|
function generateCrudLogic(tree, schema, dependencies) {
|
|
190
189
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
191
|
-
const customPluralize = (str) => {
|
|
192
|
-
const plural = dependencies.pluralize(str);
|
|
193
|
-
return plural === str ? `${str}List` : plural;
|
|
194
|
-
};
|
|
195
190
|
// Helper functions that now use injected dependencies
|
|
196
191
|
function getAllPrismaModels(tree) {
|
|
197
192
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
@@ -206,16 +201,34 @@ function generateCrudLogic(tree, schema, dependencies) {
|
|
|
206
201
|
return dmmf.datamodel.models.map((model) => {
|
|
207
202
|
var _a;
|
|
208
203
|
const singularPropertyName = model.name.charAt(0).toLowerCase() + model.name.slice(1);
|
|
209
|
-
const pluralPropertyName =
|
|
204
|
+
const pluralPropertyName = (0, utils_1.getPluralName)(singularPropertyName);
|
|
210
205
|
const authConfig = getCrudAuthForModel(prismaSchema, model.name);
|
|
211
206
|
return {
|
|
212
207
|
name: model.name,
|
|
213
|
-
pluralName:
|
|
214
|
-
fields: model.fields.map((field) => (
|
|
208
|
+
pluralName: (0, utils_1.getPluralName)(model.name),
|
|
209
|
+
fields: model.fields.map((field) => ({
|
|
210
|
+
name: field.name,
|
|
211
|
+
type: field.type,
|
|
212
|
+
isOptional: !field.isRequired,
|
|
213
|
+
isId: field.isId,
|
|
214
|
+
isUnique: field.isUnique,
|
|
215
|
+
isList: field.isList,
|
|
216
|
+
isReadOnly: field.isReadOnly,
|
|
217
|
+
hasDefaultValue: field.hasDefaultValue,
|
|
218
|
+
default: field.default,
|
|
219
|
+
relationName: field.relationName,
|
|
220
|
+
relationFromFields: field.relationFromFields ? [...field.relationFromFields] : undefined,
|
|
221
|
+
relationToFields: field.relationToFields ? [...field.relationToFields] : undefined,
|
|
222
|
+
relationOnDelete: field.relationOnDelete,
|
|
223
|
+
relationOnUpdate: field.relationOnUpdate,
|
|
224
|
+
isGenerated: field.isGenerated,
|
|
225
|
+
isUpdatedAt: field.isUpdatedAt,
|
|
226
|
+
documentation: field.documentation,
|
|
227
|
+
})),
|
|
215
228
|
primaryField: ((_a = model.fields.find((f) => !f.isId && f.type === 'String')) === null || _a === void 0 ? void 0 : _a.name) || 'name',
|
|
216
229
|
modelName: model.name,
|
|
217
230
|
modelPropertyName: singularPropertyName,
|
|
218
|
-
pluralModelName:
|
|
231
|
+
pluralModelName: (0, utils_1.getPluralName)(model.name),
|
|
219
232
|
pluralModelPropertyName: pluralPropertyName,
|
|
220
233
|
auth: authConfig,
|
|
221
234
|
};
|
|
@@ -240,10 +253,15 @@ function generateCrudLogic(tree, schema, dependencies) {
|
|
|
240
253
|
function generateModelFiles(tree, dataAccessLibraryRoot, featureLibraryRoot, models, name) {
|
|
241
254
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
242
255
|
const npmScope = dependencies.getNpmScope(tree);
|
|
256
|
+
// Generate feature module and resolvers
|
|
243
257
|
const featureModuleContent = generateFeatureModuleContent(models, npmScope);
|
|
244
258
|
tree.write(dependencies.joinPathFragments(featureLibraryRoot, 'src/lib/api-admin-crud-feature.module.ts'), featureModuleContent);
|
|
245
259
|
const featureIndexContent = generateFeatureIndexContent(models);
|
|
246
260
|
tree.write(dependencies.joinPathFragments(featureLibraryRoot, 'src/index.ts'), featureIndexContent);
|
|
261
|
+
// Generate database models file for frontend consumption
|
|
262
|
+
const databaseModelContent = (0, utils_1.generateDatabaseModelContent)(models);
|
|
263
|
+
tree.write(dependencies.joinPathFragments(dataAccessLibraryRoot, 'src/lib/database-models.ts'), databaseModelContent);
|
|
264
|
+
// Generate resolvers
|
|
247
265
|
for (const model of models) {
|
|
248
266
|
const resolverFilePath = dependencies.joinPathFragments(featureLibraryRoot, `src/lib/${toKebabCase(model.modelName)}.resolver.ts`);
|
|
249
267
|
const resolverContent = generateResolverContent(model, npmScope);
|
|
@@ -281,7 +299,6 @@ function default_1(tree, schema) {
|
|
|
281
299
|
getPrismaSchemaPath: utils_1.getPrismaSchemaPath,
|
|
282
300
|
readPrismaSchema: utils_1.readPrismaSchema,
|
|
283
301
|
getNpmScope: get_npm_scope_1.getNpmScope,
|
|
284
|
-
pluralize: pluralize_1.default,
|
|
285
302
|
};
|
|
286
303
|
try {
|
|
287
304
|
return yield generateCrudLogic(tree, schema, dependencies);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/generate-crud/generator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/generate-crud/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = generator;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const devkit_1 = require("@nx/devkit");
|
|
6
|
+
function generator(tree) {
|
|
7
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
8
|
+
// Use the Nx NestJS library generator to create 'integrations' in libs/api
|
|
9
|
+
// This assumes @nx/nest is installed in the workspace
|
|
10
|
+
const { execSync } = require('child_process');
|
|
11
|
+
execSync('nx g @nx/nest:lib integrations --directory=libs/api/integrations', { stdio: 'inherit' });
|
|
12
|
+
yield (0, devkit_1.formatFiles)(tree);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/integrations/generator.ts"],"names":[],"mappings":";;AAEA,4BAMC;;AARD,uCAAiF;AAEjF,SAA8B,SAAS,CAAC,IAAU;;QAChD,2EAA2E;QAC3E,sDAAsD;QACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;QAC9C,QAAQ,CAAC,kEAAkE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACnG,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CAAA"}
|
package/src/setup/generator.js
CHANGED
|
@@ -22,7 +22,6 @@ function apiSetupGenerator(tree) {
|
|
|
22
22
|
'@nestjs/jwt': '^11.0.0',
|
|
23
23
|
'@nestjs/passport': '^11.0.5',
|
|
24
24
|
'@nestjs/platform-express': '^11.1.3',
|
|
25
|
-
'@paljs/plugins': '^8.2.0',
|
|
26
25
|
axios: '^1.9.0',
|
|
27
26
|
bcryptjs: '^3.0.2',
|
|
28
27
|
express: '^5.1.0',
|
|
@@ -60,12 +59,12 @@ function apiSetupGenerator(tree) {
|
|
|
60
59
|
'@types/nodemailer': '^6.4.7',
|
|
61
60
|
'@types/passport-jwt': '^4.0.1',
|
|
62
61
|
'@types/node': '^24.0.1',
|
|
63
|
-
'@prisma/internals': '^6.
|
|
62
|
+
'@prisma/internals': '^6.11.0',
|
|
64
63
|
autoprefixer: '10.4.21',
|
|
65
64
|
jest: '^30.0.0',
|
|
66
65
|
'jest-environment-node': '^30.0.0',
|
|
67
66
|
pg: '8.16.0',
|
|
68
|
-
prisma: '^6.
|
|
67
|
+
prisma: '^6.11.0',
|
|
69
68
|
'ts-node': '10.9.2',
|
|
70
69
|
yaml: '^2.4.2',
|
|
71
70
|
'ts-loader': '^9.5.2',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/setup/generator.ts"],"names":[],"mappings":";;AASA,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/setup/generator.ts"],"names":[],"mappings":";;AASA,8CA8FC;;AAvGD,uCAAkF;AAClF,4CAAiF;AAEjF,SAAS,WAAW,CAAC,IAAU;IAC7B,MAAM,SAAS,GAAG,QAAQ,CAAA;IAC1B,MAAM,OAAO,GAAG,oCAAoC,CAAA;IACpD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAChC,CAAC;AAED,SAAsB,iBAAiB,CAAC,IAAU;;QAChD,mBAAmB;QACnB,IAAA,qCAA4B,EAC1B,IAAI,EACJ;YACE,gBAAgB,EAAE,SAAS;YAC3B,eAAe,EAAE,QAAQ;YACzB,gBAAgB,EAAE,SAAS;YAC3B,gBAAgB,EAAE,QAAQ;YAC1B,cAAc,EAAE,SAAS;YACzB,iBAAiB,EAAE,SAAS;YAC5B,aAAa,EAAE,SAAS;YACxB,kBAAkB,EAAE,SAAS;YAC7B,0BAA0B,EAAE,SAAS;YACrC,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,UAAU;YACnB,0BAA0B,EAAE,OAAO;YACnC,iBAAiB,EAAE,SAAS;YAC5B,uBAAuB,EAAE,QAAQ;YACjC,YAAY,EAAE,QAAQ;YACtB,GAAG,EAAE,UAAU;YACf,UAAU,EAAE,QAAQ;YACpB,kBAAkB,EAAE,QAAQ;YAC5B,IAAI,EAAE,QAAQ;YACd,cAAc,EAAE,aAAa;YAC7B,gBAAgB,EAAE,QAAQ;YAC1B,iBAAiB,EAAE,SAAS;YAC5B,mBAAmB,EAAE,QAAQ;YAC7B,6BAA6B,EAAE,QAAQ;YACvC,OAAO,EAAE,QAAQ;YACjB,eAAe,EAAE,QAAQ;YACzB,cAAc,EAAE,QAAQ;SACzB,EACD;YACE,EAAE,EAAE,QAAQ;YACZ,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,QAAQ;YACvB,oBAAoB,EAAE,SAAS;YAC/B,iBAAiB,EAAE,SAAS;YAC5B,4BAA4B,EAAE,OAAO;YACrC,oBAAoB,EAAE,UAAU;YAChC,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,SAAS;YACtB,sBAAsB,EAAE,QAAQ;YAChC,gBAAgB,EAAE,QAAQ;YAC1B,mBAAmB,EAAE,QAAQ;YAC7B,qBAAqB,EAAE,QAAQ;YAC/B,aAAa,EAAE,SAAS;YACxB,mBAAmB,EAAE,SAAS;YAC9B,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,SAAS;YACf,uBAAuB,EAAE,SAAS;YAClC,EAAE,EAAE,QAAQ;YACZ,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,QAAQ;YACrB,aAAa,EAAE,QAAQ;YACvB,wBAAwB,EAAE,QAAQ;YAClC,+BAA+B,EAAE,QAAQ;YACzC,6BAA6B,EAAE,QAAQ;YACvC,mBAAmB,EAAE,QAAQ;SAC9B,CACF,CAAA;QAED,qDAAqD;QACrD,MAAM,eAAe,GAAG;YACtB,oBAAoB;YACpB,iBAAiB;YACjB,gBAAgB;YAChB,4BAA4B;YAC5B,iBAAiB;YACjB,SAAS;YACT,IAAI;YACJ,QAAQ;YACR,SAAS;YACT,6BAA6B;YAC7B,cAAc;YACd,cAAc;YACd,SAAS;YACT,eAAe;YACf,WAAW;SACZ,CAAA;QACD,IAAA,iCAAyB,EAAC,IAAI,EAAE,EAAE,qBAAqB,EAAE,eAAe,EAAE,CAAC,CAAA;QAE3E,iDAAiD;QACjD,WAAW,CAAC,IAAI,CAAC,CAAA;QAEjB,gEAAgE;QAChE,OAAO,IAAA,2BAAmB,GAAE,CAAA;IAC9B,CAAC;CAAA;AAED,kBAAe,iBAAiB,CAAA"}
|
|
File without changes
|