react-native-volley
Version:
React Native wrapper for the Volley HTTP library for Android
94 lines (82 loc) • 2 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _reactNative = require("react-native");
const {
Volley
} = _reactNative.NativeModules;
/**
* Performs a HTTP request to the provided URL with optional options.
*
* @param url
* @param opts
*/
async function volleyFetch(url, opts = {}) {
// Sanitize.
if (opts.method) {
opts.method = opts.method.toUpperCase();
}
if (opts.cache) {
opts.cache = opts.cache.toLowerCase();
} // Extend defaults.
const fetchOpts = Object.assign({
method: 'GET',
cache: 'default',
headers: {},
body: null
}, opts);
try {
// Await native response.
const nativeResponse = await Volley.fetch(url, fetchOpts); // Return response.
return {
ok: true,
status: nativeResponse.status,
statusText: 'OK',
headers: new Headers(nativeResponse.headers || {}),
json: () => {
return new Promise((resolve, reject) => {
try {
resolve(JSON.parse(nativeResponse.body));
} catch (err) {
reject(err);
}
});
},
text: () => {
return new Promise((resolve, reject) => {
try {
resolve(nativeResponse.body);
} catch (err) {
reject(err);
}
});
},
blob: () => {
return new Promise((resolve, reject) => {
let blobType = '';
if (opts && opts.headers && opts.headers['Content-Type']) {
blobType = opts.headers['Content-Type'];
}
try {
resolve(new Blob(nativeResponse.body, {
type: blobType
}));
} catch (err) {
reject(err);
}
});
}
};
} catch (err) {
// Throw error.
throw new Error(err);
}
}
const volleyApi = {
fetch: volleyFetch
};
var _default = volleyApi;
exports.default = _default;
//# sourceMappingURL=index.js.map
;