@nestledjs/api 0.1.9 → 0.1.11

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestledjs/api",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "generators": "./generators.json",
5
5
  "type": "commonjs",
6
6
  "main": "./src/index.js",
@@ -25,6 +25,6 @@
25
25
  "pg": "^8.13.0"
26
26
  },
27
27
  "peerDependencies": {
28
- "@nestledjs/utils": "0.1.2"
28
+ "@nestledjs/utils": "0.1.3"
29
29
  }
30
30
  }
@@ -311,7 +311,6 @@ function generateIndex(): string {
311
311
  return `// Generated from Prisma schema
312
312
  export * from './models'
313
313
  export * from './enums'
314
- export * from './core-paging.model'
315
314
  `
316
315
  }
317
316
 
@@ -1,91 +1,88 @@
1
1
  <%# EJS template for generating DTOs %>
2
2
  <%
3
- let gqlImports = new Set(['Field', 'InputType']);
4
- let usesGraphQLJSON = false;
5
- let usesInt = false;
6
- let usesFloat = false;
7
- let usesID = false;
8
- let enumNames = new Set();
9
- let usesPartialType = false;
10
- const alwaysOptionalFields = ['id', 'createdAt', 'updatedAt'];
3
+ let gqlImports = new Set(['Field', 'InputType'])
4
+ let usesGraphQLJSON = false
5
+ let usesInt = false
6
+ let usesFloat = false
7
+ let usesID = false
8
+ let enumNames = new Set()
9
+ let usesPartialType = false
10
+ const alwaysOptionalFields = ['id', 'createdAt', 'updatedAt']
11
11
 
12
12
  // Helper function to get relation fields for a model
13
13
  function getRelationFields(model) {
14
- return model.fields.filter(field => field.relationName && field.relationName.length > 0);
14
+ return model.fields.filter(field => field.relationName && field.relationName.length > 0)
15
15
  }
16
16
 
17
17
  // Helper function to get virtual relation fields for a model
18
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
- });
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
+ }
58
60
  }
59
- }
60
- }
61
- });
62
-
63
- return virtualFields;
61
+ })
62
+
63
+ return virtualFields
64
64
  }
65
65
 
66
66
  // First pass to determine necessary imports and enums
