@nestledjs/api 0.0.6 → 0.0.8

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 (102) hide show
  1. package/package.json +2 -2
  2. package/src/account/generator.d.ts +3 -0
  3. package/src/account/generator.js +19 -0
  4. package/src/account/generator.js.map +1 -0
  5. package/src/app/generator.d.ts +6 -0
  6. package/src/app/generator.js +96 -0
  7. package/src/app/generator.js.map +1 -0
  8. package/src/config/generator.d.ts +3 -0
  9. package/src/config/generator.js +18 -0
  10. package/src/config/generator.js.map +1 -0
  11. package/src/core/generator.d.ts +3 -0
  12. package/src/core/generator.js +31 -0
  13. package/src/core/generator.js.map +1 -0
  14. package/src/custom/generator.d.ts +24 -0
  15. package/src/custom/generator.js +199 -0
  16. package/src/custom/generator.js.map +1 -0
  17. package/src/custom/schema.d.ts +5 -0
  18. package/src/custom/schema.js +3 -0
  19. package/src/custom/schema.js.map +1 -0
  20. package/src/extended/generator.d.ts +3 -0
  21. package/src/extended/generator.js +136 -0
  22. package/src/extended/generator.js.map +1 -0
  23. package/src/extended/index.d.ts +1 -0
  24. package/src/extended/index.js +7 -0
  25. package/src/extended/index.js.map +1 -0
  26. package/src/extended/{schema.ts → schema.d.ts} +2 -2
  27. package/src/extended/schema.js +3 -0
  28. package/src/extended/schema.js.map +1 -0
  29. package/src/generate-crud/generator.d.ts +50 -0
  30. package/src/generate-crud/generator.js +296 -0
  31. package/src/generate-crud/generator.js.map +1 -0
  32. package/src/generate-crud/schema.d.ts +8 -0
  33. package/src/generate-crud/schema.js +3 -0
  34. package/src/generate-crud/schema.js.map +1 -0
  35. package/src/index.d.ts +13 -0
  36. package/src/index.js +17 -0
  37. package/src/index.js.map +1 -0
  38. package/src/plugin/generator.d.ts +3 -0
  39. package/src/plugin/generator.js +74 -0
  40. package/src/plugin/generator.js.map +1 -0
  41. package/src/plugin/{schema.ts → schema.d.ts} +3 -3
  42. package/src/plugin/schema.js +3 -0
  43. package/src/plugin/schema.js.map +1 -0
  44. package/src/prisma/generator.d.ts +3 -0
  45. package/src/prisma/generator.js +61 -0
  46. package/src/prisma/generator.js.map +1 -0
  47. package/src/setup/generator.d.ts +3 -0
  48. package/src/setup/generator.js +104 -0
  49. package/src/setup/generator.js.map +1 -0
  50. package/src/smtp-mailer/generator.d.ts +2 -0
  51. package/src/smtp-mailer/generator.js +17 -0
  52. package/src/smtp-mailer/generator.js.map +1 -0
  53. package/src/user/generator.d.ts +2 -0
  54. package/src/user/generator.js +18 -0
  55. package/src/user/generator.js.map +1 -0
  56. package/src/utils/generator.d.ts +2 -0
  57. package/src/utils/generator.js +17 -0
  58. package/src/utils/generator.js.map +1 -0
  59. package/src/workspace-setup/generator.d.ts +1 -0
  60. package/src/workspace-setup/generator.js +42 -0
  61. package/src/workspace-setup/generator.js.map +1 -0
  62. package/src/workspace-setup/lib/helpers.d.ts +16 -0
  63. package/src/workspace-setup/lib/helpers.js +164 -0
  64. package/src/workspace-setup/lib/helpers.js.map +1 -0
  65. package/eslint.config.cjs +0 -28
  66. package/project.json +0 -47
  67. package/src/account/generator.spec.ts +0 -71
  68. package/src/account/generator.ts +0 -20
  69. package/src/app/generator.spec.ts +0 -112
  70. package/src/app/generator.ts +0 -105
  71. package/src/config/generator.spec.ts +0 -47
  72. package/src/config/generator.ts +0 -16
  73. package/src/core/generator.spec.ts +0 -85
  74. package/src/core/generator.ts +0 -35
  75. package/src/custom/generator.spec.ts +0 -75
  76. package/src/custom/generator.ts +0 -239
  77. package/src/custom/schema.ts +0 -5
  78. package/src/extended/generator.spec.ts +0 -95
  79. package/src/extended/generator.ts +0 -161
  80. package/src/extended/index.ts +0 -1
  81. package/src/generate-crud/generator.spec.ts +0 -84
  82. package/src/generate-crud/generator.ts +0 -354
  83. package/src/generate-crud/schema.ts +0 -8
  84. package/src/index.ts +0 -13
  85. package/src/plugin/generator.spec.ts +0 -18
  86. package/src/plugin/generator.ts +0 -74
  87. package/src/prisma/generator.spec.ts +0 -60
  88. package/src/prisma/generator.ts +0 -61
  89. package/src/setup/generator.spec.ts +0 -18
  90. package/src/setup/generator.ts +0 -107
  91. package/src/smtp-mailer/generator.spec.ts +0 -41
  92. package/src/smtp-mailer/generator.ts +0 -14
  93. package/src/user/generator.spec.ts +0 -41
  94. package/src/user/generator.ts +0 -15
  95. package/src/utils/generator.ts +0 -14
  96. package/src/workspace-setup/generator.spec.ts +0 -85
  97. package/src/workspace-setup/generator.ts +0 -57
  98. package/src/workspace-setup/lib/helpers.ts +0 -149
  99. package/tsconfig.json +0 -16
  100. package/tsconfig.lib.json +0 -23
  101. package/tsconfig.spec.json +0 -22
  102. package/vite.config.mts +0 -31
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestledjs/api",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
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.0.2"
28
+ "@nestledjs/utils": "0.0.8"
29
29
  }
