@smartlyio/oats-koa-adapter 4.0.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +20 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/render-docs.d.ts +1 -0
- package/dist/render-docs.js +37 -0
- package/dist/render-docs.js.map +1 -0
- package/package.json +3 -3
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as Router from 'koa-router';
|
|
2
|
+
import { ParameterizedContext } from 'koa';
|
|
3
|
+
import * as runtime from '@smartlyio/oats-runtime';
|
|
4
|
+
import { IMiddleware } from 'koa-router';
|
|
5
|
+
declare type Opts<Spec, StateT, CustomT, RequestContext> = {
|
|
6
|
+
handler: runtime.server.HandlerFactory<Spec>;
|
|
7
|
+
spec: Spec;
|
|
8
|
+
requestContextCreator?: (ctx: ParameterizedContext<StateT, CustomT>) => RequestContext;
|
|
9
|
+
middlewares?: Array<IMiddleware<StateT, CustomT>>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Bind provided handlers for the OpenAPI routes
|
|
13
|
+
*
|
|
14
|
+
* Koa's default StateT and CustomT values are selected as defaults
|
|
15
|
+
* @param opts Named arguments to the function
|
|
16
|
+
* @param spec Deprecated use the named arguments
|
|
17
|
+
* @param requestContextCreator Deprecated
|
|
18
|
+
*/
|
|
19
|
+
export declare function bind<Spec, RequestContext = void, StateT = any, CustomT = Record<string, unknown>>(opts: runtime.server.HandlerFactory<Spec> | Opts<Spec, StateT, CustomT, RequestContext>, spec?: Spec, requestContextCreator?: (ctx: ParameterizedContext<StateT, CustomT>) => RequestContext): Router<StateT, CustomT>;
|
|
20
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bind = void 0;
|
|
4
|
+
const Router = require("koa-router");
|
|
5
|
+
const runtime = require("@smartlyio/oats-runtime");
|
|
6
|
+
const assert = require("assert");
|
|
7
|
+
function adapter(router, requestContextCreator, middlewares) {
|
|
8
|
+
return (path, op, method, handler) => {
|
|
9
|
+
const koaPath = path.replace(/{([^}]+)}/g, (m, param) => ':' + param);
|
|
10
|
+
router[method](koaPath, ...middlewares, async (ctx) => {
|
|
11
|
+
const files = ctx.request.files;
|
|
12
|
+
let fileFields = {};
|
|
13
|
+
if (files) {
|
|
14
|
+
fileFields = Object.keys(files).reduce((memo, name) => {
|
|
15
|
+
memo[name] = new runtime.make.File(files[name].path, files[name].size, files[name].name);
|
|
16
|
+
return memo;
|
|
17
|
+
}, {});
|
|
18
|
+
}
|
|
19
|
+
const contentType = ctx.request.type;
|
|
20
|
+
const requestBody = ctx.request.body;
|
|
21
|
+
let body;
|
|
22
|
+
if (Array.isArray(requestBody)) {
|
|
23
|
+
body = { value: requestBody, contentType };
|
|
24
|
+
}
|
|
25
|
+
else if (typeof requestBody === 'object') {
|
|
26
|
+
const bodyWithFileFields = Object.assign(Object.assign({}, requestBody), fileFields);
|
|
27
|
+
body =
|
|
28
|
+
Object.keys(bodyWithFileFields).length > 0
|
|
29
|
+
? { value: bodyWithFileFields, contentType }
|
|
30
|
+
: undefined;
|
|
31
|
+
}
|
|
32
|
+
const result = await handler({
|
|
33
|
+
path,
|
|
34
|
+
method: runtime.server.assertMethod(ctx.method.toLowerCase()),
|
|
35
|
+
servers: [],
|
|
36
|
+
op,
|
|
37
|
+
headers: ctx.request.headers,
|
|
38
|
+
params: ctx.params,
|
|
39
|
+
query: ctx.query,
|
|
40
|
+
body,
|
|
41
|
+
requestContext: requestContextCreator(ctx)
|
|
42
|
+
});
|
|
43
|
+
ctx.body = result.value.value;
|
|
44
|
+
ctx.status = result.status;
|
|
45
|
+
ctx.set(result.headers);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Bind provided handlers for the OpenAPI routes
|
|
51
|
+
*
|
|
52
|
+
* Koa's default StateT and CustomT values are selected as defaults
|
|
53
|
+
* @param opts Named arguments to the function
|
|
54
|
+
* @param spec Deprecated use the named arguments
|
|
55
|
+
* @param requestContextCreator Deprecated
|
|
56
|
+
*/
|
|
57
|
+
function bind(opts, spec, requestContextCreator) {
|
|
58
|
+
const arg = typeof opts === 'function'
|
|
59
|
+
? { handler: opts, spec, requestContextCreator, middlewares: [] }
|
|
60
|
+
: opts;
|
|
61
|
+
assert(arg.spec, 'Missing spec argument -- please use the named argument version of bind');
|
|
62
|
+
const router = new Router();
|
|
63
|
+
arg.handler(adapter(router, arg.requestContextCreator || (() => ({})), arg.middlewares || []))(arg.spec);
|
|
64
|
+
return router;
|
|
65
|
+
}
|
|
66
|
+
exports.bind = bind;
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable no-console */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-floating-promises */
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const child = require("child_process");
|
|
7
|
+
const assert = require("assert");
|
|
8
|
+
const util = require("util");
|
|
9
|
+
const md = fs.readFileSync('README.template.md', 'utf8');
|
|
10
|
+
const examples = [];
|
|
11
|
+
fs.writeFileSync('README.md', md.replace(/^>>(.*)/gm, (match, file) => {
|
|
12
|
+
const m = file.trim();
|
|
13
|
+
const example = fs.readFileSync('./' + m, 'utf8');
|
|
14
|
+
const runner = example.split('\n')[0].match(/\/\/(.*)/)[1];
|
|
15
|
+
assert(runner, 'missing runner command');
|
|
16
|
+
examples.push(runner.trim());
|
|
17
|
+
return example;
|
|
18
|
+
}));
|
|
19
|
+
Promise.all(examples.map(async (example) => {
|
|
20
|
+
console.log('testing ' + example);
|
|
21
|
+
try {
|
|
22
|
+
await util.promisify(child.exec)(example);
|
|
23
|
+
return example + ': ok';
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
return example + ': error ' + e.message;
|
|
27
|
+
}
|
|
28
|
+
})).then(results => {
|
|
29
|
+
const errors = results.filter(result => /: error/.test(result));
|
|
30
|
+
if (errors.length > 0) {
|
|
31
|
+
console.error('errors in rendering');
|
|
32
|
+
errors.map(error => console.error(error));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
results.map(result => console.log(result));
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=render-docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-docs.js","sourceRoot":"","sources":["../render-docs.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,4DAA4D;;AAE5D,yBAAyB;AACzB,uCAAuC;AACvC,iCAAiC;AACjC,6BAA6B;AAE7B,MAAM,EAAE,GAAW,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;AACjE,MAAM,QAAQ,GAAa,EAAE,CAAC;AAC9B,EAAE,CAAC,aAAa,CACd,WAAW,EACX,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,OAAO,GAAQ,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC,CACH,CAAC;AAEF,OAAO,CAAC,GAAG,CACT,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;IAClC,IAAI;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,OAAO,GAAG,MAAM,CAAC;KACzB;IAAC,OAAO,CAAM,EAAE;QACf,OAAO,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC;KACzC;AACH,CAAC,CAAC,CACH,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;IACf,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smartlyio/oats-koa-adapter",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Koa adapter for Oats",
|
|
6
6
|
"private": false,
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"client"
|
|
38
38
|
],
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@smartlyio/oats-runtime": "^4.0.
|
|
40
|
+
"@smartlyio/oats-runtime": "^4.0.3",
|
|
41
41
|
"@types/koa": "2.13.4",
|
|
42
42
|
"@types/koa-router": "7.4.4",
|
|
43
43
|
"@types/lodash": "4.14.178",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"ts-node": "10.4.0",
|
|
49
49
|
"typescript": "4.5.4"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "5897af3aa6bea0c602978a10816c577a6b051c90"
|
|
52
52
|
}
|