@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
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = void 0;
4
+ const tslib_1 = require("tslib");
5
+ var generator_1 = require("./generator");
6
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return tslib_1.__importDefault(generator_1).default; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../generators/api/src/extended/index.ts"],"names":[],"mappings":";;;;AAAA,yCAAqC;AAA5B,6HAAA,OAAO,OAAA"}
@@ -1,3 +1,3 @@
1
1
  export interface GenerateExtendedGeneratorSchema {
2
- overwrite?: boolean;
3
- }
2
+ overwrite?: boolean;
3
+ }
@@ -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/extended/schema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { formatFiles, generateFiles, installPackagesTask, joinPathFragments, names, Tree } from '@nx/devkit';
2
+ import { getDMMF } from '@prisma/internals';
3
+ import { apiLibraryGenerator, getPrismaSchemaPath, readPrismaSchema } from '@nestledjs/utils';
4
+ import { GenerateCrudGeneratorSchema } from './schema';
5
+ import { getNpmScope } from '@nx/js/src/utils/package-json/get-npm-scope';
6
+ import pluralize from 'pluralize';
7
+ interface CrudAuthConfig {
8
+ readOne?: string;
9
+ readMany?: string;
10
+ count?: string;
11
+ create?: string;
12
+ update?: string;
13
+ delete?: string;
14
+ }
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
+ export interface GenerateCrudGeneratorDependencies {
30
+ formatFiles: typeof formatFiles;
31
+ generateFiles: typeof generateFiles;
32
+ installPackagesTask: typeof installPackagesTask;
33
+ joinPathFragments: typeof joinPathFragments;
34
+ names: typeof names;
35
+ getDMMF: typeof getDMMF;
36
+ apiLibraryGenerator: typeof apiLibraryGenerator;
37
+ getPrismaSchemaPath: typeof getPrismaSchemaPath;
38
+ readPrismaSchema: typeof readPrismaSchema;
39
+ getNpmScope: typeof getNpmScope;
40
+ pluralize: typeof pluralize;
41
+ }
42
+ export declare function parseCrudAuth(comment: string): CrudAuthConfig | null;
43
+ export declare function getCrudAuthForModel(schema: string, modelName: string): CrudAuthConfig;
44
+ export declare function getGuardForAuthLevel(level: string): string | null;
45
+ export declare function generateResolverContent(model: ModelType, npmScope: string): string;
46
+ export declare function generateFeatureModuleContent(models: ModelType[], npmScope: string): string;
47
+ export declare function generateFeatureIndexContent(models: ModelType[]): string;
48
+ export declare function generateCrudLogic(tree: Tree, schema: GenerateCrudGeneratorSchema, dependencies: GenerateCrudGeneratorDependencies): Promise<() => void>;
49
+ export default function (tree: Tree, schema: GenerateCrudGeneratorSchema): Promise<() => void>;
50
+ export {};
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCrudAuth = parseCrudAuth;
4
+ exports.getCrudAuthForModel = getCrudAuthForModel;
5
+ exports.getGuardForAuthLevel = getGuardForAuthLevel;
6
+ exports.generateResolverContent = generateResolverContent;
7
+ exports.generateFeatureModuleContent = generateFeatureModuleContent;
8
+ exports.generateFeatureIndexContent = generateFeatureIndexContent;
9
+ exports.generateCrudLogic = generateCrudLogic;
10
+ exports.default = default_1;
11
+ const tslib_1 = require("tslib");
12
+ const devkit_1 = require("@nx/devkit");
13
+ const internals_1 = require("@prisma/internals");
14
+ const utils_1 = require("@nestledjs/utils");
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
+ // STEP 2: DEFINE PURE HELPER & CONTENT GENERATION FUNCTIONS
18
+ // These functions are side-effect free and can be tested independently.
19
+ function parseCrudAuth(comment) {
20
+ try {
21
+ const match = comment.match(/@crudAuth:\s*(\{.*\})/);
22
+ if (!match)
23
+ return null;
24
+ return JSON.parse(match[1]);
25
+ }
26
+ catch (e) {
27
+ console.error('Error parsing @crudAuth:', e);
28
+ return null;
29
+ }
30
+ }
31
+ function getCrudAuthForModel(schema, modelName) {
32
+ const defaultConfig = {
33
+ readOne: 'admin',
34
+ readMany: 'admin',
35
+ count: 'admin',
36
+ create: 'admin',
37
+ update: 'admin',
38
+ delete: 'admin',
39
+ };
40
+ const lines = schema.split('\n');
41
+ let modelDoc = [];
42
+ let foundModel = false;
43
+ for (const line of lines) {
44
+ const trimmedLine = line.trim();
45
+ if (trimmedLine.startsWith(`model ${modelName}`) ||
46
+ trimmedLine.startsWith(`model ${modelName} `) ||
47
+ trimmedLine.startsWith(`model ${modelName}{`)) {
48
+ foundModel = true;
49
+ break;
50
+ }
51
+ else if (trimmedLine.startsWith('model ')) {
52
+ modelDoc = [];
53
+ }
54
+ else if (trimmedLine.startsWith('///') && !foundModel) {
55
+ modelDoc.push(trimmedLine);
56
+ }
57
+ }
58
+ if (!foundModel)
59
+ return defaultConfig;
60
+ const authLine = modelDoc.find((line) => line.includes('@crudAuth:'));
61
+ if (!authLine)
62
+ return defaultConfig;
63
+ const config = parseCrudAuth(authLine);
64
+ return config ? Object.assign(Object.assign({}, defaultConfig), config) : defaultConfig;
65
+ }
66
+ function getGuardForAuthLevel(level) {
67
+ if (!level)
68
+ return 'GqlAuthAdminGuard';
69
+ level = level.toLowerCase();
70
+ if (level === 'public')
71
+ return null;
72
+ if (level === 'user')
73
+ return 'GqlAuthGuard';
74
+ if (level === 'admin')
75
+ return 'GqlAuthAdminGuard';
76
+ const pascalCase = level.charAt(0).toUpperCase() + level.slice(1).toLowerCase();
77
+ return `GqlAuth${pascalCase}Guard`;
78
+ }
79
+ function toKebabCase(str) {
80
+ return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
81
+ }
82
+ function generateResolverContent(model, npmScope) {
83
+ var _a, _b, _c, _d, _e, _f;
84
+ const usedGuards = new Set();
85
+ if (model.auth) {
86
+ Object.values(model.auth).forEach((level) => {
87
+ if (level === 'public')
88
+ return;
89
+ const guard = getGuardForAuthLevel(level);
90
+ if (guard)
91
+ usedGuards.add(guard);
92
+ });
93
+ }
94
+ else {
95
+ usedGuards.add('GqlAuthAdminGuard');
96
+ }
97
+ const guardImports = usedGuards.size > 0 ? `import { ${Array.from(usedGuards).sort().join(', ')} } from '@${npmScope}/api/utils'` : '';
98
+ const readManyGuardDecorator = ((_a = model.auth) === null || _a === void 0 ? void 0 : _a.readMany) ? getGuardForAuthLevel(model.auth.readMany) : 'GqlAuthAdminGuard';
99
+ const countGuardDecorator = ((_b = model.auth) === null || _b === void 0 ? void 0 : _b.count) ? getGuardForAuthLevel(model.auth.count) : 'GqlAuthAdminGuard';
100
+ const readOneGuardDecorator = ((_c = model.auth) === null || _c === void 0 ? void 0 : _c.readOne) ? getGuardForAuthLevel(model.auth.readOne) : 'GqlAuthAdminGuard';
101
+ const createGuardDecorator = ((_d = model.auth) === null || _d === void 0 ? void 0 : _d.create) ? getGuardForAuthLevel(model.auth.create) : 'GqlAuthAdminGuard';
102
+ const updateGuardDecorator = ((_e = model.auth) === null || _e === void 0 ? void 0 : _e.update) ? getGuardForAuthLevel(model.auth.update) : 'GqlAuthAdminGuard';
103
+ const deleteGuardDecorator = ((_f = model.auth) === null || _f === void 0 ? void 0 : _f.delete) ? getGuardForAuthLevel(model.auth.delete) : 'GqlAuthAdminGuard';
104
+ const readManyMethodName = model.pluralModelPropertyName;
105
+ const countMethodName = `${model.pluralModelPropertyName}Count`;
106
+ const readOneMethodName = model.modelPropertyName;
107
+ return `import { Args, Mutation, Query, Resolver, Info } from '@nestjs/graphql'
108
+ import { UseGuards } from '@nestjs/common'
109
+ import type { GraphQLResolveInfo } from 'graphql'
110
+ import { CorePaging } from '@${npmScope}/api/core/data-access'
111
+ import { ApiCrudDataAccessService } from '@${npmScope}/api/generated-crud/data-access'
112
+ import { ${model.modelName} } from '@${npmScope}/api/core/models'
113
+ import { Create${model.modelName}Input, List${model.modelName}Input, Update${model.modelName}Input } from '@${npmScope}/api/generated-crud/data-access'
114
+ ${guardImports}
115
+
116
+ @Resolver(() => ${model.modelName})
117
+ export class Generated${model.modelName}Resolver {
118
+ constructor(private readonly service: ApiCrudDataAccessService) {}
119
+
120
+ @Query(() => [${model.modelName}], { nullable: true })
121
+ ${readManyGuardDecorator ? `@UseGuards(${readManyGuardDecorator})` : ''}
122
+ ${readManyMethodName}(
123
+ @Info() info: GraphQLResolveInfo,
124
+ @Args({ name: 'input', type: () => List${model.modelName}Input, nullable: true }) input?: List${model.modelName}Input,
125
+ ) {
126
+ return this.service.${readManyMethodName}(info, input)
127
+ }
128
+
129
+ @Query(() => CorePaging, { nullable: true })
130
+ ${countGuardDecorator ? `@UseGuards(${countGuardDecorator})` : ''}
131
+ ${countMethodName}(
132
+ @Args({ name: 'input', type: () => List${model.modelName}Input, nullable: true }) input?: List${model.modelName}Input,
133
+ ) {
134
+ return this.service.${countMethodName}(input)
135
+ }
136
+
137
+ @Query(() => ${model.modelName}, { nullable: true })
138
+ ${readOneGuardDecorator ? `@UseGuards(${readOneGuardDecorator})` : ''}
139
+ ${readOneMethodName}(
140
+ @Info() info: GraphQLResolveInfo,
141
+ @Args('${model.modelPropertyName}Id') ${model.modelPropertyName}Id: string
142
+ ) {
143
+ return this.service.${readOneMethodName}(info, ${model.modelPropertyName}Id)
144
+ }
145
+
146
+ @Mutation(() => ${model.modelName}, { nullable: true })
147
+ ${createGuardDecorator ? `@UseGuards(${createGuardDecorator})` : ''}
148
+ create${model.modelName}(
149
+ @Info() info: GraphQLResolveInfo,
150
+ @Args('input') input: Create${model.modelName}Input,
151
+ ) {
152
+ return this.service.create${model.modelName}(info, input)
153
+ }
154
+
155
+ @Mutation(() => ${model.modelName}, { nullable: true })
156
+ ${updateGuardDecorator ? `@UseGuards(${updateGuardDecorator})` : ''}
157
+ update${model.modelName}(
158
+ @Info() info: GraphQLResolveInfo,
159
+ @Args('${model.modelPropertyName}Id') ${model.modelPropertyName}Id: string,
160
+ @Args('input') input: Update${model.modelName}Input,
161
+ ) {
162
+ return this.service.update${model.modelName}(info, ${model.modelPropertyName}Id, input)
163
+ }
164
+
165
+ @Mutation(() => ${model.modelName}, { nullable: true })
166
+ ${deleteGuardDecorator ? `@UseGuards(${deleteGuardDecorator})` : ''}
167
+ delete${model.modelName}(
168
+ @Args('${model.modelPropertyName}Id') ${model.modelPropertyName}Id: string,
169
+ ) {
170
+ return this.service.delete${model.modelName}(${model.modelPropertyName}Id)
171
+ }
172
+ }
173
+ `;
174
+ }
175
+ function generateFeatureModuleContent(models, npmScope) {
176
+ return `import { Module } from '@nestjs/common'\nimport { ApiCrudDataAccessModule } from '@${npmScope}/api/generated-crud/data-access'\n${models
177
+ .map((model) => `import { Generated${model.modelName}Resolver } from './${toKebabCase(model.modelName)}.resolver'`)
178
+ .join('\n')}\n\n@Module({\n imports: [ApiCrudDataAccessModule],\n providers: [${models
179
+ .map((model) => `Generated${model.modelName}Resolver`)
180
+ .join(', ')}],\n})\nexport class ApiGeneratedCrudFeatureModule {}\n`;
181
+ }
182
+ function generateFeatureIndexContent(models) {
183
+ return `export * from './lib/api-admin-crud-feature.module'\n${models
184
+ .map((model) => `export * from './lib/${toKebabCase(model.modelName)}.resolver'`)
185
+ .join('\n')}\n`;
186
+ }
187
+ // STEP 3: DEFINE THE CORE LOGIC FUNCTION
188
+ // This function contains all the generator's logic but uses injected dependencies, making it testable.
189
+ function generateCrudLogic(tree, schema, dependencies) {
190
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
191
+ // Helper functions that now use injected dependencies
192
+ function getAllPrismaModels(tree) {
193
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
194
+ const prismaPath = dependencies.getPrismaSchemaPath(tree);
195
+ const prismaSchema = dependencies.readPrismaSchema(tree, prismaPath);
196
+ if (!prismaSchema) {
197
+ console.error(`No Prisma schema found at ${prismaPath}`);
198
+ return [];
199
+ }
200
+ try {
201
+ const dmmf = yield dependencies.getDMMF({ datamodel: prismaSchema });
202
+ return dmmf.datamodel.models.map((model) => {
203
+ var _a;
204
+ const singularPropertyName = model.name.charAt(0).toLowerCase() + model.name.slice(1);
205
+ const pluralPropertyName = dependencies.pluralize(singularPropertyName);
206
+ const authConfig = getCrudAuthForModel(prismaSchema, model.name);
207
+ return {
208
+ name: model.name,
209
+ pluralName: dependencies.pluralize(model.name),
210
+ fields: model.fields.map((field) => (Object.assign({}, field))),
211
+ primaryField: ((_a = model.fields.find((f) => !f.isId && f.type === 'String')) === null || _a === void 0 ? void 0 : _a.name) || 'name',
212
+ modelName: model.name,
213
+ modelPropertyName: singularPropertyName,
214
+ pluralModelName: dependencies.pluralize(model.name),
215
+ pluralModelPropertyName: pluralPropertyName,
216
+ auth: authConfig,
217
+ };
218
+ });
219
+ }
220
+ catch (error) {
221
+ console.error('Error parsing Prisma schema:', error);
222
+ return [];
223
+ }
224
+ });
225
+ }
226
+ function createLibraries(tree, name) {
227
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
228
+ const dataAccessLibraryRoot = `libs/api/${name}/data-access`;
229
+ const featureLibraryRoot = `libs/api/${name}/feature`;
230
+ const dataAccessTemplatePath = dependencies.joinPathFragments(__dirname, './files/data-access');
231
+ const featureTemplatePath = dependencies.joinPathFragments(__dirname, './files/feature');
232
+ yield dependencies.apiLibraryGenerator(tree, { name }, dataAccessTemplatePath, 'data-access');
233
+ yield dependencies.apiLibraryGenerator(tree, { name }, featureTemplatePath, 'feature');
234
+ return { dataAccessLibraryRoot, featureLibraryRoot };
235
+ });
236
+ }
237
+ function generateModelFiles(tree, dataAccessLibraryRoot, featureLibraryRoot, models, name) {
238
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
239
+ const npmScope = dependencies.getNpmScope(tree);
240
+ const nameObj = dependencies.names(name);
241
+ const substitutions = Object.assign(Object.assign({}, nameObj), { name, models, npmScope: `@${npmScope}`, apiClassName: 'PrismaCrud', tmpl: '' });
242
+ dependencies.generateFiles(tree, dependencies.joinPathFragments(__dirname, './files/data-access/src/lib'), dependencies.joinPathFragments(dataAccessLibraryRoot, 'src/lib'), Object.assign(Object.assign({}, substitutions), { type: 'data-access' }));
243
+ dependencies.generateFiles(tree, dependencies.joinPathFragments(__dirname, './files/data-access/src'), dependencies.joinPathFragments(dataAccessLibraryRoot, 'src'), Object.assign(Object.assign({}, substitutions), { type: 'data-access' }));
244
+ const featureModuleContent = generateFeatureModuleContent(models, npmScope);
245
+ tree.write(dependencies.joinPathFragments(featureLibraryRoot, 'src/lib/api-admin-crud-feature.module.ts'), featureModuleContent);
246
+ const featureIndexContent = generateFeatureIndexContent(models);
247
+ tree.write(dependencies.joinPathFragments(featureLibraryRoot, 'src/index.ts'), featureIndexContent);
248
+ for (const model of models) {
249
+ const resolverFilePath = dependencies.joinPathFragments(featureLibraryRoot, `src/lib/${toKebabCase(model.modelName)}.resolver.ts`);
250
+ const resolverContent = generateResolverContent(model, npmScope);
251
+ tree.write(resolverFilePath, resolverContent);
252
+ }
253
+ });
254
+ }
255
+ // Main Orchestration Logic
256
+ const name = schema.name || 'generated-crud';
257
+ const models = yield getAllPrismaModels(tree);
258
+ if (models.length === 0) {
259
+ console.error('No Prisma models found');
260
+ return; // Return early for the test case
261
+ }
262
+ const { dataAccessLibraryRoot, featureLibraryRoot } = yield createLibraries(tree, name);
263
+ yield generateModelFiles(tree, dataAccessLibraryRoot, featureLibraryRoot, models, name);
264
+ yield dependencies.formatFiles(tree);
265
+ return () => {
266
+ dependencies.installPackagesTask(tree);
267
+ };
268
+ });
269
+ }
270
+ // STEP 4: DEFINE THE DEFAULT EXPORT
271
+ // This is what Nx CLI executes. It's a simple wrapper that provides the *real* dependencies to the logic function.
272
+ function default_1(tree, schema) {
273
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
274
+ const dependencies = {
275
+ formatFiles: devkit_1.formatFiles,
276
+ generateFiles: devkit_1.generateFiles,
277
+ installPackagesTask: devkit_1.installPackagesTask,
278
+ joinPathFragments: devkit_1.joinPathFragments,
279
+ names: devkit_1.names,
280
+ getDMMF: internals_1.getDMMF,
281
+ apiLibraryGenerator: utils_1.apiLibraryGenerator,
282
+ getPrismaSchemaPath: utils_1.getPrismaSchemaPath,
283
+ readPrismaSchema: utils_1.readPrismaSchema,
284
+ getNpmScope: get_npm_scope_1.getNpmScope,
285
+ pluralize: pluralize_1.default,
286
+ };
287
+ try {
288
+ return yield generateCrudLogic(tree, schema, dependencies);
289
+ }
290
+ catch (error) {
291
+ console.error('Error in CRUD generator:', error);
292
+ throw error;
293
+ }
294
+ });
295
+ }
296
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/generate-crud/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface GenerateCrudGeneratorSchema {
2
+ name: string;
3
+ directory: string;
4
+ model: string;
5
+ plural: string;
6
+ description?: string;
7
+ overwrite?: boolean;
8
+ }
@@ -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/generate-crud/schema.ts"],"names":[],"mappings":""}
package/src/index.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export * from './account/generator';
2
+ export * from './app/generator';
3
+ export * from './config/generator';
4
+ export * from './core/generator';
5
+ export * from './custom/generator';
6
+ export * from './generate-crud/generator';
7
+ export * from './smtp-mailer/generator';
8
+ export * from './prisma/generator';
9
+ export * from './setup/generator';
10
+ export * from './user/generator';
11
+ export * from './workspace-setup/generator';
12
+ export * from './plugin/generator';
13
+ export * from './utils/generator';
package/src/index.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./account/generator"), exports);
5
+ tslib_1.__exportStar(require("./app/generator"), exports);
6
+ tslib_1.__exportStar(require("./config/generator"), exports);
7
+ tslib_1.__exportStar(require("./core/generator"), exports);
8
+ tslib_1.__exportStar(require("./custom/generator"), exports);
9
+ tslib_1.__exportStar(require("./generate-crud/generator"), exports);
10
+ tslib_1.__exportStar(require("./smtp-mailer/generator"), exports);
11
+ tslib_1.__exportStar(require("./prisma/generator"), exports);
12
+ tslib_1.__exportStar(require("./setup/generator"), exports);
13
+ tslib_1.__exportStar(require("./user/generator"), exports);
14
+ tslib_1.__exportStar(require("./workspace-setup/generator"), exports);
15
+ tslib_1.__exportStar(require("./plugin/generator"), exports);
16
+ tslib_1.__exportStar(require("./utils/generator"), exports);
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../generators/api/src/index.ts"],"names":[],"mappings":";;;AAAA,8DAAmC;AACnC,0DAA+B;AAC/B,6DAAkC;AAClC,2DAAgC;AAChC,6DAAkC;AAClC,oEAAyC;AACzC,kEAAuC;AACvC,6DAAkC;AAClC,4DAAiC;AACjC,2DAAgC;AAChC,sEAA2C;AAC3C,6DAAkC;AAClC,4DAAiC"}
@@ -0,0 +1,3 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { GeneratePluginGeneratorSchema } from './schema';
3
+ export default function (tree: Tree, schema: GeneratePluginGeneratorSchema): Promise<() => void>;
@@ -0,0 +1,74 @@
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 path_1 = require("path");
7
+ function toKebabCase(str) {
8
+ return str
9
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
10
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')
11
+ .toLowerCase();
12
+ }
13
+ function toPascalCase(str) {
14
+ return str
15
+ .replace(/(^\w|[-_\s]\w)/g, (match) => match.replace(/[-_\s]/, '').toUpperCase());
16
+ }
17
+ function ensureDirExists(tree, path) {
18
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
19
+ if (!tree.exists(path)) {
20
+ // Directory will be created when a file is written into it
21
+ }
22
+ });
23
+ }
24
+ function default_1(tree, schema) {
25
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
26
+ const name = schema.name;
27
+ if (!name)
28
+ throw new Error('Name is required');
29
+ const kebabName = toKebabCase(name);
30
+ const className = toPascalCase(name);
31
+ const customLibraryRoot = schema.directory ? `libs/api/${schema.directory}/custom` : `libs/api/custom`;
32
+ const pluginsDir = (0, path_1.join)(customLibraryRoot, 'src/lib/plugins');
33
+ const pluginFolder = (0, path_1.join)(pluginsDir, kebabName);
34
+ yield ensureDirExists(tree, pluginsDir);
35
+ yield ensureDirExists(tree, pluginFolder);
36
+ // Service
37
+ const serviceContent = `import { Injectable } from '@nestjs/common'
38
+
39
+ @Injectable()
40
+ export class ${className}Service {
41
+ // Add your service logic here
42
+ }
43
+ `;
44
+ tree.write((0, path_1.join)(pluginFolder, `${kebabName}.service.ts`), serviceContent);
45
+ // Resolver
46
+ const resolverContent = `import { Resolver } from '@nestjs/graphql'
47
+ import { Injectable } from '@nestjs/common'
48
+
49
+ @Resolver()
50
+ @Injectable()
51
+ export class ${className}Resolver {
52
+ // Add your resolver logic here
53
+ }
54
+ `;
55
+ tree.write((0, path_1.join)(pluginFolder, `${kebabName}.resolver.ts`), resolverContent);
56
+ // Module
57
+ const moduleContent = `import { Module } from '@nestjs/common'
58
+ import { ${className}Service } from './${kebabName}.service'
59
+ import { ${className}Resolver } from './${kebabName}.resolver'
60
+
61
+ @Module({
62
+ providers: [${className}Service, ${className}Resolver],
63
+ exports: [${className}Service, ${className}Resolver],
64
+ })
65
+ export class ${className}Module {}
66
+ `;
67
+ tree.write((0, path_1.join)(pluginFolder, `${kebabName}.module.ts`), moduleContent);
68
+ yield (0, devkit_1.formatFiles)(tree);
69
+ return () => {
70
+ (0, devkit_1.installPackagesTask)(tree);
71
+ };
72
+ });
73
+ }
74
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/plugin/generator.ts"],"names":[],"mappings":";;AAsBA,4BAmDC;;AAzED,uCAAmE;AACnE,+BAA2B;AAG3B,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,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG;SACP,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AACrF,CAAC;AAED,SAAe,eAAe,CAAC,IAAU,EAAE,IAAY;;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,2DAA2D;QAC7D,CAAC;IACH,CAAC;CAAA;AAED,mBAA+B,IAAU,EAAE,MAAqC;;QAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAA;QACtG,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QAEhD,MAAM,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACvC,MAAM,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAEzC,UAAU;QACV,MAAM,cAAc,GAAG;;;eAGV,SAAS;;;CAGvB,CAAA;QACC,IAAI,CAAC,KAAK,CAAC,IAAA,WAAI,EAAC,YAAY,EAAE,GAAG,SAAS,aAAa,CAAC,EAAE,cAAc,CAAC,CAAA;QAEzE,WAAW;QACX,MAAM,eAAe,GAAG;;;;;eAKX,SAAS;;;CAGvB,CAAA;QACC,IAAI,CAAC,KAAK,CAAC,IAAA,WAAI,EAAC,YAAY,EAAE,GAAG,SAAS,cAAc,CAAC,EAAE,eAAe,CAAC,CAAA;QAE3E,SAAS;QACT,MAAM,aAAa,GAAG;WACb,SAAS,qBAAqB,SAAS;WACvC,SAAS,sBAAsB,SAAS;;;gBAGnC,SAAS,YAAY,SAAS;cAChC,SAAS,YAAY,SAAS;;eAE7B,SAAS;CACvB,CAAA;QACC,IAAI,CAAC,KAAK,CAAC,IAAA,WAAI,EAAC,YAAY,EAAE,GAAG,SAAS,YAAY,CAAC,EAAE,aAAa,CAAC,CAAA;QAEvE,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;QACvB,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;IACH,CAAC;CAAA"}
@@ -1,4 +1,4 @@
1
1
  export interface GeneratePluginGeneratorSchema {
2
- name: string;
3
- directory?: string;
4
- }
2
+ name: string;
3
+ directory?: string;
4
+ }
@@ -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/plugin/schema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { ApiPrismaGeneratorSchema } from './schema';
3
+ export default function generateLibraries(tree: Tree, options?: ApiPrismaGeneratorSchema): Promise<() => void>;
@@ -0,0 +1,61 @@
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
+ // Update package.json
12
+ (0, devkit_1.updateJson)(tree, 'package.json', (json) => {
13
+ // Add prisma schema path
14
+ json.prisma = {
15
+ schema: 'libs/api/prisma/src/lib/schemas',
16
+ seed: 'ts-node --project libs/api/core/models/tsconfig.lib.json libs/api/prisma/src/lib/seed/seed.ts',
17
+ };
18
+ // Add GraphQL model generation script for the 'core' library
19
+ if (!json.scripts) {
20
+ json.scripts = {};
21
+ }
22
+ if (!json.scripts['generate:models']) {
23
+ json.scripts['generate:models'] =
24
+ 'ts-node --project libs/api/core/models/tsconfig.lib.json libs/api/core/models/src/lib/generate-models.ts';
25
+ }
26
+ // Add all requested prisma scripts if not already present
27
+ if (!json.scripts['prisma:apply']) {
28
+ json.scripts['prisma:apply'] = 'pnpm prisma:format && pnpm prisma db push';
29
+ }
30
+ if (!json.scripts['prisma:db-push']) {
31
+ json.scripts['prisma:db-push'] = 'pnpm prisma db push';
32
+ }
33
+ if (!json.scripts['prisma:format']) {
34
+ json.scripts['prisma:format'] = 'pnpm prisma format';
35
+ }
36
+ if (!json.scripts['prisma:generate']) {
37
+ json.scripts['prisma:generate'] = 'pnpm prisma generate';
38
+ }
39
+ if (!json.scripts['prisma:migrate']) {
40
+ json.scripts['prisma:migrate'] = 'pnpm prisma migrate save && pnpm prisma migrate up';
41
+ }
42
+ if (!json.scripts['prisma:seed']) {
43
+ json.scripts['prisma:seed'] =
44
+ 'ts-node --project libs/api/prisma/tsconfig.lib.json libs/api/prisma/src/lib/seed/seed.ts';
45
+ }
46
+ if (!json.scripts['prisma:studio']) {
47
+ json.scripts['prisma:studio'] = 'pnpm nx prisma:studio api';
48
+ }
49
+ if (!json.scripts['prisma:reset']) {
50
+ json.scripts['prisma:reset'] = 'pnpm prisma migrate reset && pnpm prisma:seed';
51
+ }
52
+ return json;
53
+ });
54
+ yield (0, utils_1.apiLibraryGenerator)(tree, { name: 'prisma', overwrite }, templateRootPath);
55
+ yield (0, devkit_1.formatFiles)(tree);
56
+ return () => {
57
+ (0, devkit_1.installPackagesTask)(tree);
58
+ };
59
+ });
60
+ }
61
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/prisma/generator.ts"],"names":[],"mappings":";;AAIA,oCAwDC;;AA5DD,uCAAkG;AAClG,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,sBAAsB;QACtB,IAAA,mBAAU,EAAC,IAAI,EAAE,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;YACxC,yBAAyB;YACzB,IAAI,CAAC,MAAM,GAAG;gBACZ,MAAM,EAAE,iCAAiC;gBACzC,IAAI,EAAE,+FAA+F;aACtG,CAAA;YACD,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;YACnB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;oBAC7B,0GAA0G,CAAA;YAC9G,CAAC;YAED,0DAA0D;YAC1D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,2CAA2C,CAAA;YAC5E,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,qBAAqB,CAAA;YACxD,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,oBAAoB,CAAA;YACtD,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,sBAAsB,CAAA;YAC1D,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,oDAAoD,CAAA;YACvF,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;oBACzB,0FAA0F,CAAA;YAC9F,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,2BAA2B,CAAA;YAC7D,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,+CAA+C,CAAA;YAChF,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,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
+ export declare function apiSetupGenerator(tree: Tree): Promise<GeneratorCallback>;
3
+ export default apiSetupGenerator;