Socket
Socket
Sign inDemoInstall

18h

Package Overview
Dependencies
Maintainers
1
Versions
44
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

18h - npm Package Compare versions

Comparing version 2.1.4 to 2.2.0

dist/middleware/body-parser.d.ts

3

dist/@types/http-method.d.ts

@@ -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 @@ });

30

dist/index.js

@@ -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"

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc