parse
Version:
Parse JavaScript SDK
66 lines (64 loc) • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.polyfillFetch = polyfillFetch;
/* istanbul ignore file */
// @ts-ignore
function parseResponse(res) {
let headers = res.header || {};
headers = Object.keys(headers).reduce((map, key) => {
map[key.toLowerCase()] = headers[key];
return map;
}, {});
return {
status: res.statusCode,
json: () => {
if (typeof res.data === 'object') {
return Promise.resolve(res.data);
}
let json = {};
try {
json = JSON.parse(res.data);
} catch (err) {
console.error(err);
}
return Promise.resolve(json);
},
headers: {
keys: () => Object.keys(headers),
get: n => headers[n.toLowerCase()],
has: n => n.toLowerCase() in headers,
entries: () => {
const all = [];
for (const key in headers) {
if (headers[key]) {
all.push([key, headers[key]]);
}
}
return all;
}
}
};
}
function polyfillFetch() {
const typedGlobal = global;
if (typeof typedGlobal.fetch !== 'function') {
typedGlobal.fetch = (url, options) => {
const dataType = url.match(/\.(txt|json|html|txt|csv)/) ? 'text' : 'arraybuffer';
return new Promise((resolve, reject) => {
// @ts-ignore
wx.request({
url,
method: options.method || 'GET',
data: options.body,
header: options.headers,
dataType,
responseType: dataType,
success: response => resolve(parseResponse(response)),
fail: error => reject(error)
});
});
};
}
}