Files
ide/applications/remote-theia/src-gen/backend/server.js
T
2026-05-10 14:08:25 +00:00

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;
}
}