From 8879cf34c86e86cdd4ee95bcdc23ca313b1e561d Mon Sep 17 00:00:00 2001 From: Muhammad Fawwaz Orabi Date: Tue, 10 Apr 2018 22:34:57 +0300 Subject: [PATCH] feat(binary): allow wildcards and extensions in binary types (#136) --- __tests__/index.js | 38 ++++++++++++++++++++++++++++++++++++++ index.js | 3 ++- package-lock.json | 29 +++++++++++++++++++++++++++++ package.json | 3 ++- 4 files changed, 71 insertions(+), 2 deletions(-) diff --git a/__tests__/index.js b/__tests__/index.js index cd6af975..60805700 100644 --- a/__tests__/index.js +++ b/__tests__/index.js @@ -200,4 +200,42 @@ describe('forwardResponseToApiGateway: content-type encoding', () => { isBase64Encoded: false })) }) + + test('wildcards in binary types array', () => { + const server = new MockServer(['image/*']) + const headers = {'content-type': 'image/jpeg'} + const body = 'hello world' + const response = new MockResponse(200, headers, body) + return new Promise( + (resolve, reject) => { + const context = new MockContext(resolve) + awsServerlessExpress.forwardResponseToApiGateway( + server, response, context) + } + ).then(successResponse => expect(successResponse).toEqual({ + statusCode: 200, + body: new Buffer(body).toString('base64'), + headers: headers, + isBase64Encoded: true + })) + }) + + test('extensions in binary types array', () => { + const server = new MockServer(['.png']) + const headers = {'content-type': 'image/png'} + const body = 'hello world' + const response = new MockResponse(200, headers, body) + return new Promise( + (resolve, reject) => { + const context = new MockContext(resolve) + awsServerlessExpress.forwardResponseToApiGateway( + server, response, context) + } + ).then(successResponse => expect(successResponse).toEqual({ + statusCode: 200, + body: new Buffer(body).toString('base64'), + headers: headers, + isBase64Encoded: true + })) + }) }) diff --git a/index.js b/index.js index e77a5c04..d5b080c4 100644 --- a/index.js +++ b/index.js @@ -16,6 +16,7 @@ const http = require('http') const url = require('url') const binarycase = require('binary-case') +const isType = require('type-is') function getPathWithQueryStringParams(event) { return url.format({ pathname: event.path, query: event.queryStringParameters }) @@ -27,7 +28,7 @@ function getContentType(params) { } function isContentTypeBinaryMimeType(params) { - return params.binaryMimeTypes.indexOf(params.contentType) !== -1 + return params.binaryMimeTypes.length > 0 && !!isType.is(params.contentType, params.binaryMimeTypes) } function mapApiGatewayEventToHttpRequest(event, context, socketPath) { diff --git a/package-lock.json b/package-lock.json index f2dbe278..d215effe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4206,6 +4206,11 @@ } } }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", @@ -6671,6 +6676,30 @@ "prelude-ls": "1.1.2" } }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + }, + "dependencies": { + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + } + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", diff --git a/package.json b/package.json index f60d3493..4a752f24 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,8 @@ "security-scan": "nsp check" }, "dependencies": { - "binary-case": "^1.0.0" + "binary-case": "^1.0.0", + "type-is": "^1.6.16" }, "config": { "commitizen": {