mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-05-19 05:03:32 +08:00
add swagger-hapi (#13629)
* add swagger-hapi * swagger-node-runner: fix hapi typings and add more tests
This commit is contained in:
51
swagger-hapi/index.d.ts
vendored
Normal file
51
swagger-hapi/index.d.ts
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
// Type definitions for swagger-hapi 0.7
|
||||
// Project: https://github.com/apigee-127/swagger-hapi#readme
|
||||
// Definitions by: Michael Mrowetz <https://github.com/micmro/>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
|
||||
/* =================== USAGE ===================
|
||||
|
||||
import * as SwaggerHapi from "swagger-hapi";
|
||||
import * as Hapi from "hapi";
|
||||
|
||||
var app = new Hapi.Server();
|
||||
let config: SwaggerHapi.Config = {
|
||||
appRoot: __dirname
|
||||
};
|
||||
|
||||
SwaggerHapi.create(config, (err, middleware) => {
|
||||
if (err) {
|
||||
throw err; // or handle error
|
||||
}
|
||||
var port = process.env.PORT || 10010;
|
||||
app.connection({ port });
|
||||
|
||||
app.register(middleware.plugin, function(err) {
|
||||
if (err) { return console.error("Failed to load plugin:", err); }
|
||||
app.start(function() {
|
||||
if (middleware.runner.swagger.paths['/hello']) {
|
||||
console.log('try this:\ncurl http://127.0.0.1:' + port + '/hello?name=Scott');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
=============================================== */
|
||||
|
||||
import { Config, HapiMiddleware } from "swagger-node-runner";
|
||||
|
||||
/** export interfaces */
|
||||
export { Config, HapiMiddleware } from "swagger-node-runner";
|
||||
|
||||
/**
|
||||
* Create a new instance of a Hapi specific `SwaggerNodeRunner` middleware
|
||||
*
|
||||
* The `swagger-node-runner` module has the following config priority:
|
||||
* 1. `swagger_*` environment vars
|
||||
* 2. `config` passed to `create()`
|
||||
* 3. read from swagger node in `default.yaml` in config directory
|
||||
* 4. module defaults
|
||||
*
|
||||
* @see @link{https://github.com/apigee-127/swagger-express|Github}
|
||||
*/
|
||||
export function create(config: Config, cb: (err: Error | undefined, middleware: HapiMiddleware) => void ): void;
|
||||
51
swagger-hapi/swagger-hapi-tests.ts
Normal file
51
swagger-hapi/swagger-hapi-tests.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import * as SwaggerHapi from "swagger-hapi";
|
||||
import * as Hapi from "hapi";
|
||||
|
||||
var app = new Hapi.Server();
|
||||
|
||||
module.exports = app; // for testing
|
||||
|
||||
var config = {
|
||||
appRoot: __dirname // required config
|
||||
} as SwaggerHapi.Config;
|
||||
|
||||
SwaggerHapi.create(config, function(err, swaggerHapi) {
|
||||
if (err) { throw err; }
|
||||
|
||||
var port = process.env.PORT || 10010;
|
||||
app.connection({ port });
|
||||
// app.address = function() {
|
||||
// return { port };
|
||||
// };
|
||||
|
||||
if (swaggerHapi.config.swagger !== undefined) {
|
||||
let appRootFromMw = swaggerHapi.config.swagger.appRoot;
|
||||
}
|
||||
|
||||
app.register(swaggerHapi.plugin, function(err) {
|
||||
if (err) { return console.error("Failed to load plugin:", err); }
|
||||
// stat app etc..
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
let swaggerSecurityHandlerCb = (err: Error) => {
|
||||
//do nothing
|
||||
};
|
||||
|
||||
|
||||
let configComplex: SwaggerHapi.Config = {
|
||||
appRoot: __dirname,
|
||||
configDir: "some/directory",
|
||||
controllersDirs: ["some/directory"],
|
||||
fittingsDirs: ["some/directory"],
|
||||
mockMode: true,
|
||||
swaggerControllerPipe: 'swagger_controllers',
|
||||
swaggerSecurityHandlers: {
|
||||
// did not manage to research the typings of first 3 arguments
|
||||
someHandlerName: ({}, {}, {}, swaggerSecurityHandlerCb) => {
|
||||
//do nothing
|
||||
}
|
||||
},
|
||||
validateResponse: true
|
||||
};
|
||||
20
swagger-hapi/tsconfig.json
Normal file
20
swagger-hapi/tsconfig.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"noImplicitAny": true,
|
||||
"noImplicitThis": true,
|
||||
"strictNullChecks": true,
|
||||
"baseUrl": "../",
|
||||
"typeRoots": [
|
||||
"../"
|
||||
],
|
||||
"types": [],
|
||||
"noEmit": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"files": [
|
||||
"index.d.ts",
|
||||
"swagger-hapi-tests.ts"
|
||||
]
|
||||
}
|
||||
1
swagger-hapi/tslint.json
Normal file
1
swagger-hapi/tslint.json
Normal file
@@ -0,0 +1 @@
|
||||
{ "extends": "../tslint.json" }
|
||||
41
swagger-node-runner/index.d.ts
vendored
41
swagger-node-runner/index.d.ts
vendored
@@ -33,6 +33,7 @@ SwaggerNodeRunner.create(config, (err, runner) => {
|
||||
import { Express, NextFunction } from "express";
|
||||
import { Spec } from "swagger-schema-official";
|
||||
import { EventEmitter } from "events";
|
||||
import * as Hapi from "hapi";
|
||||
|
||||
/**
|
||||
* Config object for SwaggerNodeRunner
|
||||
@@ -223,32 +224,34 @@ export interface SailsMiddleware extends Middleware {
|
||||
chain: () => (req: Express.Request, res: Express.Response, next: NextFunction) => void;
|
||||
}
|
||||
|
||||
/** Simplified interface of Hapi Server object */
|
||||
interface HapiServerMock {
|
||||
// tslint:disable-next-line:forbidden-types
|
||||
ext: (name: string, cb: Function) => void;
|
||||
// tslint:disable-next-line:forbidden-types
|
||||
on: (name: string, cb: Function) => void;
|
||||
}
|
||||
|
||||
/** Hapi specific Middleware */
|
||||
export interface HapiMiddleware extends Middleware {
|
||||
/** Back-reference to Config object of `Runner` that has created this middleware */
|
||||
config: ConfigInternal;
|
||||
/** swagger spec */
|
||||
sysConfig: Config;
|
||||
/** Register this Middleware with `app` */
|
||||
// tslint:disable-next-line:forbidden-types
|
||||
register: (app: any, cb: Function) => void;
|
||||
|
||||
/** Hapi Plugin */
|
||||
plugin: {
|
||||
/**
|
||||
* Registers middleware with `onRequest` and traces `request-error` callbacks
|
||||
* @param {HapiServerMock} server - Hapi server
|
||||
* @param {any} options - not used in the moment
|
||||
* @param {Function} next - callback called when register is done
|
||||
* Hapi plugin `register` implementation.
|
||||
* @see {@link https://hapijs.com/tutorials/plugins|Hapi Docs}
|
||||
*/
|
||||
// tslint:disable-next-line:forbidden-types
|
||||
register: (server: HapiServerMock, options: any, next: Function) => void
|
||||
register: {
|
||||
/**
|
||||
* Registers Plugin with `onRequest` and traces `request-error` callbacks
|
||||
* *
|
||||
* @param {Hapi.Server} server - Hapi server
|
||||
* @param {any} options - options for plugin (not used in the moment)
|
||||
* @param {()=>void} next - callback called when register is done
|
||||
*/
|
||||
(server: Hapi.Server, options: any, next: () => void): void;
|
||||
/** Object attached to `register` function to provide hapi with some additional information about the plugin */
|
||||
attributes: {
|
||||
/** Name of Plugin (e.g. `swagger-node-runner`) */
|
||||
name: string
|
||||
/** Version of Plugin*/
|
||||
version: string
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,27 +1,53 @@
|
||||
import * as SwaggerNodeRunner from "swagger-node-runner";
|
||||
import * as express from "express";
|
||||
import * as Hapi from "hapi";
|
||||
|
||||
let app = express();
|
||||
let config: SwaggerNodeRunner.Config = {
|
||||
appRoot: __dirname
|
||||
};
|
||||
|
||||
// Express middleware
|
||||
let expressApp = express();
|
||||
SwaggerNodeRunner.create(config, (err, runner) => {
|
||||
if (err) {
|
||||
throw err; // or handle error
|
||||
}
|
||||
let middleware = runner.expressMiddleware();
|
||||
middleware.register(app);
|
||||
let expressMiddleware = runner.expressMiddleware();
|
||||
expressMiddleware.register(expressApp);
|
||||
|
||||
const port = process.env.PORT || 10010;
|
||||
app.listen(port);
|
||||
expressApp.listen(port);
|
||||
});
|
||||
|
||||
|
||||
//Hapi Middleware
|
||||
var hapiapp = new Hapi.Server();
|
||||
SwaggerNodeRunner.create(config, function(err, runner) {
|
||||
if (err) { throw err; }
|
||||
|
||||
var port = process.env.PORT || 10010;
|
||||
hapiapp.connection({ port });
|
||||
// hapiapp.address = function() {
|
||||
// return { port };
|
||||
// };
|
||||
let hapiMiddleware = runner.hapiMiddleware();
|
||||
|
||||
if (hapiMiddleware.config.swagger !== undefined) {
|
||||
let appRootFromMw = hapiMiddleware.config.swagger.appRoot;
|
||||
}
|
||||
|
||||
let pluginAttributes = hapiMiddleware.plugin.register.attributes.name + hapiMiddleware.plugin.register.attributes.version;
|
||||
|
||||
hapiapp.register(hapiMiddleware.plugin, function(err) {
|
||||
if (err) { return console.error("Failed to load plugin:", err); }
|
||||
// stat app etc..
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
let swaggerSecurityHandlerCb = (err: Error) => {
|
||||
//do nothing
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
let configComplex: SwaggerNodeRunner.Config = {
|
||||
|
||||
Reference in New Issue
Block a user