@altostra/core
Version:
Core library for shared types and logic
1 lines • 3.47 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.isSerializedUserFacingError=exports.UserFacingError=void 0;const type_validations_1=require("@altostra/type-validations"),primitives_1=require("@altostra/type-validations/lib/primitives"),Object_1=require("../Utils/Object"),AltoError_1=require("./AltoError"),Common_1=require("./Common");class UserFacingError extends AltoError_1.AltoError{constructor(r,e,t,a,o,s,i){super(r,s,i,{data:a,verboseData:o,type:t,category:e})}get userData(){return this.data.data}get verboseData(){return this.data.verboseData}get type(){return this.data.type}get category(){return this.data.category}get _classInspectionOptions(){return UserFacingError._inspectOptions}toJSON(){const r=(0,Common_1.parseJSONStringified)((0,Common_1.safeJSONSerialize)(this.userData)),e=(0,Common_1.parseJSONStringified)((0,Common_1.safeJSONSerialize)(this.verboseData));return{message:this.message,code:this.code,data:{data:r,verboseData:e,type:this.type,category:this.category}}}static create(r,e){let t,a,o,s,i,n,c;if("string"==typeof r&&(0,Object_1.isObject)(e))({message:t,category:a,type:o,data:s,verboseData:i,inner:n,code:c}=Object.assign(Object.assign({},e),{message:r}));else{if("string"==typeof r)throw AltoError_1.AltoError.create("Invalid parameters!",{data:{args:[...arguments]}});if(!(0,Object_1.isObject)(r)||e)throw AltoError_1.AltoError.create("Invalid parameters!",{data:{args:[...arguments]}});({message:t,category:a,type:o,data:s,verboseData:i,inner:n,code:c}=r)}return new UserFacingError(t,a,o,s,i,n,c)}static wrapFunction(r,e){return function(...t){try{return r(...t)}catch(r){throw userFacingError(r,e)}}}static wrapActionExecution(r,e){return this.wrapFunction(r,e)()}static wrapError(r,e){return userFacingError(r,e)}static wrapPromise(r,e){return r.catch(r=>{throw UserFacingError.wrapError(r,e)})}static fromJson(r,e){if("string"==typeof r&&(r=JSON.parse(r),!(0,exports.isSerializedUserFacingError)(r))){const t={message:"An unknown error occurred!",category:"server-fault",data:{invalidErrorData:r}};return e instanceof Error?UserFacingError.wrapError(e,t):UserFacingError.create(t)}const{message:t,code:a,data:{category:o,data:s,verboseData:i,type:n}}=r,c={message:t,category:o,code:a,data:s,verboseData:i,type:n};return e instanceof Error?UserFacingError.wrapError(e,c):UserFacingError.create(c)}}function userFacingError(r,{message:e,code:t,data:a,verboseData:o,category:s,type:i,forceWrap:n,serializedGetter:c}){if((0,Common_1.isErrorLike)(r)||(r=Object.assign(new Error(String(r)),{original:r})),r instanceof UserFacingError&&!n)return r;const g=null==c?void 0:c(r);if(g&&(0,exports.isSerializedUserFacingError)(g))return UserFacingError.fromJson(g,r);let l=(0,Common_1.fromHandler)(r,t),d=(0,Common_1.fromHandler)(r,a),m=(0,Common_1.fromHandler)(r,o),p=(0,Common_1.fromHandler)(r,s),u=(0,Common_1.fromHandler)(r,i);r instanceof UserFacingError&&(l=null!=l?l:r.code,d=null!=d?d:r.userData,m=null!=m?m:r.verboseData,p=null!=p?p:r.category,u=null!=u?u:r.type);const E=(0,Common_1.fromHandler)(r,e);return new UserFacingError(E,p,u,d,m,r,l)}exports.UserFacingError=UserFacingError,exports.isSerializedUserFacingError=(0,type_validations_1.objectOf)({message:primitives_1.string,code:primitives_1.unknown,data:(0,type_validations_1.objectOf)({type:primitives_1.maybeString,category:(0,type_validations_1.enumOf)("user-fault","server-fault"),data:primitives_1.unknown,verboseData:primitives_1.unknown})});