arkos 1.1.72-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.
- package/dist/cjs/utils/cli/generate.js +3 -1
- package/dist/cjs/utils/cli/generate.js.map +1 -1
- package/dist/cjs/utils/cli/index.js.map +1 -1
- package/dist/cjs/utils/cli/utils/generators.js +332 -134
- package/dist/cjs/utils/cli/utils/generators.js.map +1 -1
- package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
- package/dist/es2020/utils/cli/generate.js +3 -1
- package/dist/es2020/utils/cli/generate.js.map +1 -1
- package/dist/es2020/utils/cli/index.js.map +1 -1
- package/dist/es2020/utils/cli/utils/generators.js +332 -134
- package/dist/es2020/utils/cli/utils/generators.js.map +1 -1
- package/dist/es2020/utils/helpers/fs.helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -116,7 +116,9 @@ exports.generateCommand = {
|
|
|
116
116
|
const filePath = path_1.default.join(middlewarePath, `${names.kebab}.middlewares.ts`);
|
|
117
117
|
try {
|
|
118
118
|
(0, helpers_1.ensureDirectoryExists)(middlewarePath);
|
|
119
|
-
const content = (0, generators_1.generateTemplate)("
|
|
119
|
+
const content = (0, generators_1.generateTemplate)("middlewares", {
|
|
120
|
+
middlewareName: names,
|
|
121
|
+
});
|
|
120
122
|
fs_1.default.writeFileSync(filePath, content);
|
|
121
123
|
console.log(`✅ Middleware generated: ${filePath}`);
|
|
122
124
|
}
|
|
@@ -1 +1 @@
|
|
|
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/generators\";\nimport { ensureDirectoryExists } from \"./utils/helpers\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../helpers/change-case.helpers\";\n\ninterface GenerateOptions {\n path?: string;\n model: string;\n}\n\nexport const generateCommand = {\n controller: async (options: GenerateOptions) => {\n const modelName = options.model;\n if (!modelName) {\n console.error(\"❌ Model name is required\");\n process.exit(1);\n }\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 modulePath = path.join(process.cwd(), customPath, names.kebab);\n const filePath = path.join(modulePath, `${names.kebab}.controller.ts`);\n\n try {\n ensureDirectoryExists(modulePath);\n\n const content = generateTemplate(\"controller\", {\n modelName: names,\n imports: {\n baseController: \"arkos/controllers\",\n },\n });\n\n fs.writeFileSync(filePath, content);\n console.log(\n `\\nController generated: ${filePath.replace(process.cwd(), \"\")}`\n );\n } catch (error) {\n console.error(`❌ Failed to generate controller:`, error);\n process.exit(1);\n }\n },\n\n service: async (options: GenerateOptions) => {\n const modelName = options.model;\n if (!modelName) {\n console.error(\"❌ Model name is required\");\n process.exit(1);\n }\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 modulePath = path.join(process.cwd(), customPath, names.kebab);\n const filePath = path.join(modulePath, `${names.kebab}.service.ts`);\n\n try {\n ensureDirectoryExists(modulePath);\n\n const content = generateTemplate(\"service\", {\n modelName: names,\n imports: {\n baseService: \"arkos/services\",\n },\n });\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Service generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate service:`, error);\n process.exit(1);\n }\n },\n\n router: async (options: GenerateOptions) => {\n const modelName = options.model;\n if (!modelName) {\n console.error(\"❌ Model name is required\");\n process.exit(1);\n }\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 modulePath = path.join(process.cwd(), customPath, names.kebab);\n const filePath = path.join(modulePath, `${names.kebab}.router.ts`);\n\n try {\n ensureDirectoryExists(modulePath);\n\n const content = generateTemplate(\"router\", {\n modelName: names,\n imports: {\n baseRouter: \"arkos\",\n controller: `./${names.kebab}.controller`,\n },\n });\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Router generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate router:`, error);\n process.exit(1);\n }\n },\n\n middleware: async (middlewareName: string, options: GenerateOptions) => {\n if (!middlewareName) {\n console.error(\"❌ Middleware name is required\");\n process.exit(1);\n }\n\n const { path: customPath = \"src/modules\" } = options;\n\n const names = {\n pascal: pascalCase(middlewareName),\n camel: camelCase(middlewareName),\n kebab: kebabCase(middlewareName),\n };\n\n const middlewarePath = path.join(process.cwd(), customPath);\n const filePath = path.join(middlewarePath, `${names.kebab}.middlewares.ts`);\n\n try {\n ensureDirectoryExists(middlewarePath);\n\n const content = generateTemplate(\"middleware\", { middlewareName: names });\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Middleware generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate middleware:`, error);\n process.exit(1);\n }\n },\n\n authConfig: async (options: GenerateOptions) => {\n const modelName = options.model;\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 configPath = path.join(process.cwd(), customPath);\n const filePath = path.join(configPath, `${names.kebab}.auth.ts`);\n\n try {\n ensureDirectoryExists(configPath);\n\n const content = generateTemplate(\"auth-config\");\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Auth config generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate auth config:`, error);\n process.exit(1);\n }\n },\n\n queryOptions: async (options: GenerateOptions) => {\n const modelName = options.model;\n if (!modelName) {\n console.error(\"❌ Model name is required\");\n process.exit(1);\n }\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 configPath = path.join(process.cwd(), customPath);\n const filePath = path.join(configPath, `${names.kebab}.query.ts`);\n\n try {\n ensureDirectoryExists(configPath);\n\n const content = generateTemplate(\"query-options\", { modelName: names });\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Query config generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate query config:`, error);\n process.exit(1);\n }\n },\n};\n"]}
|
|
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/generators\";\nimport { ensureDirectoryExists } from \"./utils/helpers\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../helpers/change-case.helpers\";\n\ninterface GenerateOptions {\n path?: string;\n model: string;\n}\n\nexport const generateCommand = {\n controller: async (options: GenerateOptions) => {\n const modelName = options.model;\n if (!modelName) {\n console.error(\"❌ Model name is required\");\n process.exit(1);\n }\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 modulePath = path.join(process.cwd(), customPath, names.kebab);\n const filePath = path.join(modulePath, `${names.kebab}.controller.ts`);\n\n try {\n ensureDirectoryExists(modulePath);\n\n const content = generateTemplate(\"controller\", {\n modelName: names,\n imports: {\n baseController: \"arkos/controllers\",\n },\n });\n\n fs.writeFileSync(filePath, content);\n console.log(\n `\\nController generated: ${filePath.replace(process.cwd(), \"\")}`\n );\n } catch (error) {\n console.error(`❌ Failed to generate controller:`, error);\n process.exit(1);\n }\n },\n\n service: async (options: GenerateOptions) => {\n const modelName = options.model;\n if (!modelName) {\n console.error(\"❌ Model name is required\");\n process.exit(1);\n }\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 modulePath = path.join(process.cwd(), customPath, names.kebab);\n const filePath = path.join(modulePath, `${names.kebab}.service.ts`);\n\n try {\n ensureDirectoryExists(modulePath);\n\n const content = generateTemplate(\"service\", {\n modelName: names,\n imports: {\n baseService: \"arkos/services\",\n },\n });\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Service generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate service:`, error);\n process.exit(1);\n }\n },\n\n router: async (options: GenerateOptions) => {\n const modelName = options.model;\n if (!modelName) {\n console.error(\"❌ Model name is required\");\n process.exit(1);\n }\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 modulePath = path.join(process.cwd(), customPath, names.kebab);\n const filePath = path.join(modulePath, `${names.kebab}.router.ts`);\n\n try {\n ensureDirectoryExists(modulePath);\n\n const content = generateTemplate(\"router\", {\n modelName: names,\n imports: {\n baseRouter: \"arkos\",\n controller: `./${names.kebab}.controller`,\n },\n });\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Router generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate router:`, error);\n process.exit(1);\n }\n },\n\n middleware: async (middlewareName: string, options: GenerateOptions) => {\n if (!middlewareName) {\n console.error(\"❌ Middleware name is required\");\n process.exit(1);\n }\n\n const { path: customPath = \"src/modules\" } = options;\n\n const names = {\n pascal: pascalCase(middlewareName),\n camel: camelCase(middlewareName),\n kebab: kebabCase(middlewareName),\n };\n\n const middlewarePath = path.join(process.cwd(), customPath);\n const filePath = path.join(middlewarePath, `${names.kebab}.middlewares.ts`);\n\n try {\n ensureDirectoryExists(middlewarePath);\n\n const content = generateTemplate(\"middlewares\", {\n middlewareName: names,\n });\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Middleware generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate middleware:`, error);\n process.exit(1);\n }\n },\n\n authConfig: async (options: GenerateOptions) => {\n const modelName = options.model;\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 configPath = path.join(process.cwd(), customPath);\n const filePath = path.join(configPath, `${names.kebab}.auth.ts`);\n\n try {\n ensureDirectoryExists(configPath);\n\n const content = generateTemplate(\"auth-config\");\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Auth config generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate auth config:`, error);\n process.exit(1);\n }\n },\n\n queryOptions: async (options: GenerateOptions) => {\n const modelName = options.model;\n if (!modelName) {\n console.error(\"❌ Model name is required\");\n process.exit(1);\n }\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 configPath = path.join(process.cwd(), customPath);\n const filePath = path.join(configPath, `${names.kebab}.query.ts`);\n\n try {\n ensureDirectoryExists(configPath);\n\n const content = generateTemplate(\"query-options\", { modelName: names });\n\n fs.writeFileSync(filePath, content);\n console.log(`✅ Query config generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate query config:`, error);\n process.exit(1);\n }\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/cli/index.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/cli/index.ts"],"names":[],"mappings":"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","sourcesContent":["// src/utils/cli/index.ts\nimport { Command } from \"commander\";\nimport { buildCommand } from \"./build\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { devCommand } from \"./dev\";\nimport { startCommand } from \"./start\";\nimport { generateCommand } from \"./generate\";\n\nexport function getVersion() {\n const packageJson = JSON.parse(\n fs.readFileSync(path.join(__dirname, \"../../../../package.json\"), \"utf8\")\n );\n\n return packageJson.version || \"1.0.0\";\n}\n\nconst program = new Command();\n\nprogram.name(\"arkos\").description(\"Arkos.js CLI\").version(getVersion());\n\nprogram\n .command(\"build\")\n .description(\"Build your Arkos project\")\n .option(\"-m, --module <type>\", \"Module type (cjs or esm)\", \"cjs\")\n .action(buildCommand);\n\nprogram\n .command(\"dev\")\n .description(\"Run development server\")\n .option(\"-p, --port <number>\", \"Port number\")\n .option(\"-h, --host <host>\", \"Host to bind to\")\n .action(devCommand);\n\nprogram\n .command(\"start\")\n .description(\"Run production server\")\n .option(\"-p, --port <number>\", \"Port number\")\n .option(\"-h, --host <host>\", \"Host to bind to\")\n .action(startCommand);\n\n// New add command with subcommands\nconst generate = program\n .command(\"generate\")\n .description(\"Generate arkos components\");\n\ngenerate\n .command(\"controller\")\n .description(\"Generate a new controller\")\n .requiredOption(\"-m, --model <name>\", \"Model name\")\n .option(\"-p, --path <path>\", \"Custom path for the controller\", \"src/modules\")\n .action(generateCommand.controller);\n\ngenerate\n .command(\"service\")\n .description(\"Generate a new service\")\n .requiredOption(\"-m, --model <name>\", \"Model name\")\n .option(\"-p, --path <path>\", \"Custom path for the service\", \"src/modules\")\n .action(generateCommand.service);\n\ngenerate\n .command(\"router\")\n .description(\"Generate a new router\")\n .requiredOption(\"-m, --model <name>\", \"Model name\")\n .option(\"-p, --path <path>\", \"Custom path for the router\", \"src/modules\")\n .action(generateCommand.router);\n\ngenerate\n .command(\"auth-configs\")\n .description(\"Generate auth configuration\")\n .option(\"--path <path>\", \"Custom path for auth config\", \"src/modules\")\n .action(generateCommand.authConfig);\n\ngenerate\n .command(\"query-options\")\n .description(\"Generate prisma query options\")\n .requiredOption(\"-m, --model <name>\", \"Model name\")\n .option(\"-p, --path <path>\", \"Custom path for query options\", \"src/modules\")\n .action(generateCommand.queryOptions);\n\ngenerate\n .command(\"middlewares\")\n .description(\"Generate a new middleware file\")\n .requiredOption(\"-m, --model <name>\", \"Middleware name\")\n .option(\"-p, --path <path>\", \"Custom path for middleware\", \"src/modules\")\n .action(generateCommand.middleware);\n\nprogram.parse(process.argv);\n\nexport { program, buildCommand, devCommand, startCommand, generateCommand };\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateTemplate = generateTemplate;
|
|
4
|
+
const fs_helpers_1 = require("../../helpers/fs.helpers");
|
|
4
5
|
function generateTemplate(type, options = {}) {
|
|
5
6
|
switch (type) {
|
|
6
7
|
case "controller":
|
|
@@ -9,14 +10,14 @@ function generateTemplate(type, options = {}) {
|
|
|
9
10
|
return generateServiceTemplate(options);
|
|
10
11
|
case "router":
|
|
11
12
|
return generateRouterTemplate(options);
|
|
12
|
-
case "auth":
|
|
13
|
-
return
|
|
14
|
-
case "query":
|
|
15
|
-
return
|
|
16
|
-
case "
|
|
17
|
-
return
|
|
13
|
+
case "auth-configs":
|
|
14
|
+
return generateAuthConfigsTemplate(options);
|
|
15
|
+
case "query-options":
|
|
16
|
+
return generateQueryOptionsTemplate(options);
|
|
17
|
+
case "middlewares":
|
|
18
|
+
return generateMiddlewaresTemplate(options);
|
|
18
19
|
default:
|
|
19
|
-
throw new Error(
|
|
20
|
+
throw new Error(`\n Unknown template type: ${type}`);
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
function generateControllerTemplate(options) {
|
|
@@ -38,22 +39,33 @@ function generateControllerTemplate(options) {
|
|
|
38
39
|
}
|
|
39
40
|
function generateServiceTemplate(options) {
|
|
40
41
|
const { modelName, imports } = options;
|
|
42
|
+
const ext = (0, fs_helpers_1.getUserFileExtension)();
|
|
43
|
+
const isTypeScript = ext === "ts";
|
|
41
44
|
if (!modelName)
|
|
42
45
|
throw new Error("Model name is required for service template");
|
|
43
|
-
|
|
46
|
+
const prismaImport = isTypeScript
|
|
47
|
+
? `import { prisma } from "../../utils/prisma";\n`
|
|
48
|
+
: "";
|
|
49
|
+
const baseServiceImport = isTypeScript
|
|
50
|
+
? `import { BaseService } from "${imports?.baseService || "arkos/services"}";`
|
|
51
|
+
: `import { BaseService } from "${imports?.baseService || "arkos/services"}";`;
|
|
52
|
+
const typeParameter = isTypeScript
|
|
53
|
+
? `<typeof prisma.${modelName.camel}>`
|
|
54
|
+
: "";
|
|
55
|
+
return `${prismaImport}${baseServiceImport}
|
|
44
56
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Add your custom service methods here
|
|
57
|
+
class ${modelName.pascal}Service extends BaseService${typeParameter} {
|
|
58
|
+
constructor() {
|
|
59
|
+
super("${modelName.kebab}");
|
|
51
60
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
|
|
62
|
+
// Add your custom service methods here
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const ${modelName.camel}Service = new ${modelName.pascal}Service();
|
|
66
|
+
|
|
67
|
+
export default ${modelName.camel}Service;
|
|
68
|
+
`;
|
|
57
69
|
}
|
|
58
70
|
function generateRouterTemplate(options) {
|
|
59
71
|
const { modelName, imports } = options;
|
|
@@ -74,127 +86,313 @@ function generateRouterTemplate(options) {
|
|
|
74
86
|
export default ${modelName.camel}Router;
|
|
75
87
|
`;
|
|
76
88
|
}
|
|
77
|
-
function
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW || '900000'), // 15 minutes
|
|
96
|
-
max: parseInt(process.env.RATE_LIMIT_MAX || '5'), // 5 attempts
|
|
97
|
-
},
|
|
98
|
-
email: {
|
|
99
|
-
verification: {
|
|
100
|
-
required: process.env.EMAIL_VERIFICATION_REQUIRED === 'true',
|
|
101
|
-
expiresIn: process.env.EMAIL_VERIFICATION_EXPIRES_IN || '24h',
|
|
102
|
-
},
|
|
103
|
-
passwordReset: {
|
|
104
|
-
expiresIn: process.env.PASSWORD_RESET_EXPIRES_IN || '1h',
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
};
|
|
89
|
+
function generateAuthConfigsTemplate(options) {
|
|
90
|
+
const { modelName } = options;
|
|
91
|
+
const ext = (0, fs_helpers_1.getUserFileExtension)();
|
|
92
|
+
const isTypeScript = ext === "ts";
|
|
93
|
+
if (!modelName)
|
|
94
|
+
throw new Error("Model name is required for auth config template");
|
|
95
|
+
const imports = isTypeScript
|
|
96
|
+
? `import { AuthConfigs } from 'arkos/prisma';\n`
|
|
97
|
+
: "";
|
|
98
|
+
const typeAnnotation = isTypeScript ? `: AuthConfigs` : "";
|
|
99
|
+
return `${imports}
|
|
100
|
+
const ${modelName.camel}AuthConfigs${typeAnnotation} = {
|
|
101
|
+
authenticationControl: {
|
|
102
|
+
// Create: true,
|
|
103
|
+
// Update: true,
|
|
104
|
+
// Delete: true,
|
|
105
|
+
// View: false,
|
|
106
|
+
},
|
|
108
107
|
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
// Only when using Static RBAC
|
|
109
|
+
accessControl: {
|
|
110
|
+
// Create: ["Admin"],
|
|
111
|
+
// Update: ["Admin", "Manager"],
|
|
112
|
+
// Delete: ["Admin"],
|
|
113
|
+
// View: ["User", "Admin", "Guest"],
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export default ${modelName.camel}AuthConfigs;
|
|
118
|
+
`;
|
|
111
119
|
}
|
|
112
|
-
function
|
|
120
|
+
function generateQueryOptionsTemplate(options) {
|
|
113
121
|
const { modelName } = options;
|
|
122
|
+
const isAuth = modelName?.camel === "auth";
|
|
123
|
+
const ext = (0, fs_helpers_1.getUserFileExtension)();
|
|
124
|
+
const isTypeScript = ext === "ts";
|
|
114
125
|
if (!modelName)
|
|
115
126
|
throw new Error("Model name is required for query config template");
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
],
|
|
138
|
-
|
|
139
|
-
// Define relations to include
|
|
140
|
-
include: {
|
|
141
|
-
// relationName: true,
|
|
142
|
-
// relationName: {
|
|
143
|
-
// select: {
|
|
144
|
-
// id: true,
|
|
145
|
-
// name: true,
|
|
146
|
-
// }
|
|
147
|
-
// }
|
|
148
|
-
},
|
|
149
|
-
|
|
150
|
-
// Define fields to select (if not all)
|
|
151
|
-
select: {
|
|
152
|
-
// id: true,
|
|
153
|
-
// name: true,
|
|
154
|
-
// email: true,
|
|
155
|
-
// createdAt: true,
|
|
156
|
-
// updatedAt: true,
|
|
157
|
-
},
|
|
158
|
-
|
|
159
|
-
// Default pagination
|
|
160
|
-
pagination: {
|
|
161
|
-
defaultLimit: 10,
|
|
162
|
-
maxLimit: 100,
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
// Default sorting
|
|
166
|
-
defaultSort: {
|
|
167
|
-
field: 'createdAt',
|
|
168
|
-
order: 'desc' as const,
|
|
169
|
-
},
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
export default ${modelName.camel}QueryOptions;
|
|
173
|
-
`;
|
|
127
|
+
const imports = isAuth
|
|
128
|
+
? `import { AuthPrismaQueryOptions } from 'arkos/prisma'`
|
|
129
|
+
: `import { PrismaQueryOptions } from 'arkos/prisma'`;
|
|
130
|
+
const typeAnnotation = isTypeScript
|
|
131
|
+
? isAuth
|
|
132
|
+
? `: AuthPrismaQueryOptions<typeof prisma.${modelName.pascal}>`
|
|
133
|
+
: `: PrismaQueryOptions<typeof prisma.${modelName.pascal}>`
|
|
134
|
+
: "";
|
|
135
|
+
const prismaImport = isTypeScript
|
|
136
|
+
? `import { prisma } from "../../utils/prisma";\n`
|
|
137
|
+
: "";
|
|
138
|
+
if (isAuth) {
|
|
139
|
+
return `${prismaImport}${imports};
|
|
140
|
+
|
|
141
|
+
const ${modelName.camel}QueryOptions${typeAnnotation} = {
|
|
142
|
+
getMe: {},
|
|
143
|
+
updateMe: {},
|
|
144
|
+
deleteMe: {},
|
|
145
|
+
login: {},
|
|
146
|
+
signup: {},
|
|
147
|
+
updatePassword: {},
|
|
174
148
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
throw new Error("Middleware name is required for middleware template");
|
|
179
|
-
return `import { Request, Response, NextFunction } from 'express';
|
|
180
|
-
|
|
181
|
-
export const ${middlewareName.camel}Middleware = (
|
|
182
|
-
req: Request,
|
|
183
|
-
res: Response,
|
|
184
|
-
next: NextFunction
|
|
185
|
-
): void => {
|
|
186
|
-
try {
|
|
187
|
-
// Add your middleware logic here
|
|
188
|
-
console.log(\`${middlewareName.pascal} middleware executed for \${req.method} \${req.path}\`);
|
|
189
|
-
|
|
190
|
-
// Continue to next middleware
|
|
191
|
-
next();
|
|
192
|
-
} catch (error) {
|
|
193
|
-
next(error);
|
|
149
|
+
|
|
150
|
+
export default ${modelName.camel}QueryOptions;
|
|
151
|
+
`;
|
|
194
152
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
153
|
+
else {
|
|
154
|
+
return `${prismaImport}${imports};
|
|
155
|
+
|
|
156
|
+
const ${modelName.camel}QueryOptions${typeAnnotation} = {
|
|
157
|
+
// for all queries
|
|
158
|
+
queryOptions: {},
|
|
159
|
+
findOne: {},
|
|
160
|
+
findMany: {},
|
|
161
|
+
deleteMany: {},
|
|
162
|
+
updateMany: {},
|
|
163
|
+
createMany: {},
|
|
164
|
+
createOne: {},
|
|
165
|
+
updateOne: {},
|
|
166
|
+
deleteOne: {},
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export default ${modelName.camel}QueryOptions;
|
|
170
|
+
`;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function generateMiddlewaresTemplate(options) {
|
|
174
|
+
const { modelName } = options;
|
|
175
|
+
const ext = (0, fs_helpers_1.getUserFileExtension)();
|
|
176
|
+
const isTypeScript = ext === "ts";
|
|
177
|
+
if (!modelName)
|
|
178
|
+
throw new Error("Model name is required for middleware template");
|
|
179
|
+
const isAuth = modelName.camel === "auth";
|
|
180
|
+
const isFileUpload = modelName.camel === "fileUpload" || modelName.camel === "file-upload";
|
|
181
|
+
const requestType = isTypeScript ? "ArkosRequest" : "req";
|
|
182
|
+
const responseType = isTypeScript ? "ArkosResponse" : "res";
|
|
183
|
+
const nextType = isTypeScript ? "ArkosNextFunction" : "next";
|
|
184
|
+
const baseImports = isTypeScript
|
|
185
|
+
? `import { ArkosRequest, ArkosResponse, ArkosNextFunction } from "arkos";
|
|
186
|
+
import { catchAsync } from "arkos/error-handler";`
|
|
187
|
+
: `import { catchAsync } from "arkos/error-handler";`;
|
|
188
|
+
const functionParams = isTypeScript
|
|
189
|
+
? `req: ${requestType}, res: ${responseType}, next: ${nextType}`
|
|
190
|
+
: `req, res, next`;
|
|
191
|
+
if (isAuth) {
|
|
192
|
+
return `${baseImports}
|
|
193
|
+
|
|
194
|
+
// export const beforeGetMe = catchAsync(
|
|
195
|
+
// async (${functionParams}) => {
|
|
196
|
+
// // Your logic here
|
|
197
|
+
// next();
|
|
198
|
+
// }
|
|
199
|
+
// );
|
|
200
|
+
|
|
201
|
+
// export const afterGetMe = catchAsync(
|
|
202
|
+
// async (${functionParams}) => {
|
|
203
|
+
// // Your logic here
|
|
204
|
+
// next();
|
|
205
|
+
// }
|
|
206
|
+
// );
|
|
207
|
+
|
|
208
|
+
// export const beforeLogin = catchAsync(
|
|
209
|
+
// async (${functionParams}) => {
|
|
210
|
+
// // Your logic here
|
|
211
|
+
// next();
|
|
212
|
+
// }
|
|
213
|
+
// );
|
|
214
|
+
|
|
215
|
+
// export const afterLogin = catchAsync(
|
|
216
|
+
// async (${functionParams}) => {
|
|
217
|
+
// // Your logic here
|
|
218
|
+
// next();
|
|
219
|
+
// }
|
|
220
|
+
// );
|
|
221
|
+
|
|
222
|
+
// export const beforeLogout = catchAsync(
|
|
223
|
+
// async (${functionParams}) => {
|
|
224
|
+
// // Your logic here
|
|
225
|
+
// next();
|
|
226
|
+
// }
|
|
227
|
+
// );
|
|
228
|
+
|
|
229
|
+
// export const afterLogout = catchAsync(
|
|
230
|
+
// async (${functionParams}) => {
|
|
231
|
+
// // Your logic here
|
|
232
|
+
// next();
|
|
233
|
+
// }
|
|
234
|
+
// );
|
|
235
|
+
|
|
236
|
+
// export const beforeSignup = catchAsync(
|
|
237
|
+
// async (${functionParams}) => {
|
|
238
|
+
// // Your logic here
|
|
239
|
+
// next();
|
|
240
|
+
// }
|
|
241
|
+
// );
|
|
242
|
+
|
|
243
|
+
// export const afterSignup = catchAsync(
|
|
244
|
+
// async (${functionParams}) => {
|
|
245
|
+
// // Your logic here
|
|
246
|
+
// next();
|
|
247
|
+
// }
|
|
248
|
+
// );
|
|
249
|
+
|
|
250
|
+
// export const beforeUpdatePassword = catchAsync(
|
|
251
|
+
// async (${functionParams}) => {
|
|
252
|
+
// // Your logic here
|
|
253
|
+
// next();
|
|
254
|
+
// }
|
|
255
|
+
// );
|
|
256
|
+
|
|
257
|
+
// export const afterUpdatePassword = catchAsync(
|
|
258
|
+
// async (${functionParams}) => {
|
|
259
|
+
// // Your logic here
|
|
260
|
+
// next();
|
|
261
|
+
// }
|
|
262
|
+
// );
|
|
263
|
+
`;
|
|
264
|
+
}
|
|
265
|
+
if (isFileUpload) {
|
|
266
|
+
return `${baseImports}
|
|
267
|
+
|
|
268
|
+
// export const beforeUploadFile = catchAsync(
|
|
269
|
+
// async (${functionParams}) => {
|
|
270
|
+
// // Your logic here
|
|
271
|
+
// next();
|
|
272
|
+
// }
|
|
273
|
+
// );
|
|
274
|
+
|
|
275
|
+
// export const afterUploadFile = catchAsync(
|
|
276
|
+
// async (${functionParams}) => {
|
|
277
|
+
// // Your logic here
|
|
278
|
+
// next();
|
|
279
|
+
// }
|
|
280
|
+
// );
|
|
281
|
+
`;
|
|
282
|
+
}
|
|
283
|
+
return `${baseImports}
|
|
284
|
+
|
|
285
|
+
// export const beforeCreateOne = catchAsync(
|
|
286
|
+
// async (${functionParams}) => {
|
|
287
|
+
// // Your logic here
|
|
288
|
+
// next();
|
|
289
|
+
// }
|
|
290
|
+
// );
|
|
291
|
+
|
|
292
|
+
// export const afterCreateOne = catchAsync(
|
|
293
|
+
// async (${functionParams}) => {
|
|
294
|
+
// // Your logic here
|
|
295
|
+
// next();
|
|
296
|
+
// }
|
|
297
|
+
// );
|
|
298
|
+
|
|
299
|
+
// export const beforeFindOne = catchAsync(
|
|
300
|
+
// async (${functionParams}) => {
|
|
301
|
+
// // Your logic here
|
|
302
|
+
// next();
|
|
303
|
+
// }
|
|
304
|
+
// );
|
|
305
|
+
|
|
306
|
+
// export const afterFindOne = catchAsync(
|
|
307
|
+
// async (${functionParams}) => {
|
|
308
|
+
// // Your logic here
|
|
309
|
+
// next();
|
|
310
|
+
// }
|
|
311
|
+
// );
|
|
312
|
+
|
|
313
|
+
// export const beforeFindMany = catchAsync(
|
|
314
|
+
// async (${functionParams}) => {
|
|
315
|
+
// // Your logic here
|
|
316
|
+
// next();
|
|
317
|
+
// }
|
|
318
|
+
// );
|
|
319
|
+
|
|
320
|
+
// export const afterFindMany = catchAsync(
|
|
321
|
+
// async (${functionParams}) => {
|
|
322
|
+
// // Your logic here
|
|
323
|
+
// next();
|
|
324
|
+
// }
|
|
325
|
+
// );
|
|
326
|
+
|
|
327
|
+
// export const beforeUpdateOne = catchAsync(
|
|
328
|
+
// async (${functionParams}) => {
|
|
329
|
+
// // Your logic here
|
|
330
|
+
// next();
|
|
331
|
+
// }
|
|
332
|
+
// );
|
|
333
|
+
|
|
334
|
+
// export const afterUpdateOne = catchAsync(
|
|
335
|
+
// async (${functionParams}) => {
|
|
336
|
+
// // Your logic here
|
|
337
|
+
// next();
|
|
338
|
+
// }
|
|
339
|
+
// );
|
|
340
|
+
|
|
341
|
+
// export const beforeDeleteOne = catchAsync(
|
|
342
|
+
// async (${functionParams}) => {
|
|
343
|
+
// // Your logic here
|
|
344
|
+
// next();
|
|
345
|
+
// }
|
|
346
|
+
// );
|
|
347
|
+
|
|
348
|
+
// export const afterDeleteOne = catchAsync(
|
|
349
|
+
// async (${functionParams}) => {
|
|
350
|
+
// // Your logic here
|
|
351
|
+
// next();
|
|
352
|
+
// }
|
|
353
|
+
// );
|
|
354
|
+
|
|
355
|
+
// export const beforeCreateMany = catchAsync(
|
|
356
|
+
// async (${functionParams}) => {
|
|
357
|
+
// // Your logic here
|
|
358
|
+
// next();
|
|
359
|
+
// }
|
|
360
|
+
// );
|
|
361
|
+
|
|
362
|
+
// export const afterCreateMany = catchAsync(
|
|
363
|
+
// async (${functionParams}) => {
|
|
364
|
+
// // Your logic here
|
|
365
|
+
// next();
|
|
366
|
+
// }
|
|
367
|
+
// );
|
|
368
|
+
|
|
369
|
+
// export const beforeUpdateMany = catchAsync(
|
|
370
|
+
// async (${functionParams}) => {
|
|
371
|
+
// // Your logic here
|
|
372
|
+
// next();
|
|
373
|
+
// }
|
|
374
|
+
// );
|
|
375
|
+
|
|
376
|
+
// export const afterUpdateMany = catchAsync(
|
|
377
|
+
// async (${functionParams}) => {
|
|
378
|
+
// // Your logic here
|
|
379
|
+
// next();
|
|
380
|
+
// }
|
|
381
|
+
// );
|
|
382
|
+
|
|
383
|
+
// export const beforeDeleteMany = catchAsync(
|
|
384
|
+
// async (${functionParams}) => {
|
|
385
|
+
// // Your logic here
|
|
386
|
+
// next();
|
|
387
|
+
// }
|
|
388
|
+
// );
|
|
389
|
+
|
|
390
|
+
// export const afterDeleteMany = catchAsync(
|
|
391
|
+
// async (${functionParams}) => {
|
|
392
|
+
// // Your logic here
|
|
393
|
+
// next();
|
|
394
|
+
// }
|
|
395
|
+
// );
|
|
396
|
+
`;
|
|
199
397
|
}
|
|
200
398
|
//# sourceMappingURL=generators.js.map
|