arkos 1.1.67-beta → 1.1.69-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/app.js +1 -1
- package/dist/cjs/app.js.map +1 -1
- package/dist/cjs/exports/controllers/index.js +11 -0
- package/dist/cjs/exports/controllers/index.js.map +1 -0
- package/dist/cjs/exports/services/index.js +4 -4
- package/dist/cjs/exports/services/index.js.map +1 -1
- package/dist/cjs/modules/auth/auth.controller.js +6 -6
- package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
- package/dist/cjs/modules/auth/auth.service.js +11 -1
- package/dist/cjs/modules/auth/auth.service.js.map +1 -1
- package/dist/cjs/modules/base/base.controller.js +3 -3
- package/dist/cjs/modules/base/base.controller.js.map +1 -1
- package/dist/cjs/modules/base/base.service.js +19 -10
- package/dist/cjs/modules/base/base.service.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.controller.js +254 -0
- package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -0
- package/dist/cjs/modules/{file-uploader/file-uploader.router.js → file-upload/file-upload.router.js} +7 -6
- package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -0
- package/dist/cjs/modules/{file-uploader/file-uploader.service.js → file-upload/file-upload.service.js} +74 -39
- package/dist/cjs/modules/file-upload/file-upload.service.js.map +1 -0
- package/dist/cjs/modules/{file-uploader/utils/helpers/file-uploader.helpers.js → file-upload/utils/helpers/file-upload.helpers.js} +1 -1
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
- package/dist/cjs/types/arkos-config.js.map +1 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/cli/build.js +8 -5
- package/dist/cjs/utils/cli/build.js.map +1 -1
- package/dist/cjs/utils/cli/generate.js +170 -0
- package/dist/cjs/utils/cli/generate.js.map +1 -0
- package/dist/cjs/utils/cli/index.js +39 -1
- package/dist/cjs/utils/cli/index.js.map +1 -1
- package/dist/cjs/utils/cli/start.js +4 -2
- package/dist/cjs/utils/cli/start.js.map +1 -1
- package/dist/cjs/utils/cli/utils/generators.js +200 -0
- package/dist/cjs/utils/cli/utils/generators.js.map +1 -0
- package/dist/cjs/utils/cli/utils/helpers.js +17 -0
- package/dist/cjs/utils/cli/utils/helpers.js.map +1 -0
- package/dist/cjs/utils/helpers/global.helpers.js +2 -0
- package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/models.helpers.js +44 -6
- package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
- package/dist/es2020/app.js +1 -1
- package/dist/es2020/app.js.map +1 -1
- package/dist/es2020/exports/controllers/index.js +4 -0
- package/dist/es2020/exports/controllers/index.js.map +1 -0
- package/dist/es2020/exports/services/index.js +2 -2
- package/dist/es2020/exports/services/index.js.map +1 -1
- package/dist/es2020/modules/auth/auth.controller.js +6 -6
- package/dist/es2020/modules/auth/auth.controller.js.map +1 -1
- package/dist/es2020/modules/auth/auth.service.js +11 -1
- package/dist/es2020/modules/auth/auth.service.js.map +1 -1
- package/dist/es2020/modules/base/base.controller.js +3 -3
- package/dist/es2020/modules/base/base.controller.js.map +1 -1
- package/dist/es2020/modules/base/base.service.js +19 -10
- package/dist/es2020/modules/base/base.service.js.map +1 -1
- package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/es2020/modules/file-upload/file-upload.controller.js +249 -0
- package/dist/es2020/modules/file-upload/file-upload.controller.js.map +1 -0
- package/dist/es2020/modules/{file-uploader/file-uploader.router.js → file-upload/file-upload.router.js} +6 -5
- package/dist/es2020/modules/file-upload/file-upload.router.js.map +1 -0
- package/dist/es2020/modules/{file-uploader/file-uploader.service.js → file-upload/file-upload.service.js} +67 -32
- package/dist/es2020/modules/file-upload/file-upload.service.js.map +1 -0
- package/dist/es2020/modules/{file-uploader/utils/helpers/file-uploader.helpers.js → file-upload/utils/helpers/file-upload.helpers.js} +1 -1
- package/dist/es2020/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -0
- package/dist/es2020/types/arkos-config.js.map +1 -1
- package/dist/es2020/types/index.js.map +1 -1
- package/dist/es2020/utils/cli/build.js +8 -5
- package/dist/es2020/utils/cli/build.js.map +1 -1
- package/dist/es2020/utils/cli/generate.js +164 -0
- package/dist/es2020/utils/cli/generate.js.map +1 -0
- package/dist/es2020/utils/cli/index.js +38 -1
- package/dist/es2020/utils/cli/index.js.map +1 -1
- package/dist/es2020/utils/cli/start.js +4 -2
- package/dist/es2020/utils/cli/start.js.map +1 -1
- package/dist/es2020/utils/cli/utils/generators.js +197 -0
- package/dist/es2020/utils/cli/utils/generators.js.map +1 -0
- package/dist/es2020/utils/cli/utils/helpers.js +10 -0
- package/dist/es2020/utils/cli/utils/helpers.js.map +1 -0
- package/dist/es2020/utils/helpers/global.helpers.js +1 -0
- package/dist/es2020/utils/helpers/global.helpers.js.map +1 -1
- package/dist/es2020/utils/helpers/models.helpers.js +42 -6
- package/dist/es2020/utils/helpers/models.helpers.js.map +1 -1
- package/dist/types/exports/controllers/index.d.ts +3 -0
- package/dist/types/exports/services/index.d.ts +2 -2
- package/dist/types/modules/auth/auth.service.d.ts +1 -0
- package/dist/types/modules/base/base.service.d.ts +31 -12
- package/dist/types/modules/file-upload/file-upload.controller.d.ts +9 -0
- package/dist/types/modules/file-upload/file-upload.router.d.ts +3 -0
- package/dist/types/modules/{file-uploader/file-uploader.service.d.ts → file-upload/file-upload.service.d.ts} +8 -7
- package/dist/types/types/arkos-config.d.ts +2 -2
- package/dist/types/types/index.d.ts +1 -3
- package/dist/types/utils/cli/generate.d.ts +12 -0
- package/dist/types/utils/cli/index.d.ts +2 -1
- package/dist/types/utils/cli/utils/generators.d.ts +17 -0
- package/dist/types/utils/cli/utils/helpers.d.ts +2 -0
- package/dist/types/utils/helpers/global.helpers.d.ts +1 -0
- package/dist/types/utils/helpers/models.helpers.d.ts +6 -0
- package/package.json +6 -1
- package/dist/cjs/modules/file-uploader/file-uploader.controller.js +0 -149
- package/dist/cjs/modules/file-uploader/file-uploader.controller.js.map +0 -1
- package/dist/cjs/modules/file-uploader/file-uploader.router.js.map +0 -1
- package/dist/cjs/modules/file-uploader/file-uploader.service.js.map +0 -1
- package/dist/cjs/modules/file-uploader/utils/helpers/file-uploader.helpers.js.map +0 -1
- package/dist/es2020/modules/file-uploader/file-uploader.controller.js +0 -143
- package/dist/es2020/modules/file-uploader/file-uploader.controller.js.map +0 -1
- package/dist/es2020/modules/file-uploader/file-uploader.router.js.map +0 -1
- package/dist/es2020/modules/file-uploader/file-uploader.service.js.map +0 -1
- package/dist/es2020/modules/file-uploader/utils/helpers/file-uploader.helpers.js.map +0 -1
- package/dist/types/modules/file-uploader/file-uploader.controller.d.ts +0 -3
- package/dist/types/modules/file-uploader/file-uploader.router.d.ts +0 -3
- /package/dist/types/modules/{file-uploader/utils/helpers/file-uploader.helpers.d.ts → file-upload/utils/helpers/file-upload.helpers.d.ts} +0 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateCommand = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const generators_1 = require("./utils/generators");
|
|
10
|
+
const helpers_1 = require("./utils/helpers");
|
|
11
|
+
const change_case_helpers_1 = require("../helpers/change-case.helpers");
|
|
12
|
+
exports.generateCommand = {
|
|
13
|
+
controller: async (modelName, options) => {
|
|
14
|
+
if (!modelName) {
|
|
15
|
+
console.error("❌ Model name is required");
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
const { path: customPath = "src/modules" } = options;
|
|
19
|
+
const names = {
|
|
20
|
+
pascal: (0, change_case_helpers_1.pascalCase)(modelName),
|
|
21
|
+
camel: (0, change_case_helpers_1.camelCase)(modelName),
|
|
22
|
+
kebab: (0, change_case_helpers_1.kebabCase)(modelName),
|
|
23
|
+
};
|
|
24
|
+
const modulePath = path_1.default.join(process.cwd(), customPath, names.kebab);
|
|
25
|
+
const filePath = path_1.default.join(modulePath, `${names.kebab}.controller.ts`);
|
|
26
|
+
try {
|
|
27
|
+
(0, helpers_1.ensureDirectoryExists)(modulePath);
|
|
28
|
+
const content = (0, generators_1.generateTemplate)("controller", {
|
|
29
|
+
modelName: names,
|
|
30
|
+
imports: {
|
|
31
|
+
baseController: "arkos/controllers",
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
fs_1.default.writeFileSync(filePath, content);
|
|
35
|
+
console.log(`✅ Controller generated: ${filePath}`);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error(`❌ Failed to generate controller:`, error);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
service: async (modelName, options) => {
|
|
43
|
+
if (!modelName) {
|
|
44
|
+
console.error("❌ Model name is required");
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
const { path: customPath = "src/modules" } = options;
|
|
48
|
+
const names = {
|
|
49
|
+
pascal: (0, change_case_helpers_1.pascalCase)(modelName),
|
|
50
|
+
camel: (0, change_case_helpers_1.camelCase)(modelName),
|
|
51
|
+
kebab: (0, change_case_helpers_1.kebabCase)(modelName),
|
|
52
|
+
};
|
|
53
|
+
const modulePath = path_1.default.join(process.cwd(), customPath, names.kebab);
|
|
54
|
+
const filePath = path_1.default.join(modulePath, `${names.kebab}.service.ts`);
|
|
55
|
+
try {
|
|
56
|
+
(0, helpers_1.ensureDirectoryExists)(modulePath);
|
|
57
|
+
const content = (0, generators_1.generateTemplate)("service", {
|
|
58
|
+
modelName: names,
|
|
59
|
+
imports: {
|
|
60
|
+
baseService: "arkos/services",
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
fs_1.default.writeFileSync(filePath, content);
|
|
64
|
+
console.log(`✅ Service generated: ${filePath}`);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error(`❌ Failed to generate service:`, error);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
router: async (modelName, options) => {
|
|
72
|
+
if (!modelName) {
|
|
73
|
+
console.error("❌ Model name is required");
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const { path: customPath = "src/modules" } = options;
|
|
77
|
+
const names = {
|
|
78
|
+
pascal: (0, change_case_helpers_1.pascalCase)(modelName),
|
|
79
|
+
camel: (0, change_case_helpers_1.camelCase)(modelName),
|
|
80
|
+
kebab: (0, change_case_helpers_1.kebabCase)(modelName),
|
|
81
|
+
};
|
|
82
|
+
const modulePath = path_1.default.join(process.cwd(), customPath, names.kebab);
|
|
83
|
+
const filePath = path_1.default.join(modulePath, `${names.kebab}.router.ts`);
|
|
84
|
+
try {
|
|
85
|
+
(0, helpers_1.ensureDirectoryExists)(modulePath);
|
|
86
|
+
const content = (0, generators_1.generateTemplate)("router", {
|
|
87
|
+
modelName: names,
|
|
88
|
+
imports: {
|
|
89
|
+
baseRouter: "arkos",
|
|
90
|
+
controller: `./${names.kebab}.controller`,
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
fs_1.default.writeFileSync(filePath, content);
|
|
94
|
+
console.log(`✅ Router generated: ${filePath}`);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(`❌ Failed to generate router:`, error);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
middleware: async (middlewareName, options) => {
|
|
102
|
+
if (!middlewareName) {
|
|
103
|
+
console.error("❌ Middleware name is required");
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const { path: customPath = "src/modules" } = options;
|
|
107
|
+
const names = {
|
|
108
|
+
pascal: (0, change_case_helpers_1.pascalCase)(middlewareName),
|
|
109
|
+
camel: (0, change_case_helpers_1.camelCase)(middlewareName),
|
|
110
|
+
kebab: (0, change_case_helpers_1.kebabCase)(middlewareName),
|
|
111
|
+
};
|
|
112
|
+
const middlewarePath = path_1.default.join(process.cwd(), customPath);
|
|
113
|
+
const filePath = path_1.default.join(middlewarePath, `${names.kebab}.middlewares.ts`);
|
|
114
|
+
try {
|
|
115
|
+
(0, helpers_1.ensureDirectoryExists)(middlewarePath);
|
|
116
|
+
const content = (0, generators_1.generateTemplate)("middleware", { middlewareName: names });
|
|
117
|
+
fs_1.default.writeFileSync(filePath, content);
|
|
118
|
+
console.log(`✅ Middleware generated: ${filePath}`);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error(`❌ Failed to generate middleware:`, error);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
authConfig: async (modelName, options) => {
|
|
126
|
+
const { path: customPath = "src/modules" } = options;
|
|
127
|
+
const names = {
|
|
128
|
+
pascal: (0, change_case_helpers_1.pascalCase)(modelName),
|
|
129
|
+
camel: (0, change_case_helpers_1.camelCase)(modelName),
|
|
130
|
+
kebab: (0, change_case_helpers_1.kebabCase)(modelName),
|
|
131
|
+
};
|
|
132
|
+
const configPath = path_1.default.join(process.cwd(), customPath);
|
|
133
|
+
const filePath = path_1.default.join(configPath, `${names.kebab}.auth.ts`);
|
|
134
|
+
try {
|
|
135
|
+
(0, helpers_1.ensureDirectoryExists)(configPath);
|
|
136
|
+
const content = (0, generators_1.generateTemplate)("auth-config");
|
|
137
|
+
fs_1.default.writeFileSync(filePath, content);
|
|
138
|
+
console.log(`✅ Auth config generated: ${filePath}`);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.error(`❌ Failed to generate auth config:`, error);
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
queryOptions: async (modelName, options) => {
|
|
146
|
+
if (!modelName) {
|
|
147
|
+
console.error("❌ Model name is required");
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
const { path: customPath = "src/modules" } = options;
|
|
151
|
+
const names = {
|
|
152
|
+
pascal: (0, change_case_helpers_1.pascalCase)(modelName),
|
|
153
|
+
camel: (0, change_case_helpers_1.camelCase)(modelName),
|
|
154
|
+
kebab: (0, change_case_helpers_1.kebabCase)(modelName),
|
|
155
|
+
};
|
|
156
|
+
const configPath = path_1.default.join(process.cwd(), customPath);
|
|
157
|
+
const filePath = path_1.default.join(configPath, `${names.kebab}.query.ts`);
|
|
158
|
+
try {
|
|
159
|
+
(0, helpers_1.ensureDirectoryExists)(configPath);
|
|
160
|
+
const content = (0, generators_1.generateTemplate)("query-options", { modelName: names });
|
|
161
|
+
fs_1.default.writeFileSync(filePath, content);
|
|
162
|
+
console.log(`✅ Query config generated: ${filePath}`);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
console.error(`❌ Failed to generate query config:`, error);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/utils/cli/generate.ts"],"names":[],"mappings":"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","sourcesContent":["// src/utils/cli/generate.ts\nimport 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}\n\nexport const generateCommand = {\n controller: async (modelName: string, options: GenerateOptions) => {\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(`✅ Controller generated: ${filePath}`);\n } catch (error) {\n console.error(`❌ Failed to generate controller:`, error);\n process.exit(1);\n }\n },\n\n service: async (modelName: string, options: GenerateOptions) => {\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 (modelName: string, options: GenerateOptions) => {\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 (modelName: string, options: GenerateOptions) => {\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 (modelName: string, options: GenerateOptions) => {\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"]}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.startCommand = exports.devCommand = exports.buildCommand = exports.program = void 0;
|
|
6
|
+
exports.generateCommand = exports.startCommand = exports.devCommand = exports.buildCommand = exports.program = void 0;
|
|
7
7
|
exports.getVersion = getVersion;
|
|
8
8
|
const commander_1 = require("commander");
|
|
9
9
|
const build_1 = require("./build");
|
|
@@ -14,6 +14,8 @@ const dev_1 = require("./dev");
|
|
|
14
14
|
Object.defineProperty(exports, "devCommand", { enumerable: true, get: function () { return dev_1.devCommand; } });
|
|
15
15
|
const start_1 = require("./start");
|
|
16
16
|
Object.defineProperty(exports, "startCommand", { enumerable: true, get: function () { return start_1.startCommand; } });
|
|
17
|
+
const generate_1 = require("./generate");
|
|
18
|
+
Object.defineProperty(exports, "generateCommand", { enumerable: true, get: function () { return generate_1.generateCommand; } });
|
|
17
19
|
function getVersion() {
|
|
18
20
|
const packageJson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, "../../../../package.json"), "utf8"));
|
|
19
21
|
return packageJson.version || "1.0.0";
|
|
@@ -38,5 +40,41 @@ program
|
|
|
38
40
|
.option("-p, --port <number>", "Port number")
|
|
39
41
|
.option("-h, --host <host>", "Host to bind to")
|
|
40
42
|
.action(start_1.startCommand);
|
|
43
|
+
const add = program.command("add").description("Generate arkos components");
|
|
44
|
+
add
|
|
45
|
+
.command("controller")
|
|
46
|
+
.description("Generate a new controller")
|
|
47
|
+
.requiredOption("--model <name>", "Model name")
|
|
48
|
+
.option("--path <path>", "Custom path for the controller", "src/modules")
|
|
49
|
+
.action(generate_1.generateCommand.controller);
|
|
50
|
+
add
|
|
51
|
+
.command("service")
|
|
52
|
+
.description("Generate a new service")
|
|
53
|
+
.requiredOption("--model <name>", "Model name")
|
|
54
|
+
.option("--path <path>", "Custom path for the service", "src/modules")
|
|
55
|
+
.action(generate_1.generateCommand.service);
|
|
56
|
+
add
|
|
57
|
+
.command("router")
|
|
58
|
+
.description("Generate a new router")
|
|
59
|
+
.requiredOption("--model <name>", "Model name")
|
|
60
|
+
.option("--path <path>", "Custom path for the router", "src/modules")
|
|
61
|
+
.action(generate_1.generateCommand.router);
|
|
62
|
+
add
|
|
63
|
+
.command("auth-configs")
|
|
64
|
+
.description("Generate auth configuration")
|
|
65
|
+
.option("--path <path>", "Custom path for auth config", "src/modules")
|
|
66
|
+
.action(generate_1.generateCommand.authConfig);
|
|
67
|
+
add
|
|
68
|
+
.command("query-options")
|
|
69
|
+
.description("Generate prisma query options")
|
|
70
|
+
.requiredOption("--model <name>", "Model name")
|
|
71
|
+
.option("--path <path>", "Custom path for query options", "src/modules")
|
|
72
|
+
.action(generate_1.generateCommand.queryOptions);
|
|
73
|
+
add
|
|
74
|
+
.command("middlewares")
|
|
75
|
+
.description("Generate a new middleware file")
|
|
76
|
+
.requiredOption("--name <name>", "Middleware name")
|
|
77
|
+
.option("--path <path>", "Custom path for middleware", "src/modules")
|
|
78
|
+
.action(generate_1.generateCommand.middleware);
|
|
41
79
|
program.parse(process.argv);
|
|
42
80
|
//# sourceMappingURL=index.js.map
|
|
@@ -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\n// import { Command } from \"commander\";\n// import { buildCommand } from \"./build\";\n// import path from \"path\";\n// import fs from \"fs\";\n// import { devCommand } from \"./dev\";\n// import { startCommand } from \"./start\";\n\n// export 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\n// const program = new Command();\n\n// program.name(\"arkos\").description(\"Arkos.js CLI\").version(getVersion());\n\n// program\n// .command(\"build\")\n// .description(\"Build your Arkos project\")\n// .option(\"-m, --module <type>\", \"Module type (cjs or esm)\", \"cjs\")\n// .action(buildCommand);\n\n// program\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\n// program\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// program.parse(process.argv);\n\n// export { program, buildCommand, devCommand, startCommand };\n\n// 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 add = program.command(\"add\").description(\"Generate arkos components\");\n\nadd\n .command(\"controller\")\n .description(\"Generate a new controller\")\n .requiredOption(\"--model <name>\", \"Model name\")\n .option(\"--path <path>\", \"Custom path for the controller\", \"src/modules\")\n .action(generateCommand.controller);\n\nadd\n .command(\"service\")\n .description(\"Generate a new service\")\n .requiredOption(\"--model <name>\", \"Model name\")\n .option(\"--path <path>\", \"Custom path for the service\", \"src/modules\")\n .action(generateCommand.service);\n\nadd\n .command(\"router\")\n .description(\"Generate a new router\")\n .requiredOption(\"--model <name>\", \"Model name\")\n .option(\"--path <path>\", \"Custom path for the router\", \"src/modules\")\n .action(generateCommand.router);\n\nadd\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\nadd\n .command(\"query-options\")\n .description(\"Generate prisma query options\")\n .requiredOption(\"--model <name>\", \"Model name\")\n .option(\"--path <path>\", \"Custom path for query options\", \"src/modules\")\n .action(generateCommand.queryOptions);\n\nadd\n .command(\"middlewares\")\n .description(\"Generate a new middleware file\")\n .requiredOption(\"--name <name>\", \"Middleware name\")\n .option(\"--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"]}
|
|
@@ -41,7 +41,6 @@ async function startCommand(options = {}) {
|
|
|
41
41
|
const checkConfig = async () => {
|
|
42
42
|
try {
|
|
43
43
|
const { getArkosConfig } = await (0, global_helpers_1.importModule)("../../server");
|
|
44
|
-
console.info(getArkosConfig);
|
|
45
44
|
const config = getArkosConfig();
|
|
46
45
|
if (config && config.available) {
|
|
47
46
|
console.info("\n");
|
|
@@ -49,7 +48,10 @@ async function startCommand(options = {}) {
|
|
|
49
48
|
console.info(` - Local: http://${env.CLI_HOST || config.host || env.HOST || "localhost"}:${env.CLI_PORT || config.port || env.PORT || "8000"}`);
|
|
50
49
|
console.info(` - Environments: ${envFiles
|
|
51
50
|
?.join(", ")
|
|
52
|
-
.replaceAll(`${process.cwd()}/`, "")
|
|
51
|
+
.replaceAll(`${process.cwd()}/`, "")
|
|
52
|
+
.replaceAll(`/${process.cwd()}`, "")
|
|
53
|
+
.replaceAll(`/${process.cwd()}/`, "")
|
|
54
|
+
.replaceAll(`${process.cwd()}`, "")}\n`);
|
|
53
55
|
return true;
|
|
54
56
|
}
|
|
55
57
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/utils/cli/start.ts"],"names":[],"mappings":";;;;;AAiBA,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/utils/cli/start.ts"],"names":[],"mappings":"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","sourcesContent":["// src/utils/cli/start.ts\nimport path from \"path\";\nimport fs from \"fs\";\nimport { spawn } from \"child_process\";\nimport { getArkosConfig } from \"../../server\";\nimport { getVersion } from \".\";\nimport { loadEnvironmentVariables } from \"../dotenv.helpers\";\nimport { importModule } from \"../helpers/global.helpers\";\n\ninterface StartOptions {\n port?: string;\n host?: string;\n}\n\n/**\n * Production start command for the arkos CLI\n */\nexport async function startCommand(options: StartOptions = {}) {\n process.env.NODE_ENV = \"production\";\n const envFiles = loadEnvironmentVariables();\n\n try {\n const { port, host } = options;\n\n // Check for built app file\n const entryPoint = path.join(\".build\", \"src\", \"app.js\");\n\n if (!fs.existsSync(path.join(process.cwd(), entryPoint))) {\n console.error(\n `❌ Could not find built application entry point at ${entryPoint}`\n );\n process.exit(1);\n }\n\n // Set environment variables\n const env: { [x: string]: string } = {\n ...process.env,\n NODE_ENV: \"production\",\n ...(port && { CLI_PORT: port }),\n ...(host && { CLI_HOST: host }),\n ARKOS_BUILD: \"true\",\n };\n\n // Start the application\n const child = spawn(\"node\", [entryPoint], {\n stdio: \"inherit\",\n env,\n shell: true,\n });\n\n // Handle process exit\n process.on(\"SIGINT\", () => {\n if (child) {\n child.kill();\n }\n process.exit(0);\n });\n\n const checkConfig = async () => {\n try {\n const { getArkosConfig } = await importModule(\"../../server\");\n\n const config = getArkosConfig();\n\n if (config && config.available) {\n // Config is ready, display the info with actual values\n console.info(\"\\n\");\n console.info(` \\x1b[1m\\x1b[36m Arkos.js ${getVersion()}\\x1b[0m`);\n console.info(\n ` - Local: http://${\n env.CLI_HOST || config.host || env.HOST || \"localhost\"\n }:${env.CLI_PORT || config.port || env.PORT || \"8000\"}`\n );\n console.info(\n ` - Environments: ${envFiles\n ?.join(\", \")\n .replaceAll(`${process.cwd()}/`, \"\")\n .replaceAll(`/${process.cwd()}`, \"\")\n .replaceAll(`/${process.cwd()}/`, \"\")\n .replaceAll(`${process.cwd()}`, \"\")}\\n`\n );\n return true;\n }\n return false;\n } catch (error) {\n console.info(error);\n return false;\n }\n };\n\n // Try to get config periodically\n const waitForConfig = async () => {\n let attempts = 0;\n const maxAttempts = 15;\n\n while (attempts < maxAttempts) {\n const ready = await checkConfig();\n if (ready) break;\n\n await new Promise((resolve) => setTimeout(resolve, 300));\n attempts++;\n }\n\n // Fall back to defaults if config never became available\n if (attempts >= maxAttempts) {\n console.info(\"\\n\");\n console.info(` \\x1b[1m\\x1b[36m Arkos.js ${getVersion()}\\x1b[0m`);\n console.info(\n ` - Local: http://${\n env.CLI_HOST || env.HOST || \"localhost\"\n }:${env.CLI_PORT || env.PORT || \"8000\"}`\n );\n console.info(\n ` - Environments: ${envFiles\n ?.join(\", \")\n .replaceAll(`${process.cwd()}/`, \"\")}\\n`\n );\n }\n };\n\n waitForConfig();\n } catch (error) {\n console.error(\"❌ Production server failed to start:\", error);\n process.exit(1);\n }\n}\n"]}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateTemplate = generateTemplate;
|
|
4
|
+
function generateTemplate(type, options = {}) {
|
|
5
|
+
switch (type) {
|
|
6
|
+
case "controller":
|
|
7
|
+
return generateControllerTemplate(options);
|
|
8
|
+
case "service":
|
|
9
|
+
return generateServiceTemplate(options);
|
|
10
|
+
case "router":
|
|
11
|
+
return generateRouterTemplate(options);
|
|
12
|
+
case "auth":
|
|
13
|
+
return generateAuthConfigTemplate();
|
|
14
|
+
case "query":
|
|
15
|
+
return generateQueryConfigTemplate(options);
|
|
16
|
+
case "middleware":
|
|
17
|
+
return generateMiddlewareTemplate(options);
|
|
18
|
+
default:
|
|
19
|
+
throw new Error(`Unknown template type: ${type}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function generateControllerTemplate(options) {
|
|
23
|
+
const { modelName, imports } = options;
|
|
24
|
+
if (!modelName)
|
|
25
|
+
throw new Error("Model name is required for controller template");
|
|
26
|
+
return `import { BaseController } from "${imports?.baseController || "arkos/controllers"}";
|
|
27
|
+
|
|
28
|
+
class ${modelName.pascal}Controller extends BaseController {
|
|
29
|
+
constructor() {
|
|
30
|
+
super("${modelName.kebab}");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const ${modelName.camel}Controller = new ${modelName.pascal}Controller();
|
|
35
|
+
|
|
36
|
+
export default ${modelName.camel}Controller;
|
|
37
|
+
`;
|
|
38
|
+
}
|
|
39
|
+
function generateServiceTemplate(options) {
|
|
40
|
+
const { modelName, imports } = options;
|
|
41
|
+
if (!modelName)
|
|
42
|
+
throw new Error("Model name is required for service template");
|
|
43
|
+
return `import { BaseService } from "${imports?.baseService || "arkos/services"}";
|
|
44
|
+
|
|
45
|
+
class ${modelName.pascal}Service extends BaseService {
|
|
46
|
+
constructor() {
|
|
47
|
+
super("${modelName.kebab}");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Add your custom service methods here
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const ${modelName.camel}Service = new ${modelName.pascal}Service();
|
|
54
|
+
|
|
55
|
+
export default ${modelName.camel}Service;
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
function generateRouterTemplate(options) {
|
|
59
|
+
const { modelName, imports } = options;
|
|
60
|
+
if (!modelName)
|
|
61
|
+
throw new Error("Model name is required for router template");
|
|
62
|
+
return `import { Router } from "express";
|
|
63
|
+
import { createRoutes } from "${imports?.baseRouter || "arkos"}";
|
|
64
|
+
import ${modelName.camel}Controller from "${imports?.controller || `./${modelName.kebab}.controller`}";
|
|
65
|
+
|
|
66
|
+
const ${modelName.camel}Router = Router();
|
|
67
|
+
|
|
68
|
+
// Generate CRUD routes automatically
|
|
69
|
+
createRoutes(${modelName.camel}Router, ${modelName.camel}Controller);
|
|
70
|
+
|
|
71
|
+
// Add custom routes here
|
|
72
|
+
// ${modelName.camel}Router.get('/custom', ${modelName.camel}Controller.customMethod);
|
|
73
|
+
|
|
74
|
+
export default ${modelName.camel}Router;
|
|
75
|
+
`;
|
|
76
|
+
}
|
|
77
|
+
function generateAuthConfigTemplate() {
|
|
78
|
+
return `export const authConfig = {
|
|
79
|
+
jwt: {
|
|
80
|
+
secret: process.env.JWT_SECRET || 'your-secret-key',
|
|
81
|
+
expiresIn: process.env.JWT_EXPIRES_IN || '7d',
|
|
82
|
+
refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '30d',
|
|
83
|
+
},
|
|
84
|
+
bcrypt: {
|
|
85
|
+
saltRounds: parseInt(process.env.BCRYPT_SALT_ROUNDS || '12'),
|
|
86
|
+
},
|
|
87
|
+
cookie: {
|
|
88
|
+
name: process.env.COOKIE_NAME || 'arkos-token',
|
|
89
|
+
maxAge: parseInt(process.env.COOKIE_MAX_AGE || '604800000'), // 7 days
|
|
90
|
+
httpOnly: true,
|
|
91
|
+
secure: process.env.NODE_ENV === 'production',
|
|
92
|
+
sameSite: 'strict' as const,
|
|
93
|
+
},
|
|
94
|
+
rateLimit: {
|
|
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
|
+
};
|
|
108
|
+
|
|
109
|
+
export default authConfig;
|
|
110
|
+
`;
|
|
111
|
+
}
|
|
112
|
+
function generateQueryConfigTemplate(options) {
|
|
113
|
+
const { modelName } = options;
|
|
114
|
+
if (!modelName)
|
|
115
|
+
throw new Error("Model name is required for query config template");
|
|
116
|
+
return `export const ${modelName.camel}QueryOptions = {
|
|
117
|
+
// Define searchable fields
|
|
118
|
+
searchFields: [
|
|
119
|
+
// 'name',
|
|
120
|
+
// 'email',
|
|
121
|
+
// 'description',
|
|
122
|
+
],
|
|
123
|
+
|
|
124
|
+
// Define filterable fields
|
|
125
|
+
filterFields: [
|
|
126
|
+
// 'status',
|
|
127
|
+
// 'type',
|
|
128
|
+
// 'createdAt',
|
|
129
|
+
],
|
|
130
|
+
|
|
131
|
+
// Define sortable fields
|
|
132
|
+
sortFields: [
|
|
133
|
+
'id',
|
|
134
|
+
'createdAt',
|
|
135
|
+
'updatedAt',
|
|
136
|
+
// Add other sortable fields
|
|
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
|
+
`;
|
|
174
|
+
}
|
|
175
|
+
function generateMiddlewareTemplate(options) {
|
|
176
|
+
const { middlewareName } = options;
|
|
177
|
+
if (!middlewareName)
|
|
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);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export default ${middlewareName.camel}Middleware;
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=generators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/generators.ts"],"names":[],"mappings":"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","sourcesContent":["interface ModelName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface MiddlewareName {\n pascal: string;\n camel: string;\n kebab: string;\n}\n\ninterface TemplateOptions {\n modelName?: ModelName;\n middlewareName?: MiddlewareName;\n imports?: Record<string, string>;\n}\n\nexport function generateTemplate(\n type: string,\n options: TemplateOptions = {}\n): string {\n switch (type) {\n case \"controller\":\n return generateControllerTemplate(options);\n case \"service\":\n return generateServiceTemplate(options);\n case \"router\":\n return generateRouterTemplate(options);\n case \"auth\":\n return generateAuthConfigTemplate();\n case \"query\":\n return generateQueryConfigTemplate(options);\n case \"middleware\":\n return generateMiddlewareTemplate(options);\n default:\n throw new Error(`Unknown template type: ${type}`);\n }\n}\n\nfunction generateControllerTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName)\n throw new Error(\"Model name is required for controller template\");\n\n return `import { BaseController } from \"${\n imports?.baseController || \"arkos/controllers\"\n }\";\n \n class ${modelName.pascal}Controller extends BaseController {\n constructor() {\n super(\"${modelName.kebab}\");\n }\n }\n \n const ${modelName.camel}Controller = new ${modelName.pascal}Controller();\n \n export default ${modelName.camel}Controller;\n `;\n}\n\nfunction generateServiceTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName)\n throw new Error(\"Model name is required for service template\");\n\n return `import { BaseService } from \"${\n imports?.baseService || \"arkos/services\"\n }\";\n \n class ${modelName.pascal}Service extends BaseService {\n constructor() {\n super(\"${modelName.kebab}\");\n }\n \n // Add your custom service methods here\n }\n \n const ${modelName.camel}Service = new ${modelName.pascal}Service();\n \n export default ${modelName.camel}Service;\n `;\n}\n\nfunction generateRouterTemplate(options: TemplateOptions): string {\n const { modelName, imports } = options;\n\n if (!modelName) throw new Error(\"Model name is required for router template\");\n\n return `import { Router } from \"express\";\n import { createRoutes } from \"${imports?.baseRouter || \"arkos\"}\";\n import ${modelName.camel}Controller from \"${\n imports?.controller || `./${modelName.kebab}.controller`\n }\";\n \n const ${modelName.camel}Router = Router();\n \n // Generate CRUD routes automatically\n createRoutes(${modelName.camel}Router, ${modelName.camel}Controller);\n \n // Add custom routes here\n // ${modelName.camel}Router.get('/custom', ${\n modelName.camel\n }Controller.customMethod);\n \n export default ${modelName.camel}Router;\n `;\n}\n\nfunction generateAuthConfigTemplate(): string {\n return `export const authConfig = {\n jwt: {\n secret: process.env.JWT_SECRET || 'your-secret-key',\n expiresIn: process.env.JWT_EXPIRES_IN || '7d',\n refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '30d',\n },\n bcrypt: {\n saltRounds: parseInt(process.env.BCRYPT_SALT_ROUNDS || '12'),\n },\n cookie: {\n name: process.env.COOKIE_NAME || 'arkos-token',\n maxAge: parseInt(process.env.COOKIE_MAX_AGE || '604800000'), // 7 days\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'strict' as const,\n },\n rateLimit: {\n windowMs: parseInt(process.env.RATE_LIMIT_WINDOW || '900000'), // 15 minutes\n max: parseInt(process.env.RATE_LIMIT_MAX || '5'), // 5 attempts\n },\n email: {\n verification: {\n required: process.env.EMAIL_VERIFICATION_REQUIRED === 'true',\n expiresIn: process.env.EMAIL_VERIFICATION_EXPIRES_IN || '24h',\n },\n passwordReset: {\n expiresIn: process.env.PASSWORD_RESET_EXPIRES_IN || '1h',\n },\n },\n };\n \n export default authConfig;\n `;\n}\n\nfunction generateQueryConfigTemplate(options: TemplateOptions): string {\n const { modelName } = options;\n\n if (!modelName)\n throw new Error(\"Model name is required for query config template\");\n\n return `export const ${modelName.camel}QueryOptions = {\n // Define searchable fields\n searchFields: [\n // 'name',\n // 'email',\n // 'description',\n ],\n \n // Define filterable fields\n filterFields: [\n // 'status',\n // 'type',\n // 'createdAt',\n ],\n \n // Define sortable fields\n sortFields: [\n 'id',\n 'createdAt',\n 'updatedAt',\n // Add other sortable fields\n ],\n \n // Define relations to include\n include: {\n // relationName: true,\n // relationName: {\n // select: {\n // id: true,\n // name: true,\n // }\n // }\n },\n \n // Define fields to select (if not all)\n select: {\n // id: true,\n // name: true,\n // email: true,\n // createdAt: true,\n // updatedAt: true,\n },\n \n // Default pagination\n pagination: {\n defaultLimit: 10,\n maxLimit: 100,\n },\n \n // Default sorting\n defaultSort: {\n field: 'createdAt',\n order: 'desc' as const,\n },\n };\n \n export default ${modelName.camel}QueryOptions;\n `;\n}\n\nfunction generateMiddlewareTemplate(options: TemplateOptions): string {\n const { middlewareName } = options;\n\n if (!middlewareName)\n throw new Error(\"Middleware name is required for middleware template\");\n\n return `import { Request, Response, NextFunction } from 'express';\n \n export const ${middlewareName.camel}Middleware = (\n req: Request,\n res: Response,\n next: NextFunction\n ): void => {\n try {\n // Add your middleware logic here\n console.log(\\`${middlewareName.pascal} middleware executed for \\${req.method} \\${req.path}\\`);\n \n // Continue to next middleware\n next();\n } catch (error) {\n next(error);\n }\n };\n \n export default ${middlewareName.camel}Middleware;\n `;\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ensureDirectoryExists = ensureDirectoryExists;
|
|
7
|
+
exports.fileExists = fileExists;
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
function ensureDirectoryExists(dirPath) {
|
|
10
|
+
if (!fs_1.default.existsSync(dirPath)) {
|
|
11
|
+
fs_1.default.mkdirSync(dirPath, { recursive: true });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function fileExists(filePath) {
|
|
15
|
+
return fs_1.default.existsSync(filePath);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../src/utils/cli/utils/helpers.ts"],"names":[],"mappings":";;;;;AA4BA,sDAIC;AAED,gCAEC;AAnCD,4CAAoB;AA2BpB,SAAgB,qBAAqB,CAAC,OAAe;IACnD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,QAAgB;IACzC,OAAO,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC","sourcesContent":["// src/utils/cli/utils.ts\nimport fs from \"fs\";\nimport path from \"path\";\n\n// export function toPascalCase(str: string): string {\n// return str\n// .replace(/[\\W_]/g, \" \")\n// .replace(/\\s+/g, \" \")\n// .trim()\n// .split(\" \")\n// .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n// .join(\"\");\n// }\n\n// export function toCamelCase(str: string): string {\n// const pascal = toPascalCase(str);\n// return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n// }\n\n// export function toKebabCase(str: string): string {\n// return str\n// .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n// .replace(/[\\W_]/g, \"-\")\n// .replace(/-+/g, \"-\")\n// .replace(/^-|-$/g, \"\")\n// .toLowerCase();\n// }\n\nexport function ensureDirectoryExists(dirPath: string): void {\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n}\n\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\n// export function getProjectType(): \"typescript\" | \"javascript\" {\n// const tsConfigExists = fileExists(path.join(process.cwd(), \"tsconfig.json\"));\n// const packageJson = path.join(process.cwd(), \"package.json\");\n\n// if (tsConfigExists) return \"typescript\";\n\n// if (fileExists(packageJson)) {\n// try {\n// const pkg = JSON.parse(fs.readFileSync(packageJson, \"utf8\"));\n// if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript) {\n// return \"typescript\";\n// }\n// } catch {\n// // ignore\n// }\n// }\n\n// return \"javascript\";\n// }\n"]}
|
|
@@ -34,7 +34,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.importModule = importModule;
|
|
37
|
+
exports.cleanProcessCwd = cleanProcessCwd;
|
|
37
38
|
async function importModule(path) {
|
|
38
39
|
return await Promise.resolve(`${path}`).then(s => __importStar(require(s)));
|
|
39
40
|
}
|
|
41
|
+
function cleanProcessCwd() { }
|
|
40
42
|
//# sourceMappingURL=global.helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/global.helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAEC;
|
|
1
|
+
{"version":3,"file":"global.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/global.helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAEC;AAED,0CAAoC;AAJ7B,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,OAAO,yBAAa,IAAI,uCAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,eAAe,KAAI,CAAC","sourcesContent":["export async function importModule(path: string) {\n return await import(path);\n}\n\nexport function cleanProcessCwd() {}\n"]}
|