UNPKG

6.89 kBJavaScriptView Raw
1import { __awaiter, __generator } from "tslib";
2import { responseIterator } from "./responseIterator.js";
3import { throwServerError } from "../utils/index.js";
4var hasOwnProperty = Object.prototype.hasOwnProperty;
5export function readMultipartBody(response, observer) {
6 var _a, _b, _c;
7 return __awaiter(this, void 0, void 0, function () {
8 var decoder, contentType, delimiter, boundaryVal, boundary, buffer, iterator, running, _d, value, done, chunk, bi, message, i, headers, contentType_1, body, result;
9 var _e;
10 return __generator(this, function (_f) {
11 switch (_f.label) {
12 case 0:
13 if (TextDecoder === undefined) {
14 throw new Error("TextDecoder must be defined in the environment: please import a polyfill.");
15 }
16 decoder = new TextDecoder("utf-8");
17 contentType = (_a = response.headers) === null || _a === void 0 ? void 0 : _a.get('content-type');
18 delimiter = "boundary=";
19 boundaryVal = (contentType === null || contentType === void 0 ? void 0 : contentType.includes(delimiter))
20 ? contentType === null || contentType === void 0 ? void 0 : contentType.substring((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(delimiter)) + delimiter.length).replace(/['"]/g, "").replace(/\;(.*)/gm, "").trim()
21 : "-";
22 boundary = "--".concat(boundaryVal);
23 buffer = "";
24 iterator = responseIterator(response);
25 running = true;
26 _f.label = 1;
27 case 1:
28 if (!running) return [3, 3];
29 return [4, iterator.next()];
30 case 2:
31 _d = _f.sent(), value = _d.value, done = _d.done;
32 chunk = typeof value === "string" ? value : decoder.decode(value);
33 running = !done;
34 buffer += chunk;
35 bi = buffer.indexOf(boundary);
36 while (bi > -1) {
37 message = void 0;
38 _e = [
39 buffer.slice(0, bi),
40 buffer.slice(bi + boundary.length),
41 ], message = _e[0], buffer = _e[1];
42 if (message.trim()) {
43 i = message.indexOf("\r\n\r\n");
44 headers = parseHeaders(message.slice(0, i));
45 contentType_1 = headers["content-type"];
46 if (contentType_1 &&
47 contentType_1.toLowerCase().indexOf("application/json") === -1) {
48 throw new Error("Unsupported patch content type: application/json is required.");
49 }
50 body = message.slice(i);
51 try {
52 result = parseJsonBody(response, body.replace("\r\n", ""));
53 if (Object.keys(result).length > 1 ||
54 "data" in result ||
55 "incremental" in result ||
56 "errors" in result) {
57 (_b = observer.next) === null || _b === void 0 ? void 0 : _b.call(observer, result);
58 }
59 }
60 catch (err) {
61 handleError(err, observer);
62 }
63 }
64 bi = buffer.indexOf(boundary);
65 }
66 return [3, 1];
67 case 3:
68 (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer);
69 return [2];
70 }
71 });
72 });
73}
74export function parseHeaders(headerText) {
75 var headersInit = {};
76 headerText.split("\n").forEach(function (line) {
77 var i = line.indexOf(":");
78 if (i > -1) {
79 var name_1 = line.slice(0, i).trim().toLowerCase();
80 var value = line.slice(i + 1).trim();
81 headersInit[name_1] = value;
82 }
83 });
84 return headersInit;
85}
86export function parseJsonBody(response, bodyText) {
87 if (response.status >= 300) {
88 var getResult = function () {
89 try {
90 return JSON.parse(bodyText);
91 }
92 catch (err) {
93 return bodyText;
94 }
95 };
96 throwServerError(response, getResult(), "Response not successful: Received status code ".concat(response.status));
97 }
98 try {
99 return JSON.parse(bodyText);
100 }
101 catch (err) {
102 var parseError = err;
103 parseError.name = "ServerParseError";
104 parseError.response = response;
105 parseError.statusCode = response.status;
106 parseError.bodyText = bodyText;
107 throw parseError;
108 }
109}
110export function handleError(err, observer) {
111 var _a, _b;
112 if (err.name === "AbortError")
113 return;
114 if (err.result && err.result.errors && err.result.data) {
115 (_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, err.result);
116 }
117 (_b = observer.error) === null || _b === void 0 ? void 0 : _b.call(observer, err);
118}
119export function readJsonBody(response, operation, observer) {
120 parseAndCheckHttpResponse(operation)(response)
121 .then(function (result) {
122 var _a, _b;
123 (_a = observer.next) === null || _a === void 0 ? void 0 : _a.call(observer, result);
124 (_b = observer.complete) === null || _b === void 0 ? void 0 : _b.call(observer);
125 })
126 .catch(function (err) { return handleError(err, observer); });
127}
128export function parseAndCheckHttpResponse(operations) {
129 return function (response) {
130 return response
131 .text()
132 .then(function (bodyText) { return parseJsonBody(response, bodyText); })
133 .then(function (result) {
134 if (response.status >= 300) {
135 throwServerError(response, result, "Response not successful: Received status code ".concat(response.status));
136 }
137 if (!Array.isArray(result) &&
138 !hasOwnProperty.call(result, "data") &&
139 !hasOwnProperty.call(result, "errors")) {
140 throwServerError(response, result, "Server response was missing for query '".concat(Array.isArray(operations)
141 ? operations.map(function (op) { return op.operationName; })
142 : operations.operationName, "'."));
143 }
144 return result;
145 });
146 };
147}
148//# sourceMappingURL=parseAndCheckHttpResponse.js.map
\No newline at end of file