generator-theia
Version:
Theia Generator
71 lines (59 loc) • 2.51 kB
text/typescript
/*
* Copyright (C) 2017 TypeFox and others.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*/
import { AbstractGenerator, FileSystem } from "../common";
export abstract class AbstractBackendGenerator extends AbstractGenerator {
protected doGenerate(fs: FileSystem, backendModules: Map<string, string>): void {
fs.write(this.backend('server.js'), this.compileServer(backendModules));
fs.write(this.backend('main.js'), this.compileMain(backendModules));
}
protected compileServer(backendModules: Map<string, string>): string {
return `${this.compileCopyright()}
// @ts-check
require('reflect-metadata');
const path = require('path');
const express = require('express');
const { Container, injectable } = require('inversify');
const { BackendApplication } = require('@theia/core/lib/node');
const { backendApplicationModule } = require('@theia/core/lib/node/backend-application-module');
const { messagingBackendModule } = require('@theia/core/lib/node/messaging/messaging-backend-module');
const { loggerBackendModule } = require('@theia/core/lib/node/logger-backend-module');
const container = new Container();
container.load(backendApplicationModule);
container.load(messagingBackendModule);
container.load(loggerBackendModule);
function load(raw) {
return Promise.resolve(raw.default).then(module =>
container.load(module)
)
}
function start(port, host) {
const application = container.get(BackendApplication);
application.use(express.static(path.join(__dirname, '../../lib'), {
index: 'index.html'
}));
return application.start(port, host);
}
module.exports = (port, host) => Promise.resolve()${this.compileBackendModuleImports(backendModules)}
.then(() => start(port, host)).catch(reason => {
console.error('Failed to start the backend application.');
if (reason) {
console.error(reason);
}
throw reason;
});`;
}
protected compileMain(backendModules: Map<string, string>): string {
return `${this.compileCopyright()}
// @ts-check
const { port, hostname } = require('yargs').argv;
console.info("Starting express on port '" + port + "'.")
if (hostname) {
console.info("Allowed host is '" + hostname + "'.")
}
module.exports = require('./server')(port, hostname);`;
}
}