30
30
  }
@@ -0,0 +1,3 @@
1
+ import { GeneratorCallback, Tree } from '@nx/devkit';
2
+ import { ApiAccountGeneratorSchema } from './schema';
3
+ export default function generateLibraries(tree: Tree, options?: ApiAccountGeneratorSchema): Promise<GeneratorCallback>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateLibraries;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const utils_1 = require("@nestledjs/utils");
7
+ function generateLibraries(tree_1) {
8
+ return tslib_1.__awaiter(this, arguments, void 0, function* (tree, options = {}) {
9
+ const templateRootPath = (0, devkit_1.joinPathFragments)(__dirname, './files');
10
+ const overwrite = options.overwrite === true;
11
+ yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'account', overwrite }, templateRootPath, 'data-access');
12
+ yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'account', overwrite }, templateRootPath, 'feature', true);
13
+ yield (0, devkit_1.formatFiles)(tree);
14
+ return () => {
15
+ (0, devkit_1.installPackagesTask)(tree);
16
+ };
17
+ });
18
+ }
19
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/account/generator.ts"],"names":[],"mappings":";;AAIA,oCAeC;;AAnBD,uCAAyG;AACzG,4CAAsD;AAGtD,SAA8B,iBAAiB;iEAC7C,IAAU,EACV,UAAqC,EAAE;QAEvC,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,SAAS,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAA;QAChG,MAAM,IAAA,2BAAmB,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,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,6 @@
1
+ import { Tree } from '@nx/devkit';
2
+ interface Schema {
3
+ [key: string]: unknown;
4
+ }
5
+ export default function (tree: Tree, schema: Schema): Promise<void>;
6
+ export {};
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const child_process_1 = require("child_process");
7
+ const path = tslib_1.__importStar(require("path"));
8
+ const get_npm_scope_1 = require("@nx/js/src/utils/package-json/get-npm-scope");
9
+ /**
10
+ * Removes specific compiler options from tsconfig.app.json to use the settings from tsconfig.base.json
11
+ * @param tree The file system tree
12
+ */
13
+ function updateAppTsConfig(tree) {
14
+ const tsConfigPath = 'apps/api/tsconfig.app.json';
15
+ if (tree.exists(tsConfigPath)) {
16
+ (0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
17
+ if (json.compilerOptions) {
18
+ // Remove specific options to use the ones from tsconfig.base.json
19
+ delete json.compilerOptions.module;
20
+ delete json.compilerOptions.moduleResolution;
21
+ delete json.compilerOptions.emitDecoratorMetadata;
22
+ delete json.compilerOptions.experimentalDecorators;
23
+ }
24
+ return json;
25
+ });
26
+ }
27
+ else {
28
+ console.warn(`tsconfig.app.json not found at: ${tsConfigPath}`);
29
+ }
30
+ }
31
+ function default_1(tree, schema) {
32
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
33
+ try {
34
+ // Get the workspace root directory
35
+ const workspaceRoot = tree.root;
36
+ // Create apps directory if it doesn't exist
37
+ if (!tree.exists('apps')) {
38
+ tree.write('apps/.gitkeep', '');
39
+ }
40
+ // Run the Nx generator command directly from the workspace root with proper workspace layout
41
+ (0, child_process_1.execSync)('nx g @nx/nest:application --name api --directory apps/api --no-interactive', {
42
+ stdio: 'inherit',
43
+ cwd: workspaceRoot,
44
+ });
45
+ // Wait a bit for files to be created
46
+ yield new Promise((resolve) => setTimeout(resolve, 2000));
47
+ // Update tsconfig.app.json to remove specific compiler options
48
+ updateAppTsConfig(tree);
49
+ // Generate all files according to the template folder structure
50
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, './files'), path.join('apps', 'api'), Object.assign(Object.assign({}, schema), { tmpl: '', npmScope: (0, get_npm_scope_1.getNpmScope)(tree) }));
51
+ // Add dev:api script to package.json
52
+ (0, devkit_1.updateJson)(tree, 'package.json', (json) => {
53
+ if (!json.scripts) {
54
+ json.scripts = {};
55
+ }
56
+ json.scripts['dev:api'] = 'nx serve api --skip-nx-cache';
57
+ return json;
58
+ });
59
+ // Update the build target in apps/api/project.json to use custom webpack command
60
+ const projectJsonPath = path.join('apps', 'api', 'project.json');
61
+ if (tree.exists(projectJsonPath)) {
62
+ (0, devkit_1.updateJson)(tree, projectJsonPath, (json) => {
63
+ json.targets = json.targets || {};
64
+ json.targets.build = {
65
+ executor: 'nx:run-commands',
66
+ options: {
67
+ command: 'NODE_ENV=production webpack-cli --config apps/api/webpack.config.js',
68
+ },
69
+ configurations: {
70
+ development: {
71
+ command: 'NODE_ENV=development webpack-cli --config apps/api/webpack.config.js',
72
+ },
73
+ },
74
+ };
75
+ return json;
76
+ });
77
+ }
78
+ else {
79
+ console.warn(`project.json not found at: ${projectJsonPath}`);
80
+ }
81
+ // Optionally, delete the unused default app files if they exist
82
+ const targetPath = path.join('apps', 'api', 'src');
83
+ const filesToDelete = [path.join(targetPath, 'assets'), path.join(targetPath, 'app')];
84
+ filesToDelete.forEach((filePath) => {
85
+ if (tree.exists(filePath)) {
86
+ tree.delete(filePath);
87
+ }
88
+ });
89
+ }
90
+ catch (error) {
91
+ console.error('Error generating API app:', error);
92
+ throw error;
93
+ }
94
+ });
95
+ }
96
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/app/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { ApiConfigGeneratorSchema } from './schema';
3
+ export default function generateLibraries(tree: Tree, options?: ApiConfigGeneratorSchema): Promise<() => void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateLibraries;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const utils_1 = require("@nestledjs/utils");
7
+ function generateLibraries(tree_1) {
8
+ return tslib_1.__awaiter(this, arguments, void 0, function* (tree, options = {}) {
9
+ const templateRootPath = (0, devkit_1.joinPathFragments)(__dirname, './files');
10
+ const overwrite = options.overwrite === true;
11
+ yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'config', overwrite }, templateRootPath);
12
+ yield (0, devkit_1.formatFiles)(tree);
13
+ return () => {
14
+ (0, devkit_1.installPackagesTask)(tree);
15
+ };
16
+ });
17
+ }
18
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ import { GeneratorCallback, Tree } from '@nx/devkit';
2
+ import { ApiCoreGeneratorSchema } from './schema';
3
+ export default function generateLibraries(tree: Tree, options?: ApiCoreGeneratorSchema): Promise<GeneratorCallback>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateLibraries;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const utils_1 = require("@nestledjs/utils");
7
+ function generateLibraries(tree_1) {
8
+ return tslib_1.__awaiter(this, arguments, void 0, function* (tree, options = {}) {
9
+ const templateRootPath = (0, devkit_1.joinPathFragments)(__dirname, './files');
10
+ const overwrite = options.overwrite === true;
11
+ const dependencies = {
12
+ 'graphql-type-json': '^0.3.2',
13
+ '@nestjs/graphql': '^12.0.0',
14
+ '@nestjs/common': '^10.0.0',
15
+ '@nestjs/passport': '^10.0.0',
16
+ '@nestjs/axios': '^3.0.0',
17
+ '@prisma/client': '^6.9.0',
18
+ '@apollo/server': '^4.9.0',
19
+ };
20
+ const devDependencies = {};
21
+ yield (0, utils_1.installPlugins)(tree, dependencies, devDependencies);
22
+ yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'core', overwrite }, templateRootPath, 'data-access');
23
+ yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'core', overwrite }, templateRootPath, 'feature', true);
24
+ yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'core', overwrite }, templateRootPath, 'models');
25
+ yield (0, devkit_1.formatFiles)(tree);
26
+ return () => {
27
+ (0, devkit_1.installPackagesTask)(tree);
28
+ };
29
+ });
30
+ }
31
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +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"}
@@ -0,0 +1,24 @@
1
+ import { formatFiles, installPackagesTask, Tree } from '@nx/devkit';
2
+ import { getDMMF } from '@prisma/internals';
3
+ import { addToModules, apiLibraryGenerator, getPrismaSchemaPath, readPrismaSchema } from '@nestledjs/utils';
4
+ import { GenerateCustomGeneratorSchema } from './schema';
5
+ import { execSync } from 'child_process';
6
+ import { getNpmScope } from '@nx/js/src/utils/package-json/get-npm-scope';
7
+ import pluralize from 'pluralize';
8
+ declare const defaultDependencies: {
9
+ formatFiles: typeof formatFiles;
10
+ installPackagesTask: typeof installPackagesTask;
11
+ getDMMF: typeof getDMMF;
12
+ addToModules: typeof addToModules;
13
+ apiLibraryGenerator: typeof apiLibraryGenerator;
14
+ getPrismaSchemaPath: typeof getPrismaSchemaPath;
15
+ readPrismaSchema: typeof readPrismaSchema;
16
+ execSync: typeof execSync;
17
+ getNpmScope: typeof getNpmScope;
18
+ pluralize: typeof pluralize;
19
+ join: (...paths: string[]) => string;
20
+ };
21
+ export type CustomGeneratorDependencies = typeof defaultDependencies;
22
+ export declare function customGeneratorLogic(tree: Tree, schema: GenerateCustomGeneratorSchema, dependencies?: CustomGeneratorDependencies): Promise<() => void>;
23
+ export default function (tree: Tree, schema: GenerateCustomGeneratorSchema): Promise<() => void>;
24
+ export {};
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.customGeneratorLogic = customGeneratorLogic;
4
+ exports.default = default_1;
5
+ const tslib_1 = require("tslib");
6
+ const devkit_1 = require("@nx/devkit");
7
+ const internals_1 = require("@prisma/internals");
8
+ const utils_1 = require("@nestledjs/utils");
9
+ const child_process_1 = require("child_process");
10
+ const get_npm_scope_1 = require("@nx/js/src/utils/package-json/get-npm-scope");
11
+ const pluralize_1 = tslib_1.__importDefault(require("pluralize"));
12
+ const path_1 = require("path");
13
+ // Group all dependencies into a single object
14
+ const defaultDependencies = {
15
+ formatFiles: devkit_1.formatFiles,
16
+ installPackagesTask: devkit_1.installPackagesTask,
17
+ getDMMF: internals_1.getDMMF,
18
+ addToModules: utils_1.addToModules,
19
+ apiLibraryGenerator: utils_1.apiLibraryGenerator,
20
+ getPrismaSchemaPath: utils_1.getPrismaSchemaPath,
21
+ readPrismaSchema: utils_1.readPrismaSchema,
22
+ execSync: child_process_1.execSync,
23
+ getNpmScope: get_npm_scope_1.getNpmScope,
24
+ pluralize: pluralize_1.default,
25
+ join: path_1.join,
26
+ };
27
+ function getAllPrismaModels(tree, dependencies) {
28
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
29
+ const prismaPath = dependencies.getPrismaSchemaPath(tree);
30
+ const prismaSchema = dependencies.readPrismaSchema(tree, prismaPath);
31
+ if (!prismaSchema) {
32
+ console.error(`No Prisma schema found at ${prismaPath}`);
33
+ return [];
34
+ }
35
+ try {
36
+ const dmmf = yield dependencies.getDMMF({ datamodel: prismaSchema });
37
+ return dmmf.datamodel.models.map((model) => {
38
+ var _a;
39
+ const singularPropertyName = model.name.charAt(0).toLowerCase() + model.name.slice(1);
40
+ const pluralPropertyName = dependencies.pluralize(singularPropertyName);
41
+ // Create a properly typed fields array
42
+ const fields = model.fields.map((field) => (Object.assign({ name: field.name, type: field.type, isId: field.isId, isRequired: field.isRequired, isList: field.isList, isUnique: field.isUnique, isReadOnly: field.isReadOnly, isGenerated: field.isGenerated, isUpdatedAt: field.isUpdatedAt, documentation: field.documentation }, field)));
43
+ // Create and return the model
44
+ const modelData = {
45
+ name: model.name,
46
+ pluralName: dependencies.pluralize(model.name),
47
+ fields,
48
+ primaryField: ((_a = model.fields.find((f) => !f.isId && f.type === 'String')) === null || _a === void 0 ? void 0 : _a.name) || 'name',
49
+ modelName: model.name,
50
+ modelPropertyName: singularPropertyName,
51
+ pluralModelName: dependencies.pluralize(model.name),
52
+ pluralModelPropertyName: pluralPropertyName,
53
+ };
54
+ return modelData;
55
+ });
56
+ }
57
+ catch (error) {
58
+ console.error('Error parsing Prisma schema:', error);
59
+ return [];
60
+ }
61
+ });
62
+ }
63
+ function ensureDirExists(tree, path) {
64
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
65
+ if (!tree.exists(path)) {
66
+ // Only create the directory, do not write .gitkeep
67
+ // Directory will be created when a file is written into it
68
+ }
69
+ });
70
+ }
71
+ function toKebabCase(str) {
72
+ return str
73
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
74
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
75
+ .toLowerCase();
76
+ }
77
+ function generateCustomFiles(tree, customLibraryRoot, models, npmScope, dependencies) {
78
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
79
+ const defaultDir = dependencies.join(customLibraryRoot, 'src/lib/default');
80
+ const pluginsDir = dependencies.join(customLibraryRoot, 'src/lib/plugins');
81
+ yield ensureDirExists(tree, defaultDir);
82
+ yield ensureDirExists(tree, pluginsDir);
83
+ // Only write .gitkeep in pluginsDir
84
+ tree.write(dependencies.join(pluginsDir, '.gitkeep'), '');
85
+ for (const model of models) {
86
+ const kebabModel = toKebabCase(model.modelName);
87
+ const modelFolder = dependencies.join(defaultDir, kebabModel);
88
+ if (tree.exists(modelFolder)) {
89
+ // Skip if model folder already exists
90
+ continue;
91
+ }
92
+ yield ensureDirExists(tree, modelFolder);
93
+ // Generate service.ts
94
+ const serviceContent = `import { Injectable } from '@nestjs/common'
95
+
96
+ @Injectable()
97
+ export class ${model.modelName}Service {
98
+ // Empty for now; will override or extend later if needed
99
+ }
100
+ `;
101
+ tree.write(dependencies.join(modelFolder, `${kebabModel}.service.ts`), serviceContent);
102
+ // Generate resolver.ts
103
+ const resolverContent = `
104
+ import { ApiCrudDataAccessService } from '${npmScope}/api/generated-crud/data-access'
105
+ import { Generated${model.modelName}Resolver } from '${npmScope}/api/generated-crud/feature'
106
+ import { Injectable } from '@nestjs/common'
107
+ import { Resolver } from '@nestjs/graphql'
108
+ import { ${model.modelName} } from '${npmScope}/api/core/models'
109
+
110
+ @Resolver(() => ${model.modelName})
111
+ @Injectable()
112
+ export class ${model.modelName}Resolver extends Generated${model.modelName}Resolver {
113
+ constructor(
114
+ // private readonly customService: ${model.modelName}Service,
115
+ generatedService: ApiCrudDataAccessService,
116
+ ) {
117
+ super(generatedService)
118
+ }
119
+ }
120
+ `;
121
+ tree.write(dependencies.join(modelFolder, `${kebabModel}.resolver.ts`), resolverContent);
122
+ // Generate module.ts
123
+ const moduleContent = `import { Module } from '@nestjs/common'
124
+ import { ${model.modelName}Service } from './${kebabModel}.service'
125
+ import { ${model.modelName}Resolver } from './${kebabModel}.resolver'
126
+ import { ApiCrudDataAccessModule } from '${npmScope}/api/generated-crud/data-access'
127
+
128
+ @Module({
129
+ imports: [ApiCrudDataAccessModule],
130
+ providers: [${model.modelName}Service, ${model.modelName}Resolver],
131
+ exports: [${model.modelName}Service, ${model.modelName}Resolver],
132
+ })
133
+ export class ${model.modelName}Module {}
134
+ `;
135
+ tree.write(dependencies.join(modelFolder, `${kebabModel}.module.ts`), moduleContent);
136
+ // Add to defaultModules in app.module.ts__tmpl__
137
+ dependencies.addToModules({
138
+ tree,
139
+ modulePath: 'apps/api/src/app.module.ts',
140
+ moduleArrayName: 'defaultModules',
141
+ moduleToAdd: `${model.modelName}Module`,
142
+ importPath: `${npmScope}/api/custom`,
143
+ });
144
+ }
145
+ // Update index.ts to export all model modules
146
+ 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);
149
+ });
150
+ }
151
+ function customGeneratorLogic(tree_1, schema_1) {
152
+ return tslib_1.__awaiter(this, arguments, void 0, function* (tree, schema, dependencies = defaultDependencies) {
153
+ try {
154
+ const name = schema.name || 'custom';
155
+ const customLibraryRoot = schema.directory ? `libs/api/${schema.directory}/${name}` : `libs/api/${name}`;
156
+ const projectName = schema.directory ? `api-${schema.directory.replace(/\//g, '-')}-${name}` : `api-${name}`;
157
+ // Overwrite logic
158
+ if (schema.overwrite && tree.exists(customLibraryRoot)) {
159
+ try {
160
+ dependencies.execSync(`nx g @nx/workspace:remove ${projectName} --forceRemove`, {
161
+ stdio: 'inherit',
162
+ cwd: tree.root,
163
+ });
164
+ }
165
+ catch (error) {
166
+ console.warn(`Failed to remove existing library ${projectName}:`, error);
167
+ }
168
+ }
169
+ // Use the shared apiLibraryGenerator
170
+ yield dependencies.apiLibraryGenerator(tree, { name }, '', undefined, false);
171
+ yield ensureDirExists(tree, dependencies.join(customLibraryRoot, 'src/lib/default'));
172
+ yield ensureDirExists(tree, dependencies.join(customLibraryRoot, 'src/lib/plugins'));
173
+ // Get all Prisma models
174
+ const models = yield getAllPrismaModels(tree, dependencies);
175
+ if (models.length === 0) {
176
+ console.error('No Prisma models found');
177
+ return;
178
+ }
179
+ // Generate custom files per model
180
+ const npmScope = `@${dependencies.getNpmScope(tree)}`;
181
+ yield generateCustomFiles(tree, customLibraryRoot, models, npmScope, dependencies);
182
+ // Format files
183
+ yield dependencies.formatFiles(tree);
184
+ return () => {
185
+ dependencies.installPackagesTask(tree);
186
+ };
187
+ }
188
+ catch (error) {
189
+ console.error('Error in Custom generator:', error);
190
+ throw error;
191
+ }
192
+ });
193
+ }
194
+ function default_1(tree, schema) {
195
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
196
+ return customGeneratorLogic(tree, schema);
197
+ });
198
+ }
199
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/custom/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface GenerateCustomGeneratorSchema {
2
+ name?: string;
3
+ directory?: string;
4
+ overwrite?: boolean;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../generators/api/src/custom/schema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { GenerateExtendedGeneratorSchema } from './schema';
3
+ export default function (tree: Tree, schema: GenerateExtendedGeneratorSchema): Promise<() => void>;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const internals_1 = require("@prisma/internals");
7
+ const utils_1 = require("@nestledjs/utils");
8
+ const get_npm_scope_1 = require("@nx/js/src/utils/package-json/get-npm-scope");
9
+ const pluralize_1 = tslib_1.__importDefault(require("pluralize"));
10
+ const path_1 = require("path");
11
+ function toKebabCase(str) {
12
+ return str
13
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
14
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
15
+ .toLowerCase();
16
+ }
17
+ function getAllPrismaModels(tree) {
18
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
19
+ const prismaPath = (0, utils_1.getPrismaSchemaPath)(tree);
20
+ const prismaSchema = (0, utils_1.readPrismaSchema)(tree, prismaPath);
21
+ if (!prismaSchema) {
22
+ console.error(`No Prisma schema found at ${prismaPath}`);
23
+ return [];
24
+ }
25
+ try {
26
+ const dmmf = yield (0, internals_1.getDMMF)({ datamodel: prismaSchema });
27
+ return dmmf.datamodel.models.map((model) => {
28
+ var _a;
29
+ const singularPropertyName = model.name.charAt(0).toLowerCase() + model.name.slice(1);
30
+ const pluralPropertyName = (0, pluralize_1.default)(singularPropertyName);
31
+ const fields = model.fields.map((field) => (Object.assign({ name: field.name, type: field.type, isId: field.isId, isRequired: field.isRequired, isList: field.isList, isUnique: field.isUnique, isReadOnly: field.isReadOnly, isGenerated: field.isGenerated, isUpdatedAt: field.isUpdatedAt, documentation: field.documentation }, field)));
32
+ return {
33
+ name: model.name,
34
+ pluralName: (0, pluralize_1.default)(model.name),
35
+ fields,
36
+ primaryField: ((_a = model.fields.find((f) => !f.isId && f.type === 'String')) === null || _a === void 0 ? void 0 : _a.name) || 'name',
37
+ modelName: model.name,
38
+ modelPropertyName: singularPropertyName,
39
+ pluralModelName: (0, pluralize_1.default)(model.name),
40
+ pluralModelPropertyName: pluralPropertyName,
41
+ };
42
+ });
43
+ }
44
+ catch (error) {
45
+ console.error('Error parsing Prisma schema:', error);
46
+ return [];
47
+ }
48
+ });
49
+ }
50
+ function generateModelLibrary(tree, model, npmScope, overwrite) {
51
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
52
+ const kebabModel = toKebabCase(model.modelName);
53
+ const libName = kebabModel;
54
+ const libRoot = `libs/api/extended/${libName}`;
55
+ // Create the Nx library for this model
56
+ yield (0, utils_1.apiLibraryGenerator)(tree, { name: `extended-${libName}`, overwrite }, '', undefined, false);
57
+ // Generate service.ts
58
+ const serviceContent = `import { Injectable } from '@nestjs/common'
59
+
60
+ @Injectable()
61
+ export class ${model.modelName}Service {
62
+ // Empty for now; will override or extend later if needed
63
+ }
64
+ `;
65
+ tree.write((0, path_1.join)(libRoot, 'src/lib', `${kebabModel}.service.ts`), serviceContent);
66
+ // Generate resolver.ts
67
+ const resolverContent = `import { ${model.modelName}Service } from './${kebabModel}.service'
68
+ import { ApiCrudDataAccessService } from '${npmScope}/api/generated-crud/data-access'
69
+ import { Generated${model.modelName}Resolver } from '${npmScope}/api/generated-crud/feature'
70
+ import { Injectable } from '@nestjs/common'
71
+ import { Resolver } from '@nestjs/graphql'
72
+ import { ${model.modelName} } from '${npmScope}/api/core/models'
73
+
74
+ @Resolver(() => ${model.modelName})
75
+ @Injectable()
76
+ export class ${model.modelName}Resolver extends Generated${model.modelName}Resolver {
77
+ constructor(
78
+ private readonly customService: ${model.modelName}Service,
79
+ private readonly generatedService: ApiCrudDataAccessService,
80
+ ) {
81
+ super(generatedService)
82
+ }
83
+ }
84
+ `;
85
+ tree.write((0, path_1.join)(libRoot, 'src/lib', `${kebabModel}.resolver.ts`), resolverContent);
86
+ // Generate module.ts
87
+ const moduleContent = `import { Module } from '@nestjs/common'
88
+ import { ${model.modelName}Service } from './${kebabModel}.service'
89
+ import { ${model.modelName}Resolver } from './${kebabModel}.resolver'
90
+
91
+ @Module({
92
+ providers: [${model.modelName}Service, ${model.modelName}Resolver],
93
+ exports: [${model.modelName}Service, ${model.modelName}Resolver],
94
+ })
95
+ export class ${model.modelName}Module {}
96
+ `;
97
+ tree.write((0, path_1.join)(libRoot, 'src/lib', `${kebabModel}.module.ts`), moduleContent);
98
+ // Update index.ts to export the module
99
+ const indexContent = `export * from './lib/${kebabModel}.module'`;
100
+ tree.write((0, path_1.join)(libRoot, 'src/index.ts'), indexContent);
101
+ // Optionally, add to app.module.ts or other registration logic here
102
+ // addToModules({ ... })
103
+ });
104
+ }
105
+ function default_1(tree, schema) {
106
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
107
+ try {
108
+ // Ensure the extended folder exists (not an Nx project)
109
+ const extendedRoot = 'libs/api/extended';
110
+ if (!tree.exists(extendedRoot)) {
111
+ tree.write((0, path_1.join)(extendedRoot, '.gitkeep'), '');
112
+ }
113
+ // Get all Prisma models
114
+ const models = yield getAllPrismaModels(tree);
115
+ if (models.length === 0) {
116
+ console.error('No Prisma models found');
117
+ return;
118
+ }
119
+ const npmScope = `@${(0, get_npm_scope_1.getNpmScope)(tree)}`;
120
+ const overwrite = !!schema.overwrite;
121
+ // For each model, generate a library and custom files
122
+ for (const model of models) {
123
+ yield generateModelLibrary(tree, model, npmScope, overwrite);
124
+ }
125
+ yield (0, devkit_1.formatFiles)(tree);
126
+ return () => {
127
+ (0, devkit_1.installPackagesTask)(tree);
128
+ };
129
+ }
130
+ catch (error) {
131
+ console.error('Error in Extended generator:', error);
132
+ throw error;
133
+ }
134
+ });
135
+ }
136
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/extended/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { default } from './generator';