From 93dd326391a802528c3ffd07b95d1c6696d7b75c Mon Sep 17 00:00:00 2001 From: Kevin Delisle Date: Fri, 26 Jan 2018 18:34:39 -0500 Subject: [PATCH] feat(rest): allow basePath in RestServer configuration --- packages/rest/src/keys.ts | 1 + packages/rest/src/rest-server.ts | 5 +++++ packages/rest/test/unit/rest-server/rest-server.test.ts | 8 ++++++++ 3 files changed, 14 insertions(+) diff --git a/packages/rest/src/keys.ts b/packages/rest/src/keys.ts index 5fe055882850..ef44d43feb73 100644 --- a/packages/rest/src/keys.ts +++ b/packages/rest/src/keys.ts @@ -10,6 +10,7 @@ export namespace RestBindings { export const CONFIG = `${CoreBindings.APPLICATION_CONFIG}#rest`; export const HOST = 'rest.host'; export const PORT = 'rest.port'; + export const BASE_PATH = 'rest.basePath'; export const HANDLER = 'rest.handler'; export const API_SPEC = 'rest.apiSpec'; diff --git a/packages/rest/src/rest-server.ts b/packages/rest/src/rest-server.ts index 3eef1ec85aed..1f5a77a3452a 100644 --- a/packages/rest/src/rest-server.ts +++ b/packages/rest/src/rest-server.ts @@ -142,8 +142,12 @@ export class RestServer extends Context implements Server { // Set it to '' so that the http server will listen on all interfaces options.host = undefined; } + if (!options.basePath) { + options.basePath = '/'; + } this.bind(RestBindings.PORT).to(options.port); this.bind(RestBindings.HOST).to(options.host); + this.bind(RestBindings.BASE_PATH).to(options.basePath); this.api(createEmptyApiSpec()); this.sequence(options.sequence ? options.sequence : DefaultSequence); @@ -595,6 +599,7 @@ export class RestServer extends Context implements Server { export interface RestServerConfig { host?: string; port?: number; + basePath?: string; apiExplorerUrl?: string; sequence?: Constructor; } diff --git a/packages/rest/test/unit/rest-server/rest-server.test.ts b/packages/rest/test/unit/rest-server/rest-server.test.ts index 8124f851ba88..0a1005dbe68b 100644 --- a/packages/rest/test/unit/rest-server/rest-server.test.ts +++ b/packages/rest/test/unit/rest-server/rest-server.test.ts @@ -15,6 +15,7 @@ import { InvokeMethod, RestBindings, RestComponent, + RestApplication, } from '../../..'; describe('RestServer', () => { @@ -98,6 +99,13 @@ describe('RestServer', () => { expect(server.getSync(RestBindings.PORT)).to.equal(4000); expect(server.getSync(RestBindings.HOST)).to.equal('my-host'); }); + + it('uses default basePath of "/"', async () => { + const app = new RestApplication(); + const server = await app.getServer(RestServer); + const basePath = await server.get(RestBindings.BASE_PATH); + expect(basePath).to.equal('/'); + }); }); async function givenRequestContext() {