@alterior/express
Advanced tools
Comparing version 3.4.1 to 3.5.0
@@ -1,22 +0,12 @@ | ||
/// <reference types="node" /> | ||
import express from "express"; | ||
import * as http from "http"; | ||
import { Logger } from '@alterior/logging'; | ||
import { WebEvent } from "@alterior/web-server"; | ||
import { WebServerEngine } from "@alterior/web-server"; | ||
import { WebServerOptions } from '@alterior/web-server'; | ||
export declare class ExpressEngine implements WebServerEngine { | ||
private logger; | ||
constructor(logger: Logger); | ||
app: express.Application; | ||
get providers(): any[]; | ||
sendJsonBody(routeEvent: WebEvent, body: any): void; | ||
private readonly supportedMethods; | ||
private getRegistrarName; | ||
import express from "express"; | ||
export declare class ExpressEngine extends WebServerEngine { | ||
readonly app: express.Application; | ||
readonly providers: any[]; | ||
addConnectMiddleware(path: string, middleware: any): void; | ||
listen(options: WebServerOptions): Promise<http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>>; | ||
private log; | ||
addRoute(method: string, path: string, handler: (event: WebEvent) => void, middleware?: any): void; | ||
addAnyRoute(handler: (event: WebEvent) => void): void; | ||
private getRegistrarName; | ||
} | ||
//# sourceMappingURL=express-engine.d.ts.map |
@@ -1,121 +0,15 @@ | ||
import { __awaiter, __decorate, __metadata, __param } from "tslib"; | ||
import { __decorate } from "tslib"; | ||
import { Injectable } from '@alterior/di'; | ||
import { WebEvent } from "@alterior/web-server"; | ||
import { WebServerEngine } from "@alterior/web-server"; | ||
import express from "express"; | ||
import * as http from "http"; | ||
import * as https from "https"; | ||
import * as spdy from "spdy"; | ||
import { Logger } from '@alterior/logging'; | ||
import { Injectable, Optional } from '@alterior/di'; | ||
import { WebEvent } from "@alterior/web-server"; | ||
import { CertificateGenerator } from '@alterior/web-server'; | ||
let ExpressEngine = class ExpressEngine { | ||
constructor(logger) { | ||
this.logger = logger; | ||
this.supportedMethods = [ | ||
"checkout", "copy", "delete", "get", "head", "lock", "merge", | ||
"mkactivity", "mkcol", "move", "m-search", "notify", "options", | ||
"patch", "post", "purge", "put", "report", "search", "subscribe", | ||
"trace", "unlock", "unsubscribe", | ||
]; | ||
let ExpressEngine = class ExpressEngine extends WebServerEngine { | ||
constructor() { | ||
super(...arguments); | ||
this.app = express(); | ||
this.providers = []; | ||
} | ||
get providers() { | ||
return []; | ||
} | ||
sendJsonBody(routeEvent, body) { | ||
routeEvent.response.setHeader('Content-Type', 'application/json; charset=utf-8'); | ||
routeEvent.response.write(JSON.stringify(body)); | ||
routeEvent.response.end(); | ||
} | ||
getRegistrarName(method) { | ||
let registrar = method.toLowerCase(); | ||
if (!this.supportedMethods.includes(registrar)) | ||
throw new Error(`The specified method '${method}' is not supported by Express.`); | ||
return registrar; | ||
} | ||
addConnectMiddleware(path, middleware) { | ||
this.app.use(path, middleware); | ||
} | ||
listen(options) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
let server; | ||
let protocols; | ||
if (options.certificate) | ||
protocols = ['h2', 'spdy/3.1', 'spdy/3', 'spdy/2', 'http/1.1', 'http/1.0']; | ||
else | ||
protocols = ['http/1.1', 'http/1.0']; | ||
if (options.protocols) | ||
protocols = options.protocols; | ||
let spdyEnabled = protocols.some(x => x.startsWith('spdy/')) || protocols.includes('h2'); | ||
if (spdyEnabled && !options.certificate) { | ||
this.log('info', `WebServer: Configured for HTTP2 but no certificates are provided. Generating self-signed certificates for testing...`); | ||
let generator = new CertificateGenerator(); | ||
let certs = yield generator.generate([ | ||
{ | ||
name: 'commonName', | ||
value: 'example.org' | ||
}, { | ||
name: 'countryName', | ||
value: 'US' | ||
}, { | ||
shortName: 'ST', | ||
value: 'Virginia' | ||
}, { | ||
name: 'localityName', | ||
value: 'Blacksburg' | ||
}, { | ||
name: 'organizationName', | ||
value: 'Test' | ||
}, { | ||
shortName: 'OU', | ||
value: 'Test' | ||
} | ||
]); | ||
options.certificate = certs.cert; | ||
options.privateKey = certs.private; | ||
} | ||
if (options.certificate) { | ||
if (spdyEnabled) { | ||
server = spdy.createServer({ | ||
cert: options.certificate, | ||
key: options.privateKey, | ||
spdy: { | ||
protocols: options.protocols | ||
} | ||
}, this.app); | ||
} | ||
else { | ||
server = https.createServer({ | ||
cert: options.certificate, | ||
key: options.privateKey | ||
}, this.app); | ||
} | ||
} | ||
else { | ||
server = http.createServer(this.app); | ||
} | ||
this.log('info', `WebServer: Listening on port ${options.port}`); | ||
server.listen(options.port); | ||
server.on('upgrade', (req, socket, head) => { | ||
let res = new http.ServerResponse(req); | ||
req['__upgradeHead'] = head; | ||
res.assignSocket(req.socket); | ||
this.app(req, res); | ||
}); | ||
return server; | ||
}); | ||
} | ||
log(severity, message) { | ||
if (this.logger) | ||
this.logger.log(message, { severity }); | ||
else if (severity === 'info') | ||
console.info(message); | ||
else if (severity === 'warning') | ||
console.warn(message); | ||
else if (severity === 'error' || severity === 'fatal') | ||
console.error(message); | ||
else if (severity === 'debug') | ||
console.debug(message); | ||
else | ||
console.log(message); | ||
} | ||
addRoute(method, path, handler, middleware) { | ||
@@ -129,9 +23,13 @@ if (!middleware) | ||
} | ||
getRegistrarName(method) { | ||
let registrar = method.toLowerCase(); | ||
if (!this.supportedMethods.includes(registrar)) | ||
throw new Error(`The specified method '${method}' is not supported by Express.`); | ||
return registrar; | ||
} | ||
}; | ||
ExpressEngine = __decorate([ | ||
Injectable(), | ||
__param(0, Optional()), | ||
__metadata("design:paramtypes", [Logger]) | ||
Injectable() | ||
], ExpressEngine); | ||
export { ExpressEngine }; | ||
//# sourceMappingURL=express-engine.js.map |
@@ -1,22 +0,12 @@ | ||
/// <reference types="node" /> | ||
import express from "express"; | ||
import * as http from "http"; | ||
import { Logger } from '@alterior/logging'; | ||
import { WebEvent } from "@alterior/web-server"; | ||
import { WebServerEngine } from "@alterior/web-server"; | ||
import { WebServerOptions } from '@alterior/web-server'; | ||
export declare class ExpressEngine implements WebServerEngine { | ||
private logger; | ||
constructor(logger: Logger); | ||
app: express.Application; | ||
get providers(): any[]; | ||
sendJsonBody(routeEvent: WebEvent, body: any): void; | ||
private readonly supportedMethods; | ||
private getRegistrarName; | ||
import express from "express"; | ||
export declare class ExpressEngine extends WebServerEngine { | ||
readonly app: express.Application; | ||
readonly providers: any[]; | ||
addConnectMiddleware(path: string, middleware: any): void; | ||
listen(options: WebServerOptions): Promise<http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>>; | ||
private log; | ||
addRoute(method: string, path: string, handler: (event: WebEvent) => void, middleware?: any): void; | ||
addAnyRoute(handler: (event: WebEvent) => void): void; | ||
private getRegistrarName; | ||
} | ||
//# sourceMappingURL=express-engine.d.ts.map |
@@ -5,121 +5,15 @@ "use strict"; | ||
const tslib_1 = require("tslib"); | ||
const express_1 = tslib_1.__importDefault(require("express")); | ||
const http = tslib_1.__importStar(require("http")); | ||
const https = tslib_1.__importStar(require("https")); | ||
const spdy = tslib_1.__importStar(require("spdy")); | ||
const logging_1 = require("@alterior/logging"); | ||
const di_1 = require("@alterior/di"); | ||
const web_server_1 = require("@alterior/web-server"); | ||
const web_server_2 = require("@alterior/web-server"); | ||
let ExpressEngine = class ExpressEngine { | ||
constructor(logger) { | ||
this.logger = logger; | ||
this.supportedMethods = [ | ||
"checkout", "copy", "delete", "get", "head", "lock", "merge", | ||
"mkactivity", "mkcol", "move", "m-search", "notify", "options", | ||
"patch", "post", "purge", "put", "report", "search", "subscribe", | ||
"trace", "unlock", "unsubscribe", | ||
]; | ||
const express_1 = tslib_1.__importDefault(require("express")); | ||
let ExpressEngine = class ExpressEngine extends web_server_2.WebServerEngine { | ||
constructor() { | ||
super(...arguments); | ||
this.app = (0, express_1.default)(); | ||
this.providers = []; | ||
} | ||
get providers() { | ||
return []; | ||
} | ||
sendJsonBody(routeEvent, body) { | ||
routeEvent.response.setHeader('Content-Type', 'application/json; charset=utf-8'); | ||
routeEvent.response.write(JSON.stringify(body)); | ||
routeEvent.response.end(); | ||
} | ||
getRegistrarName(method) { | ||
let registrar = method.toLowerCase(); | ||
if (!this.supportedMethods.includes(registrar)) | ||
throw new Error(`The specified method '${method}' is not supported by Express.`); | ||
return registrar; | ||
} | ||
addConnectMiddleware(path, middleware) { | ||
this.app.use(path, middleware); | ||
} | ||
listen(options) { | ||
return tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
let server; | ||
let protocols; | ||
if (options.certificate) | ||
protocols = ['h2', 'spdy/3.1', 'spdy/3', 'spdy/2', 'http/1.1', 'http/1.0']; | ||
else | ||
protocols = ['http/1.1', 'http/1.0']; | ||
if (options.protocols) | ||
protocols = options.protocols; | ||
let spdyEnabled = protocols.some(x => x.startsWith('spdy/')) || protocols.includes('h2'); | ||
if (spdyEnabled && !options.certificate) { | ||
this.log('info', `WebServer: Configured for HTTP2 but no certificates are provided. Generating self-signed certificates for testing...`); | ||
let generator = new web_server_2.CertificateGenerator(); | ||
let certs = yield generator.generate([ | ||
{ | ||
name: 'commonName', | ||
value: 'example.org' | ||
}, { | ||
name: 'countryName', | ||
value: 'US' | ||
}, { | ||
shortName: 'ST', | ||
value: 'Virginia' | ||
}, { | ||
name: 'localityName', | ||
value: 'Blacksburg' | ||
}, { | ||
name: 'organizationName', | ||
value: 'Test' | ||
}, { | ||
shortName: 'OU', | ||
value: 'Test' | ||
} | ||
]); | ||
options.certificate = certs.cert; | ||
options.privateKey = certs.private; | ||
} | ||
if (options.certificate) { | ||
if (spdyEnabled) { | ||
server = spdy.createServer({ | ||
cert: options.certificate, | ||
key: options.privateKey, | ||
spdy: { | ||
protocols: options.protocols | ||
} | ||
}, this.app); | ||
} | ||
else { | ||
server = https.createServer({ | ||
cert: options.certificate, | ||
key: options.privateKey | ||
}, this.app); | ||
} | ||
} | ||
else { | ||
server = http.createServer(this.app); | ||
} | ||
this.log('info', `WebServer: Listening on port ${options.port}`); | ||
server.listen(options.port); | ||
server.on('upgrade', (req, socket, head) => { | ||
let res = new http.ServerResponse(req); | ||
req['__upgradeHead'] = head; | ||
res.assignSocket(req.socket); | ||
this.app(req, res); | ||
}); | ||
return server; | ||
}); | ||
} | ||
log(severity, message) { | ||
if (this.logger) | ||
this.logger.log(message, { severity }); | ||
else if (severity === 'info') | ||
console.info(message); | ||
else if (severity === 'warning') | ||
console.warn(message); | ||
else if (severity === 'error' || severity === 'fatal') | ||
console.error(message); | ||
else if (severity === 'debug') | ||
console.debug(message); | ||
else | ||
console.log(message); | ||
} | ||
addRoute(method, path, handler, middleware) { | ||
@@ -133,9 +27,13 @@ if (!middleware) | ||
} | ||
getRegistrarName(method) { | ||
let registrar = method.toLowerCase(); | ||
if (!this.supportedMethods.includes(registrar)) | ||
throw new Error(`The specified method '${method}' is not supported by Express.`); | ||
return registrar; | ||
} | ||
}; | ||
ExpressEngine = tslib_1.__decorate([ | ||
(0, di_1.Injectable)(), | ||
tslib_1.__param(0, (0, di_1.Optional)()), | ||
tslib_1.__metadata("design:paramtypes", [logging_1.Logger]) | ||
(0, di_1.Injectable)() | ||
], ExpressEngine); | ||
exports.ExpressEngine = ExpressEngine; | ||
//# sourceMappingURL=express-engine.js.map |
{ | ||
"name": "@alterior/express", | ||
"version": "3.4.1", | ||
"version": "3.5.0", | ||
"description": "Access Express state within an Alterior app", | ||
@@ -40,7 +40,6 @@ "author": "The Alterior Project (https://github.com/alterior-mvc)", | ||
"dependencies": { | ||
"@alterior/di": "^3.4.1", | ||
"@alterior/logging": "^3.4.1", | ||
"@alterior/web-server": "^3.4.1", | ||
"express": "^4.17.3", | ||
"spdy": "^4.0.2" | ||
"@alterior/di": "^3.5.0", | ||
"@alterior/logging": "^3.5.0", | ||
"@alterior/web-server": "^3.5.0", | ||
"express": "^4.17.3" | ||
}, | ||
@@ -51,3 +50,3 @@ "devDependencies": { | ||
}, | ||
"gitHead": "5de51ec91748dcfc2ebc5db648f59e0da154b347" | ||
"gitHead": "1fb8fea8c8d957fe543f7b6f69ae99c6bcc20156" | ||
} |
@@ -1,152 +0,17 @@ | ||
import express from "express"; | ||
import * as http from "http"; | ||
import * as https from "https"; | ||
import * as net from "net"; | ||
import * as spdy from "spdy"; | ||
import { Logger, LogSeverity } from '@alterior/logging'; | ||
import { Injectable, Optional } from '@alterior/di'; | ||
import { Injectable } from '@alterior/di'; | ||
import { WebEvent } from "@alterior/web-server"; | ||
import { WebServerEngine } from "@alterior/web-server"; | ||
import { WebServerOptions } from '@alterior/web-server'; | ||
import { CertificateGenerator } from '@alterior/web-server'; | ||
import express from "express"; | ||
@Injectable() | ||
export class ExpressEngine implements WebServerEngine { | ||
constructor( | ||
@Optional() private logger : Logger | ||
) { | ||
this.app = express(); | ||
} | ||
app : express.Application; | ||
export class ExpressEngine extends WebServerEngine { | ||
readonly app: express.Application = express(); | ||
readonly providers = []; | ||
get providers() { | ||
return []; | ||
} | ||
sendJsonBody(routeEvent : WebEvent, body : any) { | ||
routeEvent.response.setHeader('Content-Type', 'application/json; charset=utf-8'); | ||
routeEvent.response.write(JSON.stringify(body)) | ||
routeEvent.response.end(); | ||
} | ||
private readonly supportedMethods = [ | ||
"checkout", "copy", "delete", "get", "head", "lock", "merge", | ||
"mkactivity", "mkcol", "move", "m-search", "notify", "options", | ||
"patch", "post", "purge", "put", "report", "search", "subscribe", | ||
"trace", "unlock", "unsubscribe", | ||
]; | ||
private getRegistrarName(method : string) { | ||
let registrar = method.toLowerCase(); | ||
if (!this.supportedMethods.includes(registrar)) | ||
throw new Error(`The specified method '${method}' is not supported by Express.`); | ||
return registrar; | ||
} | ||
addConnectMiddleware(path : string, middleware : any) { | ||
addConnectMiddleware(path: string, middleware: any) { | ||
this.app.use(path, middleware); | ||
} | ||
async listen(options : WebServerOptions) { | ||
let server : http.Server; | ||
type Protocol = 'h2' | ||
| 'spdy/3.1' | ||
| 'spdy/3' | ||
| 'spdy/2' | ||
| 'http/1.1' | ||
| 'http/1.0'; | ||
let protocols : Protocol[]; | ||
if (options.certificate) | ||
protocols = ['h2', 'spdy/3.1', 'spdy/3', 'spdy/2', 'http/1.1', 'http/1.0']; | ||
else | ||
protocols = ['http/1.1', 'http/1.0']; | ||
if (options.protocols) | ||
protocols = options.protocols; | ||
let spdyEnabled = protocols.some(x => x.startsWith('spdy/')) || protocols.includes('h2'); | ||
if (spdyEnabled && !options.certificate) { | ||
this.log('info', `WebServer: Configured for HTTP2 but no certificates are provided. Generating self-signed certificates for testing...`); | ||
let generator = new CertificateGenerator(); | ||
let certs = await generator.generate([ | ||
{ | ||
name: 'commonName', | ||
value: 'example.org' | ||
}, { | ||
name: 'countryName', | ||
value: 'US' | ||
}, { | ||
shortName: 'ST', | ||
value: 'Virginia' | ||
}, { | ||
name: 'localityName', | ||
value: 'Blacksburg' | ||
}, { | ||
name: 'organizationName', | ||
value: 'Test' | ||
}, { | ||
shortName: 'OU', | ||
value: 'Test' | ||
} | ||
]); | ||
options.certificate = certs.cert; | ||
options.privateKey = certs.private; | ||
} | ||
if (options.certificate) { | ||
if (spdyEnabled) { | ||
server = spdy.createServer({ | ||
cert: options.certificate, | ||
key: options.privateKey, | ||
spdy: { | ||
protocols: options.protocols | ||
} | ||
}, this.app); | ||
} else { | ||
server = <http.Server><unknown>https.createServer({ | ||
cert: options.certificate, | ||
key: options.privateKey | ||
}, this.app); | ||
} | ||
} else { | ||
server = http.createServer(this.app); | ||
} | ||
this.log('info', `WebServer: Listening on port ${options.port}`); | ||
server.listen(options.port); | ||
server.on('upgrade', (req : http.IncomingMessage, socket : net.Socket, head : Buffer) => { | ||
let res = new http.ServerResponse(req); | ||
req['__upgradeHead'] = head; | ||
res.assignSocket(req.socket); | ||
this.app(req, res); | ||
}); | ||
return server; | ||
} | ||
private log(severity : LogSeverity, message : string) { | ||
if (this.logger) | ||
this.logger.log(message, { severity }); | ||
else if (severity === 'info') | ||
console.info(message); | ||
else if (severity === 'warning') | ||
console.warn(message); | ||
else if (severity === 'error' || severity === 'fatal') | ||
console.error(message); | ||
else if (severity === 'debug') | ||
console.debug(message); | ||
else | ||
console.log(message); | ||
} | ||
addRoute(method : string, path : string, handler : (event : WebEvent) => void, middleware?) { | ||
addRoute(method: string, path: string, handler: (event: WebEvent) => void, middleware?) { | ||
if (!middleware) | ||
@@ -161,5 +26,14 @@ middleware = []; | ||
addAnyRoute(handler : (event : WebEvent) => void) { | ||
addAnyRoute(handler: (event: WebEvent) => void) { | ||
this.app.use((req, res) => handler(new WebEvent(req, res))); | ||
} | ||
private getRegistrarName(method: string) { | ||
let registrar = method.toLowerCase(); | ||
if (!this.supportedMethods.includes(registrar)) | ||
throw new Error(`The specified method '${method}' is not supported by Express.`); | ||
return registrar; | ||
} | ||
} |
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
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
4
1
17074
207
- Removedspdy@^4.0.2
Updated@alterior/di@^3.5.0
Updated@alterior/logging@^3.5.0
Updated@alterior/web-server@^3.5.0