67
67
  for (const model of models) {
68
- for (const field of model.fields) {
69
- if (field.relationName && field.relationName.length > 0) continue; // Skip relation object fields
70
- if (field.type === 'Int') usesInt = true;
71
- if (field.type === 'Float' || field.type === 'Decimal') usesFloat = true;
72
- if (field.type === 'Json') usesGraphQLJSON = true;
73
- if (field.type === 'ID') usesID = true;
74
- if (field.kind === 'enum') {
75
- enumNames.add(field.type);
68
+ for (const field of model.fields) {
69
+ if (field.relationName && field.relationName.length > 0) continue // Skip relation object fields
70
+ if (field.type === 'Int') usesInt = true
71
+ if (field.type === 'Float' || field.type === 'Decimal') usesFloat = true
72
+ if (field.type === 'Json') usesGraphQLJSON = true
73
+ if (field.type === 'ID') usesID = true
74
+ if (field.kind === 'enum') {
75
+ enumNames.add(field.type)
76
+ }
76
77
  }
77
- }
78
78
  }
79
79
 
80
- if (usesInt) gqlImports.add('Int');
81
- if (usesFloat) gqlImports.add('Float');
82
- if (usesID) gqlImports.add('ID');
83
- usesPartialType = models.length > 0; // If we generate any Update input, we need PartialType
80
+ if (usesInt) gqlImports.add('Int')
81
+ if (usesFloat) gqlImports.add('Float')
82
+ if (usesID) gqlImports.add('ID')
83
+ usesPartialType = models.length > 0 // If we generate any Update input, we need PartialType
84
84
  %>
85
- import { <%= Array.from(gqlImports).join(', ') %> } from '@nestjs/graphql'
86
- <% if (enumNames.size > 0) { %>import { <%= Array.from(enumNames).join(', ') %> } from '@<%= npmScope %>/api/core/models'
87
- <% } %><% if (usesGraphQLJSON) { %>import { GraphQLJSON } from 'graphql-type-json'<% } %>
88
- import { CorePagingInput } from '@<%= npmScope %>/api/core/data-access'
85
+ import { CorePagingInput } from '@<%= npmScope %>/api/core/data-access';
89
86
 
90
87
  <% for (const model of models) { %>
91
88
  <%
@@ -125,8 +122,8 @@ export class Create<%= model.modelName %>Input {
125
122
  fieldDecoratorTypeArg = `() => ${baseGqlType}`;
126
123
  }
127
124
  }
128
- // Always optional for id, createdAt, updatedAt, and virtual fields
129
- if (alwaysOptionalFields.includes(field.name) || field.isVirtual) {
125
+ // Always optional for id, createdAt, updatedAt, virtual fields, and relational fields
126
+ if (alwaysOptionalFields.includes(field.name) || field.isVirtual || field.relationName) {
130
127
  isOptional = true;
131
128
  } else {
132
129
  isOptional = field.isOptional;
@@ -55,7 +55,7 @@ function ensureDockerIsRunning() {
55
55
  }
56
56
  function isDockerComposeRunning() {
57
57
  try {
58
- const res = (0, child_process_1.execSync)('pnpm run docker:ps', { stdio: ['inherit', 'inherit'], cwd: devkit_1.workspaceRoot });
58
+ const res = (0, child_process_1.execSync)('docker compose ps', { stdio: ['inherit', 'inherit'], cwd: devkit_1.workspaceRoot });
59
59
  if (res) {
60
60
  log('Docker Compose is Running');
61
61
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../generators/api/src/workspace-setup/lib/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../generators/api/src/workspace-setup/lib/helpers.ts"],"names":[],"mappings":";;;AAWA,kBAEC;AAED,8CAIC;AAED,gCAQC;AAED,sDAQC;AAED,wDAWC;AAED,oEAqBC;AAED,oCAWC;AAED,wCASC;AAED,sCASC;AAED,4DASC;;AAzHD,iDAAwC;AACxC,2BAA4D;AAC5D,+BAA+B;AAC/B,2BAA2B;AAC3B,uCAA0C;AAE7B,QAAA,WAAW,GAAG,EAAE,CAAA;AAChB,QAAA,cAAc,GAAG,IAAA,eAAQ,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;AACxC,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;AACvC,QAAA,mBAAmB,GAAG,yBAAyB,CAAA;AAE5D,SAAgB,GAAG,CAAC,GAAG,GAAG;IACxB,OAAO,CAAC,GAAG,CAAC,IAAI,sBAAc,GAAG,EAAE,GAAG,GAAG,CAAC,CAAA;AAC5C,CAAC;AAED,SAAsB,iBAAiB,CAAC,GAAW;;QACjD,MAAM,MAAM,GAAG,IAAI,WAAM,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;QACtB,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAED,SAAsB,UAAU,CAAC,GAAW;;QAC1C,IAAI,CAAC;YACH,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;YAC5B,GAAG,CAAC,uBAAuB,CAAC,CAAA;YAC5B,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CAAA;AAED,SAAgB,qBAAqB;IACnC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC1C,GAAG,CAAC,cAAc,CAAC,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,WAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACrE,CAAC;AACH,CAAC;AAED,SAAgB,sBAAsB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,sBAAa,EAAE,CAAC,CAAA;QAChG,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,2BAA2B,CAAC,CAAA;YAChC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAsB,4BAA4B;;QAChD,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAA;QAC1C,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,gCAAgC,CAAC,CAAA;YACrC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,GAAG,CAAC,4BAA4B,CAAC,CAAA;QACjC,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,sBAAa,EAAE,CAAC,CAAA;QAC1E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACjE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,iBAAiB,EAAE,CAAA;YACzB,GAAG,CAAC,oDAAoD,CAAC,CAAA;QAC3D,CAAC;QAAC,WAAM,CAAC;YACP,IAAA,wBAAQ,EAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,sBAAa,EAAE,CAAC,CAAA;YAC1E,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;CAAA;AAED,SAAgB,YAAY;IAC1B,IAAI,CAAC;QACH,IAAI,CAAC,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;YACxB,IAAA,kBAAa,EAAC,MAAM,EAAE,IAAA,iBAAY,EAAC,cAAc,CAAC,CAAC,CAAA;YACnD,GAAG,CAAC,yCAAyC,CAAC,CAAA;QAChD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,aAAa,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAAC,WAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;AACH,CAAC;AAED,SAAgB,cAAc;IAC5B,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,sBAAa,EAAE,CAAC,CAAA;QACvE,GAAG,CAAC,sBAAsB,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAA,wBAAQ,EAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,sBAAa,EAAE,CAAC,CAAA;QAC1E,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACjF,CAAC;AACH,CAAC;AAED,SAAgB,aAAa;IAC3B,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,6CAA6C,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAC7E,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAChF,CAAC;AACH,CAAC;AAED,SAAgB,wBAAwB;IACtC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QACtD,GAAG,CAAC,kCAAkC,CAAC,CAAA;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;QAC3D,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACpF,CAAC;AACH,CAAC;AAEM,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAAxE,QAAA,KAAK,SAAmE;AAErF,SAAS,iBAAiB;IACxB,GAAG,CAAC,iCAAiC,CAAC,CAAA;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,KAAK,GAAG,CAAC,CAAA;QAEb,SAAS,UAAU;YACjB,IAAI,KAAK,IAAI,mBAAW,EAAE,CAAC;gBACzB,MAAM,EAAE,CAAA;gBACR,OAAM;YACR,CAAC;YAED,UAAU,CAAC,oBAAY,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC5C,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,EAAE,CAAA;gBACX,CAAC;qBAAM,CAAC;oBACN,KAAK,EAAE,CAAA;oBACP,IAAA,aAAK,GAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,UAAU,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;AACJ,CAAC"}