exisjs 0.9.2 → 0.10.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +3 -0
  2. package/bin/exis.js +76 -1
  3. package/dist/config/types.d.ts +11 -2
  4. package/dist/config/types.d.ts.map +1 -1
  5. package/dist/docs/content/README.md +1 -0
  6. package/dist/docs/content/cli/commands.mdx +23 -1
  7. package/dist/docs/content/cli/usage.mdx +2 -1
  8. package/dist/docs/content/config.mdx +47 -3
  9. package/dist/docs/content/deployment.mdx +163 -0
  10. package/dist/docs/content/installation.mdx +1 -1
  11. package/dist/docs/content/introduction.mdx +3 -0
  12. package/dist/docs/content/validation.mdx +1 -1
  13. package/dist/docs/reference/config.mdx +2 -1
  14. package/dist/docs/reference/validator.mdx +4 -0
  15. package/dist/internal.d.ts +16 -0
  16. package/dist/internal.d.ts.map +1 -0
  17. package/dist/internal.js +45 -0
  18. package/dist/internal.js.map +1 -0
  19. package/dist/{cli → lib}/resolve-aliases.d.ts.map +1 -1
  20. package/dist/{cli → lib}/resolve-aliases.js.map +1 -1
  21. package/dist/lib/start-command.d.ts +11 -0
  22. package/dist/lib/start-command.d.ts.map +1 -0
  23. package/dist/lib/start-command.js +79 -0
  24. package/dist/lib/start-command.js.map +1 -0
  25. package/dist/lib/start-server.js +4 -2
  26. package/dist/lib/start-server.js.map +1 -1
  27. package/dist/middleware/backpressure.d.ts +5 -0
  28. package/dist/middleware/backpressure.d.ts.map +1 -1
  29. package/dist/middleware/backpressure.js +66 -36
  30. package/dist/middleware/backpressure.js.map +1 -1
  31. package/dist/router/route-scanner.d.ts.map +1 -1
  32. package/dist/router/route-scanner.js +19 -20
  33. package/dist/router/route-scanner.js.map +1 -1
  34. package/dist/server/app.d.ts.map +1 -1
  35. package/dist/server/app.js +24 -1
  36. package/dist/server/app.js.map +1 -1
  37. package/dist/server/bootstrapper.d.ts.map +1 -1
  38. package/dist/server/bootstrapper.js +3 -1
  39. package/dist/server/bootstrapper.js.map +1 -1
  40. package/dist/server/cluster.d.ts.map +1 -1
  41. package/dist/server/cluster.js +3 -0
  42. package/dist/server/cluster.js.map +1 -1
  43. package/dist/server/metrics.d.ts +43 -0
  44. package/dist/server/metrics.d.ts.map +1 -0
  45. package/dist/server/metrics.js +254 -0
  46. package/dist/server/metrics.js.map +1 -0
  47. package/dist/utils/logger.d.ts.map +1 -1
  48. package/dist/utils/logger.js +31 -3
  49. package/dist/utils/logger.js.map +1 -1
  50. package/dist/validator/builder.d.ts +20 -16
  51. package/dist/validator/builder.d.ts.map +1 -1
  52. package/dist/validator/builder.js +21 -1
  53. package/dist/validator/builder.js.map +1 -1
  54. package/dist/validator/engine.d.ts.map +1 -1
  55. package/dist/validator/engine.js +8 -1
  56. package/dist/validator/engine.js.map +1 -1
  57. package/dist/validator/index.d.ts +4 -1
  58. package/dist/validator/index.d.ts.map +1 -1
  59. package/dist/validator/index.js +5 -1
  60. package/dist/validator/index.js.map +1 -1
  61. package/dist/validator/tex.d.ts +1 -1
  62. package/dist/validator/tex.d.ts.map +1 -1
  63. package/dist/validator/types.d.ts +7 -0
  64. package/dist/validator/types.d.ts.map +1 -1
  65. package/package.json +81 -9
  66. package/dist/cli/commands/build.d.ts +0 -11
  67. package/dist/cli/commands/build.d.ts.map +0 -1
  68. package/dist/cli/commands/build.js +0 -344
  69. package/dist/cli/commands/build.js.map +0 -1
  70. package/dist/cli/commands/clean.d.ts +0 -5
  71. package/dist/cli/commands/clean.d.ts.map +0 -1
  72. package/dist/cli/commands/clean.js +0 -30
  73. package/dist/cli/commands/clean.js.map +0 -1
  74. package/dist/cli/commands/dev.d.ts +0 -21
  75. package/dist/cli/commands/dev.d.ts.map +0 -1
  76. package/dist/cli/commands/dev.js +0 -842
  77. package/dist/cli/commands/dev.js.map +0 -1
  78. package/dist/cli/commands/doctor.d.ts +0 -2
  79. package/dist/cli/commands/doctor.d.ts.map +0 -1
  80. package/dist/cli/commands/doctor.js +0 -228
  81. package/dist/cli/commands/doctor.js.map +0 -1
  82. package/dist/cli/commands/exports.d.ts +0 -2
  83. package/dist/cli/commands/exports.d.ts.map +0 -1
  84. package/dist/cli/commands/exports.js +0 -48
  85. package/dist/cli/commands/exports.js.map +0 -1
  86. package/dist/cli/commands/generate.d.ts +0 -33
  87. package/dist/cli/commands/generate.d.ts.map +0 -1
  88. package/dist/cli/commands/generate.js +0 -469
  89. package/dist/cli/commands/generate.js.map +0 -1
  90. package/dist/cli/commands/init.d.ts +0 -2
  91. package/dist/cli/commands/init.d.ts.map +0 -1
  92. package/dist/cli/commands/init.js +0 -37
  93. package/dist/cli/commands/init.js.map +0 -1
  94. package/dist/cli/commands/repl.d.ts +0 -6
  95. package/dist/cli/commands/repl.d.ts.map +0 -1
  96. package/dist/cli/commands/repl.js +0 -75
  97. package/dist/cli/commands/repl.js.map +0 -1
  98. package/dist/cli/commands/run.d.ts +0 -7
  99. package/dist/cli/commands/run.d.ts.map +0 -1
  100. package/dist/cli/commands/run.js +0 -101
  101. package/dist/cli/commands/run.js.map +0 -1
  102. package/dist/cli/commands/start.d.ts +0 -8
  103. package/dist/cli/commands/start.d.ts.map +0 -1
  104. package/dist/cli/commands/start.js +0 -155
  105. package/dist/cli/commands/start.js.map +0 -1
  106. package/dist/cli/commands/test.d.ts +0 -8
  107. package/dist/cli/commands/test.d.ts.map +0 -1
  108. package/dist/cli/commands/test.js +0 -165
  109. package/dist/cli/commands/test.js.map +0 -1
  110. package/dist/cli/index.d.ts +0 -3
  111. package/dist/cli/index.d.ts.map +0 -1
  112. package/dist/cli/index.js +0 -268
  113. package/dist/cli/index.js.map +0 -1
  114. package/dist/cli/manifest.d.ts +0 -4
  115. package/dist/cli/manifest.d.ts.map +0 -1
  116. package/dist/cli/manifest.js +0 -489
  117. package/dist/cli/manifest.js.map +0 -1
  118. package/dist/cli/routes.d.ts +0 -17
  119. package/dist/cli/routes.d.ts.map +0 -1
  120. package/dist/cli/routes.js +0 -317
  121. package/dist/cli/routes.js.map +0 -1
  122. package/dist/cli/utils.d.ts +0 -24
  123. package/dist/cli/utils.d.ts.map +0 -1
  124. package/dist/cli/utils.js +0 -54
  125. package/dist/cli/utils.js.map +0 -1
  126. package/dist/lib/inspect-routes.d.ts +0 -2
  127. package/dist/lib/inspect-routes.d.ts.map +0 -1
  128. package/dist/lib/inspect-routes.js +0 -150
  129. package/dist/lib/inspect-routes.js.map +0 -1
  130. package/dist/lib/start-repl.d.ts +0 -2
  131. package/dist/lib/start-repl.d.ts.map +0 -1
  132. package/dist/lib/start-repl.js +0 -120
  133. package/dist/lib/start-repl.js.map +0 -1
  134. /package/dist/{cli → lib}/resolve-aliases.d.ts +0 -0
  135. /package/dist/{cli → lib}/resolve-aliases.js +0 -0
