| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| import * as http from "http" | ||
| import * as nodeFetch from "node-fetch" | ||
| import * as util from "../src/common/util" | ||
| import { ensureAddress } from "../src/node/app" | ||
|
|
||
| // Perhaps an abstraction similar to this should be used in app.ts as well. | ||
| export class HttpServer { | ||
| private hs = http.createServer() | ||
|
|
||
| public constructor(hs?: http.Server) { | ||
| // See usage in test/integration.ts | ||
| if (hs) { | ||
| this.hs = hs | ||
| } | ||
| } | ||
|
|
||
| /** | ||
| * listen starts the server on a random localhost port. | ||
| * Use close to cleanup when done. | ||
| */ | ||
| public listen(fn: http.RequestListener): Promise<void> { | ||
| this.hs.on("request", fn) | ||
|
|
||
| let resolved = false | ||
| return new Promise((res, rej) => { | ||
| this.hs.listen(0, "localhost", () => { | ||
| res() | ||
| resolved = true | ||
| }) | ||
|
|
||
| this.hs.on("error", (err) => { | ||
| if (!resolved) { | ||
| rej(err) | ||
| } else { | ||
| // Promise resolved earlier so this is some other error. | ||
| util.logError("http server error", err) | ||
| } | ||
| }) | ||
| }) | ||
| } | ||
|
|
||
| /** | ||
| * close cleans up the server. | ||
| */ | ||
| public close(): Promise<void> { | ||
| return new Promise((res, rej) => { | ||
| this.hs.close((err) => { | ||
| if (err) { | ||
| rej(err) | ||
| return | ||
| } | ||
| res() | ||
| }) | ||
| }) | ||
| } | ||
|
|
||
| /** | ||
| * fetch fetches the request path. | ||
| * The request path must be rooted! | ||
| */ | ||
| public fetch(requestPath: string, opts?: nodeFetch.RequestInit): Promise<nodeFetch.Response> { | ||
| return nodeFetch.default(`${ensureAddress(this.hs)}${requestPath}`, opts) | ||
| } | ||
|
|
||
| public port(): number { | ||
| const addr = this.hs.address() | ||
| if (addr && typeof addr === "object") { | ||
| return addr.port | ||
| } | ||
| throw new Error("server not listening or listening on unix socket") | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| import * as express from "express" | ||
| import { createApp } from "../src/node/app" | ||
| import { parse, setDefaults, parseConfigFile, DefaultedArgs } from "../src/node/cli" | ||
| import { register } from "../src/node/routes" | ||
| import * as httpserver from "./httpserver" | ||
|
|
||
| export async function setup( | ||
| argv: string[], | ||
| configFile?: string, | ||
| ): Promise<[express.Application, express.Application, httpserver.HttpServer, DefaultedArgs]> { | ||
| argv = ["--bind-addr=localhost:0", ...argv] | ||
|
|
||
| const cliArgs = parse(argv) | ||
| const configArgs = parseConfigFile(configFile || "", "test/integration.ts") | ||
| const args = await setDefaults(cliArgs, configArgs) | ||
|
|
||
| const [app, wsApp, server] = await createApp(args) | ||
| await register(app, wsApp, server, args) | ||
|
|
||
| return [app, wsApp, new httpserver.HttpServer(server), args] | ||
| } |
| Back | FazBrowse Home | New Git URL |
Uh oh!
There was an error while loading. Please reload this page.