Skip to content

Commit e1f5062

Browse files
committed
chore: refactor, v2 cookies support
1 parent aa2db10 commit e1f5062

File tree

3 files changed

+99
-284
lines changed

3 files changed

+99
-284
lines changed

src/lambda-wrapper.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Request, RequestV2 } from './request'
1+
import { Request } from './request'
22
import { Response } from './response'
33
import {
44
APIGatewayProxyEvent,
@@ -11,11 +11,11 @@ import {
1111
export type NextFunction = (param?: unknown) => void
1212

1313
export interface Middleware {
14-
(request: Request | RequestV2, response: Response, next: NextFunction): void
14+
(request: Request, response: Response, next: NextFunction): void
1515
}
1616

1717
export interface OnFinishedHandler {
18-
(out: unknown, req: Request | RequestV2, res: Response): Promise<APIGatewayProxyResult>
18+
(out: unknown, req: Request, res: Response): Promise<APIGatewayProxyResult>
1919
}
2020

2121
/**
@@ -40,10 +40,7 @@ const ApiGatewayHandler = (router: Middleware, onFinished: OnFinishedHandler) =>
4040
context: any
4141
) {
4242
return new Promise<APIGatewayProxyResult>(resolve => {
43-
const req =
44-
'version' in event && event.version == '2.0'
45-
? new RequestV2(event)
46-
: new Request(event as APIGatewayProxyEvent)
43+
const req = new Request(event)
4744
const res = (req.res = new Response(req, async (err: any, out: any) => {
4845
if (err) {
4946
console.error(err)

src/request.spec.js

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { Request, RequestV2 } = require('./request')
1+
const { Request } = require('./request')
22

33
describe('Request object version 1.0', () => {
44
const requestObject = { a: 1 }
@@ -161,9 +161,9 @@ describe('Request object version 1.0', () => {
161161

162162
describe('Request object version 2.0', () => {
163163
const requestObject = { a: 1 }
164-
let event
164+
let eventV2
165165
beforeEach(() => {
166-
event = {
166+
eventV2 = {
167167
version: '2.0',
168168
routeKey: '$default',
169169
rawPath: '/my/path',
@@ -237,15 +237,15 @@ describe('Request object version 2.0', () => {
237237
})
238238

239239
it('should read query parameter', () => {
240-
const request = new RequestV2(event)
240+
const request = new Request(eventV2)
241241

242242
expect(request.query.a).toBe('1')
243243
expect(request.query.shoe.color).toBe('yellow')
244244
expect(request.query.email).toBe('test+user@gmail.com')
245245
})
246246

247247
it('should read all values of query parameter with multiple values', () => {
248-
const request = new RequestV2(event)
248+
const request = new Request(eventV2)
249249

250250
expect(request.query.b).toEqual(['1', '2'])
251251
expect(request.query.c).toEqual(['-firstName', 'lastName'])
@@ -254,56 +254,57 @@ describe('Request object version 2.0', () => {
254254
})
255255

256256
it('should read header', () => {
257-
const request = new RequestV2(event)
257+
const request = new Request(eventV2)
258258

259259
expect(request.get('Content-Type')).toBe('application/json')
260260
expect(request.get('content-type')).toBe('application/json')
261261
expect(request.get('X-Header')).toEqual('value1,value2')
262262
})
263263

264264
it('should read query as empty object if there is no queryparamters', () => {
265-
event.queryStringParameters = {}
266-
event.rawQueryString = ''
267-
const request = new RequestV2(event)
265+
eventV2.queryStringParameters = {}
266+
eventV2.rawQueryString = ''
267+
const request = new Request(eventV2)
268268

269269
expect(request.query).toEqual({})
270270
})
271271

272272
it('should read headers as empty object if there is no headers', () => {
273-
event.headers = {}
274-
delete event.body
275-
const request = new RequestV2(event)
273+
eventV2.headers = {}
274+
delete eventV2.body
275+
delete eventV2.cookies
276+
const request = new Request(eventV2)
276277

277278
expect(request.headers).toEqual({})
278279
})
279280

280281
it('should handle weird header asks', () => {
281-
const request = new RequestV2(event)
282+
const request = new Request(eventV2)
282283

283284
expect(() => request.get()).toThrow(TypeError('name argument is required to req.get'))
284285
expect(() => request.get({})).toThrow(TypeError('name must be a string to req.get'))
285286
})
286287

287288
it('should read referer/referrer header', () => {
288289
const referer = 'muratcorlu.com'
289-
event.headers['Referer'] = referer
290+
eventV2.headers['Referer'] = referer
290291

291-
const request = new RequestV2(event)
292+
const request = new Request(eventV2)
292293
expect(request.get('referer')).toBe(referer)
293294
expect(request.get('referrer')).toBe(referer)
294295
})
295296

296297
it('check type', () => {
297-
const request = new RequestV2(event)
298+
const request = new Request(eventV2)
298299
expect(request.is('json')).toBe('json')
299300
expect(request.is(['html', 'json'])).toBe('json')
300301
expect(request.is('html', 'xml')).toBe(false)
301302
})
302303

303304
it('should check accept header', () => {
304-
event.headers['Accept'] = 'application/json'
305+
eventV2.headers['Accept'] = 'application/json'
305306

306-
const request = new RequestV2(event)
307+
const request = new Request(eventV2)
307308
expect(request.accepts('xml')).toBe(false)
308309
expect(request.accepts('text/xml')).toBe(false)
309310
expect(request.accepts('json')).toBe('json')
@@ -312,30 +313,35 @@ describe('Request object version 2.0', () => {
312313
})
313314

314315
it('should check acceptEncodings', () => {
315-
event.headers['accept-encoding'] = 'gzip, compress;q=0.2'
316+
eventV2.headers['accept-encoding'] = 'gzip, compress;q=0.2'
316317

317-
const request = new RequestV2(event)
318+
const request = new Request(eventV2)
318319
expect(request.acceptsEncodings('gzip', 'compress')).toBe('gzip')
319320
})
320321

321322
it('should check acceptsCharsets', () => {
322-
event.headers['accept-charset'] = 'utf-8, iso-8859-1;q=0.2, utf-7;q=0.5'
323+
eventV2.headers['accept-charset'] = 'utf-8, iso-8859-1;q=0.2, utf-7;q=0.5'
323324

324-
const request = new RequestV2(event)
325+
const request = new Request(eventV2)
325326
expect(request.acceptsCharsets('utf-7', 'utf-8')).toBe('utf-8')
326327
})
327328

328329
it('should check acceptsLanguages', () => {
329-
event.headers['accept-charset'] = 'en;q=0.8, es, tr'
330+
eventV2.headers['accept-charset'] = 'en;q=0.8, es, tr'
330331

331-
const request = new RequestV2(event)
332+
const request = new Request(eventV2)
332333
expect(request.acceptsLanguages('tr', 'en')).toBe('tr')
333334
})
334335

335336
it('should handle non-ascii characters', () => {
336337
const body = { text: 'árvíztűrőtükörfúrógép😄Tシャツを3 枚購入しました。🇨🇭🇺🇸🇯🇵🇭🇺🇬🇷🇵🇱∃⇔€🎉' }
337-
event.body = JSON.stringify(body)
338-
const request = new RequestV2(event)
338+
eventV2.body = JSON.stringify(body)
339+
const request = new Request(eventV2)
339340
expect(JSON.parse(request.body)).toEqual(body)
340341
})
342+
343+
it('should set cookies', () => {
344+
const request = new Request(eventV2)
345+
expect(request.get('Cookie')).toEqual('cookie1; cookie2')
346+
})
341347
})

0 commit comments

Comments
 (0)