UNPKG

@ngx-resource/handler-fetch

Version:
105 lines (102 loc) 3.17 kB
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