1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-09 15:48:16 -05:00

refactor(cli/js): Replace constructError() with getErrorClass() (#4189)

Flattens dispatch error handling to produce one less useless stack frame on op errors.
This commit is contained in:
Nayeem Rahman 2020-02-29 18:04:10 +00:00 committed by GitHub
parent f55b22e195
commit 1f9d158bdc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 32 additions and 39 deletions

View file

@ -3,7 +3,7 @@ import * as util from "./util.ts";
import { TextEncoder, TextDecoder } from "./text_encoding.ts"; import { TextEncoder, TextDecoder } from "./text_encoding.ts";
import { core } from "./core.ts"; import { core } from "./core.ts";
import { OPS_CACHE } from "./runtime.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 // eslint-disable-next-line @typescript-eslint/no-explicit-any
type Ok = any; type Ok = any;
@ -38,7 +38,7 @@ function encode(args: object): Uint8Array {
function unwrapResponse(res: JsonResponse): Ok { function unwrapResponse(res: JsonResponse): Ok {
if (res.err != null) { 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); util.assert(res.ok != null);
return res.ok; return res.ok;

View file

@ -2,7 +2,7 @@
import * as util from "./util.ts"; import * as util from "./util.ts";
import { core } from "./core.ts"; import { core } from "./core.ts";
import { TextDecoder } from "./text_encoding.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<number, util.Resolvable<RecordMinimal>>(); const promiseTableMin = new Map<number, util.Resolvable<RecordMinimal>>();
// Note it's important that promiseId starts at 1 instead of 0, because sync // 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 { function unwrapResponse(res: RecordMinimal): number {
if (res.err != null) { if (res.err != null) {
return constructError(res.err!.kind, res.err!.message); throw new (getErrorClass(res.err.kind))(res.err.message);
} }
return res.result; return res.result;
} }

View file

@ -25,48 +25,48 @@ export enum ErrorKind {
Other = 22 Other = 22
} }
export function constructError(kind: ErrorKind, msg: string): never { export function getErrorClass(kind: ErrorKind): { new (msg: string): Error } {
switch (kind) { switch (kind) {
case ErrorKind.TypeError: case ErrorKind.TypeError:
throw new TypeError(msg); return TypeError;
case ErrorKind.Other: case ErrorKind.Other:
throw new Error(msg); return Error;
case ErrorKind.URIError: case ErrorKind.URIError:
throw new URIError(msg); return URIError;
case ErrorKind.NotFound: case ErrorKind.NotFound:
throw new NotFound(msg); return NotFound;
case ErrorKind.PermissionDenied: case ErrorKind.PermissionDenied:
throw new PermissionDenied(msg); return PermissionDenied;
case ErrorKind.ConnectionRefused: case ErrorKind.ConnectionRefused:
throw new ConnectionRefused(msg); return ConnectionRefused;
case ErrorKind.ConnectionReset: case ErrorKind.ConnectionReset:
throw new ConnectionReset(msg); return ConnectionReset;
case ErrorKind.ConnectionAborted: case ErrorKind.ConnectionAborted:
throw new ConnectionAborted(msg); return ConnectionAborted;
case ErrorKind.NotConnected: case ErrorKind.NotConnected:
throw new NotConnected(msg); return NotConnected;
case ErrorKind.AddrInUse: case ErrorKind.AddrInUse:
throw new AddrInUse(msg); return AddrInUse;
case ErrorKind.AddrNotAvailable: case ErrorKind.AddrNotAvailable:
throw new AddrNotAvailable(msg); return AddrNotAvailable;
case ErrorKind.BrokenPipe: case ErrorKind.BrokenPipe:
throw new BrokenPipe(msg); return BrokenPipe;
case ErrorKind.AlreadyExists: case ErrorKind.AlreadyExists:
throw new AlreadyExists(msg); return AlreadyExists;
case ErrorKind.InvalidData: case ErrorKind.InvalidData:
throw new InvalidData(msg); return InvalidData;
case ErrorKind.TimedOut: case ErrorKind.TimedOut:
throw new TimedOut(msg); return TimedOut;
case ErrorKind.Interrupted: case ErrorKind.Interrupted:
throw new Interrupted(msg); return Interrupted;
case ErrorKind.WriteZero: case ErrorKind.WriteZero:
throw new WriteZero(msg); return WriteZero;
case ErrorKind.UnexpectedEof: case ErrorKind.UnexpectedEof:
throw new UnexpectedEof(msg); return UnexpectedEof;
case ErrorKind.BadResource: case ErrorKind.BadResource:
throw new BadResource(msg); return BadResource;
case ErrorKind.Http: case ErrorKind.Http:
throw new Http(msg); return Http;
} }
} }

View file

@ -1,7 +1,6 @@
[WILDCARD] [WILDCARD]
error: Uncaught BadResource: bad resource id error: Uncaught BadResource: bad resource id
[WILDCARD]errors.ts:[WILDCARD] [WILDCARD]dispatch_json.ts:[WILDCARD]
at BadResource ([WILDCARD]errors.ts:[WILDCARD]) at BadResource ([WILDCARD]errors.ts:[WILDCARD])
at constructError ([WILDCARD]errors.ts:[WILDCARD])
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD]) at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
at sendAsync ([WILDCARD]dispatch_json.ts:[WILDCARD]) at sendAsync ([WILDCARD]dispatch_json.ts:[WILDCARD])

View file

