UNPKG

@exceptionless/node

Version:
69 lines 2.3 kB
export class NodeLifeCyclePlugin { priority = 105; name = "NodeLifeCyclePlugin"; _client = null; startup(context) { if (this._client) { return Promise.resolve(); } this._client = context.client; let processingBeforeExit = false; process.on("beforeExit", (code) => { // NOTE: We need to check if we are already processing a beforeExit event // as async work will cause the runtime to call this handler again. if (processingBeforeExit) { return; } processingBeforeExit = true; const message = this.getExitCodeReason(code); if (message) { void this._client?.submitLog("beforeExit", message, "Error"); } if (this._client?.config.sessionsEnabled) { void this._client?.submitSessionEnd(); } void this._client?.suspend(); // Application will now exit. }); return Promise.resolve(); } /** * exit codes: https://nodejs.org/api/process.html#process_event_exit * From now on, only synchronous code may run. As soon as this method * ends, the application inevitably will exit. */ getExitCodeReason(exitCode) { if (exitCode === 1) { return "Uncaught Fatal Exception"; } if (exitCode === 3) { return "Internal JavaScript Parse Error"; } if (exitCode === 4) { return "Internal JavaScript Evaluation Failure"; } if (exitCode === 5) { return "Fatal Exception"; } if (exitCode === 6) { return "Non-function Internal Exception Handler "; } if (exitCode === 7) { return "Internal Exception Handler Run-Time Failure"; } if (exitCode === 8) { return "Uncaught Exception"; } if (exitCode === 9) { return "Invalid Argument"; } if (exitCode === 10) { return "Internal JavaScript Run-Time Failure"; } if (exitCode === 12) { return "Invalid Debug Argument"; } return null; } } //# sourceMappingURL=NodeLifeCyclePlugin.js.map