From 1f9d158bdc212e8cb15b92039c9cd11884c9708c Mon Sep 17 00:00:00 2001 From: Nayeem Rahman Date: Sat, 29 Feb 2020 18:04:10 +0000 Subject: refactor(cli/js): Replace constructError() with getErrorClass() (#4189) Flattens dispatch error handling to produce one less useless stack frame on op errors. --- cli/js/dispatch_json.ts | 4 ++-- cli/js/dispatch_minimal.ts | 4 ++-- cli/js/errors.ts | 42 +++++++++++++++++++++--------------------- 3 files changed, 25 insertions(+), 25 deletions(-) (limited to 'cli/js') diff --git a/cli/js/dispatch_json.ts b/cli/js/dispatch_json.ts index 12c2d8821..63789044c 100644 --- a/cli/js/dispatch_json.ts +++ b/cli/js/dispatch_json.ts @@ -3,7 +3,7 @@ import * as util from "./util.ts"; import { TextEncoder, TextDecoder } from "./text_encoding.ts"; import { core } from "./core.ts"; import { OPS_CACHE } from "./runtime.ts"; -import { ErrorKind, constructError } from "./errors.ts"; +import { ErrorKind, getErrorClass } from "./errors.ts"; // eslint-disable-next-line @typescript-eslint/no-explicit-any type Ok = any; @@ -38,7 +38,7 @@ function encode(args: object): Uint8Array { function unwrapResponse(res: JsonResponse): Ok { if (res.err != null) { - return constructError(res.err!.kind, res.err!.message); + throw new (getErrorClass(res.err.kind))(res.err.message); } util.assert(res.ok != null); return res.ok; diff --git a/cli/js/dispatch_minimal.ts b/cli/js/dispatch_minimal.ts index 988cb8af2..5778b1333 100644 --- a/cli/js/dispatch_minimal.ts +++ b/cli/js/dispatch_minimal.ts @@ -2,7 +2,7 @@ import * as util from "./util.ts"; import { core } from "./core.ts"; import { TextDecoder } from "./text_encoding.ts"; -import { errors, ErrorKind, constructError } from "./errors.ts"; +import { ErrorKind, errors, getErrorClass } from "./errors.ts"; const promiseTableMin = new Map>(); // Note it's important that promiseId starts at 1 instead of 0, because sync @@ -56,7 +56,7 @@ export function recordFromBufMinimal(ui8: Uint8Array): RecordMinimal { function unwrapResponse(res: RecordMinimal): number { if (res.err != null) { - return constructError(res.err!.kind, res.err!.message); + throw new (getErrorClass(res.err.kind))(res.err.message); } return res.result; } diff --git a/cli/js/errors.ts b/cli/js/errors.ts index 0379f3c96..44f35b438 100644 --- a/cli/js/errors.ts +++ b/cli/js/errors.ts @@ -25,48 +25,48 @@ export enum ErrorKind { Other = 22 } -export function constructError(kind: ErrorKind, msg: string): never { +export function getErrorClass(kind: ErrorKind): { new (msg: string): Error } { switch (kind) { case ErrorKind.TypeError: - throw new TypeError(msg); + return TypeError; case ErrorKind.Other: - throw new Error(msg); + return Error; case ErrorKind.URIError: - throw new URIError(msg); + return URIError; case ErrorKind.NotFound: - throw new NotFound(msg); + return NotFound; case ErrorKind.PermissionDenied: - throw new PermissionDenied(msg); + return PermissionDenied; case ErrorKind.ConnectionRefused: - throw new ConnectionRefused(msg); + return ConnectionRefused; case ErrorKind.ConnectionReset: - throw new ConnectionReset(msg); + return ConnectionReset; case ErrorKind.ConnectionAborted: - throw new ConnectionAborted(msg); + return ConnectionAborted; case ErrorKind.NotConnected: - throw new NotConnected(msg); + return NotConnected; case ErrorKind.AddrInUse: - throw new AddrInUse(msg); + return AddrInUse; case ErrorKind.AddrNotAvailable: - throw new AddrNotAvailable(msg); + return AddrNotAvailable; case ErrorKind.BrokenPipe: - throw new BrokenPipe(msg); + return BrokenPipe; case ErrorKind.AlreadyExists: - throw new AlreadyExists(msg); + return AlreadyExists; case ErrorKind.InvalidData: - throw new InvalidData(msg); + return InvalidData; case ErrorKind.TimedOut: - throw new TimedOut(msg); + return TimedOut; case ErrorKind.Interrupted: - throw new Interrupted(msg); + return Interrupted; case ErrorKind.WriteZero: - throw new WriteZero(msg); + return WriteZero; case ErrorKind.UnexpectedEof: - throw new UnexpectedEof(msg); + return UnexpectedEof; case ErrorKind.BadResource: - throw new BadResource(msg); + return BadResource; case ErrorKind.Http: - throw new Http(msg); + return Http; } } -- cgit v1.2.3