UNPKG

2.16 kBPlain TextView Raw
1const Hapi = require("hapi");
2import { EventBus } from "./lib/eventBus";
3import { createHistory as createInMemoryHistory } from "./lib/InMemoryEventHistory";
4import * as jobs from "./lib/jobs";
5import logger from "./lib/logger";
6import { ClientConfig, load } from "./lib/clientConfig";
7import { install as installHttpsEnforcement } from "./server/forceHttps";
8import { install as installRoutes } from "./server/routes";
9import { install as installLogging } from "./server/logging";
10import { install as installBasicAuth } from "./server/basicAuth";
11
12const installAssetHandling = async (
13 environment: string,
14 server: any,
15 clientConfig: ClientConfig
16) => {
17 if (environment === "development") {
18 const devMiddleware = await import("@dashbling/build-support/webpackDevMiddleware");
19 return devMiddleware.install(server, clientConfig);
20 } else {
21 const compiledAssets = await import("./server/compiledAssets");
22 return compiledAssets.install(server, clientConfig.projectPath);
23 }
24};
25
26const createEventHistory = (config: ClientConfig) => {
27 if (config.eventHistory instanceof Promise) {
28 return config.eventHistory;
29 }
30
31 if (config.eventHistory === false) {
32 return createInMemoryHistory();
33 }
34
35 throw new Error(`Invalid eventHistory: ${config.eventHistory}`);
36};
37
38export const start = async (projectPath: string, eventBus?: EventBus) => {
39 const clientConfig: ClientConfig = load(projectPath);
40 const environment = process.env.NODE_ENV || "production";
41
42 const history = await createEventHistory(clientConfig);
43 eventBus = eventBus || new EventBus(history);
44
45 const server = new Hapi.Server({
46 port: clientConfig.port
47 });
48
49 installLogging(server);
50 installHttpsEnforcement(server, clientConfig);
51 await installBasicAuth(server, clientConfig);
52 await installAssetHandling(environment, server, clientConfig);
53 installRoutes(server, eventBus, clientConfig);
54
55 const sendEvent = eventBus.publish.bind(eventBus);
56 jobs.start(clientConfig, sendEvent);
57 clientConfig.onStart(sendEvent);
58
59 await server.initialize();
60 await server.start();
61
62 logger.info("Server running at: %s", server.info.uri);
63 return server;
64};