api-def 0.7.4 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/Api.js +6 -2
- package/cjs/ApiTypes.d.ts +30 -10
- package/cjs/ApiTypes.js +2 -0
- package/cjs/ApiUtils.js +1 -1
- package/cjs/Endpoint.d.ts +3 -3
- package/cjs/Endpoint.js +13 -8
- package/cjs/QueryHandling.d.ts +3 -0
- package/cjs/QueryHandling.js +24 -0
- package/cjs/RequestConfig.d.ts +2 -0
- package/cjs/RequestConfig.js +74 -0
- package/cjs/RequestContext.d.ts +4 -4
- package/cjs/RequestContext.js +5 -24
- package/cjs/RequestError.js +1 -1
- package/cjs/Requester.d.ts +1 -1
- package/cjs/Requester.js +2 -2
- package/cjs/Utils.js +1 -1
- package/cjs/backend/AxiosRequestBackend.js +4 -4
- package/cjs/backend/FetchRequestBackend.js +4 -3
- package/cjs/backend/MockRequestBackend.js +3 -1
- package/esm/Api.js +34 -70
- package/esm/ApiConstants.js +5 -5
- package/esm/ApiTypes.d.ts +30 -10
- package/esm/ApiTypes.js +1 -1
- package/esm/ApiUtils.js +12 -13
- package/esm/Endpoint.d.ts +3 -3
- package/esm/Endpoint.js +42 -74
- package/esm/EndpointBuilder.js +14 -16
- package/esm/QueryHandling.d.ts +3 -0
- package/esm/QueryHandling.js +19 -0
- package/esm/RequestConfig.d.ts +2 -0
- package/esm/RequestConfig.js +56 -0
- package/esm/RequestContext.d.ts +4 -4
- package/esm/RequestContext.js +71 -148
- package/esm/RequestError.js +7 -7
- package/esm/Requester.d.ts +1 -1
- package/esm/Requester.js +182 -266
- package/esm/TextDecoding.js +20 -20
- package/esm/Utils.js +16 -16
- package/esm/backend/AxiosRequestBackend.js +34 -67
- package/esm/backend/FetchRequestBackend.js +66 -134
- package/esm/backend/MockRequestBackend.js +92 -136
- package/esm/cache/Caching.js +24 -66
- package/esm/cache/LocalForageCacheBackend.js +11 -13
- package/esm/cache/LocalStorageCacheBackend.js +19 -62
- package/esm/middleware/CacheMiddleware.js +44 -91
- package/esm/middleware/LoggingMiddleware.js +36 -39
- package/esm/util/retry/index.js +8 -8
- package/esm/util/retry/lib/retry.js +11 -22
- package/package.json +4 -2
package/esm/RequestContext.js
CHANGED
|
@@ -7,37 +7,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
-
function step(op) {
|
|
15
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (_) try {
|
|
17
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
-
switch (op[0]) {
|
|
20
|
-
case 0: case 1: t = op; break;
|
|
21
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
-
default:
|
|
25
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
-
if (t[2]) _.ops.pop();
|
|
30
|
-
_.trys.pop(); continue;
|
|
31
|
-
}
|
|
32
|
-
op = body.call(thisArg, _);
|
|
33
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
10
|
import * as Utils from "./Utils";
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
11
|
+
let contextIdCounter = 0;
|
|
12
|
+
export default class RequestContext {
|
|
13
|
+
constructor(backend, host, config, computedPath, mocking) {
|
|
41
14
|
this.canceler = null;
|
|
42
15
|
this.response = undefined;
|
|
43
16
|
this.error = null;
|
|
@@ -59,80 +32,54 @@ var RequestContext = /** @class */ (function () {
|
|
|
59
32
|
this.initMiddleware();
|
|
60
33
|
this.parseRequestBody();
|
|
61
34
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
Object.defineProperty(RequestContext.prototype, "responseType", {
|
|
84
|
-
get: function () {
|
|
85
|
-
return this.host.responseType;
|
|
86
|
-
},
|
|
87
|
-
enumerable: false,
|
|
88
|
-
configurable: true
|
|
89
|
-
});
|
|
90
|
-
RequestContext.prototype.initMiddleware = function () {
|
|
91
|
-
var middleware = this.api.middleware;
|
|
92
|
-
for (var i = 0; i < middleware.length; i++) {
|
|
93
|
-
var events = middleware[i];
|
|
94
|
-
var eventTypes = Object.keys(events);
|
|
95
|
-
for (var n = 0; n < eventTypes.length; n++) {
|
|
96
|
-
var eventType = eventTypes[n];
|
|
97
|
-
var eventHandlersForType = this.eventHandlers[eventType] || (this.eventHandlers[eventType] = []);
|
|
98
|
-
var middlewareEventHandlers = events[eventType];
|
|
35
|
+
get method() {
|
|
36
|
+
return this.host.method;
|
|
37
|
+
}
|
|
38
|
+
get api() {
|
|
39
|
+
return this.host.api;
|
|
40
|
+
}
|
|
41
|
+
get baseUrl() {
|
|
42
|
+
return this.host.baseUrl;
|
|
43
|
+
}
|
|
44
|
+
get responseType() {
|
|
45
|
+
return this.host.responseType;
|
|
46
|
+
}
|
|
47
|
+
initMiddleware() {
|
|
48
|
+
const { middleware } = this.api;
|
|
49
|
+
for (let i = 0; i < middleware.length; i++) {
|
|
50
|
+
const events = middleware[i];
|
|
51
|
+
const eventTypes = Object.keys(events);
|
|
52
|
+
for (let n = 0; n < eventTypes.length; n++) {
|
|
53
|
+
const eventType = eventTypes[n];
|
|
54
|
+
const eventHandlersForType = this.eventHandlers[eventType] || (this.eventHandlers[eventType] = []);
|
|
55
|
+
const middlewareEventHandlers = events[eventType];
|
|
99
56
|
if (middlewareEventHandlers) {
|
|
100
57
|
eventHandlersForType.push(middlewareEventHandlers);
|
|
101
58
|
}
|
|
102
59
|
}
|
|
103
60
|
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
if (computedConfig.query) {
|
|
110
|
-
var queryKeys = Object.keys(computedConfig.query);
|
|
111
|
-
for (var i = 0; i < queryKeys.length; i++) {
|
|
112
|
-
var queryKey = queryKeys[i];
|
|
113
|
-
queryStrings.push("".concat(queryKey, "=").concat(computedConfig.query[queryKey]));
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (queryStrings.length > 0) {
|
|
117
|
-
key += "?" + queryStrings.join("&");
|
|
61
|
+
}
|
|
62
|
+
generateKey() {
|
|
63
|
+
let key = this.computedPath.trim();
|
|
64
|
+
if (this.computedConfig.queryString) {
|
|
65
|
+
key += "?" + this.computedConfig.queryString;
|
|
118
66
|
}
|
|
119
67
|
return key;
|
|
120
|
-
}
|
|
121
|
-
|
|
68
|
+
}
|
|
69
|
+
updateHeaders(newHeaders) {
|
|
122
70
|
this.computedConfig.headers = Utils.assign({}, this.computedConfig.headers, newHeaders);
|
|
123
71
|
this.parseRequestBody();
|
|
124
72
|
return this;
|
|
125
|
-
}
|
|
126
|
-
|
|
73
|
+
}
|
|
74
|
+
parseRequestBody() {
|
|
127
75
|
var _a;
|
|
128
76
|
if (this.computedConfig.body && this.computedConfig.headers) {
|
|
129
|
-
|
|
130
|
-
|
|
77
|
+
const contentTypeKey = Object.keys(this.computedConfig.headers).find(key => key.toLowerCase() === "content-type");
|
|
78
|
+
const contentType = contentTypeKey && ((_a = this.computedConfig.headers[contentTypeKey]) === null || _a === void 0 ? void 0 : _a.toString().split(";")[0].trim());
|
|
131
79
|
if (contentType === "application/x-www-form-urlencoded") {
|
|
132
|
-
|
|
133
|
-
for (
|
|
134
|
-
|
|
135
|
-
var value = this.computedConfig.body[key];
|
|
80
|
+
const searchParams = new URLSearchParams();
|
|
81
|
+
for (const key of Object.keys(this.computedConfig.body)) {
|
|
82
|
+
const value = this.computedConfig.body[key];
|
|
136
83
|
searchParams.append(key, value === null || value === void 0 ? void 0 : value.toString());
|
|
137
84
|
}
|
|
138
85
|
this.parsedBody = searchParams;
|
|
@@ -144,83 +91,59 @@ var RequestContext = /** @class */ (function () {
|
|
|
144
91
|
else {
|
|
145
92
|
this.parsedBody = undefined;
|
|
146
93
|
}
|
|
147
|
-
}
|
|
148
|
-
|
|
94
|
+
}
|
|
95
|
+
getParsedBody() {
|
|
149
96
|
return this.parsedBody;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
this.computedConfig.
|
|
97
|
+
}
|
|
98
|
+
updateQuery(newQuery) {
|
|
99
|
+
this.computedConfig.queryObject = Utils.assign({}, this.computedConfig.queryObject, newQuery);
|
|
153
100
|
return this;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (!(i < eventHandlers.length)) return [3 /*break*/, 4];
|
|
167
|
-
eventHandler = eventHandlers[i];
|
|
168
|
-
return [4 /*yield*/, eventHandler(this)];
|
|
169
|
-
case 2:
|
|
170
|
-
eventResult = _a.sent();
|
|
171
|
-
if (eventResult) {
|
|
172
|
-
return [2 /*return*/, eventResult];
|
|
173
|
-
}
|
|
174
|
-
_a.label = 3;
|
|
175
|
-
case 3:
|
|
176
|
-
i++;
|
|
177
|
-
return [3 /*break*/, 1];
|
|
178
|
-
case 4: return [2 /*return*/, undefined];
|
|
101
|
+
}
|
|
102
|
+
triggerEvent(eventType) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
const eventHandlers = this.eventHandlers[eventType];
|
|
105
|
+
if (eventHandlers) {
|
|
106
|
+
for (let i = 0; i < eventHandlers.length; i++) {
|
|
107
|
+
const eventHandler = eventHandlers[i];
|
|
108
|
+
// eslint-disable-next-line no-await-in-loop
|
|
109
|
+
const eventResult = yield eventHandler(this);
|
|
110
|
+
if (eventResult) {
|
|
111
|
+
return eventResult;
|
|
112
|
+
}
|
|
179
113
|
}
|
|
180
|
-
}
|
|
114
|
+
}
|
|
115
|
+
return undefined;
|
|
181
116
|
});
|
|
182
|
-
}
|
|
183
|
-
|
|
117
|
+
}
|
|
118
|
+
addCanceller(canceler) {
|
|
184
119
|
this.canceler = canceler;
|
|
185
|
-
}
|
|
186
|
-
|
|
120
|
+
}
|
|
121
|
+
cancel() {
|
|
187
122
|
this.cancelled = true;
|
|
188
123
|
if (this.canceler) {
|
|
189
124
|
this.canceler();
|
|
190
125
|
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
var path = !this.baseUrl.endsWith("/")
|
|
126
|
+
}
|
|
127
|
+
getRequestUrl() {
|
|
128
|
+
let path = !this.baseUrl.endsWith("/")
|
|
195
129
|
? this.baseUrl + "/"
|
|
196
130
|
: this.baseUrl;
|
|
197
131
|
path += this.computedPath.startsWith("/")
|
|
198
132
|
? this.computedPath.substring(1)
|
|
199
133
|
: this.computedPath;
|
|
200
|
-
|
|
134
|
+
let origin = undefined;
|
|
201
135
|
if (typeof window !== "undefined") {
|
|
202
136
|
origin = window.origin;
|
|
203
137
|
}
|
|
204
138
|
if (!origin) {
|
|
205
139
|
if (path.indexOf("://") === -1) {
|
|
206
|
-
path =
|
|
140
|
+
path = `https://${path}`;
|
|
207
141
|
}
|
|
208
142
|
}
|
|
209
|
-
|
|
210
|
-
if (this.computedConfig.
|
|
211
|
-
|
|
212
|
-
url.search = this.computedConfig.queryParser(this.computedConfig.query);
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
var queryKeys = Object.keys(this.computedConfig.query);
|
|
216
|
-
for (var i = 0; i < queryKeys.length; i++) {
|
|
217
|
-
var key = queryKeys[i];
|
|
218
|
-
url.searchParams.append(key, ((_a = this.computedConfig.query[key]) === null || _a === void 0 ? void 0 : _a.toString()) || "");
|
|
219
|
-
}
|
|
220
|
-
}
|
|
143
|
+
const url = new URL(path, origin);
|
|
144
|
+
if (this.computedConfig.queryString) {
|
|
145
|
+
url.search = this.computedConfig.queryString;
|
|
221
146
|
}
|
|
222
147
|
return url;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
}());
|
|
226
|
-
export default RequestContext;
|
|
148
|
+
}
|
|
149
|
+
}
|
package/esm/RequestError.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const RequestErrorCode = {
|
|
2
2
|
MISC_UNKNOWN_ERROR: "misc/unknown-error",
|
|
3
3
|
REQUEST_NETWORK_ERROR: "request/network-error",
|
|
4
4
|
REQUEST_INVALID_STATUS: "request/invalid-status",
|
|
5
5
|
REQUEST_INVALID_CONFIG: "request/invalid-config",
|
|
6
6
|
REQUEST_MISMATCH_RESPONSE_TYPE: "request/mismatch-response-type",
|
|
7
7
|
};
|
|
8
|
-
export
|
|
8
|
+
export const isRequestError = (error) => {
|
|
9
9
|
return "isRequestError" in error;
|
|
10
10
|
};
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
export const convertToRequestError = (config) => {
|
|
12
|
+
const { error, context, response, code } = config;
|
|
13
|
+
const body = context.getParsedBody();
|
|
14
|
+
const resultError = Object.assign(error, {
|
|
15
15
|
name: "RequestError",
|
|
16
16
|
response: response,
|
|
17
17
|
code: code,
|
|
18
18
|
isRequestError: true,
|
|
19
19
|
request: {
|
|
20
20
|
url: context.getRequestUrl().href,
|
|
21
|
-
query: context.computedConfig.
|
|
21
|
+
query: context.computedConfig.queryObject,
|
|
22
22
|
headers: context.computedConfig.headers,
|
|
23
23
|
body: body,
|
|
24
24
|
},
|
package/esm/Requester.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ApiResponse, Body, Query, RequestConfig, RequestHost } from "./ApiTypes";
|
|
2
2
|
import { EndpointMockingConfig } from "./MockingTypes";
|
|
3
|
-
export declare const submit: <R, P extends string | undefined, Q extends Query
|
|
3
|
+
export declare const submit: <R, P extends string | undefined, Q extends Query, B extends Body | undefined>(host: RequestHost, config: RequestConfig<P, Q, B>, mocking: EndpointMockingConfig<R, P, Q, B> | null | undefined) => Promise<ApiResponse<R>>;
|