1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-01 09:24:20 -04:00
denoland-deno/js/errors.ts

41 lines
1.1 KiB
TypeScript
Raw Normal View History

2018-10-19 15:25:29 -04:00
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
import { Base, ErrorKind } from "gen/msg_generated";
export { ErrorKind } from "gen/msg_generated";
2018-10-14 16:29:50 -04:00
/** A Deno specific error. The `kind` property is set to a specific error code
* which can be used to in application logic.
*
* import { DenoError, ErrorKind } from "deno";
* try {
* somethingThatMightThrow();
* } catch (e) {
2018-12-13 04:57:02 -05:00
* if (e instanceof DenoError && e.kind === ErrorKind.Overflow) {
2018-10-14 16:29:50 -04:00
* console.error("Overflow error!");
* }
* }
*/
export class DenoError<T extends ErrorKind> extends Error {
constructor(readonly kind: T, msg: string) {
super(msg);
this.name = ErrorKind[kind];
}
}
// @internal
export function maybeThrowError(base: Base): void {
const err = maybeError(base);
if (err != null) {
throw err;
}
}
// @internal
export function maybeError(base: Base): null | DenoError<ErrorKind> {
const kind = base.errorKind();
if (kind === ErrorKind.NoError) {
return null;
} else {
return new DenoError(kind, base.error()!);
}
}