103 lines
5.1 KiB
JavaScript
103 lines
5.1 KiB
JavaScript
// @ts-check
|
|
require('reflect-metadata');
|
|
const { performance } = require('perf_hooks');
|
|
const startupLog = (milestone) => console.debug(`Backend server: ${milestone} [${(performance.now() / 1000).toFixed(3)} s since backend process start]`);
|
|
startupLog('loading modules...');
|
|
|
|
// Erase the ELECTRON_RUN_AS_NODE variable from the environment, else Electron apps started using Theia will pick it up.
|
|
if ('ELECTRON_RUN_AS_NODE' in process.env) {
|
|
delete process.env.ELECTRON_RUN_AS_NODE;
|
|
}
|
|
|
|
const path = require('path');
|
|
process.env.THEIA_APP_PROJECT_PATH = path.resolve(__dirname, '..', '..')
|
|
const express = require('@theia/core/shared/express');
|
|
const { Container } = require('@theia/core/shared/inversify');
|
|
const { BackendApplication, BackendApplicationServer, CliManager } = 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);
|
|
startupLog('container created');
|
|
|
|
function defaultServeStatic(app) {
|
|
app.use(express.static(path.resolve(__dirname, '../../lib/frontend')))
|
|
}
|
|
|
|
function load(raw) {
|
|
return Promise.resolve(raw).then(
|
|
module => container.load(module.default)
|
|
);
|
|
}
|
|
|
|
async function start(port, host, argv = process.argv) {
|
|
if (!container.isBound(BackendApplicationServer)) {
|
|
container.bind(BackendApplicationServer).toConstantValue({ configure: defaultServeStatic });
|
|
}
|
|
let result = undefined;
|
|
await container.get(CliManager).initializeCli(argv.slice(2),
|
|
() => {
|
|
startupLog('resolving application');
|
|
const application = container.get(BackendApplication);
|
|
startupLog('application resolved');
|
|
return application.configured;
|
|
},
|
|
async () => {
|
|
result = container.get(BackendApplication).start(port, host);
|
|
});
|
|
if (result) {
|
|
return result;
|
|
} else {
|
|
return Promise.reject(0);
|
|
}
|
|
}
|
|
|
|
module.exports = async (port, host, argv) => {
|
|
try {
|
|
await load(require('@theia/core/lib/node/i18n/i18n-backend-module'));
|
|
await load(require('@theia/core/lib/node/hosting/backend-hosting-module'));
|
|
await load(require('@theia/core/lib/node/request/backend-request-module'));
|
|
await load(require('@git.zone/ide-extension-opencode/lib/node/gitzone-opencode-backend-module'));
|
|
await load(require('@git.zone/ide-extension-remote/lib/node/gitzone-remote-backend-module'));
|
|
await load(require('@theia/editor/lib/node/editor-backend-module'));
|
|
await load(require('@theia/filesystem/lib/node/filesystem-backend-module'));
|
|
await load(require('@theia/filesystem/lib/node/download/file-download-backend-module'));
|
|
await load(require('@theia/workspace/lib/node/workspace-backend-module'));
|
|
await load(require('@theia/markers/lib/node/problem-backend-module'));
|
|
await load(require('@theia/messages/lib/node/messages-backend-module'));
|
|
await load(require('@theia/navigator/lib/node/navigator-backend-module'));
|
|
await load(require('@theia/output/lib/node/output-backend-module'));
|
|
await load(require('@theia/ai-core/lib/node/ai-core-backend-module'));
|
|
await load(require('@theia/ai-mcp/lib/node/mcp-backend-module'));
|
|
await load(require('@theia/process/lib/common/process-common-module'));
|
|
await load(require('@theia/process/lib/node/process-backend-module'));
|
|
await load(require('@theia/file-search/lib/node/file-search-backend-module'));
|
|
await load(require('@theia/terminal/lib/node/terminal-backend-module'));
|
|
await load(require('@theia/preferences/lib/node/preference-backend-module'));
|
|
await load(require('@theia/task/lib/node/task-backend-module'));
|
|
await load(require('@theia/test/lib/node/test-backend-module'));
|
|
await load(require('@theia/debug/lib/node/debug-backend-module'));
|
|
await load(require('@theia/editor-preview/lib/node/editor-preview-backend-module'));
|
|
await load(require('@theia/notebook/lib/node/notebook-backend-module'));
|
|
await load(require('@theia/scm/lib/node/scm-backend-module'));
|
|
await load(require('@theia/search-in-workspace/lib/node/search-in-workspace-backend-module'));
|
|
await load(require('@theia/plugin-ext/lib/plugin-ext-backend-module'));
|
|
await load(require('@theia/plugin-ext-vscode/lib/node/plugin-vscode-backend-module'));
|
|
await load(require('@theia/vsx-registry/lib/common/vsx-registry-common-module'));
|
|
await load(require('@theia/vsx-registry/lib/node/vsx-registry-backend-module'));
|
|
startupLog('modules loaded');
|
|
return await start(port, host, argv);
|
|
} catch (error) {
|
|
if (typeof error !== 'number') {
|
|
console.error('Failed to start the backend application:');
|
|
console.error(error);
|
|
process.exitCode = 1;
|
|
}
|
|
throw error;
|
|
}
|
|
}
|