
* Require trailing commas * Add trailing commas * Add trailing commas in testUtils dir * Add trailing commas
52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import { TrackerMethods, TrackerPermission, UserData } from "./types";
|
|
|
|
type ErrorTrackerFactory = (
|
|
ExtensionFactory: TrackerMethods,
|
|
permissions?: TrackerPermission[],
|
|
) => TrackerMethods;
|
|
|
|
export const ErrorTrackerFactory: ErrorTrackerFactory = (
|
|
extension,
|
|
permissions = [],
|
|
) => {
|
|
let ENABLED = false;
|
|
|
|
const safelyInvoke = <T extends () => any>(
|
|
fn: T,
|
|
permission?: TrackerPermission,
|
|
): ReturnType<T> => {
|
|
const hasPermission =
|
|
permission !== undefined ? permissions.includes(permission) : true;
|
|
|
|
if (ENABLED && hasPermission) {
|
|
try {
|
|
return fn();
|
|
} catch (e) {
|
|
throw new Error(`Tracking Extension Error: ${e}`);
|
|
}
|
|
}
|
|
};
|
|
|
|
const init: TrackerMethods["init"] = () => {
|
|
if (!ENABLED) {
|
|
ENABLED = extension.init();
|
|
}
|
|
|
|
return ENABLED;
|
|
};
|
|
|
|
const setUserData: TrackerMethods["setUserData"] = (userData: UserData) =>
|
|
safelyInvoke(
|
|
() => extension.setUserData(userData),
|
|
TrackerPermission.USER_DATA,
|
|
);
|
|
|
|
const captureException: TrackerMethods["captureException"] = (e: Error) =>
|
|
safelyInvoke(() => extension.captureException(e));
|
|
|
|
return {
|
|
captureException,
|
|
init,
|
|
setUserData,
|
|
};
|
|
};
|