A few changes to Watermark and Error Handling
- Made it so Watermark doesn't initialize on the constructor, this makes it possible for tests to use `@spt-aki/di/Container`; - Removed unnecessary calls to `ErrorHandler.handleCriticalError`, all you really need to do is `throw new Error()` and it'll get caught automatically.
This commit is contained in:
parent
ad5e0815b6
commit
f354811ca8
@ -7,7 +7,7 @@ import { WinstonMainLogger } from "@spt-aki/utils/logging/WinstonMainLogger";
|
|||||||
|
|
||||||
export class ErrorHandler
|
export class ErrorHandler
|
||||||
{
|
{
|
||||||
private logger:ILogger;
|
private logger: ILogger;
|
||||||
private readLine: readline.Interface;
|
private readLine: readline.Interface;
|
||||||
|
|
||||||
constructor()
|
constructor()
|
||||||
@ -19,15 +19,17 @@ export class ErrorHandler
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public handleCriticalError(err: any): void
|
public handleCriticalError(err: Error): void
|
||||||
{
|
{
|
||||||
this.logger.error("The application had a critical error and failed to run");
|
this.logger.error("The application had a critical error and failed to run");
|
||||||
this.logger.error(`Exception produced: ${err}`);
|
this.logger.error(`Exception produced: ${err.name}`);
|
||||||
if (err.stack)
|
if (err.stack)
|
||||||
this.logger.error(`\nStacktrace:\n ${err.stack}`);
|
{
|
||||||
|
this.logger.error(`\nStacktrace:\n${err.stack}`);
|
||||||
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
this.readLine.question("Press Enter to close the window", (_ans) => this.readLine.close());
|
this.readLine.question("Press Enter to close the window", (_ans) => this.readLine.close());
|
||||||
this.readLine.on("close", () => process.exit(0));
|
this.readLine.on("close", () => process.exit(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,26 +18,25 @@ export class Program
|
|||||||
this.errorHandler = new ErrorHandler();
|
this.errorHandler = new ErrorHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
public start(): void
|
public async start(): Promise<void>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Container.registerTypes(container);
|
Container.registerTypes(container);
|
||||||
const childContainer = container.createChildContainer();
|
const childContainer = container.createChildContainer();
|
||||||
childContainer.resolve<Watermark>("Watermark");
|
const watermark = childContainer.resolve<Watermark>("Watermark");
|
||||||
|
watermark.initialize();
|
||||||
|
|
||||||
const preAkiModLoader = childContainer.resolve<PreAkiModLoader>("PreAkiModLoader");
|
const preAkiModLoader = childContainer.resolve<PreAkiModLoader>("PreAkiModLoader");
|
||||||
Container.registerListTypes(childContainer);
|
Container.registerListTypes(childContainer);
|
||||||
preAkiModLoader.load(childContainer)
|
await preAkiModLoader.load(childContainer);
|
||||||
.then(() =>
|
|
||||||
{
|
|
||||||
Container.registerPostLoadTypes(container, childContainer);
|
Container.registerPostLoadTypes(container, childContainer);
|
||||||
childContainer.resolve<App>("App").load();
|
childContainer.resolve<App>("App").load();
|
||||||
}).catch(rej => this.errorHandler.handleCriticalError(rej));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (e)
|
catch (err: any)
|
||||||
{
|
{
|
||||||
this.errorHandler.handleCriticalError(e);
|
this.errorHandler.handleCriticalError((err instanceof Error ? err : new Error(err)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { inject, injectable } from "tsyringe";
|
import { inject, injectable } from "tsyringe";
|
||||||
|
|
||||||
import { ErrorHandler } from "@spt-aki/ErrorHandler";
|
|
||||||
import { IPackageJsonData } from "@spt-aki/models/spt/mod/IPackageJsonData";
|
import { IPackageJsonData } from "@spt-aki/models/spt/mod/IPackageJsonData";
|
||||||
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
|
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
|
||||||
import { LocalisationService } from "@spt-aki/services/LocalisationService";
|
import { LocalisationService } from "@spt-aki/services/LocalisationService";
|
||||||
@ -115,10 +114,6 @@ export class ModLoadOrder
|
|||||||
|
|
||||||
if (visited.has(mod))
|
if (visited.has(mod))
|
||||||
{
|
{
|
||||||
// Front: white, back: red
|
|
||||||
const errorMessage = this.localisationService.getText("modloader-cyclic_dependency");
|
|
||||||
this.logger.error(errorMessage);
|
|
||||||
|
|
||||||
// Additional info to help debug
|
// Additional info to help debug
|
||||||
this.logger.debug(this.localisationService.getText("modloader-checking_mod", mod));
|
this.logger.debug(this.localisationService.getText("modloader-checking_mod", mod));
|
||||||
this.logger.debug(`${this.localisationService.getText("modloader-checked")}:`);
|
this.logger.debug(`${this.localisationService.getText("modloader-checked")}:`);
|
||||||
@ -126,15 +121,12 @@ export class ModLoadOrder
|
|||||||
this.logger.debug(`${this.localisationService.getText("modloader-visited")}:`);
|
this.logger.debug(`${this.localisationService.getText("modloader-visited")}:`);
|
||||||
this.logger.debug(JSON.stringify(visited, null, "\t"));
|
this.logger.debug(JSON.stringify(visited, null, "\t"));
|
||||||
|
|
||||||
// Wait for input
|
throw new Error(this.localisationService.getText("modloader-cyclic_dependency"));
|
||||||
const errorHandler = new ErrorHandler();
|
|
||||||
errorHandler.handleCriticalError({errorMessage});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check dependencies
|
// Check dependencies
|
||||||
if (!this.modsAvailable.has(mod))
|
if (!this.modsAvailable.has(mod))
|
||||||
{
|
{
|
||||||
this.logger.error(this.localisationService.getText("modloader-missing_dependency"));
|
|
||||||
throw new Error(this.localisationService.getText("modloader-error_parsing_mod_load_order"));
|
throw new Error(this.localisationService.getText("modloader-error_parsing_mod_load_order"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,10 +143,7 @@ export class ModLoadOrder
|
|||||||
{
|
{
|
||||||
if (this.modsAvailable.get(modAfter)?.loadAfter?.includes(mod))
|
if (this.modsAvailable.get(modAfter)?.loadAfter?.includes(mod))
|
||||||
{
|
{
|
||||||
const errorMessage = this.localisationService.getText("modloader-load_order_conflict", {modOneName: mod, modTwoName: modAfter});
|
throw new Error(this.localisationService.getText("modloader-load_order_conflict", {modOneName: mod, modTwoName: modAfter}));
|
||||||
this.logger.error(errorMessage);
|
|
||||||
const errorHandler = new ErrorHandler();
|
|
||||||
errorHandler.handleCriticalError(errorMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies.add(modAfter);
|
dependencies.add(modAfter);
|
||||||
|
@ -64,6 +64,8 @@ export class WatermarkLocale
|
|||||||
export class Watermark
|
export class Watermark
|
||||||
{
|
{
|
||||||
protected akiConfig: ICoreConfig;
|
protected akiConfig: ICoreConfig;
|
||||||
|
protected text: string[] = [];
|
||||||
|
protected versionLabel = "";
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@inject("WinstonLogger") protected logger: ILogger,
|
@inject("WinstonLogger") protected logger: ILogger,
|
||||||
@ -73,16 +75,8 @@ export class Watermark
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.akiConfig = this.configServer.getConfig<ICoreConfig>(ConfigTypes.CORE);
|
this.akiConfig = this.configServer.getConfig<ICoreConfig>(ConfigTypes.CORE);
|
||||||
|
|
||||||
this.initialize();
|
|
||||||
this.setTitle();
|
|
||||||
this.resetCursor();
|
|
||||||
this.draw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected text: string[] = [];
|
|
||||||
protected versionLabel = "";
|
|
||||||
|
|
||||||
public initialize(): void
|
public initialize(): void
|
||||||
{
|
{
|
||||||
const description = this.watermarkLocale.getDescription();
|
const description = this.watermarkLocale.getDescription();
|
||||||
@ -103,6 +97,10 @@ export class Watermark
|
|||||||
{
|
{
|
||||||
this.text = this.text.concat([...modding]);
|
this.text = this.text.concat([...modding]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.setTitle();
|
||||||
|
this.resetCursor();
|
||||||
|
this.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user