api-def 0.12.0 → 0.13.0
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/README.md +3 -0
- package/bin/index.js +312 -313
- package/cjs/Api.d.ts +6 -6
- package/cjs/Api.js +99 -143
- package/cjs/ApiTypes.d.ts +1 -1
- package/cjs/ApiUtils.d.ts +2 -1
- package/cjs/ApiUtils.js +41 -33
- package/cjs/Endpoint.d.ts +1 -1
- package/cjs/Endpoint.js +112 -175
- package/cjs/EndpointBuilder.js +23 -32
- package/cjs/QueryHandling.js +12 -13
- package/cjs/RequestConfig.js +54 -36
- package/cjs/RequestContext.d.ts +1 -1
- package/cjs/RequestContext.js +125 -180
- package/cjs/RequestError.js +16 -19
- package/cjs/Requester.js +230 -312
- package/cjs/TextDecoding.js +31 -31
- package/cjs/Utils.js +20 -23
- package/cjs/backend/AxiosRequestBackend.d.ts +1 -1
- package/cjs/backend/AxiosRequestBackend.js +65 -172
- package/cjs/backend/FetchRequestBackend.d.ts +1 -1
- package/cjs/backend/FetchRequestBackend.js +108 -154
- package/cjs/backend/MockRequestBackend.d.ts +1 -1
- package/cjs/backend/MockRequestBackend.js +146 -208
- package/cjs/cache/ClientCaching.js +26 -74
- package/cjs/cache/LocalForageClientCacheBackend.js +15 -83
- package/cjs/cache/LocalStorageClientCacheBackend.js +14 -73
- package/cjs/index.d.ts +11 -11
- package/cjs/index.js +24 -21
- package/cjs/middleware/ClientCacheMiddleware.js +80 -103
- package/cjs/middleware/LoggingMiddleware.js +71 -42
- package/cjs/util/retry/index.js +42 -9
- package/cjs/util/retry/lib/retry.js +25 -27
- package/cjs/util/retry/lib/retryOperation.d.ts +1 -26
- package/cjs/util/retry/lib/retryOperation.js +21 -23
- package/esm/Api.d.ts +11 -11
- package/esm/Api.js +12 -23
- package/esm/ApiConstants.d.ts +1 -1
- package/esm/ApiTypes.d.ts +5 -5
- package/esm/ApiUtils.d.ts +4 -3
- package/esm/ApiUtils.js +15 -7
- package/esm/Endpoint.d.ts +6 -6
- package/esm/Endpoint.js +22 -28
- package/esm/EndpointBuilder.d.ts +4 -4
- package/esm/EndpointBuilder.js +2 -2
- package/esm/MockingTypes.d.ts +1 -1
- package/esm/QueryHandling.d.ts +1 -1
- package/esm/QueryHandling.js +2 -3
- package/esm/RequestConfig.d.ts +1 -1
- package/esm/RequestConfig.js +6 -7
- package/esm/RequestContext.d.ts +7 -7
- package/esm/RequestContext.js +15 -27
- package/esm/RequestError.d.ts +3 -3
- package/esm/RequestError.js +2 -3
- package/esm/Requester.d.ts +2 -2
- package/esm/Requester.js +44 -50
- package/esm/UtilTypes.d.ts +1 -1
- package/esm/Utils.js +2 -1
- package/esm/Validation.d.ts +1 -1
- package/esm/backend/AxiosRequestBackend.d.ts +4 -4
- package/esm/backend/AxiosRequestBackend.js +47 -84
- package/esm/backend/FetchRequestBackend.d.ts +5 -5
- package/esm/backend/FetchRequestBackend.js +49 -63
- package/esm/backend/MockRequestBackend.d.ts +4 -4
- package/esm/backend/MockRequestBackend.js +105 -136
- package/esm/backend/RequestBackend.d.ts +2 -2
- package/esm/cache/ClientCaching.d.ts +1 -1
- package/esm/cache/ClientCaching.js +8 -17
- package/esm/cache/LocalForageClientCacheBackend.d.ts +1 -1
- package/esm/cache/LocalForageClientCacheBackend.js +8 -25
- package/esm/cache/LocalStorageClientCacheBackend.d.ts +1 -1
- package/esm/cache/LocalStorageClientCacheBackend.js +9 -26
- package/esm/index.d.ts +16 -16
- package/esm/index.js +15 -15
- package/esm/middleware/ClientCacheMiddleware.d.ts +1 -1
- package/esm/middleware/ClientCacheMiddleware.js +8 -17
- package/esm/middleware/LoggingMiddleware.d.ts +1 -1
- package/esm/middleware/LoggingMiddleware.js +5 -6
- package/esm/util/retry/index.js +1 -1
- package/esm/util/retry/lib/retry.d.ts +1 -1
- package/esm/util/retry/lib/retry.js +13 -7
- package/esm/util/retry/lib/retryOperation.d.ts +1 -26
- package/esm/util/retry/lib/retryOperation.js +1 -1
- package/package.json +66 -28
|
@@ -1,69 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
8
26
|
};
|
|
9
|
-
return function (
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
15
33
|
};
|
|
16
34
|
})();
|
|
17
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
28
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
-
function step(op) {
|
|
31
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
-
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;
|
|
34
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
-
switch (op[0]) {
|
|
36
|
-
case 0: case 1: t = op; break;
|
|
37
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
-
default:
|
|
41
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
-
if (t[2]) _.ops.pop();
|
|
46
|
-
_.trys.pop(); continue;
|
|
47
|
-
}
|
|
48
|
-
op = body.call(thisArg, _);
|
|
49
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
return FetchError;
|
|
64
|
-
}(Error));
|
|
65
|
-
var FetchRequestBackend = /** @class */ (function () {
|
|
66
|
-
function FetchRequestBackend(fetchLibrary) {
|
|
36
|
+
const ApiUtils_1 = require("../ApiUtils");
|
|
37
|
+
const RequestError_1 = require("../RequestError");
|
|
38
|
+
const Utils = __importStar(require("../Utils"));
|
|
39
|
+
const Utils_1 = require("../Utils");
|
|
40
|
+
class FetchError extends Error {
|
|
41
|
+
}
|
|
42
|
+
class FetchRequestBackend {
|
|
43
|
+
constructor(fetchLibrary) {
|
|
67
44
|
this.fetch = (0, Utils_1.getGlobalFetch)();
|
|
68
45
|
this.id = "fetch";
|
|
69
46
|
if (fetchLibrary !== undefined) {
|
|
@@ -74,102 +51,80 @@ var FetchRequestBackend = /** @class */ (function () {
|
|
|
74
51
|
}
|
|
75
52
|
}
|
|
76
53
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return [3 /*break*/, 8];
|
|
122
|
-
case 5:
|
|
123
|
-
if (!(responseType === "stream")) return [3 /*break*/, 6];
|
|
124
|
-
data = response.body;
|
|
125
|
-
return [3 /*break*/, 8];
|
|
126
|
-
case 6: return [4 /*yield*/, response.text()];
|
|
127
|
-
case 7:
|
|
128
|
-
data = _b.sent();
|
|
129
|
-
_b.label = 8;
|
|
130
|
-
case 8: return [3 /*break*/, 10];
|
|
131
|
-
case 9:
|
|
132
|
-
error_1 = _b.sent();
|
|
133
|
-
throw (0, RequestError_1.convertToRequestError)({
|
|
134
|
-
error: Object.assign(new Error("[api-def] Failed to parse response as '".concat(responseType, "'").concat(text ? ", got: ".concat(text) : "")), {
|
|
135
|
-
cause: error_1,
|
|
136
|
-
}),
|
|
137
|
-
code: RequestError_1.RequestErrorCode.REQUEST_MISMATCH_RESPONSE_TYPE,
|
|
138
|
-
context: context,
|
|
139
|
-
response: convertedResponse,
|
|
140
|
-
});
|
|
141
|
-
case 10:
|
|
142
|
-
convertedResponse.data = data;
|
|
143
|
-
return [2 /*return*/, convertedResponse];
|
|
144
|
-
}
|
|
54
|
+
async extractResponseFromError(error) {
|
|
55
|
+
if ("response" in error) {
|
|
56
|
+
const fetchError = error;
|
|
57
|
+
return fetchError.response ? fetchError.response : null;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
async convertResponse(context, response) {
|
|
62
|
+
const { status, headers } = response;
|
|
63
|
+
const convertedResponse = {
|
|
64
|
+
method: context.method,
|
|
65
|
+
url: response.url,
|
|
66
|
+
data: undefined,
|
|
67
|
+
status: status,
|
|
68
|
+
headers: headers,
|
|
69
|
+
state: context.requestConfig.state,
|
|
70
|
+
stats: context.stats,
|
|
71
|
+
};
|
|
72
|
+
const responseType = context.responseType ?? (0, ApiUtils_1.inferResponseType)(response.headers.get("Content-Type"));
|
|
73
|
+
let text;
|
|
74
|
+
let data;
|
|
75
|
+
try {
|
|
76
|
+
if (responseType === "arraybuffer") {
|
|
77
|
+
data = await response.arrayBuffer();
|
|
78
|
+
}
|
|
79
|
+
else if (responseType === "json") {
|
|
80
|
+
text = await response.text();
|
|
81
|
+
data = JSON.parse(text);
|
|
82
|
+
}
|
|
83
|
+
else if (responseType === "stream") {
|
|
84
|
+
data = response.body;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
data = await response.text();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
throw (0, RequestError_1.convertToRequestError)({
|
|
92
|
+
error: Object.assign(new Error(`[api-def] Failed to parse response as '${responseType}'${text ? `, got: ${text}` : ""}`), {
|
|
93
|
+
cause: error,
|
|
94
|
+
}),
|
|
95
|
+
code: RequestError_1.RequestErrorCode.REQUEST_MISMATCH_RESPONSE_TYPE,
|
|
96
|
+
context: context,
|
|
97
|
+
response: convertedResponse,
|
|
145
98
|
});
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
99
|
+
}
|
|
100
|
+
convertedResponse.data = data;
|
|
101
|
+
return convertedResponse;
|
|
102
|
+
}
|
|
103
|
+
makeRequest(context) {
|
|
149
104
|
if (!this.fetch) {
|
|
150
105
|
throw new Error("[api-def] No fetch impl was provided to FetchRequestBackend");
|
|
151
106
|
}
|
|
152
|
-
|
|
107
|
+
const { requestConfig } = context;
|
|
153
108
|
// abort controller is a newer feature than fetch
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
109
|
+
const abortController = AbortController && new AbortController();
|
|
110
|
+
const abortSignal = abortController ? abortController.signal : undefined;
|
|
111
|
+
let softAbort = false;
|
|
112
|
+
let responded = false;
|
|
113
|
+
const body = context.getParsedBody();
|
|
114
|
+
const bodyJsonify = body !== null && typeof body === "object" && !Utils.isFormData(body);
|
|
115
|
+
const headers = Utils.assign({
|
|
161
116
|
// logic from axios
|
|
162
117
|
"Content-Type": bodyJsonify ? "application/json;charset=utf-8" : undefined,
|
|
163
118
|
}, requestConfig.headers);
|
|
164
|
-
|
|
165
|
-
|
|
119
|
+
const parsedHeaders = Object.keys(headers).reduce((parsedHeaders, key) => {
|
|
120
|
+
const value = headers[key];
|
|
166
121
|
if (value !== undefined) {
|
|
167
122
|
parsedHeaders[key] = value;
|
|
168
123
|
}
|
|
169
124
|
return parsedHeaders;
|
|
170
125
|
}, {});
|
|
171
|
-
|
|
172
|
-
|
|
126
|
+
const url = context.requestUrl;
|
|
127
|
+
const fetchOptions = {
|
|
173
128
|
method: context.method.toUpperCase(),
|
|
174
129
|
body: bodyJsonify ? JSON.stringify(body) : body,
|
|
175
130
|
headers: parsedHeaders,
|
|
@@ -183,12 +138,12 @@ var FetchRequestBackend = /** @class */ (function () {
|
|
|
183
138
|
fetchOptions.credentials = requestConfig.credentials ? "include" : undefined;
|
|
184
139
|
}
|
|
185
140
|
if (requestConfig.debug) {
|
|
186
|
-
console.log(
|
|
141
|
+
console.log(`[api-def] Fetching '${url.href}' with options`, JSON.stringify(fetchOptions, null, 2));
|
|
187
142
|
}
|
|
188
|
-
|
|
143
|
+
const promise = this.fetch(url.href, fetchOptions).then((response) => {
|
|
189
144
|
responded = true;
|
|
190
145
|
if (!response.ok) {
|
|
191
|
-
|
|
146
|
+
const error = new FetchError("Fetch failed");
|
|
192
147
|
error.response = response;
|
|
193
148
|
throw error;
|
|
194
149
|
}
|
|
@@ -200,15 +155,14 @@ var FetchRequestBackend = /** @class */ (function () {
|
|
|
200
155
|
return {
|
|
201
156
|
promise: promise,
|
|
202
157
|
canceler: abortSignal
|
|
203
|
-
?
|
|
204
|
-
:
|
|
158
|
+
? () => !responded && abortController.abort()
|
|
159
|
+
: () => {
|
|
205
160
|
softAbort = true;
|
|
206
161
|
},
|
|
207
162
|
};
|
|
208
|
-
}
|
|
209
|
-
|
|
163
|
+
}
|
|
164
|
+
getErrorInfo(error, response) {
|
|
210
165
|
return undefined;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
}());
|
|
166
|
+
}
|
|
167
|
+
}
|
|
214
168
|
exports.default = FetchRequestBackend;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ApiResponse } from "../ApiTypes";
|
|
2
2
|
import type RequestContext from "../RequestContext";
|
|
3
|
-
import type { RequestBackendErrorInfo, RequestOperation } from "./RequestBackend";
|
|
4
3
|
import type RequestBackend from "./RequestBackend";
|
|
4
|
+
import type { RequestBackendErrorInfo, RequestOperation } from "./RequestBackend";
|
|
5
5
|
export default class MockRequestBackend implements RequestBackend<ApiResponse> {
|
|
6
6
|
readonly id = "mock";
|
|
7
7
|
convertResponse<T>(context: RequestContext, response: ApiResponse, error?: boolean): Promise<ApiResponse<T>>;
|