derpibooru-api
Version:
Modern TypeScript implementation of Derpibooru API with Zod validation
44 lines (43 loc) • 1.45 kB
JavaScript
function safe(promiseOrFunc, options) {
if (promiseOrFunc instanceof Promise) {
return safeAsync(promiseOrFunc, options ?? {});
}
return safeSync(promiseOrFunc, options ?? {});
}
async function safeAsync(promise, options) {
try {
const data = await promise;
return { data, success: true };
}
catch (localError) {
if (options.errorMessage !== undefined) {
return { success: false, error: options.errorMessage };
}
if (localError instanceof Error) {
return { success: false, error: localError.message };
}
if (options.processError !== undefined) {
return { success: false, error: options.processError(localError) };
}
return { success: false, error: "Something went wrong" };
}
}
function safeSync(func, options) {
try {
const data = func();
return { data, success: true };
}
catch (localError) {
if (options.errorMessage !== undefined) {
return { success: false, error: options.errorMessage };
}
if (localError instanceof Error) {
return { success: false, error: localError.message };
}
if (options.processError !== undefined) {
return { success: false, error: options.processError(localError) };
}
return { success: false, error: "Something went wrong" };
}
}
export { safe };