Skip to content

Commit c07feff

Browse files
chore: wip
1 parent 671863b commit c07feff

File tree

5 files changed

+62
-33
lines changed

5 files changed

+62
-33
lines changed

.stacks/core/router/src/middleware.ts

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
export interface MiddlewareType {
2-
name: string
3-
priority: number
4-
handle: Function
5-
}
1+
import fs from 'fs';
2+
import path from 'path';
3+
import { promisify } from 'util';
4+
import { MiddlewareType } from '@stacksjs/types';
65

76
export class Middleware implements MiddlewareType {
87
name: string
@@ -15,3 +14,26 @@ export class Middleware implements MiddlewareType {
1514
this.handle = data.handle
1615
}
1716
}
17+
18+
const readdir = promisify(fs.readdir);
19+
20+
async function importMiddlewares(directory: any) {
21+
const middlewares = [];
22+
const files = await readdir(directory);
23+
24+
for (const file of files) {
25+
// Skip non-JavaScript files
26+
if (path.extname(file) !== '.ts') continue;
27+
28+
// Dynamically import the middleware
29+
const imported = await import(path.join(directory, file));
30+
middlewares.push(imported.default);
31+
}
32+
33+
return middlewares;
34+
}
35+
36+
// Example usage:
37+
const middlewareDirectory = path.join(__dirname, '../../../../app/middleware');
38+
39+
export const middlewares = await importMiddlewares(middlewareDirectory)

.stacks/core/router/src/server.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { URL } from 'node:url'
22
import { extname } from 'node:path'
3-
import type { Route, StatusCode } from '@stacksjs/types'
3+
import type { Route, StatusCode, MiddlewareType } from '@stacksjs/types'
44
import { middlewares } from './middleware'
55
import { request } from './request'
66
import { route } from './index'
@@ -40,17 +40,24 @@ function addRouteParamsAndQuery(url: URL, route: Route): void {
4040
function executeMiddleware(route: Route): void {
4141
const { middleware = null } = route
4242

43+
4344
if (middleware && middlewares && isObjectNotEmpty(middlewares)) {
4445
if (isString(middleware)) {
45-
const fn = middlewares[middleware]
46-
if (fn)
47-
fn() // Invoke only if it exists and is not undefined.
46+
const middlewareItem: MiddlewareType = middlewares.find((middlewareItem: MiddlewareType) => {
47+
return middlewareItem.name === middleware
48+
})
49+
50+
if (middlewareItem)
51+
middlewareItem.handle() // Invoke only if it exists and is not undefined.
4852
}
4953
else {
5054
middleware.forEach((m) => {
51-
const fn = middlewares[m]
52-
if (fn)
53-
fn() // Again, invoke only if it exists.
55+
const middlewareItem: MiddlewareType = middlewares.find((middlewareItem: MiddlewareType) => {
56+
return middlewareItem.name === m
57+
})
58+
59+
if (middlewareItem)
60+
middlewareItem.handle() // Again, invoke only if it exists.
5461
})
5562
}
5663
}

.stacks/core/types/src/router.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ export interface Route {
4646
statusCode?: StatusCode
4747
}
4848

49+
export interface MiddlewareType {
50+
name: string
51+
priority: number
52+
handle: Function
53+
}
54+
4955
export type StatusCode = 200 | 201 | 202 | 204 | 301 | 302 | 304 | 400 | 401 | 403 | 404 | 500
5056
export type RedirectCode = Extract<StatusCode, 301 | 302>
5157

app/middleware/logger.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Middleware } from '../../.stacks/core/router/src/middleware'
2+
13
export default new Middleware({
24
name: 'logger',
35
priority: 1,

routes/web.ts

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,20 @@
11
import { route } from '../.stacks/core/router/src/index.ts'
2-
import { request } from '../.stacks/core/router/src/request.ts'
32

4-
route.group(() => {
5-
route.get('/get/:id', getUsers)
6-
route.get('/delete', getBlogs)
7-
}).middleware('auth').prefix('/users')
8-
9-
route.group(() => {
10-
route.get('/get/:id', getUsers)
11-
route.get('/delete', getBlogs)
12-
}, {
13-
middleware: ['auth'],
14-
prefix: '/users'
15-
})
3+
// route.group(() => {
4+
// route.get('/get/:id', getUsers)
5+
// route.get('/delete', getBlogs)
6+
// }).middleware('auth').prefix('/users')
167

178
// TODO: Add a way to register a view.
18-
route.redirect('/user', '/welcome')
9+
// route.redirect('/user', '/welcome')
1910
route.get('/welcome', 'hello world')
20-
route.get('/users', 'hello users')
11+
.middleware('logger')
12+
// route.get('/users', 'hello users')
2113

22-
function getUsers() {
23-
return request.getParams('id')
24-
}
14+
// function getUsers() {
15+
// return request.getParams('id')
16+
// }
2517

26-
function getBlogs() {
27-
return 'hello blogs function'
28-
}
18+
// function getBlogs() {
19+
// return 'hello blogs function'
20+
// }

0 commit comments

Comments
 (0)