• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (C) 2018 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15export type ErrorHandler = (err: string) => void;
16
17let errorHandler: ErrorHandler = (_: string) => {};
18
19export function assertExists<A>(value: A | null | undefined): A {
20  if (value === null || value === undefined) {
21    throw new Error('Value doesn\'t exist');
22  }
23  return value;
24}
25
26export function assertTrue(value: boolean, optMsg?: string) {
27  if (value !== true) {
28    throw new Error(optMsg ? optMsg : 'Failed assertion');
29  }
30}
31
32export function assertFalse(value: boolean, optMsg?: string) {
33  assertTrue(!value, optMsg);
34}
35
36export function setErrorHandler(handler: ErrorHandler) {
37  errorHandler = handler;
38}
39
40export function reportError(err: ErrorEvent|PromiseRejectionEvent|{}) {
41  let errLog = '';
42  let errorObj = undefined;
43
44  if (err instanceof ErrorEvent) {
45    errLog = err.message;
46    errorObj = err.error;
47  } else if (err instanceof PromiseRejectionEvent) {
48    errLog = `${err.reason}`;
49    errorObj = err.reason;
50  } else {
51    errLog = `${err}`;
52  }
53  if (errorObj !== undefined) {
54    const errStack = (errorObj as {stack?: string}).stack;
55    errLog += '\n';
56    errLog += errStack !== undefined ? errStack : JSON.stringify(errorObj);
57  }
58  errLog += `\n\nUA: ${navigator.userAgent}\n`;
59
60  console.error(errLog, err);
61  errorHandler(errLog);
62}