Comparing version 2.1.4 to 2.2.0
@@ -5,2 +5,3 @@ import { Context, Middleware } from "koa"; | ||
import { ObjectShape } from "yup/lib/object"; | ||
import bodyParser from "koa-bodyparser"; | ||
declare type RecursivePartial<T> = { | ||
@@ -24,4 +25,6 @@ [P in keyof T]?: RecursivePartial<T[P]>; | ||
} & (RequestBody extends null ? { | ||
accept?: never; | ||
validation?: AnySchema; | ||
} : { | ||
accept: NonNullable<bodyParser.Options["enableTypes"]>; | ||
validation: ObjectSchema<RequestBody extends ObjectShape ? RequestBody : Record<string, never>>; | ||
@@ -28,0 +31,0 @@ }); |
@@ -32,4 +32,4 @@ "use strict"; | ||
const koa_router_1 = __importDefault(require("koa-router")); | ||
const koa_bodyparser_1 = __importDefault(require("koa-bodyparser")); | ||
const filesystem_1 = require("./util/filesystem"); | ||
const body_parser_1 = require("./middleware/body-parser"); | ||
/** | ||
@@ -47,23 +47,19 @@ * Creates a router at the specified port & hostname, sourcing | ||
const router = new koa_router_1.default(); | ||
app.use((context, next) => { | ||
next().catch((error) => { | ||
if (!(error instanceof SyntaxError)) | ||
return; | ||
context.status = 500; | ||
}); | ||
}); | ||
app.use((0, koa_bodyparser_1.default)()); | ||
app.use(router.routes()); | ||
middleware.forEach(app.use); | ||
const registerController = (path, controller) => { | ||
for (const { internalHandler, method, middleware } of controller) { | ||
const registerRouteController = (path, controller) => { | ||
for (const { internalHandler, method, middleware, accept } of controller) { | ||
const { pre = [], post = [] } = middleware || {}; | ||
const parsingMiddleware = accept ? [body_parser_1.handleParseError, body_parser_1.parseBody] : []; | ||
const middlewareChain = [ | ||
...parsingMiddleware, | ||
...pre, | ||
(context, next) => __awaiter(void 0, void 0, void 0, function* () { | ||
yield internalHandler(context); | ||
internalHandler, | ||
...post, | ||
].map((func) => { | ||
return (context, next) => __awaiter(void 0, void 0, void 0, function* () { | ||
yield func(context, next); | ||
yield next(); | ||
}), | ||
...post, | ||
]; | ||
}); | ||
}); | ||
if (typeof router[method] === "function") | ||
@@ -74,3 +70,3 @@ router[method](path, ...middlewareChain); | ||
for (const { getRoute, path } of (0, filesystem_1.mapDirectoryToRoutes)(routesFolder)) | ||
yield getRoute().then((controller) => registerController(path, controller)); | ||
yield getRoute().then((controller) => registerRouteController(path, controller)); | ||
return new Promise((resolve) => { | ||
@@ -77,0 +73,0 @@ app.listen(port, hostname, () => { |
@@ -15,4 +15,5 @@ /** | ||
} | undefined; | ||
accept: undefined; | ||
}[]>; | ||
path: string; | ||
}[]; |
@@ -10,2 +10,3 @@ import { RouteController } from "../@types/route-controller"; | ||
} | undefined; | ||
accept: undefined; | ||
}[]; |
@@ -30,5 +30,10 @@ "use strict"; | ||
}); | ||
return { method, internalHandler, middleware: rule.middleware }; | ||
return { | ||
method, | ||
internalHandler, | ||
middleware: rule.middleware, | ||
accept: rule.accept, | ||
}; | ||
}); | ||
}; | ||
exports.handleRoute = handleRoute; |
@@ -5,2 +5,3 @@ import { Context, Middleware } from "koa"; | ||
import { ObjectShape } from "yup/lib/object"; | ||
import bodyParser from "koa-bodyparser"; | ||
@@ -44,5 +45,7 @@ type RecursivePartial<T> = { | ||
? { | ||
accept?: never; | ||
validation?: AnySchema; | ||
} | ||
: { | ||
accept: NonNullable<bodyParser.Options["enableTypes"]>; | ||
validation: ObjectSchema< | ||
@@ -49,0 +52,0 @@ RequestBody extends ObjectShape ? RequestBody : Record<string, never> |
import Koa, { Next } from "koa"; | ||
import Router from "koa-router"; | ||
import bodyParser from "koa-bodyparser"; | ||
import { mapDirectoryToRoutes } from "@/util/filesystem"; | ||
import { handleRoute } from "@/util/routing"; | ||
import { handleParseError, parseBody } from "@/middleware/body-parser"; | ||
import { ExtendedContext } from "@/@types/http-method"; | ||
import { ParsedRouteController } from "@/@types/route-controller"; | ||
type ParsedController = ReturnType<typeof handleRoute>; | ||
interface CreateRouterParams { | ||
@@ -35,25 +33,23 @@ routesFolder: string; | ||
const router = new Router(); | ||
app.use((context, next) => { | ||
next().catch((error: Error) => { | ||
if (!(error instanceof SyntaxError)) return; | ||
context.status = 500; | ||
}); | ||
}); | ||
app.use(bodyParser()); | ||
app.use(router.routes()); | ||
middleware.forEach(app.use); | ||
const registerController = (path: string, controller: ParsedController) => { | ||
for (const { internalHandler, method, middleware } of controller) { | ||
const registerRouteController = ( | ||
path: string, | ||
controller: ParsedRouteController | ||
) => { | ||
for (const { internalHandler, method, middleware, accept } of controller) { | ||
const { pre = [], post = [] } = middleware || {}; | ||
const parsingMiddleware = accept ? [handleParseError, parseBody] : []; | ||
const middlewareChain = [ | ||
...parsingMiddleware, | ||
...pre, | ||
async (context: ExtendedContext, next: Next) => { | ||
await internalHandler(context); | ||
internalHandler, | ||
...post, | ||
].map((func) => { | ||
return async (context: ExtendedContext, next: Next) => { | ||
await func(context, next); | ||
await next(); | ||
}, | ||
...post, | ||
]; | ||
}; | ||
}); | ||
@@ -74,4 +70,4 @@ if (typeof router[method as keyof typeof router] === "function") | ||
for (const { getRoute, path } of mapDirectoryToRoutes(routesFolder)) | ||
await getRoute().then((controller: ParsedController) => | ||
registerController(path, controller) | ||
await getRoute().then((controller: ParsedRouteController) => | ||
registerRouteController(path, controller) | ||
); | ||
@@ -78,0 +74,0 @@ |
@@ -35,4 +35,9 @@ import { RouteController } from "@/@types/route-controller"; | ||
return { method, internalHandler, middleware: rule.middleware }; | ||
return { | ||
method, | ||
internalHandler, | ||
middleware: rule.middleware, | ||
accept: rule.accept, | ||
}; | ||
}); | ||
}; |
{ | ||
"name": "18h", | ||
"description": "A Next.js style dynamic API router for Koa-based APIs.", | ||
"version": "2.1.4", | ||
"version": "2.2.0", | ||
"repository": { | ||
@@ -6,0 +6,0 @@ "url": "https://github.com/ridafkih/18h" |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
30383
28
638