@ngx-resource/handler-fetch
Version:
Resource handler for fetch
105 lines (102 loc) • 3.17 kB
JavaScript
import { __awaiter } from 'tslib';
import { ResourceRequestMethod, ResourceHandler, ResourceResponseBodyType } from '@ngx-resource/core';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
const REQUEST_METHOD_MAP = {
[ResourceRequestMethod.Get]: 'GET',
[ResourceRequestMethod.Post]: 'POST',
[ResourceRequestMethod.Put]: 'PUT',
[ResourceRequestMethod.Patch]: 'PATCH',
[ResourceRequestMethod.Delete]: 'DELETE',
[ResourceRequestMethod.Options]: 'OPTIONS',
[ResourceRequestMethod.Head]: 'HEAD',
};
class ResourceHandlerFetch extends ResourceHandler {
/**
* @param {?} req
* @return {?}
*/
handle(req) {
/** @type {?} */
const url = this.createUrl(req);
/** @type {?} */
const requestInit = this.createRequestInit(req);
return {
promise: fetch(url, requestInit).then((/**
* @param {?} res
* @return {?}
*/
(res) => __awaiter(this, void 0, void 0, function* () {
return {
headers: res.headers,
status: res.status,
body: yield this.getBody(req, res)
};
}))),
};
}
/**
* @private
* @param {?} req
* @return {?}
*/
createUrl(req) {
let { url } = req;
if (typeof url !== 'string') {
throw new Error('Url us missing');
}
if (req.query) {
/** @type {?} */
const queryGroups = [];
for (const key in req.query) {
if (req.query.hasOwnProperty(key)) {
queryGroups.push('key=' + encodeURIComponent(req.query[key]));
}
}
if (queryGroups.length) {
url += (url.indexOf('?') > -1 ? '&' : '?') + queryGroups.join('&');
}
}
return url;
}
/**
* @private
* @param {?} req
* @return {?}
*/
createRequestInit(req) {
/** @type {?} */
const requestInit = {};
req.method = req.method || ResourceRequestMethod.Get;
requestInit.method = REQUEST_METHOD_MAP[req.method];
requestInit.headers = req.headers;
if (req.method !== ResourceRequestMethod.Get && req.body) {
requestInit.body = req.body;
}
return requestInit;
}
/**
* @private
* @param {?} req
* @param {?} res
* @return {?}
*/
getBody(req, res) {
switch (req.responseBodyType) {
case ResourceResponseBodyType.ArrayBuffer:
return res.arrayBuffer();
case ResourceResponseBodyType.Blob:
return res.blob();
case ResourceResponseBodyType.Json:
return res.json();
case ResourceResponseBodyType.Text:
default:
return res.text();
}
}
}
export { REQUEST_METHOD_MAP, ResourceHandlerFetch };
//# sourceMappingURL=ngx-resource-handler-fetch.js.map