@daiso-tech/core
Version:
The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.
63 lines • 2.11 kB
JavaScript
/**
* @module Utilities
*/
import { callInvokable, isInvokable, } from "../../utilities/functions/invokable.js";
import { isResult, isResultSuccess, } from "../../utilities/functions/result.js";
import { isStandardSchema } from "../../utilities/functions/is-standard-schema.js";
import { isClass } from "../../utilities/functions/is-class.js";
import {} from "../../utilities/types/_module.js";
/**
* @internal
*/
export function isErrorPolicyBoolSetting(value) {
return (typeof value === "object" &&
value !== null &&
"treatFalseAsError" in value &&
typeof value.treatFalseAsError === "boolean");
}
/**
* @internal
*/
export async function callErrorPolicyOnValue(errorPolicy = () => true, value) {
// Will retry if the value is false and the setting treatFalseAsError is true
if (!isResult(value)) {
const shouldRetry = isErrorPolicyBoolSetting(errorPolicy) &&
typeof value === "boolean" &&
!value &&
errorPolicy.treatFalseAsError;
return shouldRetry;
}
// Will not retry if the Result successful
if (isResultSuccess(value)) {
return false;
}
if (isInvokable(errorPolicy)) {
return callInvokable(errorPolicy, value.error);
}
if (isStandardSchema(errorPolicy)) {
const schemaResult = await errorPolicy["~standard"].validate(value.error);
return schemaResult.issues === undefined;
}
// This only need so typescript wont complain
if (isErrorPolicyBoolSetting(errorPolicy)) {
return false;
}
return value.error instanceof errorPolicy;
}
/**
* @internal
*/
export async function callErrorPolicyOnThrow(errorPolicy = () => true, error) {
if (isInvokable(errorPolicy)) {
return callInvokable(errorPolicy, error);
}
if (isStandardSchema(errorPolicy)) {
const result = await errorPolicy["~standard"].validate(error);
return result.issues === undefined;
}
if (isClass(errorPolicy)) {
return error instanceof errorPolicy;
}
return false;
}
//# sourceMappingURL=error-policy.js.map