arkos 1.1.71-test → 1.1.73-test

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.
@@ -1,3 +1,4 @@
1
+ import { getUserFileExtension } from "../../helpers/fs.helpers";
1
2
  export function generateTemplate(type, options = {}) {
2
3
  switch (type) {
3
4
  case "controller":
@@ -6,14 +7,14 @@ export function generateTemplate(type, options = {}) {
6
7
  return generateServiceTemplate(options);
7
8
  case "router":
8
9
  return generateRouterTemplate(options);
9
- case "auth":
10
- return generateAuthConfigTemplate();
11
- case "query":
12
- return generateQueryConfigTemplate(options);
13
- case "middleware":
14
- return generateMiddlewareTemplate(options);
10
+ case "auth-configs":
11
+ return generateAuthConfigsTemplate(options);
12
+ case "query-options":
13
+ return generateQueryOptionsTemplate(options);
14
+ case "middlewares":
15
+ return generateMiddlewaresTemplate(options);
15
16
  default:
16
- throw new Error(`Unknown template type: ${type}`);
17
+ throw new Error(`\n Unknown template type: ${type}`);
17
18
  }
18
19
  }
19
20
  function generateControllerTemplate(options) {
@@ -35,22 +36,33 @@ function generateControllerTemplate(options) {
35
36
  }
36
37
  function generateServiceTemplate(options) {
37
38
  const { modelName, imports } = options;
39
+ const ext = getUserFileExtension();
40
+ const isTypeScript = ext === "ts";
38
41
  if (!modelName)
39
42
  throw new Error("Model name is required for service template");
40
- return `import { BaseService } from "${imports?.baseService || "arkos/services"}";
43
+ const prismaImport = isTypeScript
44
+ ? `import { prisma } from "../../utils/prisma";\n`
45
+ : "";
46
+ const baseServiceImport = isTypeScript
47
+ ? `import { BaseService } from "${imports?.baseService || "arkos/services"}";`
48
+ : `import { BaseService } from "${imports?.baseService || "arkos/services"}";`;
49
+ const typeParameter = isTypeScript
50
+ ? `<typeof prisma.${modelName.camel}>`
51
+ : "";
52
+ return `${prismaImport}${baseServiceImport}
41
53
 
42
- class ${modelName.pascal}Service extends BaseService {
43
- constructor() {
44
- super("${modelName.kebab}");
45
- }
46
-
47
- // Add your custom service methods here
54
+ class ${modelName.pascal}Service extends BaseService${typeParameter} {
55
+ constructor() {
56
+ super("${modelName.kebab}");
48
57
  }
49
-
50
- const ${modelName.camel}Service = new ${modelName.pascal}Service();
51
-
52
- export default ${modelName.camel}Service;
53
- `;
58
+
59
+ // Add your custom service methods here
60
+ }
61
+
62
+ const ${modelName.camel}Service = new ${modelName.pascal}Service();
63
+
64
+ export default ${modelName.camel}Service;
65
+ `;
54
66
  }
55
67
  function generateRouterTemplate(options) {
56
68
  const { modelName, imports } = options;
@@ -71,127 +83,313 @@ function generateRouterTemplate(options) {
71
83
  export default ${modelName.camel}Router;
72
84
  `;
73
85
  }
74
- function generateAuthConfigTemplate() {
75
- return `export const authConfig = {
76
- jwt: {
77
- secret: process.env.JWT_SECRET || 'your-secret-key',
78
- expiresIn: process.env.JWT_EXPIRES_IN || '7d',
79
- refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '30d',
80
- },
81
- bcrypt: {
82
- saltRounds: parseInt(process.env.BCRYPT_SALT_ROUNDS || '12'),
83
- },
84
- cookie: {
85
- name: process.env.COOKIE_NAME || 'arkos-token',
86
- maxAge: parseInt(process.env.COOKIE_MAX_AGE || '604800000'), // 7 days
87
- httpOnly: true,
88
- secure: process.env.NODE_ENV === 'production',
89
- sameSite: 'strict' as const,
90
- },
91
- rateLimit: {
92
- windowMs: parseInt(process.env.RATE_LIMIT_WINDOW || '900000'), // 15 minutes
93
- max: parseInt(process.env.RATE_LIMIT_MAX || '5'), // 5 attempts
94
- },
95
- email: {
96
- verification: {
97
- required: process.env.EMAIL_VERIFICATION_REQUIRED === 'true',
98
- expiresIn: process.env.EMAIL_VERIFICATION_EXPIRES_IN || '24h',
99
- },
100
- passwordReset: {
101
- expiresIn: process.env.PASSWORD_RESET_EXPIRES_IN || '1h',
102
- },
103
- },
104
- };
86
+ function generateAuthConfigsTemplate(options) {
87
+ const { modelName } = options;
88
+ const ext = getUserFileExtension();
89
+ const isTypeScript = ext === "ts";
90
+ if (!modelName)
91
+ throw new Error("Model name is required for auth config template");
92
+ const imports = isTypeScript
93
+ ? `import { AuthConfigs } from 'arkos/prisma';\n`
94
+ : "";
95
+ const typeAnnotation = isTypeScript ? `: AuthConfigs` : "";
96
+ return `${imports}
97
+ const ${modelName.camel}AuthConfigs${typeAnnotation} = {
98
+ authenticationControl: {
99
+ // Create: true,
100
+ // Update: true,
101
+ // Delete: true,
102
+ // View: false,
103
+ },
105
104
 
106
- export default authConfig;
107
- `;
105
+ // Only when using Static RBAC
106
+ accessControl: {
107
+ // Create: ["Admin"],
108
+ // Update: ["Admin", "Manager"],
109
+ // Delete: ["Admin"],
110
+ // View: ["User", "Admin", "Guest"],
111
+ },
112
+ };
113
+
114
+ export default ${modelName.camel}AuthConfigs;
115
+ `;
108
116
  }
109
- function generateQueryConfigTemplate(options) {
117
+ function generateQueryOptionsTemplate(options) {
110
118
  const { modelName } = options;
119
+ const isAuth = modelName?.camel === "auth";
120
+ const ext = getUserFileExtension();
121
+ const isTypeScript = ext === "ts";
111
122
  if (!modelName)
112
123
  throw new Error("Model name is required for query config template");
113
- return `export const ${modelName.camel}QueryOptions = {
114
- // Define searchable fields
115
- searchFields: [
116
- // 'name',
117
- // 'email',
118
- // 'description',
119
- ],
120
-
121
- // Define filterable fields
122
- filterFields: [
123
- // 'status',
124
- // 'type',
125
- // 'createdAt',
126
- ],
127
-
128
- // Define sortable fields
129
- sortFields: [
130
- 'id',
131
- 'createdAt',
132
- 'updatedAt',
133
- // Add other sortable fields
134
- ],
135
-
136
- // Define relations to include
137
- include: {
138
- // relationName: true,
139
- // relationName: {
140
- // select: {
141
- // id: true,
142
- // name: true,
143
- // }
144
- // }
145
- },
146
-
147
- // Define fields to select (if not all)
148
- select: {
149
- // id: true,
150
- // name: true,
151
- // email: true,
152
- // createdAt: true,
153
- // updatedAt: true,
154
- },
155
-
156
- // Default pagination
157
- pagination: {
158
- defaultLimit: 10,
159
- maxLimit: 100,
160
- },
161
-
162
- // Default sorting
163
- defaultSort: {
164
- field: 'createdAt',
165
- order: 'desc' as const,
166
- },
167
- };
168
-
169
- export default ${modelName.camel}QueryOptions;
170
- `;
124
+ const imports = isAuth
125
+ ? `import { AuthPrismaQueryOptions } from 'arkos/prisma'`
126
+ : `import { PrismaQueryOptions } from 'arkos/prisma'`;
127
+ const typeAnnotation = isTypeScript
128
+ ? isAuth
129
+ ? `: AuthPrismaQueryOptions<typeof prisma.${modelName.pascal}>`
130
+ : `: PrismaQueryOptions<typeof prisma.${modelName.pascal}>`
131
+ : "";
132
+ const prismaImport = isTypeScript
133
+ ? `import { prisma } from "../../utils/prisma";\n`
134
+ : "";
135
+ if (isAuth) {
136
+ return `${prismaImport}${imports};
137
+
138
+ const ${modelName.camel}QueryOptions${typeAnnotation} = {
139
+ getMe: {},
140
+ updateMe: {},
141
+ deleteMe: {},
142
+ login: {},
143
+ signup: {},
144
+ updatePassword: {},
171
145
  }
172
- function generateMiddlewareTemplate(options) {
173
- const { middlewareName } = options;
174
- if (!middlewareName)
175
- throw new Error("Middleware name is required for middleware template");
176
- return `import { Request, Response, NextFunction } from 'express';
177
-
178
- export const ${middlewareName.camel}Middleware = (
179
- req: Request,
180
- res: Response,
181
- next: NextFunction
182
- ): void => {
183
- try {
184
- // Add your middleware logic here
185
- console.log(\`${middlewareName.pascal} middleware executed for \${req.method} \${req.path}\`);
186
-
187
- // Continue to next middleware
188
- next();
189
- } catch (error) {
190
- next(error);
146
+
147
+ export default ${modelName.camel}QueryOptions;
148
+ `;
191
149
  }
192
- };
193
-
194
- export default ${middlewareName.camel}Middleware;
195
- `;
150
+ else {
151
+ return `${prismaImport}${imports};
152
+
153
+ const ${modelName.camel}QueryOptions${typeAnnotation} = {
154
+ // for all queries
155
+ queryOptions: {},
156
+ findOne: {},
157
+ findMany: {},
158
+ deleteMany: {},
159
+ updateMany: {},
160
+ createMany: {},
161
+ createOne: {},
162
+ updateOne: {},
163
+ deleteOne: {},
164
+ }
165
+
166
+ export default ${modelName.camel}QueryOptions;
167
+ `;
168
+ }
169
+ }
170
+ function generateMiddlewaresTemplate(options) {
171
+ const { modelName } = options;
172
+ const ext = getUserFileExtension();
173
+ const isTypeScript = ext === "ts";
174
+ if (!modelName)
175
+ throw new Error("Model name is required for middleware template");
176
+ const isAuth = modelName.camel === "auth";
177
+ const isFileUpload = modelName.camel === "fileUpload" || modelName.camel === "file-upload";
178
+ const requestType = isTypeScript ? "ArkosRequest" : "req";
179
+ const responseType = isTypeScript ? "ArkosResponse" : "res";
180
+ const nextType = isTypeScript ? "ArkosNextFunction" : "next";
181
+ const baseImports = isTypeScript
182
+ ? `import { ArkosRequest, ArkosResponse, ArkosNextFunction } from "arkos";
183
+ import { catchAsync } from "arkos/error-handler";`
184
+ : `import { catchAsync } from "arkos/error-handler";`;
185
+ const functionParams = isTypeScript
186
+ ? `req: ${requestType}, res: ${responseType}, next: ${nextType}`
187
+ : `req, res, next`;
188
+ if (isAuth) {
189
+ return `${baseImports}
190
+
191
+ // export const beforeGetMe = catchAsync(
192
+ // async (${functionParams}) => {
193
+ // // Your logic here
194
+ // next();
195
+ // }
196
+ // );
197
+
198
+ // export const afterGetMe = catchAsync(
199
+ // async (${functionParams}) => {
200
+ // // Your logic here
201
+ // next();
202
+ // }
203
+ // );
204
+
205
+ // export const beforeLogin = catchAsync(
206
+ // async (${functionParams}) => {
207
+ // // Your logic here
208
+ // next();
209
+ // }
210
+ // );
211
+
212
+ // export const afterLogin = catchAsync(
213
+ // async (${functionParams}) => {
214
+ // // Your logic here
215
+ // next();
216
+ // }
217
+ // );
218
+
219
+ // export const beforeLogout = catchAsync(
220
+ // async (${functionParams}) => {
221
+ // // Your logic here
222
+ // next();
223
+ // }
224
+ // );
225
+
226
+ // export const afterLogout = catchAsync(
227
+ // async (${functionParams}) => {
228
+ // // Your logic here
229
+ // next();
230
+ // }
231
+ // );
232
+
233
+ // export const beforeSignup = catchAsync(
234
+ // async (${functionParams}) => {
235
+ // // Your logic here
236
+ // next();
237
+ // }
238
+ // );
239
+
240
+ // export const afterSignup = catchAsync(
241
+ // async (${functionParams}) => {
242
+ // // Your logic here
243
+ // next();
244
+ // }
245
+ // );
246
+
247
+ // export const beforeUpdatePassword = catchAsync(
248
+ // async (${functionParams}) => {
249
+ // // Your logic here
250
+ // next();
251
+ // }
252
+ // );
253
+
254
+ // export const afterUpdatePassword = catchAsync(
255
+ // async (${functionParams}) => {
256
+ // // Your logic here
257
+ // next();
258
+ // }
259
+ // );
260
+ `;
261
+ }
262
+ if (isFileUpload) {
263
+ return `${baseImports}
264
+
265
+ // export const beforeUploadFile = catchAsync(
266
+ // async (${functionParams}) => {
267
+ // // Your logic here
268
+ // next();
269
+ // }
270
+ // );
271
+
272
+ // export const afterUploadFile = catchAsync(
273
+ // async (${functionParams}) => {
274
+ // // Your logic here
275
+ // next();
276
+ // }
277
+ // );
278
+ `;
279
+ }
280
+ return `${baseImports}
281
+
282
+ // export const beforeCreateOne = catchAsync(
283
+ // async (${functionParams}) => {
284
+ // // Your logic here
285
+ // next();
286
+ // }
287
+ // );
288
+
289
+ // export const afterCreateOne = catchAsync(
290
+ // async (${functionParams}) => {
291
+ // // Your logic here
292
+ // next();
293
+ // }
294
+ // );
295
+
296
+ // export const beforeFindOne = catchAsync(
297
+ // async (${functionParams}) => {
298
+ // // Your logic here
299
+ // next();
300
+ // }
301
+ // );
302
+
303
+ // export const afterFindOne = catchAsync(
304
+ // async (${functionParams}) => {
305
+ // // Your logic here
306
+ // next();
307
+ // }
308
+ // );
309
+
310
+ // export const beforeFindMany = catchAsync(
311
+ // async (${functionParams}) => {
312
+ // // Your logic here
313
+ // next();
314
+ // }
315
+ // );
316
+
317
+ // export const afterFindMany = catchAsync(
318
+ // async (${functionParams}) => {
319
+ // // Your logic here
320
+ // next();
321
+ // }
322
+ // );
323
+
324
+ // export const beforeUpdateOne = catchAsync(
325
+ // async (${functionParams}) => {
326
+ // // Your logic here
327
+ // next();
328
+ // }
329
+ // );
330
+
331
+ // export const afterUpdateOne = catchAsync(
332
+ // async (${functionParams}) => {
333
+ // // Your logic here
334
+ // next();
335
+ // }
336
+ // );
337
+
338
+ // export const beforeDeleteOne = catchAsync(
339
+ // async (${functionParams}) => {
340
+ // // Your logic here
341
+ // next();
342
+ // }
343
+ // );
344
+
345
+ // export const afterDeleteOne = catchAsync(
346
+ // async (${functionParams}) => {
347
+ // // Your logic here
348
+ // next();
349
+ // }
350
+ // );
351
+
352
+ // export const beforeCreateMany = catchAsync(
353
+ // async (${functionParams}) => {
354
+ // // Your logic here
355
+ // next();
356
+ // }
357
+ // );
358
+
359
+ // export const afterCreateMany = catchAsync(
360
+ // async (${functionParams}) => {
361
+ // // Your logic here
362
+ // next();
363
+ // }
364
+ // );
365
+
366
+ // export const beforeUpdateMany = catchAsync(
367
+ // async (${functionParams}) => {
368
+ // // Your logic here
369
+ // next();
370
+ // }
371
+ // );
372
+
373
+ // export const afterUpdateMany = catchAsync(
374
+ // async (${functionParams}) => {
375
+ // // Your logic here
376
+ // next();
377
+ // }
378
+ // );
379
+
380
+ // export const beforeDeleteMany = catchAsync(
381
+ // async (${functionParams}) => {
382
+ // // Your logic here
383
+ // next();
384
+ // }
385
+ // );
386
+
387
+ // export const afterDeleteMany = catchAsync(
388
+ // async (${functionParams}) => {
389
+ // // Your logic here
390
+ // next();
391
+ // }
392
+ // );
393
+ `;
196
394
  }
197
395
  //# sourceMappingURL=generators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/generators.ts"],"names":[],"mappings":"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","sourcesContent":["interface ModelName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface MiddlewareName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface TemplateOptions {\n modelName?: ModelName;\n middlewareName?: MiddlewareName;\n imports?: Record<string, string>;\n}\n\nexport function generateTemplate(\n type: string,\n options: TemplateOptions = {}\n): string {\n switch (type) {\n case \"controller\":\n return generateControllerTemplate(options);\n case \"service\":\n return generateServiceTemplate(options);\n case \"router\":\n return generateRouterTemplate(options);\n case \"auth\":\n return generateAuthConfigTemplate();\n case \"query\":\n return generateQueryConfigTemplate(options);\n case \"middleware\":\n return generateMiddlewareTemplate(options);\n default:\n throw new Error(`Unknown template type: ${type}`);\n }\n}\n\nfunction generateControllerTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName)\n throw new Error(\"Model name is required for controller template\");\n\n return `import { BaseController } from \"${\n imports?.baseController || \"arkos/controllers\"\n }\";\n \n class ${modelName.pascal}Controller extends BaseController {\n constructor() {\n super(\"${modelName.kebab}\");\n }\n }\n \n const ${modelName.camel}Controller = new ${modelName.pascal}Controller();\n \n export default ${modelName.camel}Controller;\n `;\n}\n\nfunction generateServiceTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName)\n throw new Error(\"Model name is required for service template\");\n\n return `import { BaseService } from \"${\n imports?.baseService || \"arkos/services\"\n }\";\n \n class ${modelName.pascal}Service extends BaseService {\n constructor() {\n super(\"${modelName.kebab}\");\n }\n \n // Add your custom service methods here\n }\n \n const ${modelName.camel}Service = new ${modelName.pascal}Service();\n \n export default ${modelName.camel}Service;\n `;\n}\n\nfunction generateRouterTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName) throw new Error(\"Model name is required for router template\");\n\n return `import { Router } from \"express\";\n import { createRoutes } from \"${imports?.baseRouter || \"arkos\"}\";\n import ${modelName.camel}Controller from \"${\n imports?.controller || `./${modelName.kebab}.controller`\n }\";\n \n const ${modelName.camel}Router = Router();\n \n // Generate CRUD routes automatically\n createRoutes(${modelName.camel}Router, ${modelName.camel}Controller);\n \n // Add custom routes here\n // ${modelName.camel}Router.get('/custom', ${\n modelName.camel\n }Controller.customMethod);\n \n export default ${modelName.camel}Router;\n `;\n}\n\nfunction generateAuthConfigTemplate(): string {\n return `export const authConfig = {\n jwt: {\n secret: process.env.JWT_SECRET || 'your-secret-key',\n expiresIn: process.env.JWT_EXPIRES_IN || '7d',\n refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '30d',\n },\n bcrypt: {\n saltRounds: parseInt(process.env.BCRYPT_SALT_ROUNDS || '12'),\n },\n cookie: {\n name: process.env.COOKIE_NAME || 'arkos-token',\n maxAge: parseInt(process.env.COOKIE_MAX_AGE || '604800000'), // 7 days\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'strict' as const,\n },\n rateLimit: {\n windowMs: parseInt(process.env.RATE_LIMIT_WINDOW || '900000'), // 15 minutes\n max: parseInt(process.env.RATE_LIMIT_MAX || '5'), // 5 attempts\n },\n email: {\n verification: {\n required: process.env.EMAIL_VERIFICATION_REQUIRED === 'true',\n expiresIn: process.env.EMAIL_VERIFICATION_EXPIRES_IN || '24h',\n },\n passwordReset: {\n expiresIn: process.env.PASSWORD_RESET_EXPIRES_IN || '1h',\n },\n },\n };\n \n export default authConfig;\n `;\n}\n\nfunction generateQueryConfigTemplate(options: TemplateOptions): string {\n const { modelName } = options;\n\n if (!modelName)\n throw new Error(\"Model name is required for query config template\");\n\n return `export const ${modelName.camel}QueryOptions = {\n // Define searchable fields\n searchFields: [\n // 'name',\n // 'email',\n // 'description',\n ],\n \n // Define filterable fields\n filterFields: [\n // 'status',\n // 'type',\n // 'createdAt',\n ],\n \n // Define sortable fields\n sortFields: [\n 'id',\n 'createdAt',\n 'updatedAt',\n // Add other sortable fields\n ],\n \n // Define relations to include\n include: {\n // relationName: true,\n // relationName: {\n // select: {\n // id: true,\n // name: true,\n // }\n // }\n },\n \n // Define fields to select (if not all)\n select: {\n // id: true,\n // name: true,\n // email: true,\n // createdAt: true,\n // updatedAt: true,\n },\n \n // Default pagination\n pagination: {\n defaultLimit: 10,\n maxLimit: 100,\n },\n \n // Default sorting\n defaultSort: {\n field: 'createdAt',\n order: 'desc' as const,\n },\n };\n \n export default ${modelName.camel}QueryOptions;\n `;\n}\n\nfunction generateMiddlewareTemplate(options: TemplateOptions): string {\n const { middlewareName } = options;\n\n if (!middlewareName)\n throw new Error(\"Middleware name is required for middleware template\");\n\n return `import { Request, Response, NextFunction } from 'express';\n \n export const ${middlewareName.camel}Middleware = (\n req: Request,\n res: Response,\n next: NextFunction\n ): void => {\n try {\n // Add your middleware logic here\n console.log(\\`${middlewareName.pascal} middleware executed for \\${req.method} \\${req.path}\\`);\n \n // Continue to next middleware\n next();\n } catch (error) {\n next(error);\n }\n };\n \n export default ${middlewareName.camel}Middleware;\n `;\n}\n"]}
1
+ {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/generators.ts"],"names":[],"mappings":"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","sourcesContent":["import { getUserFileExtension } from \"../../helpers/fs.helpers\";\n\ninterface ModelName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface MiddlewareName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface TemplateOptions {\n modelName?: ModelName;\n middlewareName?: MiddlewareName;\n imports?: Record<string, string>;\n}\n\nexport function generateTemplate(\n type: string,\n options: TemplateOptions = {}\n): string {\n switch (type) {\n case \"controller\":\n return generateControllerTemplate(options);\n case \"service\":\n return generateServiceTemplate(options);\n case \"router\":\n return generateRouterTemplate(options);\n case \"auth-configs\":\n return generateAuthConfigsTemplate(options);\n case \"query-options\":\n return generateQueryOptionsTemplate(options);\n case \"middlewares\":\n return generateMiddlewaresTemplate(options);\n default:\n throw new Error(`\\n Unknown template type: ${type}`);\n }\n}\n\nfunction generateControllerTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName)\n throw new Error(\"Model name is required for controller template\");\n\n return `import { BaseController } from \"${\n imports?.baseController || \"arkos/controllers\"\n }\";\n \n class ${modelName.pascal}Controller extends BaseController {\n constructor() {\n super(\"${modelName.kebab}\");\n }\n }\n \n const ${modelName.camel}Controller = new ${modelName.pascal}Controller();\n \n export default ${modelName.camel}Controller;\n `;\n}\n\nfunction generateServiceTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName)\n throw new Error(\"Model name is required for service template\");\n\n // Generate imports\n const prismaImport = isTypeScript\n ? `import { prisma } from \"../../utils/prisma\";\\n`\n : \"\";\n\n const baseServiceImport = isTypeScript\n ? `import { BaseService } from \"${\n imports?.baseService || \"arkos/services\"\n }\";`\n : `import { BaseService } from \"${\n imports?.baseService || \"arkos/services\"\n }\";`;\n\n // Generate type parameter for TypeScript\n const typeParameter = isTypeScript\n ? `<typeof prisma.${modelName.camel}>`\n : \"\";\n\n return `${prismaImport}${baseServiceImport}\n \nclass ${modelName.pascal}Service extends BaseService${typeParameter} {\n constructor() {\n super(\"${modelName.kebab}\");\n }\n\n // Add your custom service methods here\n}\n\nconst ${modelName.camel}Service = new ${modelName.pascal}Service();\n\nexport default ${modelName.camel}Service;\n`;\n}\n\nfunction generateRouterTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName) throw new Error(\"Model name is required for router template\");\n\n return `import { Router } from \"express\";\n import { createRoutes } from \"${imports?.baseRouter || \"arkos\"}\";\n import ${modelName.camel}Controller from \"${\n imports?.controller || `./${modelName.kebab}.controller`\n }\";\n \n const ${modelName.camel}Router = Router();\n \n // Generate CRUD routes automatically\n createRoutes(${modelName.camel}Router, ${modelName.camel}Controller);\n \n // Add custom routes here\n // ${modelName.camel}Router.get('/custom', ${\n modelName.camel\n }Controller.customMethod);\n \n export default ${modelName.camel}Router;\n `;\n}\n\nfunction generateAuthConfigsTemplate(options: TemplateOptions): string {\n const { modelName } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName)\n throw new Error(\"Model name is required for auth config template\");\n\n // Generate imports for TypeScript\n const imports = isTypeScript\n ? `import { AuthConfigs } from 'arkos/prisma';\\n`\n : \"\";\n\n // Generate type annotation for TypeScript\n const typeAnnotation = isTypeScript ? `: AuthConfigs` : \"\";\n\n return `${imports}\nconst ${modelName.camel}AuthConfigs${typeAnnotation} = {\n authenticationControl: {\n // Create: true,\n // Update: true,\n // Delete: true,\n // View: false,\n },\n \n // Only when using Static RBAC\n accessControl: {\n // Create: [\"Admin\"],\n // Update: [\"Admin\", \"Manager\"],\n // Delete: [\"Admin\"],\n // View: [\"User\", \"Admin\", \"Guest\"],\n },\n};\n\nexport default ${modelName.camel}AuthConfigs;\n`;\n}\n\nfunction generateQueryOptionsTemplate(options: TemplateOptions): string {\n const { modelName } = options;\n const isAuth = modelName?.camel === \"auth\";\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName)\n throw new Error(\"Model name is required for query config template\");\n\n // Generate imports\n const imports = isAuth\n ? `import { AuthPrismaQueryOptions } from 'arkos/prisma'`\n : `import { PrismaQueryOptions } from 'arkos/prisma'`;\n\n // Generate type annotation for TypeScript\n const typeAnnotation = isTypeScript\n ? isAuth\n ? `: AuthPrismaQueryOptions<typeof prisma.${modelName.pascal}>`\n : `: PrismaQueryOptions<typeof prisma.${modelName.pascal}>`\n : \"\";\n\n // Generate prisma import if TypeScript\n const prismaImport = isTypeScript\n ? `import { prisma } from \"../../utils/prisma\";\\n`\n : \"\";\n\n if (isAuth) {\n // Auth template\n return `${prismaImport}${imports};\n\nconst ${modelName.camel}QueryOptions${typeAnnotation} = {\n getMe: {},\n updateMe: {},\n deleteMe: {},\n login: {},\n signup: {},\n updatePassword: {},\n}\n\nexport default ${modelName.camel}QueryOptions;\n`;\n } else {\n // Regular template\n return `${prismaImport}${imports};\n\nconst ${modelName.camel}QueryOptions${typeAnnotation} = {\n // for all queries\n queryOptions: {},\n findOne: {},\n findMany: {},\n deleteMany: {},\n updateMany: {},\n createMany: {},\n createOne: {},\n updateOne: {},\n deleteOne: {},\n}\n\nexport default ${modelName.camel}QueryOptions;\n`;\n }\n}\n\nfunction generateMiddlewaresTemplate(options: TemplateOptions): string {\n const { modelName } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName)\n throw new Error(\"Model name is required for middleware template\");\n\n const isAuth = modelName.camel === \"auth\";\n const isFileUpload =\n modelName.camel === \"fileUpload\" || modelName.camel === \"file-upload\";\n\n // Generate imports based on TypeScript/JavaScript\n const requestType = isTypeScript ? \"ArkosRequest\" : \"req\";\n const responseType = isTypeScript ? \"ArkosResponse\" : \"res\";\n const nextType = isTypeScript ? \"ArkosNextFunction\" : \"next\";\n\n const baseImports = isTypeScript\n ? `import { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"arkos\";\nimport { catchAsync } from \"arkos/error-handler\";`\n : `import { catchAsync } from \"arkos/error-handler\";`;\n\n const functionParams = isTypeScript\n ? `req: ${requestType}, res: ${responseType}, next: ${nextType}`\n : `req, res, next`;\n\n if (isAuth) {\n return `${baseImports}\n\n// export const beforeGetMe = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterGetMe = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeLogin = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterLogin = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeLogout = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterLogout = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeSignup = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterSignup = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeUpdatePassword = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterUpdatePassword = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n`;\n }\n\n if (isFileUpload) {\n return `${baseImports}\n\n// export const beforeUploadFile = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterUploadFile = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n`;\n }\n\n // Regular model middlewares\n return `${baseImports}\n\n// export const beforeCreateOne = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterCreateOne = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeFindOne = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterFindOne = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeFindMany = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterFindMany = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeUpdateOne = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterUpdateOne = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeDeleteOne = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterDeleteOne = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeCreateMany = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterCreateMany = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeUpdateMany = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterUpdateMany = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const beforeDeleteMany = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n\n// export const afterDeleteMany = catchAsync(\n// async (${functionParams}) => {\n// // Your logic here\n// next();\n// }\n// );\n`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fs.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/fs.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CACtB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;IAChC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,UAAU;IAC5B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAEpB,MAAM,CAAC,IAAI,iBAA0C,CAAC;AAOtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAgB,EAAE;IACpD,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAGjC,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;QAG1E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;QAGvD,IAAI,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YAChC,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEX,iBAAiB,GAAG,IAAI,CAAC;QACzB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { promisify } from \"util\";\nimport fs from \"fs\";\nimport path from \"path\";\n\nexport const statAsync = promisify(fs.stat);\nexport const accessAsync = promisify(fs.access);\nexport const mkdirAsync = promisify(fs.mkdir);\nexport const crd = () =>\n process.env.ARKOS_BUILD === \"true\"\n ? process.cwd() + \"/.build/\"\n : process.cwd();\n\nexport let userFileExtension: \"ts\" | \"js\" | undefined;\n\n/**\n * Detects the file extension that should be used in the current execution context\n * Returns 'ts' when TypeScript config exists and not in build mode, otherwise 'js'\n * @returns 'ts' | 'js'\n */\nexport const getUserFileExtension = (): \"ts\" | \"js\" => {\n if (userFileExtension) return userFileExtension;\n\n try {\n const currentDir = process.cwd();\n\n // Check for tsconfig.json in current directory\n const hasTsConfig = fs.existsSync(path.join(currentDir, \"tsconfig.json\"));\n\n // Check environment variable for build mode\n const isBuildMode = process.env.ARKOS_BUILD === \"true\";\n\n // If tsconfig exists and not in build mode, use TypeScript\n if (hasTsConfig && !isBuildMode) {\n userFileExtension = \"ts\";\n } else {\n userFileExtension = \"js\";\n }\n\n return userFileExtension;\n } catch (e) {\n // Default to js if anything goes wrong\n userFileExtension = \"js\";\n return userFileExtension;\n }\n};\n"]}
1
+ {"version":3,"file":"fs.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/fs.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CACtB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;IAChC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,UAAU;IAC5B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAEpB,MAAM,CAAC,IAAI,iBAA0C,CAAC;AAOtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAgB,EAAE;IACpD,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAGjC,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;QAG1E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;QAGvD,IAAI,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YAChC,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEX,iBAAiB,GAAG,IAAI,CAAC;QACzB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { promisify } from \"util\";\nimport fs from \"fs\";\nimport path from \"path\";\n\nexport const statAsync = promisify(fs.stat);\nexport const accessAsync = promisify(fs.access);\nexport const mkdirAsync = promisify(fs.mkdir);\n\nexport const crd = () =>\n process.env.ARKOS_BUILD === \"true\"\n ? process.cwd() + \"/.build/\"\n : process.cwd();\n\nexport let userFileExtension: \"ts\" | \"js\" | undefined;\n\n/**\n * Detects the file extension that should be used in the current execution context\n * Returns 'ts' when TypeScript config exists and not in build mode, otherwise 'js'\n * @returns 'ts' | 'js'\n */\nexport const getUserFileExtension = (): \"ts\" | \"js\" => {\n if (userFileExtension) return userFileExtension;\n\n try {\n const currentDir = process.cwd();\n\n // Check for tsconfig.json in current directory\n const hasTsConfig = fs.existsSync(path.join(currentDir, \"tsconfig.json\"));\n\n // Check environment variable for build mode\n const isBuildMode = process.env.ARKOS_BUILD === \"true\";\n\n // If tsconfig exists and not in build mode, use TypeScript\n if (hasTsConfig && !isBuildMode) {\n userFileExtension = \"ts\";\n } else {\n userFileExtension = \"js\";\n }\n\n return userFileExtension;\n } catch (e) {\n // Default to js if anything goes wrong\n userFileExtension = \"js\";\n return userFileExtension;\n }\n};\n"]}
@@ -9,13 +9,13 @@ export declare class BaseService<TModel extends Record<string, any> = any> {
9
9
  [x: string]: any;
10
10
  } ? D : any, queryOptions?: TOptions): Promise<TModel["create"] extends (args: {
11
11
  data: any;
12
- } & TOptions) => infer R ? R : never>;
12
+ } & TOptions) => infer R ? R : any>;
13
13
  createMany<TOptions extends Omit<Parameters<TModel["createMany"]>[0], "data">>(data: Parameters<TModel["createMany"]>[0] extends {
14
14
  data: infer D;
15
15
  [x: string]: any;
16
16
  } ? D : any, queryOptions?: TOptions): Promise<TModel["createMany"] extends (args: {
17
17
  data: any;
18
- } & TOptions) => infer R ? R : never>;
18
+ } & TOptions) => infer R ? R : any>;
19
19
  count(filters: Parameters<TModel["count"]>[0] extends {
20
20
  where: infer W;
21
21
  [x: string]: any;
@@ -25,10 +25,10 @@ export declare class BaseService<TModel extends Record<string, any> = any> {
25
25
  [x: string]: any;
26
26
  } ? W : any, queryOptions?: TOptions): Promise<TModel["findMany"] extends (args: {
27
27
  where: any;
28
- } & TOptions) => infer R ? R : never>;
28
+ } & TOptions) => infer R ? R : any>;
29
29
  findById<TOptions extends Omit<Parameters<TModel["findUnique"]>[0], "where">>(id: string | number, queryOptions?: TOptions): Promise<TModel["findUnique"] extends (args: {
30
30
  where: any;
31
- } & TOptions) => infer R ? R : never>;
31
+ } & TOptions) => infer R ? R : any>;
32
32
  findOne<TOptions extends Omit<Parameters<TModel["findFirst"]>[0], "where"> | Omit<Parameters<TModel["findUnique"]>[0], "where">>(filters: Parameters<TModel["findFirst"]>[0] extends {
33
33
  where: infer W;
34
34
  [x: string]: any;
@@ -39,7 +39,7 @@ export declare class BaseService<TModel extends Record<string, any> = any> {
39
39
  where: any;
40
40
  } & TOptions) => infer R ? R : TModel["findUnique"] extends (args: {
41
41
  where: any;
42
- } & TOptions) => infer R2 ? R2 : never>;
42
+ } & TOptions) => infer R2 ? R2 : any>;
43
43
  updateOne<TOptions extends Omit<Parameters<TModel["update"]>[0], "where" | "data">>(filters: Parameters<TModel["update"]>[0] extends {
44
44
  where: infer W;
45
45
  [x: string]: any;
@@ -49,7 +49,7 @@ export declare class BaseService<TModel extends Record<string, any> = any> {
49
49
  } ? D : any, queryOptions?: TOptions): Promise<TModel["update"] extends (args: {
50
50
  where: any;
51
51
  data: any;
52
- } & TOptions) => infer R ? R : never>;
52
+ } & TOptions) => infer R ? R : any>;
53
53
  updateMany<TOptions extends Omit<Parameters<TModel["updateMany"]>[0], "where" | "data">>(filters: Parameters<TModel["updateMany"]>[0] extends {
54
54
  where: infer W;
55
55
  [x: string]: any;
@@ -59,7 +59,7 @@ export declare class BaseService<TModel extends Record<string, any> = any> {
59
59
  } ? D : any, queryOptions?: TOptions): Promise<TModel["updateMany"] extends (args: {
60
60
  where: any;
61
61
  data: any;
62
- } & TOptions) => infer R ? R : never>;
62
+ } & TOptions) => infer R ? R : any>;
63
63
  deleteOne(filters: Parameters<TModel["delete"]>[0] extends {
64
64
  where: infer W;
65
65
  [x: string]: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkos",
3
- "version": "1.1.71-test",
3
+ "version": "1.1.73-test",
4
4
  "description": "The Express & Prisma Framework For RESTful API",
5
5
  "main": "dist/cjs/exports/index.js",
6
6
  "module": "dist/es2020/exports/index.js",