@nestledjs/api 2.9.0 → 2.9.2

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": "2.9.0",
3
+ "version": "2.9.2",
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": "1.0.0"
28
+ "@nestledjs/utils": "1.0.1"
29
29
  }
30
30
  }
@@ -112,12 +112,12 @@ function generateRelationHandling(model, operation) {
112
112
 
113
113
  // Add virtual relation fields to the mapping
114
114
  virtualRelationFields.forEach(field => {
115
- code += ` ${field.relatedField}: { ids: ${field.name}, isVirtual: true, isList: ${field.isList} },\n`;
115
+ code += ` ${field.relatedField}: { ids: ${field.name}, isVirtual: true, isList: ${field.isList}, isRequired: false },\n`;
116
116
  });
117
-
117
+
118
118
  // Add foreign key fields to the mapping
119
119
  foreignKeyFields.forEach(field => {
120
- code += ` ${field.relationName}: { ids: ${field.fieldName}, isVirtual: false, isList: ${field.isList || false} },\n`;
120
+ code += ` ${field.relationName}: { ids: ${field.fieldName}, isVirtual: false, isList: ${field.isList || false}, isRequired: ${field.isRequired} },\n`;
121
121
  });
122
122
 
123
123
  code += ' };\n\n';
@@ -139,10 +139,21 @@ function generateRelationHandling(model, operation) {
139
139
 
140
140
  code += ' data[relationName] = { [relationOperation]: ids };\n';
141
141
  code += ' } else {\n';
142
- code += ' // Single relationship - always use connect\n';
142
+ if (operation === 'update') {
143
+ code += ' // Single relationship - connect when an id is provided; disconnect when null on update\n';
144
+ } else {
145
+ code += ' // Single relationship - always use connect\n';
146
+ }
143
147
  code += ' data[relationName] = { connect: { id: config.ids } };\n';
144
148
  code += ' }\n';
145
- code += ' }\n';
149
+ if (operation === 'update') {
150
+ code += ' } else if (config.ids === null && !config.isList && !config.isRequired) {\n';
151
+ code += ' // Explicitly null - disconnect the optional single relationship\n';
152
+ code += ' data[relationName] = { disconnect: true };\n';
153
+ code += ' }\n';
154
+ } else {
155
+ code += ' }\n';
156
+ }
146
157
  code += ' }\n';
147
158
 
148
159
  return code;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Relation handling code generation for CRUD services.
3
+ *
4
+ * These functions are the canonical source of truth for the relation-mapping
5
+ * logic used in the EJS template (api-crud-data-access.service.ts__tmpl__).
6
+ * The template contains identical copies of these functions so EJS can
7
+ * execute them without external imports. Any change here MUST be mirrored
8
+ * in the template, and vice versa.
9
+ */
10
+ export interface ModelField {
11
+ name: string;
12
+ type: string;
13
+ kind?: string;
14
+ isId?: boolean;
15
+ isList: boolean;
16
+ isOptional: boolean;
17
+ isVirtual?: boolean;
18
+ isReadOnly?: boolean;
19
+ hasDefaultValue?: boolean;
20
+ default?: unknown;
21
+ relationName?: string;
22
+ relationFromFields?: string[];
23
+ relationToFields?: string[];
24
+ relationOnDelete?: string;
25
+ relationOnUpdate?: string;
26
+ isGenerated?: boolean;
27
+ isUpdatedAt?: boolean;
28
+ documentation?: string;
29
+ }
30
+ export interface ModelLike {
31
+ fields: ModelField[];
32
+ }
33
+ export interface VirtualRelationField {
34
+ name: string;
35
+ type: string;
36
+ isList: boolean;
37
+ isOptional: boolean;
38
+ isVirtual: boolean;
39
+ relationName: string;
40
+ relatedField: string;
41
+ }
42
+ export interface ForeignKeyRelationField {
43
+ fieldName: string;
44
+ relationName: string;
45
+ isRequired: boolean;
46
+ isList: boolean;
47
+ }
48
+ export declare function getRelationFields(model: ModelLike): ModelField[];
49
+ export declare function getVirtualRelationFields(model: ModelLike): VirtualRelationField[];
50
+ export declare function getForeignKeyRelationFields(model: ModelLike): ForeignKeyRelationField[];
51
+ export declare function generateRelationHandling(model: ModelLike, operation: 'create' | 'update'): string;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ /**
3
+ * Relation handling code generation for CRUD services.
4
+ *
5
+ * These functions are the canonical source of truth for the relation-mapping
6
+ * logic used in the EJS template (api-crud-data-access.service.ts__tmpl__).
7
+ * The template contains identical copies of these functions so EJS can
8
+ * execute them without external imports. Any change here MUST be mirrored
9
+ * in the template, and vice versa.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getRelationFields = getRelationFields;
13
+ exports.getVirtualRelationFields = getVirtualRelationFields;
14
+ exports.getForeignKeyRelationFields = getForeignKeyRelationFields;
15
+ exports.generateRelationHandling = generateRelationHandling;
16
+ function getRelationFields(model) {
17
+ return model.fields.filter((field) => field.relationName && field.relationName.length > 0);
18
+ }
19
+ function getVirtualRelationFields(model) {
20
+ const relationFields = getRelationFields(model);
21
+ const virtualFields = [];
22
+ relationFields.forEach((relationField) => {
23
+ if (!relationField.relationFromFields || relationField.relationFromFields.length === 0) {
24
+ if (relationField.isList) {
25
+ const virtualFieldName = relationField.name + 'Ids';
26
+ const existingField = model.fields.find((f) => f.name === virtualFieldName && (!f.relationName || f.relationName.length === 0));
27
+ if (!existingField) {
28
+ virtualFields.push({
29
+ name: virtualFieldName,
30
+ type: 'String',
31
+ isList: true,
32
+ isOptional: true,
33
+ isVirtual: true,
34
+ relationName: relationField.relationName,
35
+ relatedField: relationField.name,
36
+ });
37
+ }
38
+ }
39
+ else {
40
+ const virtualFieldName = relationField.name + 'Id';
41
+ const existingField = model.fields.find((f) => f.name === virtualFieldName && (!f.relationName || f.relationName.length === 0));
42
+ if (!existingField) {
43
+ virtualFields.push({
44
+ name: virtualFieldName,
45
+ type: 'String',
46
+ isList: false,
47
+ isOptional: true,
48
+ isVirtual: true,
49
+ relationName: relationField.relationName,
50
+ relatedField: relationField.name,
51
+ });
52
+ }
53
+ }
54
+ }
55
+ });
56
+ return virtualFields;
57
+ }
58
+ function getForeignKeyRelationFields(model) {
59
+ const relationFields = getRelationFields(model);
60
+ const foreignKeyFields = [];
61
+ relationFields.forEach((relationField) => {
62
+ if (relationField.relationFromFields && relationField.relationFromFields.length > 0) {
63
+ relationField.relationFromFields.forEach((fkFieldName) => {
64
+ const fkField = model.fields.find((f) => f.name === fkFieldName);
65
+ if (fkField) {
66
+ foreignKeyFields.push({
67
+ fieldName: fkFieldName,
68
+ relationName: relationField.name,
69
+ isRequired: !fkField.isOptional,
70
+ isList: relationField.isList,
71
+ });
72
+ }
73
+ });
74
+ }
75
+ });
76
+ return foreignKeyFields;
77
+ }
78
+ function generateRelationHandling(model, operation) {
79
+ const virtualRelationFields = getVirtualRelationFields(model);
80
+ const foreignKeyFields = getForeignKeyRelationFields(model);
81
+ const allRelationFields = [...virtualRelationFields, ...foreignKeyFields];
82
+ if (allRelationFields.length === 0) {
83
+ return ' const data = input;';
84
+ }
85
+ let code = ' const { ';
86
+ code += virtualRelationFields.map((field) => field.name).join(', ');
87
+ if (foreignKeyFields.length > 0) {
88
+ if (virtualRelationFields.length > 0)
89
+ code += ', ';
90
+ code += foreignKeyFields.map((field) => field.fieldName).join(', ');
91
+ }
92
+ code += ', ...regularFields } = input;\n';
93
+ code += ' const data: any = regularFields;\n\n';
94
+ // Create relation mapping object with field type metadata
95
+ code += ' const relationMappings = {\n';
96
+ // Add virtual relation fields to the mapping
97
+ virtualRelationFields.forEach((field) => {
98
+ code += ` ${field.relatedField}: { ids: ${field.name}, isVirtual: true, isList: ${field.isList}, isRequired: false },\n`;
99
+ });
100
+ // Add foreign key fields to the mapping
101
+ foreignKeyFields.forEach((field) => {
102
+ code += ` ${field.relationName}: { ids: ${field.fieldName}, isVirtual: false, isList: ${field.isList || false}, isRequired: ${field.isRequired} },\n`;
103
+ });
104
+ code += ' };\n\n';
105
+ // Generate the improved iteration logic
106
+ code += ' for (const [relationName, config] of Object.entries(relationMappings)) {\n';
107
+ code += ' if (config.ids !== undefined && config.ids !== null) {\n';
108
+ code += ' const ids = Array.isArray(config.ids) ? config.ids.map(id => ({ id })) : [{ id: config.ids }];\n';
109
+ code += ' \n';
110
+ code += ' if (config.isList) {\n';
111
+ if (operation === 'update') {
112
+ code += ' // List relationships: use set for updates on virtual relations, connect for foreign key relations\n';
113
+ code += " const relationOperation = config.isVirtual ? 'set' : 'connect';\n";
114
+ }
115
+ else {
116
+ code += ' // List relationships: always use connect for creates\n';
117
+ code += " const relationOperation = 'connect';\n";
118
+ }
119
+ code += ' data[relationName] = { [relationOperation]: ids };\n';
120
+ code += ' } else {\n';
121
+ if (operation === 'update') {
122
+ code += ' // Single relationship - connect when an id is provided; disconnect when null on update\n';
123
+ }
124
+ else {
125
+ code += ' // Single relationship - always use connect\n';
126
+ }
127
+ code += ' data[relationName] = { connect: { id: config.ids } };\n';
128
+ code += ' }\n';
129
+ if (operation === 'update') {
130
+ code += ' } else if (config.ids === null && !config.isList && !config.isRequired) {\n';
131
+ code += ' // Explicitly null - disconnect the optional single relationship\n';
132
+ code += ' data[relationName] = { disconnect: true };\n';
133
+ code += ' }\n';
134
+ }
135
+ else {
136
+ code += ' }\n';
137
+ }
138
+ code += ' }\n';
139
+ return code;
140
+ }
141
+ //# sourceMappingURL=relation-handling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-handling.js","sourceRoot":"","sources":["../../../../../generators/api/src/generate-crud/relation-handling.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
- export default function (): Promise<void>;
1
+ import { WorkspaceSetupGeneratorSchema } from './schema';
2
+ export default function (_tree: unknown, schema: WorkspaceSetupGeneratorSchema): Promise<void>;
@@ -4,9 +4,11 @@ exports.default = default_1;
4
4
  const tslib_1 = require("tslib");
5
5
  require('dotenv').config();
6
6
  const helpers_1 = require("./lib/helpers");
7
- function default_1() {
7
+ function default_1(_tree, schema) {
8
8
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
9
9
  (0, helpers_1.log)('Setting up workspace');
10
+ (0, helpers_1.log)(`Renaming project to "${schema.name}"...`);
11
+ (0, helpers_1.renameProject)(schema.name);
10
12
  (0, helpers_1.ensureDotEnv)();
11
13
  require('dotenv').config();
12
14
  const DATABASE_URL = process.env.DATABASE_URL;
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/workspace-setup/generator.ts"],"names":[],"mappings":";;AAaA,4BA2CC;;AAxDD,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;AAC1B,2CAUsB;AAEtB;;QACE,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAA;QAE3B,IAAA,sBAAY,GAAE,CAAA;QACd,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;QAE1B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;QAE7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,8CAA8C,YAAY,EAAE,CAAC,CAAA;QAC/E,CAAC;QAED,IAAA,+BAAqB,GAAE,CAAA;QAEvB,MAAM,SAAS,GAAG,MAAM,IAAA,oBAAU,EAAC,YAAY,CAAC,CAAA;QAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAA,sCAA4B,GAAE,CAAA;YACpC,4EAA4E;YAC5E,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAA;QACnB,CAAC;QAED,IAAI,CAAC;YACH,IAAA,aAAG,EAAC,+BAA+B,CAAC,CAAA;YACpC,IAAA,wBAAc,GAAE,CAAA;YAEhB,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAA;YAEjB,IAAA,aAAG,EAAC,gDAAgD,CAAC,CAAA;YACrD,IAAA,kCAAwB,GAAE,CAAA;YAE1B,IAAA,aAAG,EAAC,qBAAqB,CAAC,CAAA;YAC1B,IAAA,uBAAa,GAAE,CAAA;YAEf,IAAA,aAAG,EAAC,4BAA4B,CAAC,CAAA;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;CAAA"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/workspace-setup/generator.ts"],"names":[],"mappings":";;AAeA,4BA8CC;;AA7DD,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;AAC1B,2CAWsB;AAGtB,mBAA+B,KAAc,EAAE,MAAqC;;QAClF,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAA;QAE3B,IAAA,aAAG,EAAC,wBAAwB,MAAM,CAAC,IAAI,MAAM,CAAC,CAAA;QAC9C,IAAA,uBAAa,EAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAE1B,IAAA,sBAAY,GAAE,CAAA;QACd,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;QAE1B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;QAE7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,8CAA8C,YAAY,EAAE,CAAC,CAAA;QAC/E,CAAC;QAED,IAAA,+BAAqB,GAAE,CAAA;QAEvB,MAAM,SAAS,GAAG,MAAM,IAAA,oBAAU,EAAC,YAAY,CAAC,CAAA;QAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAA,sCAA4B,GAAE,CAAA;YACpC,4EAA4E;YAC5E,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAA;QACnB,CAAC;QAED,IAAI,CAAC;YACH,IAAA,aAAG,EAAC,+BAA+B,CAAC,CAAA;YACpC,IAAA,wBAAc,GAAE,CAAA;YAEhB,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAA;YAEjB,IAAA,aAAG,EAAC,gDAAgD,CAAC,CAAA;YACrD,IAAA,kCAAwB,GAAE,CAAA;YAE1B,IAAA,aAAG,EAAC,qBAAqB,CAAC,CAAA;YAC1B,IAAA,uBAAa,GAAE,CAAA;YAEf,IAAA,aAAG,EAAC,4BAA4B,CAAC,CAAA;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;CAAA"}
@@ -4,6 +4,7 @@ export declare const WORKSPACE_NAME: string;
4
4
  export declare const DATABASE_URL: string;
5
5
  export declare const DOCKER_COMPOSE_FILE = ".dev/docker-compose.yml";
6
6
  export declare function log(...msg: any[]): void;
7
+ export declare function renameProject(name: string): void;
7
8
  export declare function connectToPostgres(url: string): Promise<Client>;
8
9
  export declare function canConnect(url: string): Promise<boolean>;
9
10
  export declare function ensureDockerIsRunning(): boolean;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sleep = exports.DOCKER_COMPOSE_FILE = exports.DATABASE_URL = exports.WORKSPACE_NAME = exports.MAX_RETRIES = void 0;
4
4
  exports.log = log;
5
+ exports.renameProject = renameProject;
5
6
  exports.connectToPostgres = connectToPostgres;
6
7
  exports.canConnect = canConnect;
7
8
  exports.ensureDockerIsRunning = ensureDockerIsRunning;
@@ -24,6 +25,40 @@ exports.DOCKER_COMPOSE_FILE = '.dev/docker-compose.yml';
24
25
  function log(...msg) {
25
26
  console.log(`[${exports.WORKSPACE_NAME}]`, ...msg);
26
27
  }
28
+ const TEMPLATE_NAME = 'nestled-template';
29
+ const IGNORED_DIRS = new Set(['node_modules', '.git', 'dist', 'tmp', '.nx', 'coverage', '.idea', '.vscode']);
30
+ function renameProject(name) {
31
+ const files = getAllFiles(devkit_1.workspaceRoot);
32
+ let filesUpdated = 0;
33
+ for (const filePath of files) {
34
+ try {
35
+ const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
36
+ if (content.includes(TEMPLATE_NAME)) {
37
+ (0, fs_1.writeFileSync)(filePath, content.replaceAll(TEMPLATE_NAME, name));
38
+ filesUpdated++;
39
+ }
40
+ }
41
+ catch (_a) {
42
+ // Skip binary files or unreadable files
43
+ }
44
+ }
45
+ log(`Renamed "${TEMPLATE_NAME}" to "${name}" in ${filesUpdated} file(s)`);
46
+ }
47
+ function getAllFiles(dir) {
48
+ const files = [];
49
+ for (const entry of (0, fs_1.readdirSync)(dir)) {
50
+ if (IGNORED_DIRS.has(entry))
51
+ continue;
52
+ const fullPath = (0, path_1.join)(dir, entry);
53
+ if ((0, fs_1.statSync)(fullPath).isDirectory()) {
54
+ files.push(...getAllFiles(fullPath));
55
+ }
56
+ else {
57
+ files.push(fullPath);
58
+ }
59
+ }
60
+ return files;
61
+ }
27
62
  function connectToPostgres(url) {
28
63
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
29
64
  const client = new pg_1.Client(url);
@@ -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":"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"}
@@ -2,6 +2,13 @@
2
2
  "cli": "nx",
3
3
  "id": "workspace-setup",
4
4
  "type": "object",
5
- "properties": {},
6
- "required": []
5
+ "properties": {
6
+ "name": {
7
+ "type": "string",
8
+ "description": "Project name (lowercase with dashes, e.g. my-project)",
9
+ "pattern": "^[a-z][a-z0-9-]*$",
10
+ "x-prompt": "What is the name of your project? (lowercase with dashes)"
11
+ }
12
+ },
13
+ "required": ["name"]
7
14
  }