@ -1,6 +1,5 @@
[WILDCARD]error: Uncaught NotFound: Cannot resolve module "[WILDCARD]/bad-module.ts" from "[WILDCARD]/error_004_missing_module.ts" [WILDCARD]error: Uncaught NotFound: Cannot resolve module "[WILDCARD]/bad-module.ts" from "[WILDCARD]/error_004_missing_module.ts"
[WILDCARD]errors.ts:[WILDCARD] [WILDCARD]dispatch_json.ts:[WILDCARD]
at NotFound ([WILDCARD]errors.ts:[WILDCARD]) at NotFound ([WILDCARD]errors.ts:[WILDCARD])
at constructError ([WILDCARD]errors.ts:[WILDCARD])
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD]) at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
at sendAsync[WILDCARD] ([WILDCARD]dispatch_json.ts:[WILDCARD]) at sendAsync[WILDCARD] ([WILDCARD]dispatch_json.ts:[WILDCARD])

View file

@ -1,6 +1,5 @@
[WILDCARD]error: Uncaught NotFound: Cannot resolve module "[WILDCARD]/bad-module.ts" from "[WILDCARD]/error_005_missing_dynamic_import.ts" [WILDCARD]error: Uncaught NotFound: Cannot resolve module "[WILDCARD]/bad-module.ts" from "[WILDCARD]/error_005_missing_dynamic_import.ts"
[WILDCARD]errors.ts:[WILDCARD] [WILDCARD]dispatch_json.ts:[WILDCARD]
at NotFound ([WILDCARD]errors.ts:[WILDCARD]) at NotFound ([WILDCARD]errors.ts:[WILDCARD])
at constructError ([WILDCARD]errors.ts:[WILDCARD])
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD]) at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
at sendAsync[WILDCARD] ([WILDCARD]dispatch_json.ts:[WILDCARD]) at sendAsync[WILDCARD] ([WILDCARD]dispatch_json.ts:[WILDCARD])

View file

@ -1,6 +1,5 @@
[WILDCARD]error: Uncaught NotFound: Cannot resolve module "[WILDCARD]/non-existent" from "[WILDCARD]/error_006_import_ext_failure.ts" [WILDCARD]error: Uncaught NotFound: Cannot resolve module "[WILDCARD]/non-existent" from "[WILDCARD]/error_006_import_ext_failure.ts"
[WILDCARD]errors.ts:[WILDCARD] [WILDCARD]dispatch_json.ts:[WILDCARD]
at NotFound ([WILDCARD]errors.ts:[WILDCARD]) at NotFound ([WILDCARD]errors.ts:[WILDCARD])
at constructError ([WILDCARD]errors.ts:[WILDCARD])
at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD]) at unwrapResponse ([WILDCARD]dispatch_json.ts:[WILDCARD])
at sendAsync[WILDCARD] ([WILDCARD]dispatch_json.ts:[WILDCARD]) at sendAsync[WILDCARD] ([WILDCARD]dispatch_json.ts:[WILDCARD])

View file

@ -1,6 +1,5 @@
[WILDCARD]error: Uncaught URIError: relative import path "bad-module.ts" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/error_011_bad_module_specifier.ts" [WILDCARD]error: Uncaught URIError: relative import path "bad-module.ts" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/error_011_bad_module_specifier.ts"
[WILDCARD]errors.ts:[WILDCARD] [WILDCARD]dispatch_json.ts:[WILDCARD]
at constructError ($deno$/errors.ts:[WILDCARD])
at unwrapResponse ($deno$/dispatch_json.ts:[WILDCARD]) at unwrapResponse ($deno$/dispatch_json.ts:[WILDCARD])
at sendSync ($deno$/dispatch_json.ts:[WILDCARD]) at sendSync ($deno$/dispatch_json.ts:[WILDCARD])
at resolveModules ($deno$/compiler_imports.ts:[WILDCARD]) at resolveModules ($deno$/compiler_imports.ts:[WILDCARD])

View file

@ -1,6 +1,5 @@
[WILDCARD]error: Uncaught URIError: relative import path "bad-module.ts" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/error_012_bad_dynamic_import_specifier.ts" [WILDCARD]error: Uncaught URIError: relative import path "bad-module.ts" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/error_012_bad_dynamic_import_specifier.ts"
[WILDCARD]errors.ts:[WILDCARD] [WILDCARD]dispatch_json.ts:[WILDCARD]
at constructError ($deno$/errors.ts:[WILDCARD])
at unwrapResponse ($deno$/dispatch_json.ts:[WILDCARD]) at unwrapResponse ($deno$/dispatch_json.ts:[WILDCARD])
at sendSync ($deno$/dispatch_json.ts:[WILDCARD]) at sendSync ($deno$/dispatch_json.ts:[WILDCARD])
at resolveModules ($deno$/compiler_imports.ts:[WILDCARD]) at resolveModules ($deno$/compiler_imports.ts:[WILDCARD])

View file

@ -1,6 +1,5 @@
[WILDCARD]error: Uncaught URIError: relative import path "baz" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/type_definitions/bar.d.ts" [WILDCARD]error: Uncaught URIError: relative import path "baz" not prefixed with / or ./ or ../ Imported from "[WILDCARD]/type_definitions/bar.d.ts"
[WILDCARD]errors.ts:[WILDCARD] [WILDCARD]dispatch_json.ts:[WILDCARD]
at constructError ($deno$/errors.ts:[WILDCARD])
at unwrapResponse ($deno$/dispatch_json.ts:[WILDCARD]) at unwrapResponse ($deno$/dispatch_json.ts:[WILDCARD])
at sendSync ($deno$/dispatch_json.ts:[WILDCARD]) at sendSync ($deno$/dispatch_json.ts:[WILDCARD])
at resolveModules ($deno$/compiler_imports.ts:[WILDCARD]) at resolveModules ($deno$/compiler_imports.ts:[WILDCARD])