@mic-rexjs/usecases
Version:
Usecases of Clean Architecture
69 lines (68 loc) • 2.37 kB
JavaScript
import { createUseCase } from '../../methods/createUseCase';
export const rejectedErrorUseCase = createUseCase(() => {
let initOptions = {};
return () => {
const initRejectedError = (options) => {
initOptions = options;
};
const reject = (code, msg, data) => {
const error = {
code,
msg,
data,
content: typeof data === 'object' && data?.toString === Object.prototype.toString
? JSON.stringify(data)
: `${data instanceof Error ? data.stack : data}`,
};
initOptions.onReject?.(error);
return Promise.reject(error);
};
const rejectCode = (code) => {
return reject(code, '', null);
};
const rejectMsg = (code, msg) => {
return reject(code, msg, null);
};
const rejectData = (code, data) => {
return reject(code, '', data);
};
const resolve = (target, rejectedCode, rejectedMsg) => {
return resolveWith(target, (res) => {
return res;
}, rejectedCode, rejectedMsg);
};
const resolveId = (target, rejectedMsg) => {
return resolveWith(target, (unsafedId) => {
if (unsafedId) {
return unsafedId;
}
throw unsafedId;
}, rejectedMsg);
};
const resolveNonNullable = (target, rejectedCode, rejectedMsg = '') => {
const isNullable = typeof target === 'undefined' || target === null;
if (isNullable) {
return rejectMsg(rejectedCode, rejectedMsg);
}
return resolve(target, rejectedCode, rejectedMsg);
};
const resolveWith = (target, onFulfilled, rejectedCode, rejectedMsg = '') => {
return Promise.resolve(target)
.then(onFulfilled)
.catch((error) => {
return reject(rejectedCode, rejectedMsg, error);
});
};
return {
initRejectedError,
reject,
rejectCode,
rejectData,
rejectMsg,
resolve,
resolveId,
resolveNonNullable,
resolveWith,
};
};
});