47 lines
1014 B
JavaScript
47 lines
1014 B
JavaScript
/**
|
|
* JSON Interceptor.
|
|
*/
|
|
|
|
import {when, isObject} from '../../util';
|
|
|
|
export default function (request) {
|
|
|
|
const type = request.headers.get('Content-Type') || '';
|
|
|
|
if (isObject(request.body) && type.indexOf('application/json') === 0) {
|
|
request.body = JSON.stringify(request.body);
|
|
}
|
|
|
|
return response => {
|
|
|
|
return response.bodyText ? when(response.text(), text => {
|
|
|
|
const type = response.headers.get('Content-Type') || '';
|
|
|
|
if (type.indexOf('application/json') === 0 || isJson(text)) {
|
|
|
|
try {
|
|
response.body = JSON.parse(text);
|
|
} catch (e) {
|
|
response.body = null;
|
|
}
|
|
|
|
} else {
|
|
response.body = text;
|
|
}
|
|
|
|
return response;
|
|
|
|
}) : response;
|
|
|
|
};
|
|
}
|
|
|
|
function isJson(str) {
|
|
|
|
const start = str.match(/^\s*(\[|\{)/);
|
|
const end = {'[': /]\s*$/, '{': /}\s*$/};
|
|
|
|
return start && end[start[1]].test(str);
|
|
}
|