UNPKG

@datocms/rest-client-utils

Version:
84 lines 3.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApiError = exports.TimeoutError = void 0; function isErrorBody(body) { if (typeof body !== 'object' || body === null || !('data' in body)) { return false; } const bodyWithData = body; if (!Array.isArray(bodyWithData.data)) { return false; } const bodyWithDataList = bodyWithData; if (bodyWithDataList.data.length === 0) { return false; } const firstEl = bodyWithDataList.data[0]; if (typeof firstEl !== 'object' || firstEl === null || !('id' in firstEl) || !('type' in firstEl) || !('attributes' in firstEl) || firstEl.type !== 'api_error') { return false; } return true; } class TimeoutError extends Error { constructor(initObject) { super('API Error!'); Object.setPrototypeOf(this, new.target.prototype); if ('captureStackTrace' in Error) { Error.captureStackTrace(this, ApiError); } else { this.stack = new Error().stack; } this.request = initObject.request; this.preCallStack = initObject.preCallStack; this.message = `${initObject.request.method} ${initObject.request.url}: Timeout error`; if (this.preCallStack) { this.stack += `\nCaused By:\n${this.preCallStack}`; } } } exports.TimeoutError = TimeoutError; class ApiError extends Error { constructor(initObject) { super('API Error!'); Object.setPrototypeOf(this, new.target.prototype); if ('captureStackTrace' in Error) { Error.captureStackTrace(this, ApiError); } else { this.stack = new Error().stack; } this.request = initObject.request; this.response = initObject.response; this.preCallStack = initObject.preCallStack; let message = `${initObject.request.method} ${initObject.request.url}: ${this.response.status} ${this.response.statusText}`; if (this.errors.length > 0) { message += `\n\n${JSON.stringify(this.errors, null, 2)}`; } this.message = message; if (this.preCallStack) { this.stack += `\nCaused By:\n${this.preCallStack}`; } } get errors() { if (!isErrorBody(this.response.body)) { return []; } return this.response.body.data; } findError(codeOrCodes, filterDetails) { const codes = Array.isArray(codeOrCodes) ? codeOrCodes : [codeOrCodes]; return this.errors.find((error) => codes.includes(error.attributes.code) && (!filterDetails || (typeof filterDetails === 'function' ? filterDetails(error.attributes.details) : Object.entries(filterDetails).every(([key, value]) => error.attributes.details[key] === value)))); } } exports.ApiError = ApiError; //# sourceMappingURL=errors.js.map