Skip to content

Commit 1a236a1

Browse files
chore: wip
1 parent 012339d commit 1a236a1

File tree

3 files changed

+29
-16
lines changed

3 files changed

+29
-16
lines changed

.stacks/core/router/src/index.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { type Route, type RouteCallback, type RouteGroupOptions } from '@stacksjs/types'
22
import { handleRequest } from './server'
3-
3+
import { projectPath } from '@stacksjs/path'
4+
import { readTextFile } from '@stacksjs/storage'
45
export class Router {
56
private routes: Route[] = []
67

@@ -14,32 +15,31 @@ export class Router {
1415

1516
public get(url: string, callback: RouteCallback): void {
1617
this.addRoute('GET', url, callback)
17-
handleRequest(this.getRoutes())
1818
}
1919

2020
public post(url: string, callback: RouteCallback): void {
2121
this.addRoute('POST', url, callback)
22-
handleRequest(this.getRoutes())
2322
}
2423

2524
public view(url: string, callback: RouteCallback): void {
2625
this.addRoute('GET', url, callback)
27-
handleRequest(this.getRoutes())
26+
}
27+
28+
public redirect(url: string, callback: RouteCallback): void {
29+
this.addRoute('GET', url, callback)
30+
handleRequest(this.getRoutes(), true)
2831
}
2932

3033
public delete(url: string, callback: RouteCallback): void {
3134
this.addRoute('DELETE', url, callback)
32-
handleRequest(this.getRoutes())
3335
}
3436

3537
public patch(url: string, callback: RouteCallback): void {
3638
this.addRoute('PATCH', url, callback)
37-
handleRequest(this.getRoutes())
3839
}
3940

4041
public put(url: string, callback: RouteCallback): void {
4142
this.addRoute('PUT', url, callback)
42-
handleRequest(this.getRoutes())
4343
}
4444

4545
public group(options: RouteGroupOptions, callback: () => void): void {
@@ -74,9 +74,11 @@ export class Router {
7474
// this.routes.push({ method: 'after', pattern: /^$/, callback, paramNames: [] })
7575
// }
7676

77-
public getRoutes(): Route[] {
77+
public async getRoutes(): Route[] {
78+
const routeFileData = (await readTextFile(projectPath('routes/web.ts'))).data
79+
7880
return this.routes
7981
}
8082
}
8183

82-
export const route = new Router()
84+
export const route: Router = new Router() satisfies Router

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@ import { extname } from 'node:path'
33
import { type Route } from '@stacksjs/types'
44
import middlewares from '../../../../app/middleware'
55
import { request } from './request'
6+
import { route } from './index'
67

7-
export function handleRequest(routes: Route[]) {
8+
9+
const routesList: Route[] = route.getRoutes()
10+
11+
export function handleRequest(): void {
812
Bun.serve({
913
fetch(req) {
1014
const url = new URL(req.url)
1115

12-
const foundRoute: Route = routes.find((route: Route) => {
16+
const foundRoute: Route = routesList.find((route: Route) => {
1317
const pattern = new RegExp(`^${route.uri.replace(/:\w+/g, '\\w+')}$`)
1418

1519
return pattern.test(url.pathname)
@@ -55,7 +59,13 @@ function executeMiddleware(route: Route): void {
5559
}
5660
}
5761

58-
async function execute(route: Route, request: any): Promise<Response> {
62+
function execute(route: Route, request: any): Response {
63+
if (route?.method === 'GET' && isRedirect) {
64+
const callback = String(route.callback)
65+
66+
return Response.redirect(callback, 301)
67+
}
68+
5969
if (route?.method !== request.method)
6070
return new Response('Method not allowed', { status: 405 })
6171

routes/web.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { route } from '../.stacks/core/router/src/index.ts'
2-
import { request } from '../.stacks/request.ts'
2+
import { request } from '../.stacks/core/router/src/request.ts'
33

4-
// route.get('/users/list', getBlogs)
5-
// route.post('/blogs', getBlogs)
4+
route.get('/users/list', getBlogs)
5+
// route.post('/blogs', 'hello world')
66

77
// route.group({ prefix: '/users', middleware: 'auth' }, () => {
88
// route.get('/get/:id', getUsers)
@@ -11,7 +11,8 @@ import { request } from '../.stacks/request.ts'
1111
// })
1212

1313
// TODO: Add a way to register a view.
14-
route.view('/welcome', 'index.html')
14+
// route.view('/welcome', 'hello world')
15+
route.redirect('/wel', '/welcome')
1516

1617
function getUsers() {
1718
return request.getParams('id')

0 commit comments

Comments
 (0)