| import {correctArrayKeys, inverseCorrectArrayKeys} from '../common/protojs'; |
| |
| import xhrInterceptors from './interceptors.json5'; |
| |
| export {xhrInterceptors}; |
| |
| export function matchInterceptors(interceptFilter, url) { |
| return xhrInterceptors.interceptors.filter(interceptor => { |
| var regex = new RegExp(interceptor.urlRegex); |
| return interceptor.intercepts == interceptFilter && regex.test(url); |
| }); |
| } |
| |
| export function getResponseText(xhr, transformArrayPb = true) { |
| let response; |
| if (xhr.responseType === 'arraybuffer') { |
| var arrBuffer = xhr.response; |
| if (!arrBuffer) { |
| console.error('No array buffer.'); |
| return undefined; |
| } |
| let byteArray = new Uint8Array(arrBuffer); |
| let dec = new TextDecoder('utf-8'); |
| response = dec.decode(byteArray); |
| } else if (xhr.responseType === 'text' || xhr.responseType === '') { |
| response = xhr.responseText; |
| } else if (xhr.responseType === 'json') { |
| response = JSON.stringify(xhr.response); |
| } else { |
| console.error( |
| 'Unexpected responseType ' + xhr.responseType + '. Request url: ', |
| xhr.$TWPTRequestURL); |
| return undefined; |
| } |
| |
| if (xhr.$isArrayProto && transformArrayPb) |
| response = correctArrayKeys(response); |
| |
| return response; |
| } |
| |
| export function getResponseJSON(xhr) { |
| let response; |
| if (xhr.responseType === 'arraybuffer') { |
| var arrBuffer = xhr.response; |
| if (!arrBuffer) { |
| console.error('No array buffer.'); |
| return undefined; |
| } |
| let byteArray = new Uint8Array(arrBuffer); |
| let dec = new TextDecoder('utf-8'); |
| let rawResponse = dec.decode(byteArray); |
| response = JSON.parse(rawResponse); |
| } else if (xhr.responseType === 'text' || xhr.responseType === '') { |
| response = JSON.parse(xhr.response); |
| } else if (xhr.responseType === 'json') { |
| response = xhr.response; |
| } else { |
| console.error( |
| 'Unexpected responseType ' + xhr.responseType + '. Request url: ', |
| xhr.$TWPTRequestURL); |
| return undefined; |
| } |
| |
| if (xhr.$isArrayProto) response = correctArrayKeys(response); |
| return response; |
| } |
| |
| export function convertJSONToResponse(xhr, json) { |
| if (xhr.$isArrayProto) json = inverseCorrectArrayKeys(json); |
| |
| switch (xhr.responseType) { |
| case 'json': |
| return json; |
| |
| case 'text': |
| case '': |
| return JSON.stringify(json); |
| |
| case 'arraybuffer': |
| var encoder = new TextEncoder(); |
| return encoder.encode(JSON.stringify(json)).buffer; |
| |
| default: |
| console.error( |
| 'Unexpected responseType ' + xhr.responseType + '. Request url: ', |
| xhr.$TWPTRequestURL || xhr.responseURL); |
| return undefined; |
| } |
| } |
| |
| export function convertJSONToResponseText(xhr, json) { |
| return convertJSONToResponse({ |
| $isArrayProto: xhr.$isArrayProto, |
| responseType: 'text', |
| }, json); |
| } |
| |
| export function triggerEvent(eventName, body, id) { |
| var evt = new CustomEvent('TWPT_' + eventName, { |
| detail: { |
| body, |
| id, |
| } |
| }); |
| window.dispatchEvent(evt); |
| } |