UNPKG

@ackee/antonio-core

Version:

A HTTP client built on fetch API with axios-like API.

56 lines 9.74 kB
import { Header } from '../../constants'; import { getResponseDataType } from './responseDataTypes'; import { AntonioError } from './errors'; import { hasEmptyContentLength, parseResponse } from './utils'; function chooseResponseDataType(config, headers, requestMethod) { if (hasEmptyContentLength(headers) || requestMethod === 'HEAD' || requestMethod === 'OPTIONS') { return null; } if (config.responseDataType !== undefined) { return config.responseDataType; } return getResponseDataType(headers.get(Header.CONTENT_TYPE)); } async function* applyResponseInterceptors(responseInterceptors, request, requestParams, requestConfig) { let response = await fetch(request); for (const [id, responseInterceptor] of responseInterceptors.entries()) { if (responseInterceptor.onFulfilled) { response = yield responseInterceptor.onFulfilled(response, request, requestParams); if (!(response instanceof Response)) { throw new TypeError( // eslint-disable-next-line max-len `An 'onFulfilled' callback of a response interceptor with id '${id}' must return a Response instance. Received ${JSON.stringify(response)}`); } } } const responseDataType = chooseResponseDataType(requestConfig, response.headers, request.method); const data = await parseResponse(responseDataType, response); if (!response.ok) { const error = new AntonioError(request, response, data); for (const responseInterceptor of responseInterceptors.values()) { if (responseInterceptor.onRejected) { yield responseInterceptor.onRejected(error, request, requestParams); } } throw error; } return { data: data, response }; } export async function* processRequest(antonio, request, requestParams, requestConfig) { // @ts-ignore - Property 'interceptors' is protected and only accessible within class 'ResponseInterceptorManager' and its subclasses. const responseInterceptors = antonio.interceptors.response.interceptors; const { response, data } = yield* applyResponseInterceptors(responseInterceptors, request, requestParams, requestConfig); const result = { request, response, data }; return result; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIZWFkZXIiLCJnZXRSZXNwb25zZURhdGFUeXBlIiwiQW50b25pb0Vycm9yIiwiaGFzRW1wdHlDb250ZW50TGVuZ3RoIiwicGFyc2VSZXNwb25zZSIsImNob29zZVJlc3BvbnNlRGF0YVR5cGUiLCJjb25maWciLCJoZWFkZXJzIiwicmVxdWVzdE1ldGhvZCIsInJlc3BvbnNlRGF0YVR5cGUiLCJ1bmRlZmluZWQiLCJnZXQiLCJDT05URU5UX1RZUEUiLCJhcHBseVJlc3BvbnNlSW50ZXJjZXB0b3JzIiwicmVzcG9uc2VJbnRlcmNlcHRvcnMiLCJyZXF1ZXN0IiwicmVxdWVzdFBhcmFtcyIsInJlcXVlc3RDb25maWciLCJyZXNwb25zZSIsImZldGNoIiwiaWQiLCJyZXNwb25zZUludGVyY2VwdG9yIiwiZW50cmllcyIsIm9uRnVsZmlsbGVkIiwiUmVzcG9uc2UiLCJUeXBlRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwibWV0aG9kIiwiZGF0YSIsIm9rIiwiZXJyb3IiLCJ2YWx1ZXMiLCJvblJlamVjdGVkIiwicHJvY2Vzc1JlcXVlc3QiLCJhbnRvbmlvIiwiaW50ZXJjZXB0b3JzIiwicmVzdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZHVsZXMvcmVzcG9uc2UvcmVzcG9uc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbmZpZywgUmVxdWVzdE1ldGhvZCwgUmVxdWVzdFBhcmFtcywgUmVxdWVzdFJlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHR5cGUgeyBUQW50b25pbyB9IGZyb20gJy4uL2NvcmUvbW9kZWxzL0FudG9uaW8nO1xuaW1wb3J0IHR5cGUgeyBSZXNwb25zZUludGVyY2VwdG9ycyB9IGZyb20gJy4uL2ludGVyY2VwdG9ycy9yZXNwb25zZUludGVyY2VwdG9ycyc7XG5cbmltcG9ydCB7IGdldFJlc3BvbnNlRGF0YVR5cGUgfSBmcm9tICcuL3Jlc3BvbnNlRGF0YVR5cGVzJztcblxuaW1wb3J0IHsgQW50b25pb0Vycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgaGFzRW1wdHlDb250ZW50TGVuZ3RoLCBwYXJzZVJlc3BvbnNlIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGNob29zZVJlc3BvbnNlRGF0YVR5cGUoY29uZmlnOiBSZXF1ZXN0Q29uZmlnLCBoZWFkZXJzOiBIZWFkZXJzLCByZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kKSB7XG4gICAgaWYgKGhhc0VtcHR5Q29udGVudExlbmd0aChoZWFkZXJzKSB8fCByZXF1ZXN0TWV0aG9kID09PSAnSEVBRCcgfHwgcmVxdWVzdE1ldGhvZCA9PT0gJ09QVElPTlMnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjb25maWcucmVzcG9uc2VEYXRhVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjb25maWcucmVzcG9uc2VEYXRhVHlwZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UmVzcG9uc2VEYXRhVHlwZShoZWFkZXJzLmdldChIZWFkZXIuQ09OVEVOVF9UWVBFKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiBhcHBseVJlc3BvbnNlSW50ZXJjZXB0b3JzPFRTdWNjZXNzRGF0YSwgVEVycm9yRGF0YT4oXG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvcnM6IFJlc3BvbnNlSW50ZXJjZXB0b3JzLFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgcmVxdWVzdFBhcmFtczogUmVxdWVzdFBhcmFtcyxcbiAgICByZXF1ZXN0Q29uZmlnOiBSZXF1ZXN0Q29uZmlnLFxuKSB7XG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpZCwgcmVzcG9uc2VJbnRlcmNlcHRvcl0gb2YgcmVzcG9uc2VJbnRlcmNlcHRvcnMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChyZXNwb25zZUludGVyY2VwdG9yLm9uRnVsZmlsbGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIHJlc3BvbnNlSW50ZXJjZXB0b3Iub25GdWxmaWxsZWQocmVzcG9uc2UsIHJlcXVlc3QsIHJlcXVlc3RQYXJhbXMpO1xuXG4gICAgICAgICAgICBpZiAoIShyZXNwb25zZSBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAgICAgICAgIGBBbiAnb25GdWxmaWxsZWQnIGNhbGxiYWNrIG9mIGEgcmVzcG9uc2UgaW50ZXJjZXB0b3Igd2l0aCBpZCAnJHtpZH0nIG11c3QgcmV0dXJuIGEgUmVzcG9uc2UgaW5zdGFuY2UuIFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZURhdGFUeXBlID0gY2hvb3NlUmVzcG9uc2VEYXRhVHlwZShyZXF1ZXN0Q29uZmlnLCByZXNwb25zZS5oZWFkZXJzLCByZXF1ZXN0Lm1ldGhvZCBhcyBSZXF1ZXN0TWV0aG9kKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcGFyc2VSZXNwb25zZShyZXNwb25zZURhdGFUeXBlLCByZXNwb25zZSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEFudG9uaW9FcnJvcjxURXJyb3JEYXRhPihyZXF1ZXN0LCByZXNwb25zZSwgZGF0YSBhcyB1bmtub3duIGFzIFRFcnJvckRhdGEpO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvciBvZiByZXNwb25zZUludGVyY2VwdG9ycy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlSW50ZXJjZXB0b3Iub25SZWplY3RlZCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHJlc3BvbnNlSW50ZXJjZXB0b3Iub25SZWplY3RlZChlcnJvciwgcmVxdWVzdCwgcmVxdWVzdFBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBkYXRhIGFzIHVua25vd24gYXMgVFN1Y2Nlc3NEYXRhLFxuICAgICAgICByZXNwb25zZSxcbiAgICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIHByb2Nlc3NSZXF1ZXN0PFRTdWNjZXNzRGF0YSwgVEVycm9yRGF0YT4oXG4gICAgYW50b25pbzogVEFudG9uaW8sXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICByZXF1ZXN0UGFyYW1zOiBSZXF1ZXN0UGFyYW1zLFxuICAgIHJlcXVlc3RDb25maWc6IFJlcXVlc3RDb25maWcsXG4pIHtcbiAgICAvLyBAdHMtaWdub3JlIC0gUHJvcGVydHkgJ2ludGVyY2VwdG9ycycgaXMgcHJvdGVjdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgd2l0aGluIGNsYXNzICdSZXNwb25zZUludGVyY2VwdG9yTWFuYWdlcicgYW5kIGl0cyBzdWJjbGFzc2VzLlxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JzID0gYW50b25pby5pbnRlcmNlcHRvcnMucmVzcG9uc2UuaW50ZXJjZXB0b3JzO1xuICAgIGNvbnN0IHsgcmVzcG9uc2UsIGRhdGEgfSA9IHlpZWxkKiBhcHBseVJlc3BvbnNlSW50ZXJjZXB0b3JzPFRTdWNjZXNzRGF0YSwgVEVycm9yRGF0YT4oXG4gICAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICByZXF1ZXN0UGFyYW1zLFxuICAgICAgICByZXF1ZXN0Q29uZmlnLFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQ6IFJlcXVlc3RSZXN1bHQ8VFN1Y2Nlc3NEYXRhPiA9IHsgcmVxdWVzdCwgcmVzcG9uc2UsIGRhdGEgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxpQkFBaUI7QUFNeEMsU0FBU0MsbUJBQW1CLFFBQVEscUJBQXFCO0FBRXpELFNBQVNDLFlBQVksUUFBUSxVQUFVO0FBQ3ZDLFNBQVNDLHFCQUFxQixFQUFFQyxhQUFhLFFBQVEsU0FBUztBQUU5RCxTQUFTQyxzQkFBc0JBLENBQUNDLE1BQXFCLEVBQUVDLE9BQWdCLEVBQUVDLGFBQTRCLEVBQUU7RUFDbkcsSUFBSUwscUJBQXFCLENBQUNJLE9BQU8sQ0FBQyxJQUFJQyxhQUFhLEtBQUssTUFBTSxJQUFJQSxhQUFhLEtBQUssU0FBUyxFQUFFO0lBQzNGLE9BQU8sSUFBSTtFQUNmO0VBRUEsSUFBSUYsTUFBTSxDQUFDRyxnQkFBZ0IsS0FBS0MsU0FBUyxFQUFFO0lBQ3ZDLE9BQU9KLE1BQU0sQ0FBQ0csZ0JBQWdCO0VBQ2xDO0VBRUEsT0FBT1IsbUJBQW1CLENBQUNNLE9BQU8sQ0FBQ0ksR0FBRyxDQUFDWCxNQUFNLENBQUNZLFlBQVksQ0FBQyxDQUFDO0FBQ2hFO0FBRUEsZ0JBQWdCQyx5QkFBeUJBLENBQ3JDQyxvQkFBMEMsRUFDMUNDLE9BQWdCLEVBQ2hCQyxhQUE0QixFQUM1QkMsYUFBNEIsRUFDOUI7RUFDRSxJQUFJQyxRQUFRLEdBQUcsTUFBTUMsS0FBSyxDQUFDSixPQUFPLENBQUM7RUFFbkMsS0FBSyxNQUFNLENBQUNLLEVBQUUsRUFBRUMsbUJBQW1CLENBQUMsSUFBSVAsb0JBQW9CLENBQUNRLE9BQU8sQ0FBQyxDQUFDLEVBQUU7SUFDcEUsSUFBSUQsbUJBQW1CLENBQUNFLFdBQVcsRUFBRTtNQUNqQ0wsUUFBUSxHQUFHLE1BQU1HLG1CQUFtQixDQUFDRSxXQUFXLENBQUNMLFFBQVEsRUFBRUgsT0FBTyxFQUFFQyxhQUFhLENBQUM7TUFFbEYsSUFBSSxFQUFFRSxRQUFRLFlBQVlNLFFBQVEsQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sSUFBSUMsU0FBUztRQUNmO1FBQ0EsZ0VBQWdFTCxFQUFFLCtDQUErQ00sSUFBSSxDQUFDQyxTQUFTLENBQzNIVCxRQUNKLENBQUMsRUFDTCxDQUFDO01BQ0w7SUFDSjtFQUNKO0VBRUEsTUFBTVQsZ0JBQWdCLEdBQUdKLHNCQUFzQixDQUFDWSxhQUFhLEVBQUVDLFFBQVEsQ0FBQ1gsT0FBTyxFQUFFUSxPQUFPLENBQUNhLE1BQXVCLENBQUM7RUFDakgsTUFBTUMsSUFBSSxHQUFHLE1BQU16QixhQUFhLENBQUNLLGdCQUFnQixFQUFFUyxRQUFRLENBQUM7RUFFNUQsSUFBSSxDQUFDQSxRQUFRLENBQUNZLEVBQUUsRUFBRTtJQUNkLE1BQU1DLEtBQUssR0FBRyxJQUFJN0IsWUFBWSxDQUFhYSxPQUFPLEVBQUVHLFFBQVEsRUFBRVcsSUFBNkIsQ0FBQztJQUU1RixLQUFLLE1BQU1SLG1CQUFtQixJQUFJUCxvQkFBb0IsQ0FBQ2tCLE1BQU0sQ0FBQyxDQUFDLEVBQUU7TUFDN0QsSUFBSVgsbUJBQW1CLENBQUNZLFVBQVUsRUFBRTtRQUNoQyxNQUFNWixtQkFBbUIsQ0FBQ1ksVUFBVSxDQUFDRixLQUFLLEVBQUVoQixPQUFPLEVBQUVDLGFBQWEsQ0FBQztNQUN2RTtJQUNKO0lBRUEsTUFBTWUsS0FBSztFQUNmO0VBRUEsT0FBTztJQUNIRixJQUFJLEVBQUVBLElBQStCO0lBQ3JDWDtFQUNKLENBQUM7QUFDTDtBQUVBLE9BQU8sZ0JBQWdCZ0IsY0FBY0EsQ0FDakNDLE9BQWlCLEVBQ2pCcEIsT0FBZ0IsRUFDaEJDLGFBQTRCLEVBQzVCQyxhQUE0QixFQUM5QjtFQUNFO0VBQ0EsTUFBTUgsb0JBQW9CLEdBQUdxQixPQUFPLENBQUNDLFlBQVksQ0FBQ2xCLFFBQVEsQ0FBQ2tCLFlBQVk7RUFDdkUsTUFBTTtJQUFFbEIsUUFBUTtJQUFFVztFQUFLLENBQUMsR0FBRyxPQUFPaEIseUJBQXlCLENBQ3ZEQyxvQkFBb0IsRUFDcEJDLE9BQU8sRUFDUEMsYUFBYSxFQUNiQyxhQUNKLENBQUM7RUFFRCxNQUFNb0IsTUFBbUMsR0FBRztJQUFFdEIsT0FBTztJQUFFRyxRQUFRO0lBQUVXO0VBQUssQ0FBQztFQUV2RSxPQUFPUSxNQUFNO0FBQ2pCIiwiaWdub3JlTGlzdCI6W119