@theia/core
Version:
Theia is a cloud & desktop IDE framework implemented in TypeScript.
64 lines (59 loc) • 2.81 kB
text/typescript
// *****************************************************************************
// Copyright (C) 2023 EclipseSource and others.
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// http://www.eclipse.org/legal/epl-2.0.
//
// This Source Code may also be made available under the following Secondary
// Licenses when the conditions for such availability set forth in the Eclipse
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
// with the GNU Classpath Exception which is available at
// https://www.gnu.org/software/classpath/license.html.
//
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
// *****************************************************************************
import { ContainerModule, Container } from 'inversify';
import { ILoggerServer, ILoggerClient, LogLevel, ConsoleLogger } from '../common/logger-protocol';
import { ILogger, Logger, LoggerFactory, LoggerName } from '../common/logger';
// is loaded directly after the regular logger frontend module
export const loggerFrontendOnlyModule = new ContainerModule((bind, unbind, isBound, rebind) => {
const logger: ILoggerServer = {
setLogLevel: async (_name: string, _logLevel: number): Promise<void> => { },
getLogLevel: async (_name: string): Promise<number> => LogLevel.INFO,
log: async (name: string, logLevel: number, message: string, params: unknown[]): Promise<void> => {
ConsoleLogger.log(name, logLevel, message, params);
},
child: async (_name: string): Promise<void> => { },
dispose: (): void => {
},
setClient: (_client: ILoggerClient | undefined): void => {
}
};
if (isBound(ILoggerServer)) {
rebind(ILoggerServer).toConstantValue(logger);
} else {
bind(ILoggerServer).toConstantValue(logger);
}
if (isBound(ILoggerServer)) {
rebind(LoggerFactory).toFactory(ctx =>
(name: string) => {
const child = new Container({ defaultScope: 'Singleton' });
child.parent = ctx.container;
child.bind(ILogger).to(Logger).inTransientScope();
child.bind(LoggerName).toConstantValue(name);
return child.get(ILogger);
}
);
} else {
bind(LoggerFactory).toFactory(ctx =>
(name: string) => {
const child = new Container({ defaultScope: 'Singleton' });
child.parent = ctx.container;
child.bind(ILogger).to(Logger).inTransientScope();
child.bind(LoggerName).toConstantValue(name);
return child.get(ILogger);
}
);
}
});