arkos 1.3.4-canary.8 → 1.3.5-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -6
- package/dist/cjs/exports/controllers/index.js +36 -5
- package/dist/cjs/exports/controllers/index.js.map +1 -1
- package/dist/cjs/modules/auth/auth.controller.js +22 -15
- package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
- package/dist/cjs/modules/base/base.controller.js +3 -0
- package/dist/cjs/modules/base/base.controller.js.map +1 -1
- package/dist/cjs/modules/base/base.middlewares.js +70 -12
- package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
- package/dist/cjs/modules/base/base.service.js +1 -2
- package/dist/cjs/modules/base/base.service.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +3 -6
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/cjs/modules/email/email.service.js +24 -27
- package/dist/cjs/modules/email/email.service.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.controller.js +6 -0
- package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/cli/generate.js +1 -2
- package/dist/cjs/utils/cli/generate.js.map +1 -1
- package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js +30 -7
- package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js +17 -17
- package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js +4 -6
- package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +2 -4
- package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +33 -11
- package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js.map +1 -1
- package/dist/cjs/utils/features/api.features.js +7 -7
- package/dist/cjs/utils/features/api.features.js.map +1 -1
- package/dist/esm/exports/controllers/index.js +2 -2
- package/dist/esm/exports/controllers/index.js.map +1 -1
- package/dist/esm/modules/auth/auth.controller.js +22 -15
- package/dist/esm/modules/auth/auth.controller.js.map +1 -1
- package/dist/esm/modules/base/base.controller.js +3 -0
- package/dist/esm/modules/base/base.controller.js.map +1 -1
- package/dist/esm/modules/base/base.middlewares.js +70 -11
- package/dist/esm/modules/base/base.middlewares.js.map +1 -1
- package/dist/esm/modules/base/base.service.js +1 -2
- package/dist/esm/modules/base/base.service.js.map +1 -1
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +3 -6
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/esm/modules/email/email.service.js +24 -27
- package/dist/esm/modules/email/email.service.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.controller.js +5 -1
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/cli/generate.js +1 -2
- package/dist/esm/utils/cli/generate.js.map +1 -1
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js +30 -7
- package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js +17 -17
- package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js +4 -6
- package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +2 -4
- package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js +33 -11
- package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js.map +1 -1
- package/dist/esm/utils/features/api.features.js +7 -7
- package/dist/esm/utils/features/api.features.js.map +1 -1
- package/dist/types/exports/controllers/index.d.ts +2 -2
- package/dist/types/modules/base/base.middlewares.d.ts +0 -1
- package/dist/types/modules/file-upload/file-upload.controller.d.ts +1 -1
- package/dist/types/types/index.d.ts +13 -9
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload.controller.js","sourceRoot":"","sources":["../../../../src/modules/file-upload/file-upload.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import AppError from \"../error-handler/utils/app-error\";\nimport {\n FileUploadService,\n getFileUploadServices,\n} from \"./file-upload.service\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { getArkosConfig } from \"../../server\";\nimport { processFile, processImage } from \"./utils/helpers/file-upload.helpers\";\nimport { ArkosNextFunction, ArkosRequest, ArkosResponse } from \"../../types\";\nimport { getModuleComponents } from \"../../utils/dynamic-loader\";\n\n/**\n * Handles files uploads and allow to be extended\n */\nclass FileUploadController {\n /**\n * Model-specific interceptors loaded from model modules\n * @private\n */\n private interceptors: any;\n\n /**\n * Handles file upload requests, processes images if needed, and returns URLs\n *\n * Supports paths outside of the project directory with '../' prefix\n * @param {ArkosRequest} req - Arkos request object\n * @param {ArkosResponse} res - Arkos response object\n * @param {ArkosNextFunction} next - Arkos next middleware function\n */\n uploadFile = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n this.interceptors =\n getModuleComponents(\"file-upload\")?.interceptors || {};\n\n const { fileType } = req.params;\n const { format, width, height, resizeTo } = req.query;\n const options = { format, width, height, resizeTo };\n\n const {\n documentUploadService,\n fileUploadService,\n imageUploadService,\n videoUploadService,\n } = getFileUploadServices();\n\n const { fileUpload } = getArkosConfig();\n const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);\n try {\n await fs.promises.access(uploadPath);\n } catch (err) {\n await fs.promises.mkdir(uploadPath, { recursive: true });\n }\n\n let uploader: FileUploadService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploadService;\n break;\n case \"videos\":\n uploader = videoUploadService;\n break;\n case \"documents\":\n uploader = documentUploadService;\n break;\n case \"files\":\n uploader = fileUploadService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n uploader.handleMultipleUpload()(req, res, async (err) => {\n if (err) return next(err);\n\n let data;\n if (req.files && Array.isArray(req.files) && req.files.length > 0) {\n if (fileType === \"images\") {\n data = await Promise.all(\n req.files.map((file) => processImage(req, file.path, options))\n );\n } else {\n data = await Promise.all(\n req.files.map((file) => processFile(req, file.path))\n );\n }\n data = data.filter((url) => url !== null);\n } else if (req.file) {\n if (fileType === \"images\") {\n data = await processImage(req, req.file.path, options);\n } else {\n data = await processFile(req, req.file.path);\n }\n } else {\n return next(new AppError(\"No file uploaded\", 400));\n }\n\n const jsonContent = {\n success: true,\n data,\n message: Array.isArray(data)\n ? `${data.length} files uploaded successfully`\n : \"File uploaded successfully\",\n };\n\n if (this.interceptors?.afterUploadFile) {\n req.responseData = jsonContent;\n res.locals.data = jsonContent;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json(jsonContent);\n });\n }\n );\n\n /**\n * Handles file deletion requests\n *\n * Supports paths outside of the project directory with '../' prefix\n * @param {ArkosRequest} req - Arkos request object\n * @param {ArkosResponse} res - Arkos response object\n * @param {ArkosNextFunction} next - Arkos next middleware function\n */\n deleteFile = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n this.interceptors =\n getModuleComponents(\"file-upload\")?.interceptors || {};\n\n const { fileType, fileName } = req.params;\n\n const {\n documentUploadService,\n fileUploadService,\n imageUploadService,\n videoUploadService,\n } = getFileUploadServices();\n\n let uploader: FileUploadService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploadService;\n break;\n case \"videos\":\n uploader = videoUploadService;\n break;\n case \"documents\":\n uploader = documentUploadService;\n break;\n case \"files\":\n uploader = fileUploadService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n try {\n const { fileUpload } = getArkosConfig();\n const baseUploadRoute = fileUpload?.baseRoute || \"/api/uploads\";\n\n // This checks if the URL follows the expected format: /api/files/{fileType}/{fileName}\n const urlPattern = new RegExp(\n `${baseUploadRoute}/${fileType}/${fileName}`\n );\n\n const isExpectedUrlPattern = urlPattern.test(req.originalUrl);\n\n if (isExpectedUrlPattern) {\n // Build the expected URL for this request\n const fullUrl = `${req.protocol}://${req.get(\"host\")}${\n req.originalUrl\n }`;\n\n // URL matches expected pattern, use deleteFileByUrl\n await uploader.deleteFileByUrl(fullUrl);\n } else {\n // URL doesn't match expected pattern, use deleteFileByName\n await uploader.deleteFileByName(fileName, fileType);\n }\n\n if (this.interceptors.afterDeleteFile) {\n req.responseStatus = 204;\n return next();\n }\n\n res.status(204).json();\n } catch (error) {\n // Handle different types of errors\n if (error instanceof AppError) {\n return next(error);\n }\n // File doesn't exist or other error\n return next(new AppError(\"File not found\", 404));\n }\n }\n );\n\n /**\n * Handles file update requests by deleting the old file and uploading a new one\n * @param {ArkosRequest} req - Arkos request object\n * @param {ArkosResponse} res - Arkos response object\n * @param {ArkosNextFunction} next - Arkos next middleware function\n */\n updateFile = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n this.interceptors =\n getModuleComponents(\"file-upload\")?.interceptors || {};\n\n const { fileType, fileName } = req.params;\n const { format, width, height, resizeTo } = req.query;\n const options = { format, width, height, resizeTo };\n\n const {\n documentUploadService,\n fileUploadService,\n imageUploadService,\n videoUploadService,\n } = getFileUploadServices();\n\n const { fileUpload } = getArkosConfig();\n const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n // Ensure upload directory exists\n const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);\n try {\n await fs.promises.access(uploadPath);\n } catch (err) {\n // Create directory if it doesn't exist\n await fs.promises.mkdir(uploadPath, { recursive: true });\n }\n\n // Select the appropriate uploader service based on file type\n let uploader: FileUploadService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploadService;\n break;\n case \"videos\":\n uploader = videoUploadService;\n break;\n case \"documents\":\n uploader = documentUploadService;\n break;\n case \"files\":\n uploader = fileUploadService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n // Handle the file upload\n uploader.handleMultipleUpload()(req, res, async (err) => {\n if (err) return next(err);\n\n // Check if new file was uploaded\n if (\n !req.file &&\n (!req.files || !Array.isArray(req.files) || req.files.length === 0)\n ) {\n return next(new AppError(\"No new file uploaded\", 400));\n }\n\n // Only attempt to delete old file if fileName is specified\n if (fileName && fileName.trim() !== \"\") {\n try {\n const baseUploadRoute = fileUpload?.baseRoute || \"/api/uploads\";\n\n // Check if the URL follows the expected format\n const urlPattern = new RegExp(\n `${baseUploadRoute}/${fileType}/${fileName}`\n );\n\n const isExpectedUrlPattern = urlPattern.test(req.originalUrl);\n\n if (isExpectedUrlPattern) {\n // URL matches expected pattern, use deleteFileByUrl\n const oldFileUrl = `${req.protocol}://${req.get(\"host\")}${\n req.originalUrl\n }`;\n await uploader.deleteFileByUrl(oldFileUrl);\n } else {\n // URL doesn't match expected pattern, use deleteFileByName\n await uploader.deleteFileByName(fileName, fileType);\n }\n } catch (error) {\n // Log the error but continue with upload - old file might not exist\n console.warn(`Could not delete old file: ${fileName}`, error);\n }\n }\n\n // Process the new uploaded file(s)\n let data;\n if (req.files && Array.isArray(req.files) && req.files.length > 0) {\n if (fileType === \"images\") {\n // Process multiple image files with image transformations\n data = await Promise.all(\n req.files.map((file) => processImage(req, file.path, options))\n );\n } else {\n // Just store other file types without processing\n data = await Promise.all(\n req.files.map((file) => processFile(req, file.path))\n );\n }\n // Filter out any null values from failed processing\n data = data.filter((url) => url !== null);\n } else if (req.file) {\n // Process a single file\n if (fileType === \"images\") {\n data = await processImage(req, req.file.path, options);\n } else {\n data = await processFile(req, req.file.path);\n }\n }\n\n const jsonContent = {\n success: true,\n data,\n message: Array.isArray(data)\n ? fileName && fileName.trim() !== \"\"\n ? `File updated successfully. ${data.length} new files uploaded`\n : `${data.length} files uploaded successfully`\n : fileName && fileName.trim() !== \"\"\n ? \"File updated successfully\"\n : \"File uploaded successfully\",\n };\n\n if (this.interceptors.afterUpdateFile) {\n req.responseData = jsonContent;\n res.locals.data = jsonContent;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json(jsonContent);\n });\n }\n );\n\n /**\n * Not implemented yet\n *\n * @deprecated\n */\n // streamFile = catchAsync(\n // async (req: ArkosRequest, res: ArkosResponse, _: ArkosNextFunction) => {\n // const { fileName, fileType } = req.params;\n\n // const filePath = path.join(\".\", \"uploads\", fileType, fileName);\n // try {\n // await fs.promises.access(filePath);\n // } catch (err) {\n // throw new AppError(\"File not found\", 404);\n // }\n\n // const fileStat = await fs.promises.stat(filePath);\n // const fileSize = fileStat.size;\n // const range = req.headers.range;\n\n // if (range) {\n // const [partialStart, partialEnd] = range\n // .replace(/bytes=/, \"\")\n // .split(\"-\");\n // const start = parseInt(partialStart, 10) || 0;\n // const end = partialEnd ? parseInt(partialEnd, 10) : fileSize - 1;\n\n // if (start >= fileSize || end >= fileSize) {\n // res.status(416).json({ error: \"Range Not Satisfiable\" });\n // return;\n // }\n\n // res.writeHead(206, {\n // \"Content-Range\": `bytes ${start}-${end}/${fileSize}`,\n // \"Accept-Ranges\": \"bytes\",\n // \"Content-Length\": end - start + 1,\n // \"Content-Type\": \"application/octet-stream\",\n // \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n // });\n\n // fs.createReadStream(filePath, { start, end }).pipe(res);\n // } else {\n // res.writeHead(200, {\n // \"Content-Length\": fileSize,\n // \"Content-Type\": \"application/octet-stream\",\n // \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n // });\n // fs.createReadStream(filePath).pipe(res);\n // }\n // }\n // );\n}\n\n/**\n * Controller instance responsible for handling file upload operations.\n * Manages the processing and routing of file upload requests.\n *\n * @remarks\n * This controller handles various file upload operations including validation,\n * storage, and response management.\n *\n * @instance\n * @constant\n * @see {@link https://www.arkosjs.com/docs/api-reference/file-upload-controller-object}\n */\nconst fileUploadController = new FileUploadController();\n\nexport default fileUploadController;\n"]}
|
|
1
|
+
{"version":3,"file":"file-upload.controller.js","sourceRoot":"","sources":["../../../../src/modules/file-upload/file-upload.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import AppError from \"../error-handler/utils/app-error\";\nimport {\n FileUploadService,\n getFileUploadServices,\n} from \"./file-upload.service\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { getArkosConfig } from \"../../server\";\nimport { processFile, processImage } from \"./utils/helpers/file-upload.helpers\";\nimport { ArkosNextFunction, ArkosRequest, ArkosResponse } from \"../../types\";\nimport { getModuleComponents } from \"../../utils/dynamic-loader\";\n\n/**\n * Handles files uploads and allow to be extended\n */\nexport class FileUploadController {\n /**\n * Model-specific interceptors loaded from model modules\n * @private\n */\n private interceptors: any;\n\n /**\n * Handles file upload requests, processes images if needed, and returns URLs\n *\n * Supports paths outside of the project directory with '../' prefix\n * @param {ArkosRequest} req - Arkos request object\n * @param {ArkosResponse} res - Arkos response object\n * @param {ArkosNextFunction} next - Arkos next middleware function\n */\n uploadFile = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n this.interceptors =\n getModuleComponents(\"file-upload\")?.interceptors || {};\n\n const { fileType } = req.params;\n const { format, width, height, resizeTo } = req.query;\n const options = { format, width, height, resizeTo };\n\n const {\n documentUploadService,\n fileUploadService,\n imageUploadService,\n videoUploadService,\n } = getFileUploadServices();\n\n const { fileUpload } = getArkosConfig();\n const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);\n try {\n await fs.promises.access(uploadPath);\n } catch (err) {\n await fs.promises.mkdir(uploadPath, { recursive: true });\n }\n\n let uploader: FileUploadService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploadService;\n break;\n case \"videos\":\n uploader = videoUploadService;\n break;\n case \"documents\":\n uploader = documentUploadService;\n break;\n case \"files\":\n uploader = fileUploadService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n uploader.handleMultipleUpload()(req, res, async (err) => {\n if (err) return next(err);\n\n let data;\n if (req.files && Array.isArray(req.files) && req.files.length > 0) {\n if (fileType === \"images\") {\n data = await Promise.all(\n req.files.map((file) => processImage(req, file.path, options))\n );\n } else {\n data = await Promise.all(\n req.files.map((file) => processFile(req, file.path))\n );\n }\n data = data.filter((url) => url !== null);\n } else if (req.file) {\n if (fileType === \"images\") {\n data = await processImage(req, req.file.path, options);\n } else {\n data = await processFile(req, req.file.path);\n }\n } else {\n return next(new AppError(\"No file uploaded\", 400));\n }\n\n const jsonContent = {\n success: true,\n data,\n message: Array.isArray(data)\n ? `${data.length} files uploaded successfully`\n : \"File uploaded successfully\",\n };\n\n if (this.interceptors?.afterUploadFile) {\n (res as any).originalData = jsonContent;\n req.responseData = jsonContent;\n res.locals.data = jsonContent;\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json(jsonContent);\n });\n }\n );\n\n /**\n * Handles file deletion requests\n *\n * Supports paths outside of the project directory with '../' prefix\n * @param {ArkosRequest} req - Arkos request object\n * @param {ArkosResponse} res - Arkos response object\n * @param {ArkosNextFunction} next - Arkos next middleware function\n */\n deleteFile = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n this.interceptors =\n getModuleComponents(\"file-upload\")?.interceptors || {};\n\n const { fileType, fileName } = req.params;\n\n const {\n documentUploadService,\n fileUploadService,\n imageUploadService,\n videoUploadService,\n } = getFileUploadServices();\n\n let uploader: FileUploadService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploadService;\n break;\n case \"videos\":\n uploader = videoUploadService;\n break;\n case \"documents\":\n uploader = documentUploadService;\n break;\n case \"files\":\n uploader = fileUploadService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n try {\n const { fileUpload } = getArkosConfig();\n const baseUploadRoute = fileUpload?.baseRoute || \"/api/uploads\";\n\n // This checks if the URL follows the expected format: /api/files/{fileType}/{fileName}\n const urlPattern = new RegExp(\n `${baseUploadRoute}/${fileType}/${fileName}`\n );\n\n const isExpectedUrlPattern = urlPattern.test(req.originalUrl);\n\n if (isExpectedUrlPattern) {\n // Build the expected URL for this request\n const fullUrl = `${req.protocol}://${req.get(\"host\")}${\n req.originalUrl\n }`;\n\n // URL matches expected pattern, use deleteFileByUrl\n await uploader.deleteFileByUrl(fullUrl);\n } else {\n // URL doesn't match expected pattern, use deleteFileByName\n await uploader.deleteFileByName(fileName, fileType);\n }\n\n if (this.interceptors.afterDeleteFile) {\n req.responseStatus = 204;\n return next();\n }\n\n res.status(204).json();\n } catch (error) {\n // Handle different types of errors\n if (error instanceof AppError) {\n return next(error);\n }\n // File doesn't exist or other error\n return next(new AppError(\"File not found\", 404));\n }\n }\n );\n\n /**\n * Handles file update requests by deleting the old file and uploading a new one\n * @param {ArkosRequest} req - Arkos request object\n * @param {ArkosResponse} res - Arkos response object\n * @param {ArkosNextFunction} next - Arkos next middleware function\n */\n updateFile = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n this.interceptors =\n getModuleComponents(\"file-upload\")?.interceptors || {};\n\n const { fileType, fileName } = req.params;\n const { format, width, height, resizeTo } = req.query;\n const options = { format, width, height, resizeTo };\n\n const {\n documentUploadService,\n fileUploadService,\n imageUploadService,\n videoUploadService,\n } = getFileUploadServices();\n\n const { fileUpload } = getArkosConfig();\n const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n // Ensure upload directory exists\n const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);\n try {\n await fs.promises.access(uploadPath);\n } catch (err) {\n // Create directory if it doesn't exist\n await fs.promises.mkdir(uploadPath, { recursive: true });\n }\n\n // Select the appropriate uploader service based on file type\n let uploader: FileUploadService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploadService;\n break;\n case \"videos\":\n uploader = videoUploadService;\n break;\n case \"documents\":\n uploader = documentUploadService;\n break;\n case \"files\":\n uploader = fileUploadService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n // Handle the file upload\n uploader.handleMultipleUpload()(req, res, async (err) => {\n if (err) return next(err);\n\n // Check if new file was uploaded\n if (\n !req.file &&\n (!req.files || !Array.isArray(req.files) || req.files.length === 0)\n ) {\n return next(new AppError(\"No new file uploaded\", 400));\n }\n\n // Only attempt to delete old file if fileName is specified\n if (fileName && fileName.trim() !== \"\") {\n try {\n const baseUploadRoute = fileUpload?.baseRoute || \"/api/uploads\";\n\n // Check if the URL follows the expected format\n const urlPattern = new RegExp(\n `${baseUploadRoute}/${fileType}/${fileName}`\n );\n\n const isExpectedUrlPattern = urlPattern.test(req.originalUrl);\n\n if (isExpectedUrlPattern) {\n // URL matches expected pattern, use deleteFileByUrl\n const oldFileUrl = `${req.protocol}://${req.get(\"host\")}${\n req.originalUrl\n }`;\n await uploader.deleteFileByUrl(oldFileUrl);\n } else {\n // URL doesn't match expected pattern, use deleteFileByName\n await uploader.deleteFileByName(fileName, fileType);\n }\n } catch (error) {\n // Log the error but continue with upload - old file might not exist\n console.warn(`Could not delete old file: ${fileName}`, error);\n }\n }\n\n // Process the new uploaded file(s)\n let data;\n if (req.files && Array.isArray(req.files) && req.files.length > 0) {\n if (fileType === \"images\") {\n // Process multiple image files with image transformations\n data = await Promise.all(\n req.files.map((file) => processImage(req, file.path, options))\n );\n } else {\n // Just store other file types without processing\n data = await Promise.all(\n req.files.map((file) => processFile(req, file.path))\n );\n }\n // Filter out any null values from failed processing\n data = data.filter((url) => url !== null);\n } else if (req.file) {\n // Process a single file\n if (fileType === \"images\") {\n data = await processImage(req, req.file.path, options);\n } else {\n data = await processFile(req, req.file.path);\n }\n }\n\n const jsonContent = {\n success: true,\n data,\n message: Array.isArray(data)\n ? fileName && fileName.trim() !== \"\"\n ? `File updated successfully. ${data.length} new files uploaded`\n : `${data.length} files uploaded successfully`\n : fileName && fileName.trim() !== \"\"\n ? \"File updated successfully\"\n : \"File uploaded successfully\",\n };\n\n if (this.interceptors.afterUpdateFile) {\n (res as any).originalData = jsonContent;\n req.responseData = jsonContent;\n res.locals.data = jsonContent;\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json(jsonContent);\n });\n }\n );\n\n /**\n * Not implemented yet\n *\n * @deprecated\n */\n // streamFile = catchAsync(\n // async (req: ArkosRequest, res: ArkosResponse, _: ArkosNextFunction) => {\n // const { fileName, fileType } = req.params;\n\n // const filePath = path.join(\".\", \"uploads\", fileType, fileName);\n // try {\n // await fs.promises.access(filePath);\n // } catch (err) {\n // throw new AppError(\"File not found\", 404);\n // }\n\n // const fileStat = await fs.promises.stat(filePath);\n // const fileSize = fileStat.size;\n // const range = req.headers.range;\n\n // if (range) {\n // const [partialStart, partialEnd] = range\n // .replace(/bytes=/, \"\")\n // .split(\"-\");\n // const start = parseInt(partialStart, 10) || 0;\n // const end = partialEnd ? parseInt(partialEnd, 10) : fileSize - 1;\n\n // if (start >= fileSize || end >= fileSize) {\n // res.status(416).json({ error: \"Range Not Satisfiable\" });\n // return;\n // }\n\n // res.writeHead(206, {\n // \"Content-Range\": `bytes ${start}-${end}/${fileSize}`,\n // \"Accept-Ranges\": \"bytes\",\n // \"Content-Length\": end - start + 1,\n // \"Content-Type\": \"application/octet-stream\",\n // \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n // });\n\n // fs.createReadStream(filePath, { start, end }).pipe(res);\n // } else {\n // res.writeHead(200, {\n // \"Content-Length\": fileSize,\n // \"Content-Type\": \"application/octet-stream\",\n // \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n // });\n // fs.createReadStream(filePath).pipe(res);\n // }\n // }\n // );\n}\n\n/**\n * Controller instance responsible for handling file upload operations.\n * Manages the processing and routing of file upload requests.\n *\n * @remarks\n * This controller handles various file upload operations including validation,\n * storage, and response management.\n *\n * @instance\n * @constant\n * @see {@link https://www.arkosjs.com/docs/api-reference/file-upload-controller-object}\n */\nconst fileUploadController = new FileUploadController();\n\nexport default fileUploadController;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AA6LA,MAAM,CAAN,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,qCAAa,CAAA;IACb,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;AACnB,CAAC,EALW,oBAAoB,KAApB,oBAAoB,QAK/B","sourcesContent":["import {\n ErrorRequestHandler,\n NextFunction,\n Request,\n RequestHandler,\n Response,\n} from \"express\";\n\nexport type PrismaOperations = \"findMany\";\n\n/**\n * Type definition for authentication-related Prisma query operations\n * @template T - The Prisma model delegate type\n */\nexport type AuthPrismaQueryOptions<T extends Record<string, any>> = {\n // User profile endpoints\n /**\n * Options for retrieving the current authenticated user's profile\n */\n getMe?: Partial<Parameters<T[\"findUnique\"]>[0]>;\n /**\n * Options for updating the current authenticated user's profile\n */\n updateMe?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for soft deleting or deactivating the current authenticated user's account\n */\n deleteMe?: Partial<Parameters<T[\"update\"]>[0]>;\n // Authentication endpoints\n /**\n * Options for user login authentication queries\n */\n login?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n /**\n * Options for user registration and account creation\n */\n signup?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * Options for updating the current authenticated user's password\n */\n updatePassword?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for finding multiple auth actions\n */\n findManyAuthAction?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Options for finding a single auth action\n */\n findOneAuthAction?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n};\n\n/**\n * Base Prisma query options for standard CRUD operations\n * @template T - The Prisma model delegate type\n */\ntype BasePrismaQueryOptions<T extends Record<string, any>> = {\n /**\n * @deprecated Use `global` instead for general query options\n */\n queryOptions?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Global query options that can be used for all operations\n * Replaces the deprecated queryOptions\n */\n global?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * General find options for findMany and findOne operations\n */\n find?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * General create options for createOne and createMany operations\n */\n create?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * General update options for updateOne and updateMany operations\n */\n update?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * General delete options for deleteOne and deleteMany operations\n */\n delete?: Partial<Parameters<T[\"delete\"]>[0]>;\n /**\n * General save options for createOne, createMany, updateOne, updateMany operations\n */\n save?:\n | Partial<Parameters<T[\"create\"]>[0]>\n | Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Save options for single record operations (createOne, updateOne)\n */\n saveOne?:\n | Partial<Parameters<T[\"create\"]>[0]>\n | Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Save options for multiple record operations (createMany, updateMany)\n */\n saveMany?:\n | Partial<Parameters<T[\"createMany\"]>[0]>\n | Partial<Parameters<T[\"updateMany\"]>[0]>;\n /**\n * Options for finding a single record (first match)\n */\n findOne?: Partial<Parameters<T[\"findFirst\"]>[0]>;\n /**\n * Options for finding multiple records\n */\n findMany?: Partial<Parameters<T[\"findMany\"]>[0]>;\n /**\n * Options for creating a single record\n */\n createOne?: Partial<Parameters<T[\"create\"]>[0]>;\n /**\n * Options for creating multiple records\n */\n createMany?: Partial<Parameters<T[\"createMany\"]>[0]>;\n /**\n * Options for updating a single record\n */\n updateOne?: Partial<Parameters<T[\"update\"]>[0]>;\n /**\n * Options for updating multiple records\n */\n updateMany?: Partial<Parameters<T[\"updateMany\"]>[0]>;\n /**\n * Options for deleting a single record\n */\n deleteOne?: Partial<Parameters<T[\"delete\"]>[0]>;\n /**\n * Options for deleting multiple records\n */\n deleteMany?: Partial<Parameters<T[\"deleteMany\"]>[0]>;\n};\n\n/**\n * Type definition for Prisma query operations with flexible options\n * Conditionally provides auth-specific options when ModelName is \"auth\"\n * @template T - The Prisma model delegate type\n * @template ModelName - The model name (defaults to string for standard models)\n */\nexport type PrismaQueryOptions<\n T extends Record<string, any>,\n ModelName extends string = string,\n> = ModelName extends \"auth\"\n ? AuthPrismaQueryOptions<T>\n : BasePrismaQueryOptions<T>;\n/**\n * Interface defining the minimum structure required for Prisma model delegates\n * This allows us to constraint TModel without requiring Prisma imports\n */\nexport type PrismaModelDelegate = {\n create: (args: { data: never; [key: string]: never }) => Promise<any>;\n createMany: (args: { data: never; [key: string]: never }) => Promise<any>;\n findMany: (args: { [key: string]: never }) => Promise<any[]>;\n findFirst: (args: { where: never; [key: string]: never }) => Promise<any>;\n findUnique: (args: { where: never; [key: string]: never }) => Promise<any>;\n update: (args: {\n where: never;\n data: never;\n [key: string]: never;\n }) => Promise<any>;\n updateMany: (args: {\n where: never;\n data: never;\n [key: string]: never;\n }) => Promise<any>;\n delete: (args: { where: never; [key: string]: never }) => Promise<any>;\n deleteMany: (args: { where: never; [key: string]: never }) => Promise<any>;\n count: (args: { where: never; [key: string]: never }) => Promise<number>;\n};\n\nexport interface UserRole {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n roleId: string;\n role: AuthRole;\n user: User;\n userId: string;\n}\n\nexport interface AuthRole {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n name: string;\n permissions: AuthPermission[];\n userRoles: UserRole[];\n}\n\nexport enum AuthPermissionAction {\n Create = \"Create\",\n View = \"View\",\n Update = \"Update\",\n Delete = \"Delete\",\n}\n\nexport interface AuthPermission {\n id: string;\n createdAt: Date;\n deletedAt?: Date;\n resource: string;\n action: AuthPermissionAction;\n roleId: string;\n role: AuthRole;\n}\n\nexport interface User {\n id: string;\n isStaff: boolean;\n isSuperUser: boolean;\n password: string;\n passwordChangedAt?: Date;\n deletedSelfAccountAt: Date;\n isActive: boolean;\n roles?: UserRole[] | any[];\n role?: UserRole | any;\n}\n\nexport interface ArkosRequest<Body = any, Query = any> extends Request {\n user?: User & Record<string, any>;\n relationFields?: Record<string, boolean>;\n include?: Record<string, any>;\n responseData?: Record<string, any> | null | undefined;\n additionalData?: Record<string, any> | null | undefined;\n responseStatus?: number | string | null | undefined;\n body: Body;\n prismaQueryOptions?: Record<string, any>;\n // query: Query extends Request['ParsedQs'];\n accessToken?: string;\n /**\n * This represents `req.query` after being handled and transformed.\n */\n transformedQuery?: Record<string, any>;\n /**\n * Return result of APIFeatures.filters\n */\n filters?: Record<string, any>;\n modelName?: string;\n}\n\nexport interface ArkosResponse extends Response {}\nexport interface ArkosNextFunction extends NextFunction {}\nexport interface ArkosRequestHandler extends RequestHandler {}\nexport interface ArkosErrorRequestHandler extends ErrorRequestHandler {}\n"]}
|
|
@@ -40,8 +40,7 @@ const generateFile = async (options, config) => {
|
|
|
40
40
|
}
|
|
41
41
|
catch (err) {
|
|
42
42
|
console.info("");
|
|
43
|
-
sheu.error(
|
|
44
|
-
console.info(`${sheu.bold("Reason: ")}${err?.message || "unknown"}`);
|
|
43
|
+
sheu.error(`Failed because of ${err?.message?.toLowerCase() || "unknown reason"}`);
|
|
45
44
|
process.exit(1);
|
|
46
45
|
}
|
|
47
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/utils/cli/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAcrD,MAAM,YAAY,GAAG,KAAK,EACxB,OAAwB,EACxB,MAAsB,EACtB,EAAE;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IAEhC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,gBAAgB;QAAE,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAEhE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;IAErD,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC;QAC7B,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC;QAC3B,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC;KAC5B,CAAC;IAEF,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,UAAU,EACV,GAAG,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE,CAC7C,CAAC;IACF,MAAM,yBAAyB,GAC7B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAC3C,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAElC,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,KAAK;YAChB,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;SACtE,CAAC;QAEF,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACpE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,CAAC,yBAAyB,CAAC,WAAW,EAAE,CAAC,QAAQ,OAAO,CAAC,KAAK,kBAAkB,CAC9F,CAAC;QACJ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEpC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CACP,GAAG,yBAAyB,QAAQ,OAAO,CAAC,KAAK,oBAAoB,YAAY,CAAC,QAAQ,CAAC,EAAE,CAC9F,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,CACR,GAAG,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/utils/cli/generate.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { generateTemplate } from \"./utils/template-generators\";\nimport { ensureDirectoryExists } from \"./utils/cli.helpers\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../helpers/change-case.helpers\";\nimport { fullCleanCwd, getUserFileExtension } from \"../helpers/fs.helpers\";\nimport sheu from \"../sheu\";\nimport { capitalize } from \"../helpers/text.helpers\";\n\ninterface GenerateOptions {\n path?: string;\n model: string;\n}\n\ninterface GenerateConfig {\n templateName: string;\n fileSuffix: string;\n customValidation?: (modelName: string) => void;\n customImports?: (names: any) => any;\n}\n\nconst generateFile = async (\n options: GenerateOptions,\n config: GenerateConfig\n) => {\n const modelName = options.model;\n\n if (!modelName) {\n sheu.error(\"Module name is required!\");\n process.exit(1);\n }\n\n if (config.customValidation) config.customValidation(modelName);\n\n const { path: customPath = \"src/modules\" } = options;\n\n const names = {\n pascal: pascalCase(modelName),\n camel: camelCase(modelName),\n kebab: kebabCase(modelName),\n };\n\n const ext = getUserFileExtension();\n const modulePath = path.join(process.cwd(), customPath, names.kebab);\n const filePath = path.join(\n modulePath,\n `${names.kebab}.${config.fileSuffix}.${ext}`\n );\n const humamReadableTemplateName =\n config.templateName.charAt(0).toUpperCase() +\n config.templateName.slice(1).replaceAll(\"-\", \" \");\n\n try {\n ensureDirectoryExists(modulePath);\n\n const templateData = {\n modelName: names,\n ...(config.customImports && { imports: config.customImports(names) }),\n };\n\n const content = generateTemplate(config.templateName, templateData);\n if (fs.existsSync(filePath))\n throw new Error(\n `${capitalize(humamReadableTemplateName.toLowerCase())} for ${options.model} already exists.`\n );\n fs.writeFileSync(filePath, content);\n\n console.info(\"\");\n sheu.done(\n `${humamReadableTemplateName} for ${options.model} generated under ${fullCleanCwd(filePath)}`\n );\n } catch (err: any) {\n console.info(\"\");\n sheu.error(\n `Failed because of ${err?.message?.toLowerCase() || \"unknown reason\"}`\n );\n process.exit(1);\n }\n};\n\nexport const generateCommand = {\n controller: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"controller\",\n fileSuffix: \"controller\",\n customImports: () => ({\n baseController: \"arkos/controllers\",\n }),\n });\n },\n\n service: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"service\",\n fileSuffix: \"service\",\n customImports: () => ({\n baseService: \"arkos/services\",\n }),\n });\n },\n\n router: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"router\",\n fileSuffix: \"router\",\n customImports: (names) => ({\n baseRouter: \"arkos\",\n controller: `./${names.kebab}.controller`,\n }),\n });\n },\n\n interceptors: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"interceptors\",\n fileSuffix: \"middlewares\",\n });\n },\n\n authConfigs: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"auth-configs\",\n fileSuffix: \"auth\",\n });\n },\n\n hooks: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"hooks\",\n fileSuffix: \"hooks\",\n });\n },\n\n createDto: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"create-dto\",\n fileSuffix: \"dto\",\n });\n },\n\n updateDto: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"update-dto\",\n fileSuffix: \"dto\",\n });\n },\n\n queryOptions: async (options: GenerateOptions) => {\n await generateFile(options, {\n templateName: \"query-options\",\n fileSuffix: \"query\",\n customValidation: (modelName) => {\n if (modelName === \"file-upload\") {\n sheu.error(\n \"Prisma query options are not available to file-upload resource\"\n );\n process.exit(1);\n }\n },\n });\n },\n};\n"]}
|
|
@@ -5,7 +5,7 @@ export function generateAuthConfigsTemplate(options) {
|
|
|
5
5
|
const ext = getUserFileExtension();
|
|
6
6
|
const isTypeScript = ext === "ts";
|
|
7
7
|
if (!modelName)
|
|
8
|
-
throw new Error("
|
|
8
|
+
throw new Error("Module name is required for auth config template");
|
|
9
9
|
const imports = isTypeScript
|
|
10
10
|
? `import { AuthConfigs } from 'arkos/auth';\n`
|
|
11
11
|
: "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-configs-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/auth-configs-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAG9D,MAAM,UAAU,2BAA2B,CAAC,OAAwB;IAClE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"auth-configs-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/auth-configs-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAG9D,MAAM,UAAU,2BAA2B,CAAC,OAAwB;IAClE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,YAAY;QAC1B,CAAC,CAAC,6CAA6C;QAC/C,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3D,OAAO,GAAG,OAAO;;;eAGJ,SAAS,CAAC,KAAK;iDACmB,SAAS,CAAC,KAAK;iDACf,SAAS,CAAC,KAAK;iDACf,SAAS,CAAC,KAAK;6CACnB,SAAS,CAAC,KAAK;;;QAGpD,SAAS,CAAC,KAAK,cAAc,cAAc;;;;;;;;;;yBAU1B,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;kDACtB,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;;;;yBAI7D,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;uDACjB,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;;;;yBAIlE,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;8CAC1B,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;;;;uBAI3D,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;4CAC1B,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;;;;;iBAK/D,SAAS,CAAC,KAAK;CAC/B,CAAC;AACF,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { capitalize } from \"../../../../helpers/text.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function 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(\"Module name is required for auth config template\");\n\n const imports = isTypeScript\n ? `import { AuthConfigs } from 'arkos/auth';\\n`\n : \"\";\n\n const typeAnnotation = isTypeScript ? `: AuthConfigs` : \"\";\n\n return `${imports}\nimport { authService } from \"arkos/services\";\n\nexport const ${modelName.camel}Permissions = {\n canCreate: authService.permission(\"Create\", \"${modelName.kebab}\"),\n canUpdate: authService.permission(\"Update\", \"${modelName.kebab}\"),\n canDelete: authService.permission(\"Delete\", \"${modelName.kebab}\"),\n canView: authService.permission(\"View\", \"${modelName.kebab}\"),\n}\n\nconst ${modelName.camel}AuthConfigs${typeAnnotation} = {\n authenticationControl: {\n Create: true,\n Update: true,\n Delete: true,\n View: true,\n },\n accessControl: {\n // Create: {\n // roles: [],\n // name: \"Create ${capitalize(modelName.kebab.replaceAll(\"-\", \"\"))}\",\n // description: \"Permission to create new ${modelName.kebab.replaceAll(\"-\", \" \")} records\"\n // },\n // Update: {\n // roles: [],\n // name: \"Update ${capitalize(modelName.kebab.replaceAll(\"-\", \"\"))}\",\n // description: \"Permission to update existing ${modelName.kebab.replaceAll(\"-\", \" \")} records\"\n // },\n // Delete: {\n // roles: [],\n // name: \"Delete ${capitalize(modelName.kebab.replaceAll(\"-\", \"\"))}\",\n // description: \"Permission to delete ${modelName.kebab.replaceAll(\"-\", \" \")} records\"\n // },\n // View: {\n // roles: [],\n // name: \"View ${capitalize(modelName.kebab.replaceAll(\"-\", \"\"))}\",\n // description: \"Permission to view ${modelName.kebab.replaceAll(\"-\", \" \")} records\"\n // },\n },\n};\n\nexport default ${modelName.camel}AuthConfigs;\n`;\n}\n"]}
|
|
@@ -1,14 +1,37 @@
|
|
|
1
1
|
export function generateControllerTemplate(options) {
|
|
2
2
|
const { modelName, imports } = options;
|
|
3
3
|
if (!modelName)
|
|
4
|
-
throw new Error("
|
|
5
|
-
|
|
4
|
+
throw new Error("Module name is required for controller template");
|
|
5
|
+
const camelName = modelName.camel.toLowerCase();
|
|
6
|
+
let controllerType;
|
|
7
|
+
let controllerName;
|
|
8
|
+
let controllerImport;
|
|
9
|
+
if (camelName === "fileupload") {
|
|
10
|
+
controllerType = "fileUpload";
|
|
11
|
+
controllerName = "FileUploadController";
|
|
12
|
+
controllerImport = imports?.fileUploadController || "arkos/controllers";
|
|
13
|
+
}
|
|
14
|
+
else if (camelName === "auth") {
|
|
15
|
+
controllerType = "auth";
|
|
16
|
+
controllerName = "AuthController";
|
|
17
|
+
controllerImport = imports?.authController || "arkos/controllers";
|
|
18
|
+
}
|
|
19
|
+
else if (camelName === "email") {
|
|
20
|
+
controllerType = "email";
|
|
21
|
+
controllerName = "EmailController";
|
|
22
|
+
controllerImport = imports?.emailController || "arkos/controllers";
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
controllerType = "base";
|
|
26
|
+
controllerName = "BaseController";
|
|
27
|
+
controllerImport = imports?.baseController || "arkos/controllers";
|
|
28
|
+
}
|
|
29
|
+
const controllerClassImport = `import { ${controllerName} } from "${controllerImport}";`;
|
|
30
|
+
return `${controllerClassImport}
|
|
6
31
|
|
|
7
|
-
class ${modelName.pascal}Controller extends
|
|
8
|
-
|
|
9
|
-
const ${modelName.camel}Controller = new ${modelName.pascal}Controller("${modelName.kebab}");
|
|
10
|
-
|
|
32
|
+
class ${modelName.pascal}Controller extends ${controllerName} {}
|
|
33
|
+
const ${modelName.camel}Controller = new ${modelName.pascal}Controller(${controllerType === "base" ? `"${modelName.kebab}"` : ""});
|
|
11
34
|
export default ${modelName.camel}Controller;
|
|
12
|
-
|
|
35
|
+
`;
|
|
13
36
|
}
|
|
14
37
|
//# sourceMappingURL=controller-template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/controller-template.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,0BAA0B,CAAC,OAAwB;IACjE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"controller-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/controller-template.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,0BAA0B,CAAC,OAAwB;IACjE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAGrE,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,cAAwD,CAAC;IAC7D,IAAI,cAAsB,CAAC;IAC3B,IAAI,gBAAwB,CAAC;IAE7B,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QAC/B,cAAc,GAAG,YAAY,CAAC;QAC9B,cAAc,GAAG,sBAAsB,CAAC;QACxC,gBAAgB,GAAG,OAAO,EAAE,oBAAoB,IAAI,mBAAmB,CAAC;IAC1E,CAAC;SAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QAChC,cAAc,GAAG,MAAM,CAAC;QACxB,cAAc,GAAG,gBAAgB,CAAC;QAClC,gBAAgB,GAAG,OAAO,EAAE,cAAc,IAAI,mBAAmB,CAAC;IACpE,CAAC;SAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QACjC,cAAc,GAAG,OAAO,CAAC;QACzB,cAAc,GAAG,iBAAiB,CAAC;QACnC,gBAAgB,GAAG,OAAO,EAAE,eAAe,IAAI,mBAAmB,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,MAAM,CAAC;QACxB,cAAc,GAAG,gBAAgB,CAAC;QAClC,gBAAgB,GAAG,OAAO,EAAE,cAAc,IAAI,mBAAmB,CAAC;IACpE,CAAC;IAED,MAAM,qBAAqB,GAAG,YAAY,cAAc,YAAY,gBAAgB,IAAI,CAAC;IAEzF,OAAO,GAAG,qBAAqB;;QAEzB,SAAS,CAAC,MAAM,sBAAsB,cAAc;QACpD,SAAS,CAAC,KAAK,oBAAoB,SAAS,CAAC,MAAM,cAAc,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;iBAC/G,SAAS,CAAC,KAAK;CAC/B,CAAC;AACF,CAAC","sourcesContent":["import { TemplateOptions } from \"../../template-generators\";\n\nexport function generateControllerTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName)\n throw new Error(\"Module name is required for controller template\");\n\n // Determine which controller to extend based on model name\n const camelName = modelName.camel.toLowerCase();\n let controllerType: \"fileUpload\" | \"auth\" | \"email\" | \"base\";\n let controllerName: string;\n let controllerImport: string;\n\n if (camelName === \"fileupload\") {\n controllerType = \"fileUpload\";\n controllerName = \"FileUploadController\";\n controllerImport = imports?.fileUploadController || \"arkos/controllers\";\n } else if (camelName === \"auth\") {\n controllerType = \"auth\";\n controllerName = \"AuthController\";\n controllerImport = imports?.authController || \"arkos/controllers\";\n } else if (camelName === \"email\") {\n controllerType = \"email\";\n controllerName = \"EmailController\";\n controllerImport = imports?.emailController || \"arkos/controllers\";\n } else {\n controllerType = \"base\";\n controllerName = \"BaseController\";\n controllerImport = imports?.baseController || \"arkos/controllers\";\n }\n\n const controllerClassImport = `import { ${controllerName} } from \"${controllerImport}\";`;\n\n return `${controllerClassImport}\n \nclass ${modelName.pascal}Controller extends ${controllerName} {}\nconst ${modelName.camel}Controller = new ${modelName.pascal}Controller(${controllerType === \"base\" ? `\"${modelName.kebab}\"` : \"\"});\nexport default ${modelName.camel}Controller;\n`;\n}\n"]}
|
|
@@ -34,7 +34,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
34
34
|
|
|
35
35
|
// export const onGetMeError =
|
|
36
36
|
// [async (${errorFunctionParams}) => {
|
|
37
|
-
// next();
|
|
37
|
+
// next(err);
|
|
38
38
|
// }]
|
|
39
39
|
|
|
40
40
|
// export const beforeLogin =
|
|
@@ -49,7 +49,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
49
49
|
|
|
50
50
|
// export const onLoginError =
|
|
51
51
|
// [async (${errorFunctionParams}) => {
|
|
52
|
-
// next();
|
|
52
|
+
// next(err);
|
|
53
53
|
// }]
|
|
54
54
|
|
|
55
55
|
// export const beforeLogout =
|
|
@@ -64,7 +64,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
64
64
|
|
|
65
65
|
// export const onLogoutError =
|
|
66
66
|
// [async (${errorFunctionParams}) => {
|
|
67
|
-
// next();
|
|
67
|
+
// next(err);
|
|
68
68
|
// }]
|
|
69
69
|
|
|
70
70
|
// export const beforeSignup =
|
|
@@ -78,7 +78,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
78
78
|
|
|
79
79
|
// export const onSignupError =
|
|
80
80
|
// [async (${errorFunctionParams}) => {
|
|
81
|
-
// next();
|
|
81
|
+
// next(err);
|
|
82
82
|
// }]
|
|
83
83
|
|
|
84
84
|
// export const beforeUpdatePassword =
|
|
@@ -93,7 +93,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
93
93
|
|
|
94
94
|
// export const onUpdatePasswordError =
|
|
95
95
|
// [async (${errorFunctionParams}) => {
|
|
96
|
-
// next();
|
|
96
|
+
// next(err);
|
|
97
97
|
// }]
|
|
98
98
|
`;
|
|
99
99
|
}
|
|
@@ -108,7 +108,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
108
108
|
|
|
109
109
|
// export const onFindFileError =
|
|
110
110
|
// [async (${errorFunctionParams}) => {
|
|
111
|
-
// next();
|
|
111
|
+
// next(err);
|
|
112
112
|
// }]
|
|
113
113
|
|
|
114
114
|
// export const beforeUploadFile =
|
|
@@ -123,7 +123,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
123
123
|
|
|
124
124
|
// export const onUploadFileError =
|
|
125
125
|
// [async (${errorFunctionParams}) => {
|
|
126
|
-
// next();
|
|
126
|
+
// next(err);
|
|
127
127
|
// }]
|
|
128
128
|
|
|
129
129
|
// export const beforeUpdateFile =
|
|
@@ -138,7 +138,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
138
138
|
|
|
139
139
|
// export const onUpdateFileError =
|
|
140
140
|
// [async (${errorFunctionParams}) => {
|
|
141
|
-
// next();
|
|
141
|
+
// next(err);
|
|
142
142
|
// }]
|
|
143
143
|
|
|
144
144
|
// export const beforeDeleteFile =
|
|
@@ -153,7 +153,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
153
153
|
|
|
154
154
|
// export const onDeleteFileError =
|
|
155
155
|
// [async (${errorFunctionParams}) => {
|
|
156
|
-
// next();
|
|
156
|
+
// next(err);
|
|
157
157
|
// }]
|
|
158
158
|
`;
|
|
159
159
|
}
|
|
@@ -171,7 +171,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
171
171
|
|
|
172
172
|
// export const onCreateOneError =
|
|
173
173
|
// [async (${errorFunctionParams}) => {
|
|
174
|
-
// next();
|
|
174
|
+
// next(err);
|
|
175
175
|
// }]
|
|
176
176
|
|
|
177
177
|
// export const beforeFindOne =
|
|
@@ -186,7 +186,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
186
186
|
|
|
187
187
|
// export const onFindOneError =
|
|
188
188
|
// [async (${errorFunctionParams}) => {
|
|
189
|
-
// next();
|
|
189
|
+
// next(err);
|
|
190
190
|
// }]
|
|
191
191
|
|
|
192
192
|
// export const beforeFindMany =
|
|
@@ -201,7 +201,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
201
201
|
|
|
202
202
|
// export const onFindManyError =
|
|
203
203
|
// [async (${errorFunctionParams}) => {
|
|
204
|
-
// next();
|
|
204
|
+
// next(err);
|
|
205
205
|
// }]
|
|
206
206
|
|
|
207
207
|
// export const beforeUpdateOne =
|
|
@@ -216,7 +216,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
216
216
|
|
|
217
217
|
// export const onUpdateOneError =
|
|
218
218
|
// [async (${errorFunctionParams}) => {
|
|
219
|
-
// next();
|
|
219
|
+
// next(err);
|
|
220
220
|
// }]
|
|
221
221
|
|
|
222
222
|
// export const beforeDeleteOne =
|
|
@@ -231,7 +231,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
231
231
|
|
|
232
232
|
// export const onDeleteOneError =
|
|
233
233
|
// [async (${errorFunctionParams}) => {
|
|
234
|
-
// next();
|
|
234
|
+
// next(err);
|
|
235
235
|
// }]
|
|
236
236
|
|
|
237
237
|
// export const beforeCreateMany =
|
|
@@ -246,7 +246,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
246
246
|
|
|
247
247
|
// export const onCreateManyError =
|
|
248
248
|
// [async (${errorFunctionParams}) => {
|
|
249
|
-
// next();
|
|
249
|
+
// next(err);
|
|
250
250
|
// }]
|
|
251
251
|
|
|
252
252
|
// export const beforeUpdateMany =
|
|
@@ -261,7 +261,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
261
261
|
|
|
262
262
|
// export const onUpdateManyError =
|
|
263
263
|
// [async (${errorFunctionParams}) => {
|
|
264
|
-
// next();
|
|
264
|
+
// next(err);
|
|
265
265
|
// }]
|
|
266
266
|
|
|
267
267
|
// export const beforeDeleteMany =
|
|
@@ -276,7 +276,7 @@ export function generateMiddlewaresTemplate(options) {
|
|
|
276
276
|
|
|
277
277
|
// export const onDeleteManyError =
|
|
278
278
|
// [async (${errorFunctionParams}) => {
|
|
279
|
-
// next();
|
|
279
|
+
// next(err);
|
|
280
280
|
// }]
|
|
281
281
|
`;
|
|
282
282
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middlewares-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/middlewares-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,2BAA2B,CAAC,OAAwB;IAClE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC;IAC1C,MAAM,YAAY,GAChB,SAAS,CAAC,KAAK,KAAK,YAAY,IAAI,SAAS,CAAC,KAAK,KAAK,aAAa,CAAC;IAExE,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC;IAE7D,MAAM,WAAW,GAAG,YAAY;QAC9B,CAAC,CAAC,yEAAyE;QAC3E,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,YAAY;QACjC,CAAC,CAAC,QAAQ,WAAW,UAAU,YAAY,WAAW,QAAQ,EAAE;QAChE,CAAC,CAAC,gBAAgB,CAAC;IAErB,MAAM,mBAAmB,GAAG,YAAY;QACtC,CAAC,CAAC,kBAAkB,WAAW,UAAU,YAAY,WAAW,QAAQ,EAAE;QAC1E,CAAC,CAAC,qBAAqB,CAAC;IAE1B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,GAAG,WAAW;;;eAGV,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;eAId,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;CAGjC,CAAC;IACA,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,GAAG,WAAW;;;;eAIV,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;CAGjC,CAAC;IACA,CAAC;IAGD,OAAO,GAAG,WAAW;;;eAGR,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;CAGjC,CAAC;AACF,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function 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(\"Module 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 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\";`\n : ``;\n\n const functionParams = isTypeScript\n ? `req: ${requestType}, res: ${responseType}, next: ${nextType}`\n : `req, res, next`;\n\n const errorFunctionParams = isTypeScript\n ? `err: any, req: ${requestType}, res: ${responseType}, next: ${nextType}`\n : `err, req, res, next`;\n\n if (isAuth) {\n return `${baseImports}\n\n// export const beforeGetMe = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterGetMe = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onGetMeError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeLogin = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterLogin = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onLoginError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeLogout = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterLogout = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onLogoutError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeSignup = \n// [async (${functionParams}) => {\n// }]\n\n// export const afterSignup = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onSignupError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeUpdatePassword = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUpdatePassword = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUpdatePasswordError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n`;\n }\n\n if (isFileUpload) {\n return `${baseImports}\n\n\n// export const beforeFindF]ile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onFindFileError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeUploadFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUploadFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUploadFileError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeUpdateFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUpdateFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUpdateFileError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeDeleteFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterDeleteFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onDeleteFileError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n`;\n }\n\n // Regular model interceptors\n return `${baseImports}\n\n// export const beforeCreateOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterCreateOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onCreateOneError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeFindOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterFindOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onFindOneError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeFindMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterFindMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onFindManyError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeUpdateOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUpdateOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUpdateOneError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeDeleteOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterDeleteOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onDeleteOneError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeCreateMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterCreateMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onCreateManyError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeUpdateMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUpdateMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUpdateManyError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n\n// export const beforeDeleteMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterDeleteMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onDeleteManyError =\n// [async (${errorFunctionParams}) => {\n// next();\n// }]\n`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"middlewares-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/middlewares-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,2BAA2B,CAAC,OAAwB;IAClE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC;IAC1C,MAAM,YAAY,GAChB,SAAS,CAAC,KAAK,KAAK,YAAY,IAAI,SAAS,CAAC,KAAK,KAAK,aAAa,CAAC;IAExE,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC;IAE7D,MAAM,WAAW,GAAG,YAAY;QAC9B,CAAC,CAAC,yEAAyE;QAC3E,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,cAAc,GAAG,YAAY;QACjC,CAAC,CAAC,QAAQ,WAAW,UAAU,YAAY,WAAW,QAAQ,EAAE;QAChE,CAAC,CAAC,gBAAgB,CAAC;IAErB,MAAM,mBAAmB,GAAG,YAAY;QACtC,CAAC,CAAC,kBAAkB,WAAW,UAAU,YAAY,WAAW,QAAQ,EAAE;QAC1E,CAAC,CAAC,qBAAqB,CAAC;IAE1B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,GAAG,WAAW;;;eAGV,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;eAId,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;CAGjC,CAAC;IACA,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,GAAG,WAAW;;;;eAIV,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;CAGjC,CAAC;IACA,CAAC;IAGD,OAAO,GAAG,WAAW;;;eAGR,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;;;eAKnB,cAAc;;;;;eAKd,cAAc;;;;;eAKd,mBAAmB;;;CAGjC,CAAC;AACF,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function 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(\"Module 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 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\";`\n : ``;\n\n const functionParams = isTypeScript\n ? `req: ${requestType}, res: ${responseType}, next: ${nextType}`\n : `req, res, next`;\n\n const errorFunctionParams = isTypeScript\n ? `err: any, req: ${requestType}, res: ${responseType}, next: ${nextType}`\n : `err, req, res, next`;\n\n if (isAuth) {\n return `${baseImports}\n\n// export const beforeGetMe = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterGetMe = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onGetMeError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeLogin = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterLogin = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onLoginError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeLogout = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterLogout = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onLogoutError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeSignup = \n// [async (${functionParams}) => {\n// }]\n\n// export const afterSignup = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onSignupError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeUpdatePassword = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUpdatePassword = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUpdatePasswordError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n`;\n }\n\n if (isFileUpload) {\n return `${baseImports}\n\n\n// export const beforeFindF]ile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onFindFileError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeUploadFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUploadFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUploadFileError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeUpdateFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUpdateFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUpdateFileError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeDeleteFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterDeleteFile = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onDeleteFileError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n`;\n }\n\n // Regular model interceptors\n return `${baseImports}\n\n// export const beforeCreateOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterCreateOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onCreateOneError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeFindOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterFindOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onFindOneError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeFindMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterFindMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onFindManyError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeUpdateOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUpdateOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUpdateOneError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeDeleteOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterDeleteOne = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onDeleteOneError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeCreateMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterCreateMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onCreateManyError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeUpdateMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterUpdateMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onUpdateManyError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n\n// export const beforeDeleteMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const afterDeleteMany = \n// [async (${functionParams}) => {\n// next();\n// }]\n\n// export const onDeleteManyError =\n// [async (${errorFunctionParams}) => {\n// next(err);\n// }]\n`;\n}\n"]}
|
|
@@ -6,16 +6,14 @@ export function generateQueryOptionsTemplate(options) {
|
|
|
6
6
|
const isTypeScript = ext === "ts";
|
|
7
7
|
if (!modelName)
|
|
8
8
|
throw new Error("Module name is required for query config template");
|
|
9
|
-
const imports =
|
|
10
|
-
? `import { AuthPrismaQueryOptions } from 'arkos/prisma'`
|
|
11
|
-
: `import { PrismaQueryOptions } from 'arkos/prisma'`;
|
|
9
|
+
const imports = `import { PrismaQueryOptions } from 'arkos/prisma'`;
|
|
12
10
|
const typeAnnotation = isTypeScript
|
|
13
11
|
? isAuth
|
|
14
|
-
? `:
|
|
15
|
-
: `: PrismaQueryOptions<
|
|
12
|
+
? `: PrismaQueryOptions<Prisma.UserDelegate, "auth">`
|
|
13
|
+
: `: PrismaQueryOptions<Prisma.${modelName.pascal}Delegate>`
|
|
16
14
|
: "";
|
|
17
15
|
const prismaImport = isTypeScript
|
|
18
|
-
? `import
|
|
16
|
+
? `import { Prisma } from "@prisma/client";\n`
|
|
19
17
|
: "";
|
|
20
18
|
if (isAuth) {
|
|
21
19
|
return `${prismaImport}${imports};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-options-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/query-options-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,4BAA4B,CAAC,OAAwB;IACnE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,KAAK,KAAK,MAAM,CAAC;IAC3C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"query-options-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/query-options-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,4BAA4B,CAAC,OAAwB;IACnE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,KAAK,KAAK,MAAM,CAAC;IAC3C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,mDAAmD,CAAC;IAEpE,MAAM,cAAc,GAAG,YAAY;QACjC,CAAC,CAAC,MAAM;YACN,CAAC,CAAC,mDAAmD;YACrD,CAAC,CAAC,+BAA+B,SAAS,CAAC,MAAM,WAAW;QAC9D,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC,4CAA4C;QAC9C,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,GAAG,YAAY,GAAG,OAAO;;QAE5B,SAAS,CAAC,KAAK,eAAe,cAAc;;;;;;;;;iBASnC,SAAS,CAAC,KAAK;CAC/B,CAAC;IACA,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,YAAY,GAAG,OAAO;;QAE5B,SAAS,CAAC,KAAK,eAAe,cAAc;;;;;;;;;;;;;;;;;;;iBAmBnC,SAAS,CAAC,KAAK;CAC/B,CAAC;IACA,CAAC;AACH,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function 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(\"Module name is required for query config template\");\n\n const imports = `import { PrismaQueryOptions } from 'arkos/prisma'`;\n\n const typeAnnotation = isTypeScript\n ? isAuth\n ? `: PrismaQueryOptions<Prisma.UserDelegate, \"auth\">`\n : `: PrismaQueryOptions<Prisma.${modelName.pascal}Delegate>`\n : \"\";\n\n const prismaImport = isTypeScript\n ? `import { Prisma } from \"@prisma/client\";\\n`\n : \"\";\n\n if (isAuth) {\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 return `${prismaImport}${imports};\n\nconst ${modelName.camel}QueryOptions${typeAnnotation} = {\n global: {},\n find: {},\n findOne: {},\n findMany: {},\n update: {},\n updateMany: {},\n updateOne: {},\n create: {},\n createMany: {},\n createOne: {},\n save: {},\n saveMany: {},\n saveOne: {},\n delete: {},\n deleteMany: {},\n deleteOne: {},\n}\n\nexport default ${modelName.camel}QueryOptions;\n`;\n }\n}\n"]}
|
|
@@ -2,7 +2,7 @@ import { checkFileExists, getUserFileExtension, } from "../../../../helpers/fs.h
|
|
|
2
2
|
export function generateRouterTemplate(options) {
|
|
3
3
|
const { modelName, imports } = options;
|
|
4
4
|
if (!modelName)
|
|
5
|
-
throw new Error("
|
|
5
|
+
throw new Error("Module name is required for router template");
|
|
6
6
|
const ext = getUserFileExtension();
|
|
7
7
|
const controllerPath = imports?.controller || `./${modelName.kebab}.controller.${ext}`;
|
|
8
8
|
const routerConfigTsType = ext === "ts" ? ": RouterConfig" : "";
|
|
@@ -13,9 +13,7 @@ export function generateRouterTemplate(options) {
|
|
|
13
13
|
`./${modelName.kebab}.controller${ext === "js" ? "." + "js" : ""}`}"`
|
|
14
14
|
: `import ${modelName.camel}Controller from "${imports?.controller ||
|
|
15
15
|
`./${modelName.kebab}.controller${ext === "js" ? "." + "js" : ""}`}"`;
|
|
16
|
-
const controllerHandlerLine =
|
|
17
|
-
? `${modelName.camel}Controller.someHandler`
|
|
18
|
-
: `${modelName.camel}Controller.someHandler`;
|
|
16
|
+
const controllerHandlerLine = `${modelName.camel}Controller.someHandler`;
|
|
19
17
|
return `import { Router } from 'express'
|
|
20
18
|
import { authService } from 'arkos/services'
|
|
21
19
|
import { catchAsync } from 'arkos/error-handler'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/router-template.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,UAAU,sBAAsB,CAAC,OAAwB;IAC7D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"router-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/router-template.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,UAAU,sBAAsB,CAAC,OAAwB;IAC7D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAEjE,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,cAAc,GAClB,OAAO,EAAE,UAAU,IAAI,KAAK,SAAS,CAAC,KAAK,eAAe,GAAG,EAAE,CAAC;IAElE,MAAM,kBAAkB,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,wBAAwB,GAC5B,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,MAAM,gBAAgB,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAEzD,MAAM,oBAAoB,GAAG,gBAAgB;QAC3C,CAAC,CAAC,UAAU,SAAS,CAAC,KAAK,oBACvB,OAAO,EAAE,UAAU;YACnB,KAAK,SAAS,CAAC,KAAK,cAAc,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAClE,GAAG;QACL,CAAC,CAAC,UAAU,SAAS,CAAC,KAAK,oBACvB,OAAO,EAAE,UAAU;YACnB,KAAK,SAAS,CAAC,KAAK,cAAc,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAClE,GAAG,CAAC;IAER,MAAM,qBAAqB,GAAG,GAAG,SAAS,CAAC,KAAK,wBAAwB,CAAC;IAEzE,OAAO;;;EAGP,oBAAoB;EACpB,wBAAwB;;qBAEL,kBAAkB;;QAE/B,SAAS,CAAC,KAAK;;EAErB,SAAS,CAAC,KAAK;;;qDAGoC,SAAS,CAAC,KAAK;eACrD,qBAAqB;;;iBAGnB,SAAS,CAAC,KAAK;CAC/B,CAAC;AACF,CAAC","sourcesContent":["import {\n checkFileExists,\n getUserFileExtension,\n} from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\nexport function generateRouterTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName)\n throw new Error(\"Module name is required for router template\");\n\n const ext = getUserFileExtension();\n const controllerPath =\n imports?.controller || `./${modelName.kebab}.controller.${ext}`;\n\n const routerConfigTsType = ext === \"ts\" ? \": RouterConfig\" : \"\";\n const routerConfigTsTypeImport =\n ext === \"ts\" ? \"import { RouterConfig } from 'arkos'\" : \"\";\n\n const controllerExists = checkFileExists(controllerPath);\n\n const controllerImportLine = controllerExists\n ? `import ${modelName.camel}Controller from \"${\n imports?.controller ||\n `./${modelName.kebab}.controller${ext === \"js\" ? \".\" + \"js\" : \"\"}`\n }\"`\n : `import ${modelName.camel}Controller from \"${\n imports?.controller ||\n `./${modelName.kebab}.controller${ext === \"js\" ? \".\" + \"js\" : \"\"}`\n }\"`;\n\n const controllerHandlerLine = `${modelName.camel}Controller.someHandler`;\n\n return `import { Router } from 'express'\nimport { authService } from 'arkos/services'\nimport { catchAsync } from 'arkos/error-handler'\n${controllerImportLine}\n${routerConfigTsTypeImport}\n\nexport const config${routerConfigTsType} = { }\n\nconst ${modelName.camel}Router = Router()\n\n${modelName.camel}Router.get(\n '/custom-endpoint',\n authService.authenticate,\n authService.handleAccessControl('CustomAction', '${modelName.kebab}'),\n catchAsync(${controllerHandlerLine})\n)\n\nexport default ${modelName.camel}Router\n`;\n}\n"]}
|