@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.
Files changed (28) hide show
  1. package/generators.json +5 -0
  2. package/package.json +3 -3
  3. package/src/app/files/src/main.ts__tmpl__ +19 -7
  4. package/src/config/files/src/lib/config.service.ts__tmpl__ +16 -2
  5. package/src/config/files/src/lib/configuration.ts__tmpl__ +1 -0
  6. package/src/config/generator.js +1 -1
  7. package/src/config/generator.js.map +1 -1
  8. package/src/core/files/helpers/src/index.ts__tmpl__ +1 -0
  9. package/src/core/files/helpers/src/lib/graphql-select.ts__tmpl__ +52 -0
  10. package/src/core/generator.js +6 -2
  11. package/src/core/generator.js.map +1 -1
  12. package/src/custom/generator.js +14 -6
  13. package/src/custom/generator.js.map +1 -1
  14. package/src/generate-crud/files/data-access/src/index.ts__tmpl__ +1 -0
  15. package/src/generate-crud/files/data-access/src/lib/api-crud-data-access.service.ts__tmpl__ +131 -11
  16. package/src/generate-crud/files/data-access/src/lib/dto/index.ts__tmpl__ +138 -150
  17. package/src/generate-crud/generator.d.ts +1 -17
  18. package/src/generate-crud/generator.js +27 -10
  19. package/src/generate-crud/generator.js.map +1 -1
  20. package/src/integrations/generator.d.ts +2 -0
  21. package/src/integrations/generator.js +15 -0
  22. package/src/integrations/generator.js.map +1 -0
  23. package/src/integrations/schema.json +8 -0
  24. package/src/setup/generator.js +2 -3
  25. package/src/setup/generator.js.map +1 -1
  26. package/src/utils/files/src/index.ts__tmpl__ +1 -0
  27. package/src/utils/files/src/lib/types/nest-context-type.ts__tmpl__ +4 -0
  28. /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.0",
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.9.0",
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.0"
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 '@nestjs/config'
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.get('app.prefix') || 'api';
14
- const port = configService.get('app.port') || 3000;
15
- const host = configService.get('app.host') || 'localhost';
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: configService.get('app.api.cors.origin') || '*',
21
- })
22
- app.use(cookieParser(configService.get('app.api.cookie.secret') || 'secret'));
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 }>('api.cookie')
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 {
@@ -7,6 +7,7 @@ export const configuration = () => ({
7
7
  api: {
8
8
  cookie: {
9
9
  name: process.env['API_COOKIE_NAME'],
10
+ secret: process.env['API_COOKIE_SECRET'] || 'secret',
10
11
  options: {
11
12
  domain: process.env['API_COOKIE_DOMAIN'],
12
13
  httpOnly: true,
@@ -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;QAEhF,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;QAEvB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;IACH,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
+ }
@@ -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.9.0',
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,oCA8BC;;AAlCD,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,QAAQ;YAC1B,gBAAgB,EAAE,QAAQ;SAC3B,CAAA;QAED,MAAM,eAAe,GAAG,EAAE,CAAA;QAE1B,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;QAExF,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;QAEvB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;IACH,CAAC;CAAA"}
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"}
@@ -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
- // Only write .gitkeep in pluginsDir
84
- tree.write(dependencies.join(pluginsDir, '.gitkeep'), '');
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 indexContent = modelFolders.map((m) => `export * from './lib/default/${m}/${m}.module'`).join('\n');
148
- tree.write(dependencies.join(customLibraryRoot, 'src/index.ts'), indexContent);
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":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/custom/generator.ts"],"names":[],"mappings":";;AA4LA,oDAuDC;AAED,4BAEC;;AAvPD,uCAAmE;AACnE,iDAA2C;AAC3C,4CAA2G;AAE3G,iDAAwC;AACxC,+EAAyE;AACzE,kEAAiC;AACjC,+BAA2B;AAE3B,8CAA8C;AAC9C,MAAM,mBAAmB,GAAG;IAC1B,WAAW,EAAX,oBAAW;IACX,mBAAmB,EAAnB,4BAAmB;IACnB,OAAO,EAAP,mBAAO;IACP,YAAY,EAAZ,oBAAY;IACZ,mBAAmB,EAAnB,2BAAmB;IACnB,mBAAmB,EAAnB,2BAAmB;IACnB,gBAAgB,EAAhB,wBAAgB;IAChB,QAAQ,EAAR,wBAAQ;IACR,WAAW,EAAX,2BAAW;IACX,SAAS,EAAT,mBAAS;IACT,IAAI,EAAJ,WAAI;CACL,CAAA;AAcD,SAAe,kBAAkB,CAAC,IAAU,EAAE,YAAyC;;QACrF,MAAM,UAAU,GAAG,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACzD,MAAM,YAAY,GAAG,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACpE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAA;YACxD,OAAO,EAAE,CAAA;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAA;YACpE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;gBACzC,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACrF,MAAM,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;gBAEvE,uCAAuC;gBACvC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBACzC,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,aAAa,EAAE,KAAK,CAAC,aAAa,IAE/B,KAAK,EACR,CAAC,CAAA;gBAEH,8BAA8B;gBAC9B,MAAM,SAAS,GAAc;oBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC9C,MAAM;oBACN,YAAY,EAAE,CAAA,MAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,0CAAE,IAAI,KAAI,MAAM;oBACtF,SAAS,EAAE,KAAK,CAAC,IAAI;oBACrB,iBAAiB,EAAE,oBAAoB;oBACvC,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;oBACnD,uBAAuB,EAAE,kBAAkB;iBAC5C,CAAA;gBAED,OAAO,SAAS,CAAA;YAClB,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;YACpD,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;CAAA;AAED,SAAe,eAAe,CAAC,IAAU,EAAE,IAAY;;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,mDAAmD;YACnD,2DAA2D;QAC7D,CAAC;IACH,CAAC;CAAA;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG;SACP,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;SACxC,WAAW,EAAE,CAAA;AAClB,CAAC;AAED,SAAe,mBAAmB,CAChC,IAAU,EACV,iBAAyB,EACzB,MAAmB,EACnB,QAAgB,EAChB,YAAyC;;QAEzC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAA;QAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAA;QAC1E,MAAM,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACvC,MAAM,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACvC,oFAAoF;QACpF,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QAClE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QAClC,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC/C,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;YAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,sCAAsC;gBACtC,SAAQ;YACV,CAAC;YACD,MAAM,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YAExC,sBAAsB;YACtB,MAAM,cAAc,GAAG;;;eAGZ,KAAK,CAAC,SAAS;;;CAG7B,CAAA;YACG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,UAAU,aAAa,CAAC,EAAE,cAAc,CAAC,CAAA;YAEtF,uBAAuB;YACvB,MAAM,eAAe,GAAG;4CACgB,QAAQ;oBAChC,KAAK,CAAC,SAAS,oBAAoB,QAAQ;;;WAGpD,KAAK,CAAC,SAAS,YAAY,QAAQ;;kBAE5B,KAAK,CAAC,SAAS;;eAElB,KAAK,CAAC,SAAS,6BAA6B,KAAK,CAAC,SAAS;;yCAEjC,KAAK,CAAC,SAAS;;;;;;CAMvD,CAAA;YACG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,UAAU,cAAc,CAAC,EAAE,eAAe,CAAC,CAAA;YAExF,qBAAqB;YACrB,MAAM,aAAa,GAAG;WACf,KAAK,CAAC,SAAS,qBAAqB,UAAU;WAC9C,KAAK,CAAC,SAAS,sBAAsB,UAAU;2CACf,QAAQ;;;;gBAInC,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,SAAS;cAC5C,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,SAAS;;eAEzC,KAAK,CAAC,SAAS;CAC7B,CAAA;YACG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,UAAU,YAAY,CAAC,EAAE,aAAa,CAAC,CAAA;YAEpF,iDAAiD;YACjD,YAAY,CAAC,YAAY,CAAC;gBACxB,IAAI;gBACJ,UAAU,EAAE,4BAA4B;gBACxC,eAAe,EAAE,gBAAgB;gBACjC,WAAW,EAAE,GAAG,KAAK,CAAC,SAAS,QAAQ;gBACvC,UAAU,EAAE,GAAG,QAAQ,aAAa;aACrC,CAAC,CAAA;QACJ,CAAC;QAED,sDAAsD;QACtD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QAChE,MAAM,mBAAmB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAC5E,CAAC;CAAA;AAED,SAAsB,oBAAoB;iEACxC,IAAU,EACV,MAAqC,EACrC,eAA4C,mBAAmB;QAE/D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAA;YACpC,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAA;YACxG,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAA;YAE5G,kBAAkB;YAClB,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC;oBACH,YAAY,CAAC,QAAQ,CAAC,6BAA6B,WAAW,gBAAgB,EAAE;wBAC9E,KAAK,EAAE,SAAS;wBAChB,GAAG,EAAE,IAAI,CAAC,IAAI;qBACf,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,WAAW,GAAG,EAAE,KAAK,CAAC,CAAA;gBAC1E,CAAC;YACH,CAAC;YAED,gFAAgF;YAChF,MAAM,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;YAE5E,MAAM,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAA;YACpF,MAAM,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAA;YAEpF,oFAAoF;YACpF,MAAM,gBAAgB,GAAG;;CAE5B,CAAA;YACG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAA;YAElF,wBAAwB;YACxB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;YAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBACvC,OAAM;YACR,CAAC;YAED,kCAAkC;YAClC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAA;YACrD,MAAM,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;YAElF,eAAe;YACf,MAAM,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAEpC,OAAO,GAAG,EAAE;gBACV,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACxC,CAAC,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;YAClD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;CAAA;AAED,mBAA+B,IAAU,EAAE,MAAqC;;QAC9E,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC3C,CAAC;CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './lib/api-crud-data-access.module'
2
2
  export * from './lib/api-crud-data-access.service'
3
+ export * from './lib/database-models'
3
4
  export * from './lib/dto'
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@nestjs/common'
2
2
  import { ApiCoreDataAccessService } from '@<%= npmScope %>/api/core/data-access'
3
- import { PrismaSelect } from '@paljs/plugins'
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
- const select = new PrismaSelect(info).value
137
+ <%- generateRelationHandling(model, 'create') %>
138
+
18
139
  return this.data['<%= model.modelPropertyName %>'].create({
19
- data: input,
20
- ...select,
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
- ...select,
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
- ...select,
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
- const select = new PrismaSelect(info).value
177
+ <%- generateRelationHandling(model, 'update') %>
178
+
59
179
  return this.data['<%= model.modelPropertyName %>'].update({
60
180
  where: { id },
61
- data: input,
62
- ...select,
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.type === 'ID') { // Explicit ID field
18
- usesID = true;
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 model.fields) { %>
99
+ <% for (const field of allFields) { %>
47
100
  <%
48
- let shouldSkipField = false;
49
101
  let baseGqlType;
50
102
  let tsType;
51
- let effectiveFieldName = field.name;
52
-
53
- if (field.kind === 'object') {
54
- const correspondingIdFieldName = `${field.name}Id`;
55
- const hasCorrespondingIdField = model.fields.some(f => f.name === correspondingIdFieldName && f.kind !== 'object');
56
- if (hasCorrespondingIdField) {
57
- shouldSkipField = true; // Skip this object field; its ID is handled by the existing scalar field.
58
- } else {
59
- // No corresponding '...Id' scalar found, so generate an ID field for this relation.
60
- baseGqlType = 'ID';
61
- tsType = 'string';
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
- // Handle non-object (scalar, enum, or explicit ID) fields
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 (!shouldSkipField) {
87
- if (field.isList) { // Use original field's isList property
88
- fieldDecoratorTypeArg = `() => [${baseGqlType}]`; // baseGqlType is 'ID' if transformed from object list
89
- finalTsType = tsType + '[]'; // tsType is 'string' for ID, so 'string[]'
90
- } else {
91
- // For non-list fields (scalars or single objects transformed to ID)
92
- if (baseGqlType !== 'String' && baseGqlType !== 'Boolean') {
93
- fieldDecoratorTypeArg = `() => ${baseGqlType}`;
94
- }
95
- // finalTsType is already 'tsType', which is correct
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 (!shouldSkipField) { %>
100
- @Field(<% if (fieldDecoratorTypeArg) { %><%- fieldDecoratorTypeArg %>, <% } %>{ nullable: true })
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 model.fields) { %>
142
+ <% for (const field of allFields) { %>
109
143
  <%
110
- let shouldSkipField = false;
111
144
  let baseGqlType;
112
145
  let tsType;
113
- let effectiveFieldName = field.name;
114
-
115
- if (field.kind === 'object') {
116
- const correspondingIdFieldName = `${field.name}Id`;
117
- const hasCorrespondingIdField = model.fields.some(f => f.name === correspondingIdFieldName && f.kind !== 'object');
118
- if (hasCorrespondingIdField) {
119
- shouldSkipField = true;
120
- } else {
121
- baseGqlType = 'ID';
122
- tsType = 'string';
123
- effectiveFieldName = correspondingIdFieldName;
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
- effectiveFieldName = field.name;
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
- if (!shouldSkipField) {
147
- if (field.isList) {
148
- fieldDecoratorTypeArg = `() => [${baseGqlType}]`;
149
- finalTsType = tsType + '[]';
150
- } else {
151
- if (baseGqlType !== 'String' && baseGqlType !== 'Boolean') {
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
- <%= effectiveFieldName %>?: <%= finalTsType %>
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 model.fields) { %>
178
+ <% for (const field of allFields) { %>
167
179
  <%
168
- let shouldSkipField = false;
169
180
  let baseGqlType;
170
181
  let tsType;
171
- let effectiveFieldName = field.name;
172
-
173
- if (field.kind === 'object') {
174
- const correspondingIdFieldName = `${field.name}Id`;
175
- const hasCorrespondingIdField = model.fields.some(f => f.name === correspondingIdFieldName && f.kind !== 'object');
176
- if (hasCorrespondingIdField) {
177
- shouldSkipField = true;
178
- } else {
179
- // For ListInput, if no direct ...Id field, we create one for filtering by relation ID
180
- baseGqlType = 'ID';
181
- tsType = 'string';
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
- // Handle non-object fields for filtering
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
- if (!shouldSkipField) {
207
- if (field.isList) {
208
- fieldDecoratorTypeArg = `() => [${baseGqlType}]`;
209
- finalTsType = tsType + '[]';
210
- } else {
211
- if (baseGqlType !== 'String' && baseGqlType !== 'Boolean') {
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
- <%= effectiveFieldName %>?: <%= finalTsType %>
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 = customPluralize(singularPropertyName);
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: customPluralize(model.name),
214
- fields: model.fields.map((field) => (Object.assign({}, 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: customPluralize(model.name),
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,2 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export default function generator(tree: Tree): Promise<void>;
@@ -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"}
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "cli": "nx",
4
+ "id": "api-integrations",
5
+ "type": "object",
6
+ "properties": {},
7
+ "required": []
8
+ }
@@ -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.9.0',
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.9.0',
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":"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"}
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"}
@@ -1,3 +1,4 @@
1
1
  export * from './lib/guards/gql-auth.guard'
2
2
  export * from './lib/guards/gql-auth-admin.guard'
3
3
  export * from './lib/decorators/ctx-user.decorator'
4
+ export * from './lib/types/nest-context-type'
@@ -0,0 +1,4 @@
1
+ export interface NestContextType {
2
+ req: Request
3
+ res: Response
4
+ }