@@ -1,469 +0,0 @@
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.generateCrud = void 0;
7
- exports.generateController = generateController;
8
- exports.generateModel = generateModel;
9
- exports.generateService = generateService;
10
- exports.generateSchema = generateSchema;
11
- exports.generateBoundary = generateBoundary;
12
- exports.generateErrorHandler = generateErrorHandler;
13
- exports.generateCronJob = generateCronJob;
14
- exports.generateResource = generateResource;
15
- exports.generatePlugin = generatePlugin;
16
- exports.generateMiddleware = generateMiddleware;
17
- exports.generateTest = generateTest;
18
- const promises_1 = __importDefault(require("node:fs/promises"));
19
- const node_path_1 = __importDefault(require("node:path"));
20
- const utils_1 = require("../utils");
21
- function toPascalCase(name) {
22
- return name
23
- .split(/[/_-]+/)
24
- .filter(Boolean)
25
- .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
26
- .join('');
27
- }
28
- async function ensureDir(dir) {
29
- try {
30
- await promises_1.default.mkdir(dir, { recursive: true });
31
- }
32
- catch {
33
- (0, utils_1.error)(`Could not create directory ${dir}`);
34
- process.exit(1);
35
- }
36
- }
37
- async function generateController(name, cwd = process.cwd(), options = {}) {
38
- const targetDir = node_path_1.default.join(cwd, 'src', 'http', name);
39
- await ensureDir(targetDir);
40
- const filename = options.named ? `${name}.route.ts` : 'route.ts';
41
- const filePath = node_path_1.default.join(targetDir, filename);
42
- try {
43
- const stat = await promises_1.default.stat(filePath);
44
- if (stat.isFile()) {
45
- (0, utils_1.error)(`Route already exists at ${filePath}`);
46
- process.exit(1);
47
- }
48
- }
49
- catch {
50
- // File doesn't exist, proceed
51
- }
52
- const capitalizedName = toPascalCase(name);
53
- const code = options.oop
54
- ? `import { Controller, Get } from 'exisjs/decorators'\n\n@Controller('/${name}')\nexport default class ${capitalizedName}Controller {\n @Get('/')\n async list() {\n return { success: true, data: [] }\n }\n}\n`
55
- : `import { controller, route } from 'exisjs/router'\n\nexport default controller({\n list: route.get('/', {\n handle: async () => {\n return { success: true, data: [] }\n }\n })\n})\n`;
56
- await promises_1.default.writeFile(filePath, code);
57
- (0, utils_1.success)(`Generated ${options.oop ? 'OOP' : 'Functional'} route in src/http/${name}/${filename}`);
58
- }
59
- async function generateModel(name, cwd = process.cwd(), options = {}) {
60
- const targetDir = node_path_1.default.join(cwd, 'src', 'models');
61
- await ensureDir(targetDir);
62
- const capitalizedName = toPascalCase(name);
63
- const filename = options.named ? `${name}.model.ts` : `${capitalizedName}.ts`;
64
- const code = `export interface ${capitalizedName} {
65
- id: string
66
- name: string
67
- description?: string
68
- createdAt?: Date
69
- updatedAt?: Date
70
- }
71
-
72
- export type Create${capitalizedName}Input = Omit<${capitalizedName}, 'id' | 'createdAt' | 'updatedAt'>
73
- export type Update${capitalizedName}Input = Partial<Create${capitalizedName}Input>
74
- `;
75
- await promises_1.default.writeFile(node_path_1.default.join(targetDir, filename), code);
76
- (0, utils_1.success)(`Generated database-agnostic model in src/models/${filename}`);
77
- }
78
- async function generateService(name, cwd = process.cwd(), options = {}) {
79
- const targetDir = node_path_1.default.join(cwd, 'src', 'http', name);
80
- await ensureDir(targetDir);
81
- const capitalizedName = toPascalCase(name);
82
- const filename = options.named ? `${name}.service.ts` : 'service.ts';
83
- const schemaFile = options.named ? `./${name}.schema` : './schema';
84
- const code = options.oop
85
- ? `import { Injectable } from 'exisjs/decorators'
86
- import { paginate, getPaginationSkip } from 'exisjs'
87
- import type { Create${capitalizedName}Dto, Update${capitalizedName}Dto } from '${schemaFile}'
88
-
89
- @Injectable({ scope: 'singleton' })
90
- export class ${capitalizedName}Service {
91
- async list(query: { page?: number; limit?: number } = {}) {
92
- const { skip, limit, page } = getPaginationSkip(query)
93
- // Add your database query logic here (PostgreSQL, MySQL, SQLite, MongoDB, etc.)
94
- const items: any[] = []
95
- const total = 0
96
- return paginate(items, total, { page, limit })
97
- }
98
-
99
- async getById(id: string) {
100
- // Fetch record by id from your database
101
- return { id, name: '${capitalizedName} #' + id }
102
- }
103
-
104
- async create(data: Create${capitalizedName}Dto) {
105
- // Insert record into your database
106
- return { id: String(Date.now()), ...data }
107
- }
108
-
109
- async update(id: string, data: Update${capitalizedName}Dto) {
110
- // Update record in your database
111
- return { id, ...data }
112
- }
113
-
114
- async delete(id: string) {
115
- // Delete record from your database
116
- return true
117
- }
118
- }
119
- `
120
- : `import { paginate, getPaginationSkip } from 'exisjs'
121
- import type { Create${capitalizedName}Dto, Update${capitalizedName}Dto } from '${schemaFile}'
122
-
123
- export async function get${capitalizedName}s(query: { page?: number; limit?: number } = {}) {
124
- const { skip, limit, page } = getPaginationSkip(query)
125
- // Add your database query logic here (PostgreSQL, MySQL, SQLite, MongoDB, etc.)
126
- const items: any[] = []
127
- const total = 0
128
- return paginate(items, total, { page, limit })
129
- }
130
-
131
- export async function get${capitalizedName}ById(id: string) {
132
- // Fetch record by id from your database
133
- return { id, name: '${capitalizedName} #' + id }
134
- }
135
-
136
- export async function create${capitalizedName}(data: Create${capitalizedName}Dto) {
137
- // Insert record into your database
138
- return { id: String(Date.now()), ...data }
139
- }
140
-
141
- export async function update${capitalizedName}(id: string, data: Update${capitalizedName}Dto) {
142
- // Update record in your database
143
- return { id, ...data }
144
- }
145
-
146
- export async function delete${capitalizedName}(id: string) {
147
- // Delete record from your database
148
- return true
149
- }
150
- `;
151
- await promises_1.default.writeFile(node_path_1.default.join(targetDir, filename), code);
152
- (0, utils_1.success)(`Generated ${options.oop ? 'OOP' : 'Functional'} service in src/http/${name}/${filename}`);
153
- }
154
- async function generateSchema(name, cwd = process.cwd(), options = {}) {
155
- const targetDir = node_path_1.default.join(cwd, 'src', 'http', name);
156
- await ensureDir(targetDir);
157
- const capitalizedName = toPascalCase(name);
158
- const filename = options.named ? `${name}.schema.ts` : 'schema.ts';
159
- const code = `import { tex } from 'exisjs/validator'
160
- import type { ResolveSchema } from 'exisjs/validator'
161
-
162
- export const ${capitalizedName}ParamsSchema = tex.object({
163
- id: tex.string(),
164
- })
165
-
166
- export const ${capitalizedName}PaginationSchema = tex.pagination({
167
- defaultLimit: 20,
168
- maxLimit: 100,
169
- })
170
-
171
- export const Create${capitalizedName}Schema = tex.object({
172
- name: tex.string({ min: 1 }),
173
- description: tex.string({ optional: true }),
174
- })
175
-
176
- export const Update${capitalizedName}Schema = tex.object({
177
- name: tex.string({ min: 1, optional: true }),
178
- description: tex.string({ optional: true }),
179
- })
180
-
181
- export type ${capitalizedName}ParamsDto = ResolveSchema<typeof ${capitalizedName}ParamsSchema>
182
- export type Create${capitalizedName}Dto = ResolveSchema<typeof Create${capitalizedName}Schema>
183
- export type Update${capitalizedName}Dto = ResolveSchema<typeof Update${capitalizedName}Schema>
184
- `;
185
- await promises_1.default.writeFile(node_path_1.default.join(targetDir, filename), code);
186
- (0, utils_1.success)(`Generated validation schema in src/http/${name}/${filename}`);
187
- }
188
- async function generateBoundary(name, cwd = process.cwd(), options = {}) {
189
- const targetDir = node_path_1.default.join(cwd, 'src', 'http', name);
190
- await ensureDir(targetDir);
191
- const filename = options.named ? `${name}.boundary.ts` : 'boundary.ts';
192
- const filePath = node_path_1.default.join(targetDir, filename);
193
- const capitalizedName = toPascalCase(name);
194
- const code = options.oop
195
- ? `import { Boundary } from 'exisjs/decorators'\n\n@Boundary()\nexport default class ${capitalizedName}Boundary {}\n`
196
- : `import { defineBoundary } from 'exisjs/router'\n\nexport default defineBoundary({\n // middlewares: [],\n})\n`;
197
- await promises_1.default.writeFile(filePath, code);
198
- (0, utils_1.success)(`Generated boundary in src/http/${name}/${filename}`);
199
- }
200
- async function generateErrorHandler(cwd = process.cwd(), options = {}) {
201
- const targetDir = node_path_1.default.join(cwd, 'src', 'http');
202
- await ensureDir(targetDir);
203
- const filePath = node_path_1.default.join(targetDir, 'error.ts');
204
- const code = options.oop
205
- ? `import type { Request, Response } from 'exisjs'
206
-
207
- /**
208
- * Global Exception Handler for ExisJS (OOP Paradigm)
209
- * Auto-mounted by the framework to catch unhandled errors and format error responses.
210
- */
211
- export default class GlobalErrorHandler {
212
- onError(err: any, req: Request, res: Response) {
213
- const status = err.statusCode || err.status || 500
214
- res.status(status).json({
215
- success: false,
216
- error: {
217
- message: err.message || 'Internal Server Error',
218
- code: err.code || 'INTERNAL_ERROR',
219
- },
220
- })
221
- }
222
- }
223
- `
224
- : `import type { Request, Response } from 'exisjs'
225
-
226
- /**
227
- * Global Exception Handler for ExisJS
228
- * Auto-mounted by the framework to catch unhandled errors and format error responses.
229
- */
230
- export function onError(err: any, req: Request, res: Response) {
231
- const status = err.statusCode || err.status || 500
232
- res.status(status).json({
233
- success: false,
234
- error: {
235
- message: err.message || 'Internal Server Error',
236
- code: err.code || 'INTERNAL_ERROR',
237
- },
238
- })
239
- }
240
- `;
241
- await promises_1.default.writeFile(filePath, code);
242
- (0, utils_1.success)('Generated global exception handler in src/http/error.ts');
243
- }
244
- async function generateCronJob(name, cwd = process.cwd(), options = {}) {
245
- const targetDir = node_path_1.default.join(cwd, 'src', 'cron');
246
- await ensureDir(targetDir);
247
- const filename = `${name.toLowerCase()}.ts`;
248
- const filePath = node_path_1.default.join(targetDir, filename);
249
- const capitalizedName = toPascalCase(name);
250
- const code = options.oop
251
- ? `import { Injectable, Cron, CronExpression } from 'exisjs/decorators'
252
-
253
- @Injectable()
254
- export default class ${capitalizedName}Job {
255
- @Cron(CronExpression.EVERY_HOUR, {
256
- name: '${name.toLowerCase()}',
257
- preventOverlap: true,
258
- })
259
- async handle() {
260
- console.log('[cron] Executing ${capitalizedName}Job')
261
- }
262
- }
263
- `
264
- : `import { cron, CronExpression } from 'exisjs/cron'
265
-
266
- export default cron({
267
- name: '${name.toLowerCase()}',
268
- schedule: CronExpression.EVERY_HOUR,
269
- preventOverlap: true,
270
- async run({ log }) {
271
- log.info('[cron] Executing ${name.toLowerCase()} job')
272
- },
273
- })
274
- `;
275
- await promises_1.default.writeFile(filePath, code);
276
- (0, utils_1.success)(`Generated cron job in src/cron/${filename}`);
277
- }
278
- async function generateResource(name, cwd = process.cwd(), options = {}) {
279
- const targetDir = node_path_1.default.join(cwd, 'src', 'http', name);
280
- await ensureDir(targetDir);
281
- const capitalizedName = toPascalCase(name);
282
- const schemaFile = options.named ? `./${name}.schema` : './schema';
283
- const serviceFile = options.named ? `./${name}.service` : './service';
284
- const routeFilename = options.named ? `${name}.route.ts` : 'route.ts';
285
- const schemaFilename = options.named ? `${name}.schema.ts` : 'schema.ts';
286
- const serviceFilename = options.named ? `${name}.service.ts` : 'service.ts';
287
- const modelFilename = `${capitalizedName}.ts`;
288
- // 1. Generate model
289
- await generateModel(name, cwd, options);
290
- // 2. Generate schema
291
- await generateSchema(name, cwd, options);
292
- // 3. Generate service
293
- await generateService(name, cwd, options);
294
- // 4. Generate full CRUD route
295
- const routeCode = options.oop
296
- ? `import { Controller, Get, Post, Patch, Delete, Body, Param, Query } from 'exisjs/decorators'
297
- import { ${capitalizedName}Service } from '${serviceFile}'
298
- import {
299
- Create${capitalizedName}Schema,
300
- Update${capitalizedName}Schema,
301
- ${capitalizedName}ParamsSchema,
302
- ${capitalizedName}PaginationSchema,
303
- } from '${schemaFile}'
304
- import type { Create${capitalizedName}Dto, Update${capitalizedName}Dto } from '${schemaFile}'
305
-
306
- @Controller('/${name}')
307
- export default class ${capitalizedName}Controller {
308
- constructor(private readonly service: ${capitalizedName}Service) {}
309
-
310
- @Get('/', { query: ${capitalizedName}PaginationSchema })
311
- async list(@Query() query: any) {
312
- const result = await this.service.list(query)
313
- return { success: true, ...result }
314
- }
315
-
316
- @Get('/:id', { params: ${capitalizedName}ParamsSchema })
317
- async getById(@Param('id') id: string) {
318
- const item = await this.service.getById(id)
319
- if (!item) return { success: false, error: 'Not found' }
320
- return { success: true, data: item }
321
- }
322
-
323
- @Post('/', { body: Create${capitalizedName}Schema })
324
- async create(@Body() body: Create${capitalizedName}Dto) {
325
- const item = await this.service.create(body)
326
- return { success: true, data: item }
327
- }
328
-
329
- @Patch('/:id', { params: ${capitalizedName}ParamsSchema, body: Update${capitalizedName}Schema })
330
- async update(@Param('id') id: string, @Body() body: Update${capitalizedName}Dto) {
331
- const item = await this.service.update(id, body)
332
- return { success: true, data: item }
333
- }
334
-
335
- @Delete('/:id', { params: ${capitalizedName}ParamsSchema })
336
- async delete(@Param('id') id: string) {
337
- await this.service.delete(id)
338
- return { success: true, message: 'Deleted successfully' }
339
- }
340
- }
341
- `
342
- : `import { controller, route } from 'exisjs/router'
343
- import * as service from '${serviceFile}'
344
- import {
345
- Create${capitalizedName}Schema,
346
- Update${capitalizedName}Schema,
347
- ${capitalizedName}ParamsSchema,
348
- ${capitalizedName}PaginationSchema,
349
- } from '${schemaFile}'
350
-
351
- export default controller({
352
- list: route.get('/', {
353
- query: ${capitalizedName}PaginationSchema,
354
- handle: async ({ query }) => {
355
- const result = await service.get${capitalizedName}s(query)
356
- return { success: true, ...result }
357
- },
358
- }),
359
-
360
- getById: route.get('/:id', {
361
- params: ${capitalizedName}ParamsSchema,
362
- handle: async ({ params }) => {
363
- const item = await service.get${capitalizedName}ById(params.id)
364
- if (!item) return { success: false, error: 'Not found' }
365
- return { success: true, data: item }
366
- },
367
- }),
368
-
369
- create: route.post('/', {
370
- body: Create${capitalizedName}Schema,
371
- handle: async ({ body }) => {
372
- const item = await service.create${capitalizedName}(body)
373
- return { success: true, data: item }
374
- },
375
- }),
376
-
377
- update: route.patch('/:id', {
378
- params: ${capitalizedName}ParamsSchema,
379
- body: Update${capitalizedName}Schema,
380
- handle: async ({ params, body }) => {
381
- const item = await service.update${capitalizedName}(params.id, body)
382
- return { success: true, data: item }
383
- },
384
- }),
385
-
386
- remove: route.delete('/:id', {
387
- params: ${capitalizedName}ParamsSchema,
388
- handle: async ({ params }) => {
389
- await service.delete${capitalizedName}(params.id)
390
- return { success: true, message: 'Deleted successfully' }
391
- },
392
- }),
393
- })
394
- `;
395
- await promises_1.default.writeFile(node_path_1.default.join(targetDir, routeFilename), routeCode);
396
- (0, utils_1.success)(`Generated full 4-file CRUD slice in src/http/${name}/ and src/models/${modelFilename} (${routeFilename}, ${schemaFilename}, ${serviceFilename}, ${modelFilename})`);
397
- }
398
- exports.generateCrud = generateResource;
399
- async function generatePlugin(name) {
400
- const targetDir = node_path_1.default.join(process.cwd(), 'src', 'plugins');
401
- try {
402
- await promises_1.default.mkdir(targetDir, { recursive: true });
403
- }
404
- catch {
405
- (0, utils_1.error)(`Could not create plugins directory`);
406
- return;
407
- }
408
- const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);
409
- const pluginCode = `import type { ExisPlugin } from 'exisjs'
410
-
411
- export const ${capitalizedName}Plugin: ExisPlugin = {
412
- name: 'exis-${name.toLowerCase()}',
413
- version: '1.0.0',
414
- register: async (app, options) => {
415
- // Add isolated routes or middleware here
416
- // app.use((req, res, next) => { ... })
417
- }
418
- }
419
- `;
420
- await promises_1.default.writeFile(node_path_1.default.join(targetDir, `${name.toLowerCase()}.ts`), pluginCode);
421
- (0, utils_1.success)(`Generated ${name} plugin in src/plugins/${name.toLowerCase()}.ts`);
422
- }
423
- async function generateMiddleware(name) {
424
- const targetDir = node_path_1.default.join(process.cwd(), 'src', 'middleware');
425
- try {
426
- await promises_1.default.mkdir(targetDir, { recursive: true });
427
- }
428
- catch {
429
- (0, utils_1.error)(`Could not create middleware directory`);
430
- return;
431
- }
432
- const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);
433
- const middlewareCode = `import type { Handler } from 'exisjs'
434
-
435
- export const ${name}Middleware: Handler = (req, res, next) => {
436
- // Add your logic here
437
- console.log('${capitalizedName} Middleware executed')
438
- next()
439
- }
440
- `;
441
- await promises_1.default.writeFile(node_path_1.default.join(targetDir, `${name.toLowerCase()}.ts`), middlewareCode);
442
- (0, utils_1.success)(`Created middleware ${name} in src/middleware/${name}.ts`);
443
- }
444
- async function generateTest(name) {
445
- const targetDir = node_path_1.default.join(process.cwd(), 'tests');
446
- try {
447
- await promises_1.default.mkdir(targetDir, { recursive: true });
448
- }
449
- catch {
450
- (0, utils_1.error)(`Could not create tests directory`);
451
- return;
452
- }
453
- const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);
454
- const testCode = `import { test, describe, assert, createTestContext } from 'exisjs/testing'
455
- import app from '../src/http/server'
456
-
457
- describe('${capitalizedName} Native Tests', () => {
458
- // Automatically boot the framework and cleanup on exit
459
- createTestContext(app)
460
-
461
- test('should pass a basic test', async () => {
462
- assert.strictEqual(1 + 1, 2, 'Math works')
463
- })
464
- })
465
- `;
466
- await promises_1.default.writeFile(node_path_1.default.join(targetDir, `${name.toLowerCase()}.test.ts`), testCode);
467
- (0, utils_1.success)(`Generated ${name} test in tests/${name.toLowerCase()}.test.ts`);
468
- }
469
- //# sourceMappingURL=generate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function initCommand(): Promise<void>;
2
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,kBAkChC"}
@@ -1,37 +0,0 @@
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.initCommand = initCommand;
7
- const node_child_process_1 = __importDefault(require("node:child_process"));
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const node_fs_1 = __importDefault(require("node:fs"));
10
- const utils_1 = require("../utils");
11
- async function initCommand() {
12
- console.log(`\n${utils_1.c.bold}${utils_1.c.green}Initializing Exis Project...${utils_1.c.reset}\n`);
13
- let version = 'latest';
14
- try {
15
- const pkgPath = node_path_1.default.join(__dirname, '..', '..', '..', 'package.json');
16
- version = JSON.parse(node_fs_1.default.readFileSync(pkgPath, 'utf-8')).version;
17
- }
18
- catch {
19
- /* ignore */
20
- }
21
- // In development, the create-exisjs package is located relative to the exis package
22
- // dist/cli/commands/init.js -> ../../../../create/dist/index.js
23
- const localCreateExis = node_path_1.default.join(__dirname, '..', '..', '..', 'create', 'dist', 'index.js');
24
- if (node_fs_1.default.existsSync(localCreateExis)) {
25
- node_child_process_1.default.spawnSync(process.execPath, [localCreateExis, '.'], {
26
- stdio: 'inherit',
27
- });
28
- }
29
- else {
30
- // In production, run the exact matching version of create-exisjs to prevent skew
31
- node_child_process_1.default.spawnSync('npx', [`create-exisjs@${version}`, '.'], {
32
- stdio: 'inherit',
33
- shell: true,
34
- });
35
- }
36
- }
37
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;;;AAKA,kCAkCC;AAvCD,4EAAmC;AACnC,0DAA4B;AAC5B,sDAAwB;AACxB,oCAA4B;AAErB,KAAK,UAAU,WAAW;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,SAAC,CAAC,IAAI,GAAG,SAAC,CAAC,KAAK,+BAA+B,SAAC,CAAC,KAAK,IAAI,CAAC,CAAA;IAE5E,IAAI,OAAO,GAAG,QAAQ,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAA;QACtE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IAED,oFAAoF;IACpF,gEAAgE;IAChE,MAAM,eAAe,GAAG,mBAAI,CAAC,IAAI,CAC/B,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,UAAU,CACX,CAAA;IAED,IAAI,iBAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,4BAAE,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE;YACrD,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,iFAAiF;QACjF,4BAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,iBAAiB,OAAO,EAAE,EAAE,GAAG,CAAC,EAAE;YACrD,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;IACJ,CAAC;AACH,CAAC"}
@@ -1,6 +0,0 @@
1
- interface ReplOptions {
2
- entry?: string;
3
- }
4
- export declare function replCommand(options?: ReplOptions): Promise<void>;
5
- export {};
6
- //# sourceMappingURL=repl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/repl.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD1E"}
@@ -1,75 +0,0 @@
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.replCommand = replCommand;
7
- const node_child_process_1 = require("node:child_process");
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const node_fs_1 = __importDefault(require("node:fs"));
10
- const utils_1 = require("../utils");
11
- async function replCommand(options = {}) {
12
- const cwd = process.cwd();
13
- const entryFile = resolveEntry(cwd, options.entry);
14
- if (!entryFile) {
15
- (0, utils_1.error)('Could not find entry file. Expected src/http/server.ts or http/server.ts');
16
- process.exit(1);
17
- }
18
- // Build environment
19
- const env = {
20
- ...process.env,
21
- NODE_ENV: 'development',
22
- FORCE_COLOR: '1',
23
- __EXIS_CLI: 'true',
24
- __EXIS_REPL: 'true',
25
- EXIS_ENTRY_FILE: entryFile,
26
- };
27
- const startReplPath = node_path_1.default.join(__dirname, '../../lib/start-repl.js');
28
- // Use tsx to run the repl
29
- const runner = {
30
- name: 'tsx',
31
- bin: process.execPath,
32
- args: [require.resolve('tsx/cli')],
33
- };
34
- console.log(`\n${utils_1.c.cyan}[exis]${utils_1.c.reset} starting interactive console...`);
35
- const child = (0, node_child_process_1.spawn)(runner.bin, [...runner.args, startReplPath], {
36
- cwd,
37
- env,
38
- stdio: 'inherit',
39
- shell: runner.bin === process.execPath ? false : true,
40
- });
41
- child.on('error', (err) => {
42
- (0, utils_1.error)(`Failed to start REPL: ${err.message}`);
43
- });
44
- child.on('exit', (code, signal) => {
45
- if (code !== 0 && signal !== 'SIGTERM' && signal !== 'SIGINT') {
46
- if (code === 128 + 15 || code === 143) {
47
- return;
48
- }
49
- process.exit(code ?? 1);
50
- }
51
- else {
52
- process.exit(0);
53
- }
54
- });
55
- }
56
- function resolveEntry(cwd, custom) {
57
- if (custom) {
58
- const abs = node_path_1.default.resolve(cwd, custom);
59
- return node_fs_1.default.existsSync(abs) ? abs : null;
60
- }
61
- const srcTs = node_path_1.default.join(cwd, 'src/http/server.ts');
62
- const srcJs = node_path_1.default.join(cwd, 'src/http/server.js');
63
- const rootTs = node_path_1.default.join(cwd, 'http/server.ts');
64
- const rootJs = node_path_1.default.join(cwd, 'http/server.js');
65
- if (node_fs_1.default.existsSync(srcTs))
66
- return srcTs;
67
- if (node_fs_1.default.existsSync(srcJs))
68
- return srcJs;
69
- if (node_fs_1.default.existsSync(rootTs))
70
- return rootTs;
71
- if (node_fs_1.default.existsSync(rootJs))
72
- return rootJs;
73
- return null;
74
- }
75
- //# sourceMappingURL=repl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../../src/cli/commands/repl.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- interface RunOptions {
2
- env?: string;
3
- mode?: string;
4
- }
5
- export declare function runCommand(scriptOrCmd: string, args?: string[], options?: RunOptions): Promise<void>;
6
- export {};
7
- //# sourceMappingURL=run.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAMA,UAAU,UAAU;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA6Df"}