travelers
Advanced tools
Comparing version 1.0.5 to 2.0.0
@@ -1,6 +0,4 @@ | ||
/// <reference types="koa-bodyparser" /> | ||
import * as Koa from "koa"; | ||
import { SwaggerDefalut, travelersApis } from './lib/api'; | ||
import { Code } from './lib/code'; | ||
import * as Router from "koa-router"; | ||
import { Request, Response, NextFunction, RequestHandler, Express, ErrorRequestHandler } from "express"; | ||
declare type travelersConfig<T> = { | ||
@@ -15,3 +13,3 @@ host?: String; | ||
controllers: { | ||
[key: string]: (ctx: travelersCtx) => Promise<any>; | ||
[key: string]: (req: Request, res: Response) => Promise<any>; | ||
}; | ||
@@ -21,3 +19,3 @@ }; | ||
config: travelersConfig<any>; | ||
before?: (app: Koa<Koa.DefaultState, Koa.DefaultContext>) => void; | ||
before?: (app: Express) => void; | ||
args: Args; | ||
@@ -28,8 +26,5 @@ srvs?: { | ||
swaggerDefalut?: SwaggerDefalut; | ||
after?: (app: Koa<Koa.DefaultState, Koa.DefaultContext>, obj: object) => void; | ||
after?: (app: Express, obj?: object) => void; | ||
}; | ||
export declare function travelers(option: travelersOption): Promise<void>; | ||
declare type App = Koa<Koa.DefaultState, Koa.DefaultContext>; | ||
declare type APPCtx = Koa.ParameterizedContext<Koa.DefaultState, Koa.DefaultContext>; | ||
declare type RouterCtx = Koa.ParameterizedContext<any, Router.IRouterParamContext<any, {}>>; | ||
declare global { | ||
@@ -44,10 +39,12 @@ namespace travelers { | ||
} | ||
interface travelersCtx extends RouterCtx { | ||
srvs: travelers.Srvs; | ||
$config: travelers.$config; | ||
declare module "express" { | ||
interface Request { | ||
srvs: travelers.Srvs; | ||
$config: travelers.$config; | ||
} | ||
} | ||
interface travelersApp extends App { | ||
interface App extends Express { | ||
srvs: travelers.Srvs; | ||
$config: travelers.$config; | ||
} | ||
export { travelersApis, travelersOption, App, APPCtx, RouterCtx, travelersCtx, travelersApp, Code }; | ||
export { Request, Response, NextFunction, RequestHandler, Express, ErrorRequestHandler, travelersApis, travelersOption, Code, App }; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const Koa = require("koa"); | ||
const api_1 = require("./lib/api"); | ||
const bodyparser = require("koa-bodyparser"); | ||
const json = require("koa-json"); | ||
const chalk = require("chalk"); | ||
const code_1 = require("./lib/code"); | ||
exports.Code = code_1.Code; | ||
const express = require("express"); | ||
async function travelers(option) { | ||
const app = new Koa(); | ||
const app = express(); | ||
let { config, before, args, swaggerDefalut, after, srvs } = option; | ||
@@ -18,10 +16,8 @@ const { host = '0.0.0.0', port = '3000' } = config; | ||
before(app); | ||
app.use(bodyparser({ | ||
enableTypes: ['json', 'form', 'text'] | ||
})); | ||
app.use(async (ctx, next) => { | ||
ctx.srvs = srvs; | ||
await next(); | ||
app.use(express.json()); | ||
app.use(express.urlencoded({ extended: false })); | ||
app.use((req, res, next) => { | ||
req["srvs"] = srvs; | ||
next(); | ||
}); | ||
app.use(json({})); | ||
await api_1.apiManage(app, apis, controllers, swaggerDefalut, config); | ||
@@ -34,3 +30,2 @@ if (after) | ||
exports.travelers = travelers; | ||
let a; | ||
//# sourceMappingURL=index.js.map |
@@ -1,5 +0,4 @@ | ||
/// <reference types="koa-bodyparser" /> | ||
import * as Koa from "koa"; | ||
/// <reference types="express" /> | ||
import * as joi from "joi"; | ||
import { travelersCtx } from "../index"; | ||
import { Request, Response, Express } from "../index"; | ||
declare type Info = { | ||
@@ -62,5 +61,5 @@ title: string; | ||
declare type ManageControllers = { | ||
[key: string]: (ctx: travelersCtx) => Promise<any>; | ||
[key: string]: (req: Request, res: Response) => Promise<any>; | ||
}; | ||
declare function apiManage(app: Koa<Koa.DefaultState, Koa.DefaultContext>, apis: ManageApis, controllers: ManageControllers, swaggerDefalut: SwaggerDefalut, config: any): Promise<void>; | ||
declare function apiManage(app: Express, apis: ManageApis, controllers: ManageControllers, swaggerDefalut: SwaggerDefalut, config: any): Promise<void>; | ||
export { SwaggerDefalut, apiManage, travelersApis, swagger, ManageApis, ManageControllers }; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const Router = require("koa-router"); | ||
const joi = require("joi"); | ||
const convert = require("joi-to-json-schema"); | ||
const serve = require("koa-static-server"); | ||
const path_1 = require("path"); | ||
const path = require("path"); | ||
const chalk = require("chalk"); | ||
const verify = require("./verify"); | ||
const express = require("express"); | ||
const swaggerDefalutSwagger = { | ||
@@ -35,3 +34,2 @@ swagger: '2.0', | ||
const host = '127.0.0.1'; | ||
const router = new Router(); | ||
verify.apiVerify(apis, controllers); | ||
@@ -89,39 +87,39 @@ Object.keys(apis).forEach(apiItem => { | ||
koaPath = koaPath.replace(/{/g, ':'); | ||
router[method](koaPath, async (ctx, next) => { | ||
// 验证 | ||
const _query = item.req.query || {}; | ||
const _body = item.req.body || {}; | ||
const _params = item.req.params || {}; | ||
let { params, request, response } = ctx; | ||
let { query, body } = request; | ||
console.log(`query : ${query}`, `params:${params}`, `body:${body}`); | ||
try { | ||
let queryKeys = Object.keys(query); | ||
for (const queryKey of queryKeys) { | ||
await joi.validate(query[queryKey], _query[queryKey]); | ||
app[method](koaPath, (req, res, next) => { | ||
(async function () { | ||
// 验证 | ||
const _query = item.req.query || {}; | ||
const _body = item.req.body || {}; | ||
const _params = item.req.params || {}; | ||
let { params, query, body } = req; | ||
try { | ||
let queryKeys = Object.keys(_query); | ||
for (const queryKey of queryKeys) { | ||
await joi.validate(query[queryKey], _query[queryKey]); | ||
} | ||
let paramsKeys = Object.keys(_params); | ||
for (const paramsKey of paramsKeys) { | ||
await joi.validate(params[paramsKey], _params[paramsKey]); | ||
} | ||
if (_body) | ||
await joi.validate(body, _body); | ||
} | ||
let paramsKeys = Object.keys(params); | ||
for (const paramsKey of paramsKeys) { | ||
await joi.validate(params[paramsKey], _params[paramsKey]); | ||
catch (error) { | ||
res.status(400).send(error); | ||
return; | ||
} | ||
if (_body) | ||
await joi.validate(body, _body); | ||
} | ||
catch (error) { | ||
response.status = 400; | ||
response.body = error.message; | ||
return; | ||
} | ||
// 处理 | ||
try { | ||
const result = await controllers[item.operationId]; | ||
if (result) | ||
response.body = result; | ||
} | ||
catch (error) { | ||
response.status = error.code || 500; | ||
response.body = error; | ||
return; | ||
} | ||
await next(); | ||
try { | ||
if (controllers[item.operationId]) { | ||
const result = await controllers[item.operationId](req, res); | ||
if (result) | ||
res.json(result); | ||
} | ||
else { | ||
next(); | ||
} | ||
} | ||
catch (error) { | ||
res.status(error.code || 500).send(error); | ||
} | ||
})(); | ||
}); | ||
@@ -132,11 +130,9 @@ }); | ||
exports.swagger = swagger = { ...swagger, ...swaggerDefalut }; | ||
app.use(serve({ rootDir: path_1.join(__dirname, '../../swagger'), gzip: true, rootPath: '/document' })); | ||
app.use('/document', express.static(path.join(__dirname, '../../swagger'))); | ||
console.log(chalk.bold.red(`document you can click: http://${host}:${port}/document`)); | ||
router.get('/swagger', (ctx) => { | ||
ctx.body = swagger; | ||
app.get('/swagger', (req, res, next) => { | ||
res.send(swagger); | ||
}); | ||
app.use(router.routes()); | ||
app.use(router.allowedMethods()); | ||
} | ||
exports.apiManage = apiManage; | ||
//# sourceMappingURL=api.js.map |
@@ -38,12 +38,18 @@ "use strict"; | ||
if (!key.includes('$')) { | ||
result[key] = codeAll[key]; | ||
result[key] = { | ||
resJson: function (res) { | ||
res.status(codeAll[key].code).send(codeAll[key]); | ||
} | ||
}; | ||
} | ||
else { | ||
result[key] = function (args) { | ||
let msg = codeAll[key].msg; | ||
Object.keys(args).forEach(objKey => { | ||
let replaceObj = `$${objKey}`; | ||
msg = msg.replace(replaceObj, args[objKey]); | ||
}); | ||
return msg; | ||
result[key] = { | ||
resJson: function (res, args) { | ||
let obj = codeAll[key]; | ||
Object.keys(args).forEach(objKey => { | ||
let replaceObj = `$${objKey}`; | ||
obj.msg = obj.msg.replace(replaceObj, args[objKey]); | ||
}); | ||
res.status(codeAll[key].code).send(obj); | ||
} | ||
}; | ||
@@ -50,0 +56,0 @@ } |
{ | ||
"name": "travelers", | ||
"version": "1.0.5", | ||
"version": "2.0.0", | ||
"description": "I wanna write code like travelers", | ||
@@ -18,3 +18,4 @@ "main": "dist/index.js", | ||
"keywords": [ | ||
"koa2", | ||
"express", | ||
"api", | ||
"joi", | ||
@@ -31,18 +32,11 @@ "swagger", | ||
"dependencies": { | ||
"@types/express": "^4.17.2", | ||
"@types/joi": "^14.3.4", | ||
"@types/node": "^12.12.3", | ||
"chalk": "^3.0.0", | ||
"express": "^4.17.1", | ||
"joi": "^14.3.1", | ||
"joi-to-json-schema": "^5.1.0", | ||
"koa": "^2.11.0", | ||
"koa-body": "^4.1.1", | ||
"koa-bodyparser": "^4.2.1", | ||
"koa-json": "^2.0.2", | ||
"koa-router": "^7.4.0", | ||
"koa-static-server": "^1.4.0" | ||
"joi-to-json-schema": "^5.1.0" | ||
}, | ||
"devDependencies": { | ||
"@types/joi": "^14.3.4", | ||
"@types/node": "^12.12.3", | ||
"@types/koa": "^2.0.51", | ||
"@types/koa-bodyparser": "^4.3.0", | ||
"@types/koa-router": "^7.0.42", | ||
"nodemon": "^1.19.4", | ||
@@ -49,0 +43,0 @@ "ts-node": "^8.4.1", |
@@ -11,3 +11,2 @@ | ||
2. 使用 | ||
import { travelers, travelersOption, travelersApis, travelersCtx } from 'travelers' | ||
@@ -43,9 +42,9 @@ ### src/apis/api.ts | ||
``` | ||
import { travelersCtx } from 'travelers' | ||
export async function everyDay_list(ctx: travelersCtx) { | ||
let { body, srvs } = ctx | ||
const { knex } = srvs | ||
ctx.body = { | ||
import { Request, Response } from "travelers"; | ||
export async function everyDay_list(req: Request, res: Response) { | ||
let { body, srvs } = req | ||
const { knex } = srvs | ||
res.json({ | ||
code: 200 | ||
} | ||
}) | ||
} | ||
@@ -55,5 +54,5 @@ | ||
### src/index.js | ||
### src/index.ts | ||
``` | ||
import { travelersOption, travelers } from 'travelers' | ||
import { travelers, travelersOption,Response,Request,NextFunction } from 'travelers' | ||
import * as apis from './apis/index' | ||
@@ -67,3 +66,3 @@ import * as srvs from './srvs/index' | ||
before: function (app) { | ||
app.use(cors()); | ||
}, | ||
@@ -76,3 +75,6 @@ srvs, | ||
after: function (app, obj: any) { | ||
app.use((req: Request, res: Response) => { | ||
const { codes } = req.srvs | ||
return codes.notfind.resJson(res) | ||
}) | ||
} | ||
@@ -79,0 +81,0 @@ } |
import * as Koa from "koa"; | ||
import { SwaggerDefalut, apiManage, travelersApis, swagger } from './lib/api' | ||
import * as bodyparser from 'koa-bodyparser'; | ||
import * as json from 'koa-json'; | ||
import * as chalk from 'chalk'; | ||
import { srvsCode, Code } from './lib/code' | ||
import * as Router from "koa-router"; | ||
import { Request, Response, NextFunction, RequestHandler, Express, ErrorRequestHandler } from "express"; | ||
import * as express from "express"; | ||
@@ -22,3 +20,3 @@ type travelersConfig<T> = { | ||
controllers: { | ||
[key: string]: (ctx: travelersCtx) => Promise<any> | ||
[key: string]: (req: Request, res: Response) => Promise<any> | ||
} | ||
@@ -29,3 +27,3 @@ } | ||
config: travelersConfig<any>, | ||
before?: (app: Koa<Koa.DefaultState, Koa.DefaultContext>) => void, | ||
before?: (app: Express) => void, | ||
args: Args, | ||
@@ -36,3 +34,3 @@ srvs?: { | ||
swaggerDefalut?: SwaggerDefalut, | ||
after?: (app: Koa<Koa.DefaultState, Koa.DefaultContext>, obj: object) => void | ||
after?: (app: Express, obj?: object) => void | ||
} | ||
@@ -42,3 +40,4 @@ | ||
export async function travelers(option: travelersOption) { | ||
const app = new Koa() | ||
const app = express() | ||
let { config, before, args, swaggerDefalut, after, srvs } = option | ||
@@ -49,12 +48,9 @@ const { host = '0.0.0.0', port = '3000' } = config | ||
srvs = srvsCode(srvs) | ||
if (before) before(app) | ||
app.use(bodyparser({ | ||
enableTypes: ['json', 'form', 'text'] | ||
})) | ||
app.use(async (ctx, next) => { | ||
ctx.srvs = srvs | ||
await next() | ||
app.use(express.json()); | ||
app.use(express.urlencoded({ extended: false })); | ||
app.use((req: Request, res: Response, next: NextFunction) => { | ||
req["srvs"] = srvs | ||
next() | ||
}) | ||
app.use(json({})) | ||
await apiManage(app, apis, controllers, swaggerDefalut, config) | ||
@@ -70,8 +66,3 @@ if (after) after(app, { swagger }) | ||
type App = Koa<Koa.DefaultState, Koa.DefaultContext> | ||
type APPCtx = Koa.ParameterizedContext<Koa.DefaultState, Koa.DefaultContext> | ||
type RouterCtx = Koa.ParameterizedContext<any, Router.IRouterParamContext<any, {}>> | ||
declare global { | ||
@@ -88,10 +79,10 @@ namespace travelers { | ||
interface travelersCtx extends RouterCtx { | ||
srvs: travelers.Srvs | ||
$config: travelers.$config | ||
declare module "express" { | ||
interface Request { | ||
srvs: travelers.Srvs | ||
$config: travelers.$config | ||
} | ||
} | ||
interface travelersApp extends App { | ||
interface App extends Express { | ||
srvs: travelers.Srvs | ||
@@ -101,5 +92,3 @@ $config: travelers.$config | ||
let a: travelersCtx | ||
export { Request, Response, NextFunction, RequestHandler, Express, ErrorRequestHandler, travelersApis, travelersOption, Code, App } | ||
export { travelersApis, travelersOption, App, APPCtx, RouterCtx, travelersCtx, travelersApp, Code } |
import * as Koa from "koa"; | ||
import * as Router from "koa-router"; | ||
import * as joi from "joi"; | ||
import * as convert from 'joi-to-json-schema' | ||
import * as serve from 'koa-static-server'; | ||
import { join } from 'path'; | ||
import { travelersCtx } from "../index"; | ||
import * as path from 'path'; | ||
import { Request, Response, Express, NextFunction } from "../index"; | ||
import * as chalk from 'chalk'; | ||
import * as verify from "./verify"; | ||
import * as express from "express"; | ||
@@ -83,7 +83,7 @@ const swaggerDefalutSwagger = { | ||
type ManageControllers = { | ||
[key: string]: (ctx: travelersCtx) => Promise<any> | ||
[key: string]: (req: Request, res: Response) => Promise<any> | ||
} | ||
async function apiManage( | ||
app: Koa<Koa.DefaultState, Koa.DefaultContext>, | ||
app: Express, | ||
apis: ManageApis, | ||
@@ -95,3 +95,2 @@ controllers: ManageControllers, | ||
const host = '127.0.0.1' | ||
const router = new Router() | ||
verify.apiVerify(apis, controllers) | ||
@@ -154,39 +153,36 @@ Object.keys(apis).forEach(apiItem => { | ||
koaPath = koaPath.replace(/{/g, ':') | ||
router[method](koaPath, async (ctx: Koa.ParameterizedContext<any, Router.IRouterParamContext<any, {}>>, next) => { | ||
// 验证 | ||
const _query = item.req.query || {} | ||
const _body = item.req.body || {} | ||
const _params = item.req.params || {} | ||
let { params, request, response } = ctx | ||
let { query, body } = request | ||
console.log(`query : ${query}`, `params:${params}`, `body:${body}`) | ||
try { | ||
let queryKeys = Object.keys(query) | ||
for (const queryKey of queryKeys) { | ||
await joi.validate(query[queryKey], _query[queryKey]) | ||
app[method](koaPath, (req: Request, res: Response, next: NextFunction) => { | ||
(async function () { | ||
// 验证 | ||
const _query = item.req.query || {} | ||
const _body = item.req.body || {} | ||
const _params = item.req.params || {} | ||
let { params, query, body } = req | ||
try { | ||
let queryKeys = Object.keys(_query) | ||
for (const queryKey of queryKeys) { | ||
await joi.validate(query[queryKey], _query[queryKey]) | ||
} | ||
let paramsKeys = Object.keys(_params) | ||
for (const paramsKey of paramsKeys) { | ||
await joi.validate(params[paramsKey], _params[paramsKey]) | ||
} | ||
if (_body) await joi.validate(body, _body) | ||
} catch (error) { | ||
res.status(400).send(error) | ||
return | ||
} | ||
let paramsKeys = Object.keys(params) | ||
for (const paramsKey of paramsKeys) { | ||
await joi.validate(params[paramsKey], _params[paramsKey]) | ||
try { | ||
if (controllers[item.operationId]) { | ||
const result = await controllers[item.operationId](req,res) | ||
if (result) res.json(result) | ||
} else { | ||
next() | ||
} | ||
} catch (error) { | ||
res.status(error.code || 500).send(error) | ||
} | ||
if (_body) await joi.validate(body, _body) | ||
} catch (error) { | ||
response.status = 400 | ||
response.body = error.message | ||
return | ||
} | ||
// 处理 | ||
try { | ||
const result = await controllers[item.operationId] | ||
if (result) response.body = result | ||
} catch (error) { | ||
response.status = error.code || 500 | ||
response.body = error | ||
return | ||
} | ||
await next() | ||
})() | ||
}) | ||
}) | ||
@@ -197,9 +193,8 @@ }) | ||
swagger = { ...swagger, ...swaggerDefalut } | ||
app.use(serve({ rootDir: join(__dirname, '../../swagger'), gzip: true, rootPath: '/document' })) | ||
app.use('/document', express.static(path.join(__dirname, '../../swagger'))); | ||
console.log(chalk.bold.red(`document you can click: http://${host}:${port}/document`)) | ||
router.get('/swagger', (ctx) => { | ||
ctx.body = swagger | ||
app.get('/swagger', (req, res, next) => { | ||
res.send(swagger) | ||
}) | ||
app.use(router.routes()) | ||
app.use(router.allowedMethods()) | ||
} | ||
@@ -206,0 +201,0 @@ |
@@ -32,20 +32,32 @@ const Code = { | ||
import { Request, Response, Express, NextFunction } from "../index"; | ||
type CodeType = { [key: string]: { code: number, msg: string } } | ||
type Result = { | ||
[key: string]: { | ||
resJson: (res: Response, args?: { [key: string]: string }) => void | ||
} | ||
} | ||
function HttpCode(codeAll: CodeType) { | ||
let result: { [key: string]: any } = { | ||
let result: Result = { | ||
} | ||
Object.keys(codeAll).forEach(key => { | ||
if (!key.includes('$')) { | ||
result[key] = codeAll[key] | ||
result[key] = { | ||
resJson: function (res) { | ||
res.status(codeAll[key].code).send(codeAll[key]) | ||
} | ||
} | ||
} else { | ||
result[key] = function (args: { [key: string]: string }) { | ||
let msg = codeAll[key].msg | ||
Object.keys(args).forEach(objKey => { | ||
let replaceObj = `$${objKey}` | ||
msg = msg.replace(replaceObj, args[objKey]) | ||
}) | ||
return msg | ||
result[key] = { | ||
resJson: function (res, args) { | ||
let obj = codeAll[key] | ||
Object.keys(args).forEach(objKey => { | ||
let replaceObj = `$${objKey}` | ||
obj.msg = obj.msg.replace(replaceObj, args[objKey]) | ||
}) | ||
res.status(codeAll[key].code).send(obj) | ||
} | ||
} | ||
@@ -52,0 +64,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
7
3
83
1471261
6330
+ Added@types/express@^4.17.2
+ Added@types/joi@^14.3.4
+ Added@types/node@^12.12.3
+ Addedexpress@^4.17.1
+ Added@types/body-parser@1.19.5(transitive)
+ Added@types/connect@3.4.38(transitive)
+ Added@types/express@4.17.21(transitive)
+ Added@types/express-serve-static-core@4.19.3(transitive)
+ Added@types/http-errors@2.0.4(transitive)
+ Added@types/joi@14.3.4(transitive)
+ Added@types/mime@1.3.5(transitive)
+ Added@types/node@12.20.55(transitive)
+ Added@types/qs@6.9.15(transitive)
+ Added@types/range-parser@1.2.7(transitive)
+ Added@types/send@0.17.4(transitive)
+ Added@types/serve-static@1.15.7(transitive)
+ Addedarray-flatten@1.1.1(transitive)
+ Addedbody-parser@1.20.2(transitive)
+ Addedcookie@0.6.0(transitive)
+ Addedcookie-signature@1.0.6(transitive)
+ Addeddebug@2.6.9(transitive)
+ Addedetag@1.8.1(transitive)
+ Addedexpress@4.19.2(transitive)
+ Addedfinalhandler@1.2.0(transitive)
+ Addedforwarded@0.2.0(transitive)
+ Addedipaddr.js@1.9.1(transitive)
+ Addedmerge-descriptors@1.0.1(transitive)
+ Addedmime@1.6.0(transitive)
+ Addedms@2.0.02.1.3(transitive)
+ Addedpath-to-regexp@0.1.7(transitive)
+ Addedproxy-addr@2.0.7(transitive)
+ Addedqs@6.11.0(transitive)
+ Addedrange-parser@1.2.1(transitive)
+ Addedsend@0.18.0(transitive)
+ Addedserve-static@1.15.0(transitive)
+ Addedutils-merge@1.0.1(transitive)
- Removedkoa@^2.11.0
- Removedkoa-body@^4.1.1
- Removedkoa-bodyparser@^4.2.1
- Removedkoa-json@^2.0.2
- Removedkoa-router@^7.4.0
- Removedkoa-static-server@^1.4.0
- Removed@hapi/bourne@3.0.0(transitive)
- Removed@types/formidable@1.2.8(transitive)
- Removed@types/node@20.14.2(transitive)
- Removedany-promise@1.3.0(transitive)
- Removedcache-content-type@1.0.1(transitive)
- Removedco@4.6.0(transitive)
- Removedco-body@5.2.06.2.0(transitive)
- Removedcookies@0.9.1(transitive)
- Removedcopy-to@2.0.1(transitive)
- Removedcore-util-is@1.0.3(transitive)
- Removeddebug@3.2.74.3.5(transitive)
- Removeddeep-equal@1.0.1(transitive)
- Removeddelegates@1.0.0(transitive)
- Removeddepd@1.1.2(transitive)
- Removedformidable@1.2.6(transitive)
- Removedhas-tostringtag@1.0.2(transitive)
- Removedhttp-assert@1.5.0(transitive)
- Removedhttp-errors@1.6.31.8.1(transitive)
- Removedinflation@2.1.0(transitive)
- Removedinherits@2.0.3(transitive)
- Removedis-generator-function@1.0.10(transitive)
- Removedisarray@0.0.11.0.0(transitive)
- Removedjson-stringify-safe@5.0.1(transitive)
- Removedkeygrip@1.1.0(transitive)
- Removedkoa@2.15.3(transitive)
- Removedkoa-body@4.2.0(transitive)
- Removedkoa-bodyparser@4.4.1(transitive)
- Removedkoa-compose@3.2.14.2.0(transitive)
- Removedkoa-convert@2.0.0(transitive)
- Removedkoa-is-json@1.0.0(transitive)
- Removedkoa-json@2.0.2(transitive)
- Removedkoa-router@7.4.0(transitive)
- Removedkoa-send@5.0.1(transitive)
- Removedkoa-static-server@1.5.2(transitive)
- Removedms@2.1.2(transitive)
- Removedonly@0.0.2(transitive)
- Removedpath-is-absolute@1.0.1(transitive)
- Removedpath-to-regexp@1.8.0(transitive)
- Removedprocess-nextick-args@2.0.1(transitive)
- Removedqs@6.12.1(transitive)
- Removedreadable-stream@2.3.8(transitive)
- Removedresolve-path@1.4.0(transitive)
- Removedsafe-buffer@5.1.2(transitive)
- Removedsetprototypeof@1.1.0(transitive)
- Removedstatuses@1.5.0(transitive)
- Removedstreaming-json-stringify@3.1.0(transitive)
- Removedstring_decoder@1.1.1(transitive)
- Removedtsscmp@1.0.6(transitive)
- Removedundici-types@5.26.5(transitive)
- Removedupath@1.2.0(transitive)
- Removedurijs@1.19.11(transitive)
- Removedutil-deprecate@1.0.2(transitive)
- Removedylru@1.4.0(transitive)