Skip to content

Commit fb3965c

Browse files
committed
feat/fix: Context request/response, root path matcher
1 parent 9618296 commit fb3965c

6 files changed

Lines changed: 42 additions & 35 deletions

File tree

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@secjs/http",
3-
"version": "0.0.3",
3+
"version": "0.0.4",
44
"description": "",
55
"scripts": {
66
"build": "tsc",
@@ -16,7 +16,8 @@
1616
"author": "João Lenon <lenonsec7@gmail.com>",
1717
"license": "MIT",
1818
"dependencies": {
19-
"@secjs/utils": "^1.2.8"
19+
"@secjs/contracts": "^1.0.7",
20+
"@secjs/utils": "^1.3.0"
2021
},
2122
"files": [
2223
"src/*.d.ts",

src/Contracts/HandlerContract.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { IncomingMessage, ServerResponse } from 'http'
22

3+
export interface Context {
4+
request: IncomingMessage
5+
response: ServerResponse
6+
}
7+
38
// TODO Move to @secjs/contracts
49
export interface HandlerContract {
5-
(request: IncomingMessage, response: ServerResponse): Promise<any> | any
10+
(ctx: Context): Promise<any> | any
611
}

src/constants.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IncomingMessage, ServerResponse } from 'http'
1+
import { Context } from './Contracts/HandlerContract'
22

33
export default {
44
PORT: 4040,
@@ -12,10 +12,12 @@ export default {
1212
method: 'ALL',
1313
params: [],
1414
matcher: /\//,
15-
handler: (request: IncomingMessage, response: ServerResponse): any => {
16-
response.writeHead(404, { 'Content-Type': 'application/json' })
17-
response.write(JSON.stringify({ message: 'Not found!' }))
18-
response.end()
15+
handler: (ctx: Context): any => {
16+
ctx.response.writeHead(404, { 'Content-Type': 'application/json' })
17+
18+
ctx.response.write(JSON.stringify({ message: 'Not found!' }))
19+
20+
ctx.response.end()
1921
},
2022
},
2123
}

src/server.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export class Sec {
99
private routeUtils: Route
1010

1111
private nodeServer: Server
12-
private routes: RouteContract[] = [constants.DEFAULT_ROUTE]
12+
private routes: RouteContract[] = []
1313

1414
private createRouteHandler(
1515
path: string,
@@ -40,9 +40,9 @@ export class Sec {
4040
const chosen =
4141
this.routes.find(
4242
route => route.matcher.test(url) && route.method === method,
43-
) || this.routes[0]
43+
) || constants.DEFAULT_ROUTE
4444

45-
return chosen.handler(request, response)
45+
return chosen.handler({ request, response })
4646
},
4747
)
4848
}

tests/server.spec.ts

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import supertest from 'supertest'
22

33
import { Sec } from '../src/server'
4-
import { IncomingMessage, ServerResponse } from 'http'
4+
import { Context } from './../src/Contracts/HandlerContract'
55

66
describe('\n Server', () => {
77
it('should be able to create a Http server using SecJS', async () => {
@@ -23,15 +23,12 @@ describe('\n Server', () => {
2323
it('should be able to create routes with handlers', async () => {
2424
const server = new Sec()
2525

26-
server.get(
27-
'/tests',
28-
(request: IncomingMessage, response: ServerResponse) => {
29-
response.writeHead(200, { 'Content-Type': 'application/json' })
26+
server.get('/tests', (ctx: Context) => {
27+
ctx.response.writeHead(200, { 'Content-Type': 'application/json' })
3028

31-
response.write(JSON.stringify({ data: [{ id: 1, name: 'Test 1' }] }))
32-
response.end()
33-
},
34-
)
29+
ctx.response.write(JSON.stringify({ data: [{ id: 1, name: 'Test 1' }] }))
30+
ctx.response.end()
31+
})
3532

3633
server.listen()
3734

@@ -49,17 +46,14 @@ describe('\n Server', () => {
4946
it('should be able to create routes with params', async () => {
5047
const server = new Sec()
5148

52-
server.get(
53-
'/tests/:id/unitaries/:unitaries_id',
54-
(request: IncomingMessage, response: ServerResponse) => {
55-
response.writeHead(200, { 'Content-Type': 'application/json' })
56-
57-
response.write(
58-
JSON.stringify({ data: { id: 1, name: 'Unit Test 1', testId: 1 } }),
59-
)
60-
response.end()
61-
},
62-
)
49+
server.get('/tests/:id/unitaries/:unitaries_id', (ctx: Context) => {
50+
ctx.response.writeHead(200, { 'Content-Type': 'application/json' })
51+
52+
ctx.response.write(
53+
JSON.stringify({ data: { id: 1, name: 'Unit Test 1', testId: 1 } }),
54+
)
55+
ctx.response.end()
56+
})
6357

6458
server.listen()
6559

yarn.lock

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -565,10 +565,15 @@
565565
resolved "https://registry.yarnpkg.com/@secjs/contracts/-/contracts-1.0.4.tgz#79d8127afd3e42454f281ad4b4a58a1d2e49b44a"
566566
integrity sha512-yXzC2bCk5o+7EQUye79k8mB4fkzBsOvQYkhDAJtqjy04tR14znbp6gBqAOvU3OHkJ6DlbwWGmsVEfk98qVo+0w==
567567

568-
"@secjs/utils@^1.2.8":
569-
version "1.2.8"
570-
resolved "https://registry.yarnpkg.com/@secjs/utils/-/utils-1.2.8.tgz#1d140945fe60d0bca59eeeb97a5ae37214a02653"
571-
integrity sha512-hrbrXxDvIBnu0pJP0qwjmOhig5JOX3Ymf8S4h+oq3lKb33pc/yRE7dztPqdxVdgJFCOvTDW2WzVIzg1vQA7m5Q==
568+
"@secjs/contracts@^1.0.7":
569+
version "1.0.7"
570+
resolved "https://registry.yarnpkg.com/@secjs/contracts/-/contracts-1.0.7.tgz#d4ec704d6f5f6886635f7f1523c6ccae4ca44f8f"
571+
integrity sha512-HFOKPRaPH0qJtfZXy7sci3fTzY0Akt7ySlJcp1wO4rBBy+OXgKnjpUucobRzIQfaM97WaaNr3QXcACQI/DHiVw==
572+
573+
"@secjs/utils@^1.3.0":
574+
version "1.3.0"
575+
resolved "https://registry.yarnpkg.com/@secjs/utils/-/utils-1.3.0.tgz#29aa1f7b15c740cf4f34a5a74eb959c2238e1c53"
576+
integrity sha512-axuwtU6KM9Dk5pIA+00tVAgFhru7V9BXpdpaA0v2z0igte6NeIZkT1oKAJARYtXRKsAYDYZXru4xuSb1kZE/WQ==
572577
dependencies:
573578
"@secjs/contracts" "^1.0.4"
574579
uuid "^8.3.2"

0 commit comments

Comments
 (0)