From 3629c0df9d5c7b7676f19f3323c9f3a02a9d60fa Mon Sep 17 00:00:00 2001 From: Jonas Kuiler Date: Mon, 4 Mar 2019 15:58:28 +0100 Subject: [PATCH 1/3] Add dependencies on koa types --- package.json | 2 ++ yarn.lock | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index c900e6d2..02fa4093 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,8 @@ "@types/aws-lambda": "^0.0.33", "@types/debug": "^0.0.30", "@types/express": "^4.11.1", + "@types/koa": "^2.0.48", + "@types/koa-bodyparser": "^4.2.2", "@types/node": "^9.4.6", "debug": "^3.1.0", "google-auth-library": "^1.3.2", diff --git a/yarn.lock b/yarn.lock index ff949a74..d0cb88b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -353,6 +353,13 @@ resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.3.tgz#62cf2a9b624edc795134135fe37fc2ae8ea36be3" integrity sha512-8zNeBkSKhU9a5cRNbpCKau2WWPfan+Q2zDlcXvXyhn9EsMqgYs4qzo0XHNVlXC6ABQL8fT6nV+zzo5RTHJzyXw== +"@types/accepts@*": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" + integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== + dependencies: + "@types/node" "*" + "@types/aws-lambda@^0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-0.0.33.tgz#17083d9c569048792f4f33ef6cd6aaf54d5b22d3" @@ -373,6 +380,16 @@ dependencies: "@types/node" "*" +"@types/cookies@*": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.1.tgz#f9f204bd6767d389eea3b87609e30c090c77a540" + integrity sha512-ku6IvbucEyuC6i4zAVK/KnuzWNXdbFd1HkXlNLg/zhWDGTtQT5VhumiPruB/BHW34PWVFwyfwGftDQHfWNxu3Q== + dependencies: + "@types/connect" "*" + "@types/express" "*" + "@types/keygrip" "*" + "@types/node" "*" + "@types/debug@^0.0.30": version "0.0.30" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.30.tgz#dc1e40f7af3b9c815013a7860e6252f6352a84df" @@ -391,7 +408,7 @@ "@types/node" "*" "@types/range-parser" "*" -"@types/express@^4.11.1": +"@types/express@*", "@types/express@^4.11.1": version "4.16.1" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0" integrity sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg== @@ -443,6 +460,42 @@ resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.3.tgz#b672cfaac25cbbc634a0fd92c515f66faa18dbca" integrity sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ== +"@types/http-assert@*": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.4.0.tgz#41d173466e396e99a14d75f7160cc997f2f9ed8b" + integrity sha512-TZDqvFW4nQwL9DVSNJIJu4lPLttKgzRF58COa7Vs42Ki/MrhIqUbeIw0MWn4kGLiZLXB7oCBibm7nkSjPkzfKQ== + +"@types/keygrip@*": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.1.tgz#ff540462d2fb4d0a88441ceaf27d287b01c3d878" + integrity sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg= + +"@types/koa-bodyparser@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.2.2.tgz#7066e2871fbc4f15571c34e68ca587f5acc95d28" + integrity sha512-liOoUnpv7V+NX46kAqYDh503t0PI0NFjALn+L8IAlS/mdwOAg9jJoso88mN22MaWt7hLdQ+Z/MMwb9RglhEAcQ== + dependencies: + "@types/koa" "*" + +"@types/koa-compose@*": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.3.tgz#4e2981f7bc4ce0f4797219516a91bf6ff3a70fa1" + integrity sha512-kXvR0DPyZ3gaFxZs4WycA8lpzlPGtFmwdbgce+NWd+TG3PycPO3o5FkePH60HoBPd8BBaSiw3vhtgM42O2kQcg== + dependencies: + "@types/koa" "*" + +"@types/koa@*", "@types/koa@^2.0.48": + version "2.0.48" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.48.tgz#29162783029d3e5df8b58c55f6bf0d35f78fc39f" + integrity sha512-CiIUYhHlOFJhSCTmsFoFkV2t9ij1JwW26nt0W9XZoWTvmAw6zTE0+k3IAoGICtjzIfhZpZcO323NHmI1LGmdDw== + dependencies: + "@types/accepts" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" + "@types/lodash@4.14.104": version "4.14.104" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.104.tgz#53ee2357fa2e6e68379341d92eb2ecea4b11bb80" From 62f559f6fd10e33bbef79b592c90248243eb49e5 Mon Sep 17 00:00:00 2001 From: Jonas Kuiler Date: Mon, 4 Mar 2019 15:59:01 +0100 Subject: [PATCH 2/3] Add Koa framework --- src/framework/koa.ts | 62 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/framework/koa.ts diff --git a/src/framework/koa.ts b/src/framework/koa.ts new file mode 100644 index 00000000..e367703a --- /dev/null +++ b/src/framework/koa.ts @@ -0,0 +1,62 @@ +/** + * @file Add built in plug and play web framework support for koa using koa-bodyparser + */ + +import { StandardHandler, Framework } from './framework' +import { Context, Response, Request } from 'koa' + +export interface KoaHandler { + /** @public */ + (ctx: Context): void +} + +export interface KoaMetaData { + /** @public */ + request: Request + + /** @public */ + response: Response +} + +export class Koa implements Framework { + handle(standard: StandardHandler) { + return (ctx: Context) => { + const { request, response } = ctx + const metadata: KoaMetaData = { + request, + response, + } + + standard(request.body, request.headers, { koa: metadata }) + .then(({ status, body, headers }) => { + if (headers) { + for (const key in headers) { + const header = headers[key] + + if (header) { + ctx.set(key, header) + } + } + } + + ctx.status = status + ctx.body = body + }) + .catch(error => { + ctx.status = 500 + ctx.body = { error: error.message || error } + }) + } + } + + check(ctx: Context) { + return ( + typeof ctx === 'object' && + typeof ctx.request === 'object' && + typeof ctx.response === 'object' && + typeof ctx.state === 'object' + ) + } +} + +export const koa = new Koa() From c8c80550ec65a78a4ecf3c74ec70629c6b2ccd50 Mon Sep 17 00:00:00 2001 From: Jonas Kuiler Date: Mon, 4 Mar 2019 15:59:27 +0100 Subject: [PATCH 3/3] List koa as framework --- src/framework/framework.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/framework/framework.ts b/src/framework/framework.ts index 22522252..e7e82c73 100644 --- a/src/framework/framework.ts +++ b/src/framework/framework.ts @@ -16,6 +16,7 @@ import { ExpressHandler, Express, ExpressMetadata, express } from './express' import { LambdaHandler, Lambda, LambdaMetadata, lambda } from './lambda' +import { koa, KoaHandler, Koa, KoaMetaData } from './koa' import { JsonObject } from '../common' export interface Frameworks { @@ -34,7 +35,7 @@ export interface Framework { } /** @public */ -export interface OmniHandler extends StandardHandler, ExpressHandler, LambdaHandler { +export interface OmniHandler extends StandardHandler, ExpressHandler, LambdaHandler, KoaHandler { /** @public */ // tslint:disable-next-line:no-any allow any inputs and outputs depending on framework (...args: any[]): any @@ -51,7 +52,10 @@ export interface BuiltinFrameworkMetadata extends FrameworkMetadata { express?: ExpressMetadata /** @public */ - lambda?: LambdaMetadata + lambda?: LambdaMetadata, + + /** @public */ + koa?: KoaMetaData } export interface BuiltinFrameworks extends Frameworks { @@ -65,13 +69,20 @@ export interface BuiltinFrameworks extends Frameworks { * Plug and play web framework support for lambda API gateway * @public */ - lambda: Lambda + lambda: Lambda, + + /** + * Plug and play web framework support for koa using koa-bodyparser + * @public + */ + koa: Koa } /** @hidden */ export const builtin: BuiltinFrameworks = { express, lambda, + koa, } /** @public */