typedrest 0.4.1 → 0.6.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 +42 -4
- package/endpoints/{CachingEndpoint.ts → CachingEndpoint.d.ts} +0 -1
- package/endpoints/Endpoint.d.ts +121 -0
- package/endpoints/Endpoint.js +9 -22
- package/endpoints/{EntryEndpoint.ts → EntryEndpoint.d.ts} +7 -27
- package/endpoints/EntryEndpoint.js +3 -14
- package/endpoints/generic/{CollectionEndpoint.ts → CollectionEndpoint.d.ts} +2 -5
- package/endpoints/generic/{ETagEndpointBase.ts → ETagEndpointBase.d.ts} +7 -38
- package/endpoints/generic/ETagEndpointBase.js +27 -42
- package/endpoints/generic/{ElementEndpoint.ts → ElementEndpoint.d.ts} +12 -70
- package/endpoints/generic/ElementEndpoint.js +39 -60
- package/endpoints/generic/{GenericCollectionEndpoint.ts → GenericCollectionEndpoint.d.ts} +43 -75
- package/endpoints/generic/GenericCollectionEndpoint.js +70 -44
- package/endpoints/generic/{IndexerEndpoint.ts → IndexerEndpoint.d.ts} +4 -11
- package/endpoints/generic/PartialResponse.d.ts +19 -0
- package/endpoints/generic/PartialResponse.js +33 -0
- package/endpoints/generic/{index.ts → index.d.ts} +1 -0
- package/endpoints/generic/index.js +2 -1
- package/endpoints/{index.ts → index.d.ts} +2 -2
- package/endpoints/index.js +3 -2
- package/endpoints/raw/{BlobEndpoint.ts → BlobEndpoint.d.ts} +9 -29
- package/endpoints/raw/BlobEndpoint.js +10 -27
- package/endpoints/raw/{UploadEndpoint.ts → UploadEndpoint.d.ts} +4 -18
- package/endpoints/raw/UploadEndpoint.js +11 -22
- package/endpoints/reactive/Delay.d.ts +7 -0
- package/endpoints/reactive/Delay.js +27 -0
- package/endpoints/reactive/GenericStreamingCollectionEndpoint.d.ts +32 -0
- package/endpoints/reactive/GenericStreamingCollectionEndpoint.js +79 -0
- package/endpoints/reactive/PollingEndpoint.d.ts +39 -0
- package/endpoints/reactive/PollingEndpoint.js +67 -0
- package/endpoints/reactive/SseStreamingEndpoint.d.ts +50 -0
- package/endpoints/reactive/SseStreamingEndpoint.js +120 -0
- package/endpoints/reactive/StreamingCollectionEndpoint.d.ts +17 -0
- package/endpoints/reactive/StreamingCollectionEndpoint.js +23 -0
- package/endpoints/reactive/StreamingEndpoint.d.ts +28 -0
- package/endpoints/reactive/StreamingEndpoint.js +56 -0
- package/endpoints/reactive/index.d.ts +5 -0
- package/endpoints/reactive/index.js +22 -0
- package/endpoints/rpc/{ActionEndpoint.ts → ActionEndpoint.d.ts} +3 -10
- package/endpoints/rpc/ActionEndpoint.js +3 -14
- package/endpoints/rpc/{ConsumerEndpoint.ts → ConsumerEndpoint.d.ts} +3 -12
- package/endpoints/rpc/ConsumerEndpoint.js +5 -16
- package/endpoints/rpc/{FunctionEndpoint.ts → FunctionEndpoint.d.ts} +3 -14
- package/endpoints/rpc/FunctionEndpoint.js +6 -17
- package/endpoints/rpc/{ProducerEndpoint.ts → ProducerEndpoint.d.ts} +3 -11
- package/endpoints/rpc/ProducerEndpoint.js +4 -15
- package/endpoints/rpc/{RpcEndpointBase.ts → RpcEndpointBase.d.ts} +4 -12
- package/endpoints/rpc/RpcEndpointBase.js +3 -14
- package/errors/DefaultErrorHandler.d.ts +21 -0
- package/errors/DefaultErrorHandler.js +19 -27
- package/errors/{Errors.ts → Errors.d.ts} +23 -19
- package/errors/Errors.js +8 -2
- package/http/EntityStream.d.ts +10 -0
- package/http/EntityStream.js +42 -0
- package/http/FetchHttpClient.d.ts +15 -0
- package/http/FetchHttpClient.js +1 -1
- package/http/{HttpClient.ts → HttpClient.d.ts} +1 -3
- package/http/HttpContentRange.d.ts +23 -0
- package/http/HttpContentRange.js +39 -0
- package/http/HttpHeader.d.ts +16 -0
- package/http/HttpHeader.js +6 -1
- package/http/{HttpMethod.ts → HttpMethod.d.ts} +1 -1
- package/http/{HttpStatusCode.ts → HttpStatusCode.d.ts} +5 -2
- package/http/HttpStatusCode.js +4 -1
- package/http/ResponseCache.d.ts +19 -0
- package/http/ResponseCache.js +4 -15
- package/http/RetryAfter.d.ts +6 -0
- package/http/RetryAfter.js +24 -0
- package/http/ServerSentEvents.d.ts +50 -0
- package/http/ServerSentEvents.js +140 -0
- package/http/{index.ts → index.d.ts} +4 -0
- package/http/index.js +5 -1
- package/links/AggregateLinkExtractor.d.ts +17 -0
- package/links/AggregateLinkExtractor.js +7 -18
- package/links/HalLinkExtractor.d.ts +13 -0
- package/links/HalLinkExtractor.js +9 -20
- package/links/HeaderLinkExtractor.d.ts +13 -0
- package/links/HeaderLinkExtractor.js +4 -15
- package/links/{Link.ts → Link.d.ts} +6 -2
- package/links/{LinkExtractor.ts → LinkExtractor.d.ts} +0 -1
- package/package.json +66 -16
- package/serializers/JsonSerializer.d.ts +18 -0
- package/serializers/{Serializer.ts → Serializer.d.ts} +0 -2
- package/endpoints/Endpoint.test.ts +0 -300
- package/endpoints/Endpoint.ts +0 -247
- package/endpoints/generic/CollectionEndpoint.test.ts +0 -215
- package/endpoints/generic/ElementEndpoint.test.ts +0 -262
- package/endpoints/generic/IndexerEndpoint.test.ts +0 -12
- package/endpoints/raw/BlobEndpoint.test.ts +0 -52
- package/endpoints/raw/UploadEndpoint.test.ts +0 -47
- package/endpoints/rpc/ActionEndpoint.test.ts +0 -36
- package/endpoints/rpc/ConsumerEndpoint.test.ts +0 -29
- package/endpoints/rpc/FunctionEndpoint.test.ts +0 -29
- package/endpoints/rpc/ProducerEndpoint.test.ts +0 -32
- package/errors/DefaultErrorHandler.ts +0 -62
- package/http/FetchHttpClient.ts +0 -26
- package/http/HttpHeader.ts +0 -11
- package/http/ResponseCache.ts +0 -25
- package/jest.config.js +0 -12
- package/links/AggregateLinkExtractor.ts +0 -28
- package/links/HalLinkExtractor.ts +0 -45
- package/links/HeaderLinkExtractor.ts +0 -56
- package/serializers/JsonSerializer.ts +0 -25
- /package/endpoints/raw/{index.ts → index.d.ts} +0 -0
- /package/endpoints/rpc/{index.ts → index.d.ts} +0 -0
- /package/errors/{ErrorHandler.ts → ErrorHandler.d.ts} +0 -0
- /package/errors/{index.ts → index.d.ts} +0 -0
- /package/{index.ts → index.d.ts} +0 -0
- /package/links/{index.ts → index.d.ts} +0 -0
- /package/serializers/{index.ts → index.d.ts} +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HttpContentRange = void 0;
|
|
4
|
+
const HttpHeader_1 = require("./HttpHeader");
|
|
5
|
+
/**
|
|
6
|
+
* Describes which subset of a set of elements a response contains.
|
|
7
|
+
*/
|
|
8
|
+
class HttpContentRange {
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new content range.
|
|
11
|
+
* @param unit The unit the range is expressed in, e.g. `elements`.
|
|
12
|
+
* @param from The index at which the data starts.
|
|
13
|
+
* @param to The index at which the data stops.
|
|
14
|
+
* @param length The total number of elements available on the server; `undefined` if unknown.
|
|
15
|
+
*/
|
|
16
|
+
constructor(unit, from, to, length) {
|
|
17
|
+
this.unit = unit;
|
|
18
|
+
this.from = from;
|
|
19
|
+
this.to = to;
|
|
20
|
+
this.length = length;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Extracts the content range from a `Response`.
|
|
24
|
+
* @returns The content range; `undefined` if the response has no (valid) {@link HttpHeader.ContentRange} header.
|
|
25
|
+
*/
|
|
26
|
+
static from(response) {
|
|
27
|
+
const header = response.headers.get(HttpHeader_1.HttpHeader.ContentRange);
|
|
28
|
+
if (!header)
|
|
29
|
+
return undefined;
|
|
30
|
+
const match = HttpContentRange.pattern.exec(header.trim());
|
|
31
|
+
if (!match)
|
|
32
|
+
return undefined;
|
|
33
|
+
const [, unit, from, to, length] = match;
|
|
34
|
+
return new HttpContentRange(unit, from === undefined ? undefined : parseInt(from), to === undefined ? undefined : parseInt(to), length === "*" ? undefined : parseInt(length));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.HttpContentRange = HttpContentRange;
|
|
38
|
+
HttpContentRange.pattern = /^(\w+) (?:(\d+)-(\d+)|\*)\/(\d+|\*)$/;
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cENvbnRlbnRSYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkh0dHBDb250ZW50UmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBRTFDOztHQUVHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDekI7Ozs7OztPQU1HO0lBQ0gsWUFDb0IsSUFBWSxFQUNaLElBQWEsRUFDYixFQUFXLEVBQ1gsTUFBZTtRQUhmLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ2IsT0FBRSxHQUFGLEVBQUUsQ0FBUztRQUNYLFdBQU0sR0FBTixNQUFNLENBQVM7SUFDbkMsQ0FBQztJQUlEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBa0I7UUFDMUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRTlCLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUU3QixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDekMsT0FBTyxJQUFJLGdCQUFnQixDQUN2QixJQUFJLEVBQ0osSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQy9DLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUMzQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7O0FBbENMLDRDQW1DQztBQXBCMkIsd0JBQU8sR0FBRyxzQ0FBc0MsQ0FBQyJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare enum HttpHeader {
|
|
2
|
+
Authorization = "Authorization",
|
|
3
|
+
ContentType = "Content-Type",
|
|
4
|
+
Accept = "Accept",
|
|
5
|
+
Allow = "Allow",
|
|
6
|
+
Location = "Location",
|
|
7
|
+
Link = "Link",
|
|
8
|
+
ETag = "ETag",
|
|
9
|
+
IfMatch = "If-Match",
|
|
10
|
+
IfNoneMatch = "If-None-Match",
|
|
11
|
+
Range = "Range",
|
|
12
|
+
ContentRange = "Content-Range",
|
|
13
|
+
AcceptRanges = "Accept-Ranges",
|
|
14
|
+
RetryAfter = "Retry-After",
|
|
15
|
+
LastEventId = "Last-Event-ID"
|
|
16
|
+
}
|
package/http/HttpHeader.js
CHANGED
|
@@ -12,5 +12,10 @@ var HttpHeader;
|
|
|
12
12
|
HttpHeader["ETag"] = "ETag";
|
|
13
13
|
HttpHeader["IfMatch"] = "If-Match";
|
|
14
14
|
HttpHeader["IfNoneMatch"] = "If-None-Match";
|
|
15
|
+
HttpHeader["Range"] = "Range";
|
|
16
|
+
HttpHeader["ContentRange"] = "Content-Range";
|
|
17
|
+
HttpHeader["AcceptRanges"] = "Accept-Ranges";
|
|
18
|
+
HttpHeader["RetryAfter"] = "Retry-After";
|
|
19
|
+
HttpHeader["LastEventId"] = "Last-Event-ID";
|
|
15
20
|
})(HttpHeader || (exports.HttpHeader = HttpHeader = {}));
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkh0dHBIZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxVQWVYO0FBZkQsV0FBWSxVQUFVO0lBQ2xCLDZDQUErQixDQUFBO0lBQy9CLDBDQUE0QixDQUFBO0lBQzVCLCtCQUFpQixDQUFBO0lBQ2pCLDZCQUFlLENBQUE7SUFDZixtQ0FBcUIsQ0FBQTtJQUNyQiwyQkFBYSxDQUFBO0lBQ2IsMkJBQWEsQ0FBQTtJQUNiLGtDQUFvQixDQUFBO0lBQ3BCLDJDQUE2QixDQUFBO0lBQzdCLDZCQUFlLENBQUE7SUFDZiw0Q0FBOEIsQ0FBQTtJQUM5Qiw0Q0FBOEIsQ0FBQTtJQUM5Qix3Q0FBMEIsQ0FBQTtJQUMxQiwyQ0FBNkIsQ0FBQTtBQUNqQyxDQUFDLEVBZlcsVUFBVSwwQkFBVixVQUFVLFFBZXJCIn0=
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
export enum HttpStatusCode {
|
|
1
|
+
export declare enum HttpStatusCode {
|
|
2
2
|
OK = 200,
|
|
3
3
|
Created = 201,
|
|
4
4
|
Accepted = 202,
|
|
5
|
+
NoContent = 204,
|
|
6
|
+
PartialContent = 206,
|
|
5
7
|
NotModified = 304,
|
|
6
8
|
BadRequest = 400,
|
|
7
9
|
Unauthorized = 401,
|
|
@@ -10,5 +12,6 @@ export enum HttpStatusCode {
|
|
|
10
12
|
RequestTimeout = 408,
|
|
11
13
|
Conflict = 409,
|
|
12
14
|
Gone = 410,
|
|
13
|
-
PreconditionFailed = 412
|
|
15
|
+
PreconditionFailed = 412,
|
|
16
|
+
RangeNotSatisfiable = 416
|
|
14
17
|
}
|
package/http/HttpStatusCode.js
CHANGED
|
@@ -6,6 +6,8 @@ var HttpStatusCode;
|
|
|
6
6
|
HttpStatusCode[HttpStatusCode["OK"] = 200] = "OK";
|
|
7
7
|
HttpStatusCode[HttpStatusCode["Created"] = 201] = "Created";
|
|
8
8
|
HttpStatusCode[HttpStatusCode["Accepted"] = 202] = "Accepted";
|
|
9
|
+
HttpStatusCode[HttpStatusCode["NoContent"] = 204] = "NoContent";
|
|
10
|
+
HttpStatusCode[HttpStatusCode["PartialContent"] = 206] = "PartialContent";
|
|
9
11
|
HttpStatusCode[HttpStatusCode["NotModified"] = 304] = "NotModified";
|
|
10
12
|
HttpStatusCode[HttpStatusCode["BadRequest"] = 400] = "BadRequest";
|
|
11
13
|
HttpStatusCode[HttpStatusCode["Unauthorized"] = 401] = "Unauthorized";
|
|
@@ -15,5 +17,6 @@ var HttpStatusCode;
|
|
|
15
17
|
HttpStatusCode[HttpStatusCode["Conflict"] = 409] = "Conflict";
|
|
16
18
|
HttpStatusCode[HttpStatusCode["Gone"] = 410] = "Gone";
|
|
17
19
|
HttpStatusCode[HttpStatusCode["PreconditionFailed"] = 412] = "PreconditionFailed";
|
|
20
|
+
HttpStatusCode[HttpStatusCode["RangeNotSatisfiable"] = 416] = "RangeNotSatisfiable";
|
|
18
21
|
})(HttpStatusCode || (exports.HttpStatusCode = HttpStatusCode = {}));
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cFN0YXR1c0NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJIdHRwU3RhdHVzQ29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLGNBZ0JYO0FBaEJELFdBQVksY0FBYztJQUN0QixpREFBUSxDQUFBO0lBQ1IsMkRBQWEsQ0FBQTtJQUNiLDZEQUFjLENBQUE7SUFDZCwrREFBZSxDQUFBO0lBQ2YseUVBQW9CLENBQUE7SUFDcEIsbUVBQWlCLENBQUE7SUFDakIsaUVBQWdCLENBQUE7SUFDaEIscUVBQWtCLENBQUE7SUFDbEIsK0RBQWUsQ0FBQTtJQUNmLDZEQUFjLENBQUE7SUFDZCx5RUFBb0IsQ0FBQTtJQUNwQiw2REFBYyxDQUFBO0lBQ2QscURBQVUsQ0FBQTtJQUNWLGlGQUF3QixDQUFBO0lBQ3hCLG1GQUF5QixDQUFBO0FBQzdCLENBQUMsRUFoQlcsY0FBYyw4QkFBZCxjQUFjLFFBZ0J6QiJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caches the contents of a `Response`.
|
|
3
|
+
*/
|
|
4
|
+
export declare class ResponseCache {
|
|
5
|
+
readonly content: string;
|
|
6
|
+
readonly contentType?: string | undefined;
|
|
7
|
+
readonly eTag?: string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new cache.
|
|
10
|
+
* @param content The content of the `Response`.
|
|
11
|
+
* @param contentType The MIME type of the `content`.
|
|
12
|
+
* @param eTag The E-Tag associated with the `content`.
|
|
13
|
+
*/
|
|
14
|
+
constructor(content: string, contentType?: string | undefined, eTag?: string | undefined);
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new cache from a `Response`.
|
|
17
|
+
*/
|
|
18
|
+
static from(response: Response): Promise<ResponseCache>;
|
|
19
|
+
}
|
package/http/ResponseCache.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.ResponseCache = void 0;
|
|
13
4
|
const HttpHeader_1 = require("./HttpHeader");
|
|
@@ -29,12 +20,10 @@ class ResponseCache {
|
|
|
29
20
|
/**
|
|
30
21
|
* Creates a new cache from a `Response`.
|
|
31
22
|
*/
|
|
32
|
-
static from(response) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return new ResponseCache(yield response.text(), (_a = response.headers.get(HttpHeader_1.HttpHeader.ContentType)) !== null && _a !== void 0 ? _a : undefined, (_b = response.headers.get(HttpHeader_1.HttpHeader.ETag)) !== null && _b !== void 0 ? _b : undefined);
|
|
36
|
-
});
|
|
23
|
+
static async from(response) {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
return new ResponseCache(await response.text(), (_a = response.headers.get(HttpHeader_1.HttpHeader.ContentType)) !== null && _a !== void 0 ? _a : undefined, (_b = response.headers.get(HttpHeader_1.HttpHeader.ETag)) !== null && _b !== void 0 ? _b : undefined);
|
|
37
26
|
}
|
|
38
27
|
}
|
|
39
28
|
exports.ResponseCache = ResponseCache;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzcG9uc2VDYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlJlc3BvbnNlQ2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBRTFDOztHQUVHO0FBQ0gsTUFBYSxhQUFhO0lBQ3RCOzs7OztPQUtHO0lBQ0gsWUFBNEIsT0FBZSxFQUFrQixXQUFvQixFQUFrQixJQUFhO1FBQXBGLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFBa0IsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFBa0IsU0FBSSxHQUFKLElBQUksQ0FBUztJQUNoSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFrQjs7UUFDaEMsT0FBTyxJQUFJLGFBQWEsQ0FDcEIsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQ3JCLE1BQUEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQVUsQ0FBQyxXQUFXLENBQUMsbUNBQUksU0FBUyxFQUN6RCxNQUFBLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUFVLENBQUMsSUFBSSxDQUFDLG1DQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDSjtBQW5CRCxzQ0FtQkMifQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts the delay a server has asked clients to wait for before retrying a request.
|
|
3
|
+
* @param response The response to read the {@link HttpHeader.RetryAfter} header from.
|
|
4
|
+
* @returns The delay in milliseconds; `undefined` if the response has no (valid) header.
|
|
5
|
+
*/
|
|
6
|
+
export declare function retryAfter(response: Response): number | undefined;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retryAfter = retryAfter;
|
|
4
|
+
const HttpHeader_1 = require("./HttpHeader");
|
|
5
|
+
/**
|
|
6
|
+
* Extracts the delay a server has asked clients to wait for before retrying a request.
|
|
7
|
+
* @param response The response to read the {@link HttpHeader.RetryAfter} header from.
|
|
8
|
+
* @returns The delay in milliseconds; `undefined` if the response has no (valid) header.
|
|
9
|
+
*/
|
|
10
|
+
function retryAfter(response) {
|
|
11
|
+
var _a;
|
|
12
|
+
const header = (_a = response.headers.get(HttpHeader_1.HttpHeader.RetryAfter)) === null || _a === void 0 ? void 0 : _a.trim();
|
|
13
|
+
if (!header)
|
|
14
|
+
return undefined;
|
|
15
|
+
// Either a number of seconds ...
|
|
16
|
+
if (/^\d+$/.test(header))
|
|
17
|
+
return parseInt(header) * 1000;
|
|
18
|
+
// ... or an absolute point in time
|
|
19
|
+
const date = Date.parse(header);
|
|
20
|
+
if (Number.isNaN(date))
|
|
21
|
+
return undefined;
|
|
22
|
+
return Math.max(0, date - Date.now());
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmV0cnlBZnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlJldHJ5QWZ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxnQ0FXQztBQWxCRCw2Q0FBMEM7QUFFMUM7Ozs7R0FJRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxRQUFrQjs7SUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBQSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBVSxDQUFDLFVBQVUsQ0FBQywwQ0FBRSxJQUFJLEVBQUUsQ0FBQztJQUNuRSxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRTlCLGlDQUFpQztJQUNqQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRXpELG1DQUFtQztJQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN6QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDIn0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single event read from a Server-Sent Events (SSE) stream.
|
|
3
|
+
*/
|
|
4
|
+
export declare class ServerSentEvent {
|
|
5
|
+
readonly type: string;
|
|
6
|
+
readonly data: string;
|
|
7
|
+
readonly id?: string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new event.
|
|
10
|
+
* @param type The event type from the `event:` field. {@link defaultEventType} if the server did not specify one.
|
|
11
|
+
* @param data The concatenated content of the event's `data:` fields.
|
|
12
|
+
* @param id The id of the most recent `id:` field if any.
|
|
13
|
+
*/
|
|
14
|
+
constructor(type: string, data: string, id?: string | undefined);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The event type used for events without an explicit `event:` field.
|
|
18
|
+
*/
|
|
19
|
+
export declare const defaultEventType = "message";
|
|
20
|
+
/**
|
|
21
|
+
* Reads {@link ServerSentEvent}s from the body of a `Response` in the `text/event-stream` format.
|
|
22
|
+
*/
|
|
23
|
+
export declare class SseReader {
|
|
24
|
+
private readonly response;
|
|
25
|
+
/**
|
|
26
|
+
* Creates a new reader.
|
|
27
|
+
* @param response The response to read the body from.
|
|
28
|
+
*/
|
|
29
|
+
constructor(response: Response);
|
|
30
|
+
private _lastEventId?;
|
|
31
|
+
/**
|
|
32
|
+
* The id of the most recent event that carried an `id:` field.<br>
|
|
33
|
+
* Send this back as a {@link HttpHeader.LastEventId} header when reconnecting to let the server resume where it left off.
|
|
34
|
+
*/
|
|
35
|
+
get lastEventId(): string | undefined;
|
|
36
|
+
private _reconnectionInterval?;
|
|
37
|
+
/**
|
|
38
|
+
* The reconnection interval in milliseconds most recently requested by the server via a `retry:` field if any.
|
|
39
|
+
*/
|
|
40
|
+
get reconnectionInterval(): number | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Reads events until the stream ends.<br>
|
|
43
|
+
* Any event that is still incomplete when the stream ends is discarded.
|
|
44
|
+
*/
|
|
45
|
+
events(): AsyncIterableIterator<ServerSentEvent>;
|
|
46
|
+
/**
|
|
47
|
+
* Splits the response body into lines, accepting `\n`, `\r\n` and `\r` as terminators.
|
|
48
|
+
*/
|
|
49
|
+
private lines;
|
|
50
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SseReader = exports.defaultEventType = exports.ServerSentEvent = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Yields the lines terminated by `\n`, `\r\n` or `\r` within the first `limit` characters of `buffer`.
|
|
6
|
+
* @returns The remaining characters that are not part of a terminated line.
|
|
7
|
+
*/
|
|
8
|
+
function* splitLines(buffer, limit) {
|
|
9
|
+
let start = 0;
|
|
10
|
+
for (let index = 0; index < limit; index++) {
|
|
11
|
+
const char = buffer[index];
|
|
12
|
+
if (char !== "\n" && char !== "\r")
|
|
13
|
+
continue;
|
|
14
|
+
yield buffer.slice(start, index);
|
|
15
|
+
if (char === "\r" && buffer[index + 1] === "\n")
|
|
16
|
+
index++;
|
|
17
|
+
start = index + 1;
|
|
18
|
+
}
|
|
19
|
+
return buffer.slice(start);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A single event read from a Server-Sent Events (SSE) stream.
|
|
23
|
+
*/
|
|
24
|
+
class ServerSentEvent {
|
|
25
|
+
/**
|
|
26
|
+
* Creates a new event.
|
|
27
|
+
* @param type The event type from the `event:` field. {@link defaultEventType} if the server did not specify one.
|
|
28
|
+
* @param data The concatenated content of the event's `data:` fields.
|
|
29
|
+
* @param id The id of the most recent `id:` field if any.
|
|
30
|
+
*/
|
|
31
|
+
constructor(type, data, id) {
|
|
32
|
+
this.type = type;
|
|
33
|
+
this.data = data;
|
|
34
|
+
this.id = id;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.ServerSentEvent = ServerSentEvent;
|
|
38
|
+
/**
|
|
39
|
+
* The event type used for events without an explicit `event:` field.
|
|
40
|
+
*/
|
|
41
|
+
exports.defaultEventType = "message";
|
|
42
|
+
/**
|
|
43
|
+
* Reads {@link ServerSentEvent}s from the body of a `Response` in the `text/event-stream` format.
|
|
44
|
+
*/
|
|
45
|
+
class SseReader {
|
|
46
|
+
/**
|
|
47
|
+
* Creates a new reader.
|
|
48
|
+
* @param response The response to read the body from.
|
|
49
|
+
*/
|
|
50
|
+
constructor(response) {
|
|
51
|
+
this.response = response;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The id of the most recent event that carried an `id:` field.<br>
|
|
55
|
+
* Send this back as a {@link HttpHeader.LastEventId} header when reconnecting to let the server resume where it left off.
|
|
56
|
+
*/
|
|
57
|
+
get lastEventId() { return this._lastEventId; }
|
|
58
|
+
/**
|
|
59
|
+
* The reconnection interval in milliseconds most recently requested by the server via a `retry:` field if any.
|
|
60
|
+
*/
|
|
61
|
+
get reconnectionInterval() { return this._reconnectionInterval; }
|
|
62
|
+
/**
|
|
63
|
+
* Reads events until the stream ends.<br>
|
|
64
|
+
* Any event that is still incomplete when the stream ends is discarded.
|
|
65
|
+
*/
|
|
66
|
+
async *events() {
|
|
67
|
+
let type;
|
|
68
|
+
let data = "";
|
|
69
|
+
for await (const line of this.lines()) {
|
|
70
|
+
if (line === "") {
|
|
71
|
+
// A blank line dispatches the event collected so far
|
|
72
|
+
if (data !== "") {
|
|
73
|
+
// Every data field appended a trailing newline; the last one is not part of the payload
|
|
74
|
+
yield new ServerSentEvent(type !== null && type !== void 0 ? type : exports.defaultEventType, data.slice(0, -1), this._lastEventId);
|
|
75
|
+
data = "";
|
|
76
|
+
}
|
|
77
|
+
type = undefined;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
// Lines starting with a colon are comments, e.g. the ":ping" some servers send to keep the connection alive
|
|
81
|
+
if (line.startsWith(":"))
|
|
82
|
+
continue;
|
|
83
|
+
const colonIndex = line.indexOf(":");
|
|
84
|
+
const field = (colonIndex === -1) ? line : line.slice(0, colonIndex);
|
|
85
|
+
const value = (colonIndex === -1) ? ""
|
|
86
|
+
: line.slice((line[colonIndex + 1] === " ") ? colonIndex + 2 : colonIndex + 1);
|
|
87
|
+
switch (field) {
|
|
88
|
+
case "event":
|
|
89
|
+
type = value;
|
|
90
|
+
break;
|
|
91
|
+
case "data":
|
|
92
|
+
data += value + "\n";
|
|
93
|
+
break;
|
|
94
|
+
case "id":
|
|
95
|
+
if (value.indexOf("\0") === -1)
|
|
96
|
+
this._lastEventId = value;
|
|
97
|
+
break;
|
|
98
|
+
case "retry":
|
|
99
|
+
if (/^\d+$/.test(value))
|
|
100
|
+
this._reconnectionInterval = parseInt(value);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Splits the response body into lines, accepting `\n`, `\r\n` and `\r` as terminators.
|
|
107
|
+
*/
|
|
108
|
+
async *lines() {
|
|
109
|
+
if (!this.response.body)
|
|
110
|
+
return;
|
|
111
|
+
const reader = this.response.body.getReader();
|
|
112
|
+
const decoder = new TextDecoder();
|
|
113
|
+
let buffer = "";
|
|
114
|
+
let stripBom = true;
|
|
115
|
+
try {
|
|
116
|
+
while (true) {
|
|
117
|
+
const { done, value } = await reader.read();
|
|
118
|
+
if (done)
|
|
119
|
+
break;
|
|
120
|
+
buffer += decoder.decode(value, { stream: true });
|
|
121
|
+
if (stripBom && buffer !== "") {
|
|
122
|
+
if (buffer.charCodeAt(0) === 0xFEFF)
|
|
123
|
+
buffer = buffer.slice(1);
|
|
124
|
+
stripBom = false;
|
|
125
|
+
}
|
|
126
|
+
// NOTE: Keep a trailing "\r" buffered; it may still be followed by a "\n" in the next chunk.
|
|
127
|
+
buffer = yield* splitLines(buffer, buffer.endsWith("\r") ? buffer.length - 1 : buffer.length);
|
|
128
|
+
}
|
|
129
|
+
// NOTE: A line that is still unterminated once the stream ends is discarded.
|
|
130
|
+
buffer += decoder.decode();
|
|
131
|
+
yield* splitLines(buffer, buffer.length);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
// NOTE: Ignore errors here so that a failure that already ended the stream is not masked.
|
|
135
|
+
await reader.cancel().catch(() => { });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.SseReader = SseReader;
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyU2VudEV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlNlcnZlclNlbnRFdmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7OztHQUdHO0FBQ0gsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQWMsRUFBRSxLQUFhO0lBQzlDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVkLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJO1lBQUUsU0FBUztRQUU3QyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUk7WUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN6RCxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQWEsZUFBZTtJQUN4Qjs7Ozs7T0FLRztJQUNILFlBQTRCLElBQVksRUFBa0IsSUFBWSxFQUFrQixFQUFXO1FBQXZFLFNBQUksR0FBSixJQUFJLENBQVE7UUFBa0IsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFrQixPQUFFLEdBQUYsRUFBRSxDQUFTO0lBQ25HLENBQUM7Q0FDSjtBQVRELDBDQVNDO0FBRUQ7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUUxQzs7R0FFRztBQUNILE1BQWEsU0FBUztJQUNsQjs7O09BR0c7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
|
|
@@ -4,3 +4,7 @@ export * from "./HttpHeader";
|
|
|
4
4
|
export * from "./HttpClient";
|
|
5
5
|
export * from "./FetchHttpClient";
|
|
6
6
|
export * from "./ResponseCache";
|
|
7
|
+
export * from "./HttpContentRange";
|
|
8
|
+
export * from "./RetryAfter";
|
|
9
|
+
export * from "./EntityStream";
|
|
10
|
+
export * from "./ServerSentEvents";
|
package/http/index.js
CHANGED
|
@@ -20,4 +20,8 @@ __exportStar(require("./HttpHeader"), exports);
|
|
|
20
20
|
__exportStar(require("./HttpClient"), exports);
|
|
21
21
|
__exportStar(require("./FetchHttpClient"), exports);
|
|
22
22
|
__exportStar(require("./ResponseCache"), exports);
|
|
23
|
-
|
|
23
|
+
__exportStar(require("./HttpContentRange"), exports);
|
|
24
|
+
__exportStar(require("./RetryAfter"), exports);
|
|
25
|
+
__exportStar(require("./EntityStream"), exports);
|
|
26
|
+
__exportStar(require("./ServerSentEvents"), exports);
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQTZCO0FBQzdCLG1EQUFpQztBQUNqQywrQ0FBNkI7QUFDN0IsK0NBQTZCO0FBQzdCLG9EQUFrQztBQUNsQyxrREFBZ0M7QUFDaEMscURBQW1DO0FBQ25DLCtDQUE2QjtBQUM3QixpREFBK0I7QUFDL0IscURBQW1DIn0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Link } from "./Link";
|
|
2
|
+
import { LinkExtractor } from "./LinkExtractor";
|
|
3
|
+
/**
|
|
4
|
+
* Combines the results of multiple {@link LinkExtractor}s.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AggregateLinkExtractor implements LinkExtractor {
|
|
7
|
+
private extractors;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new aggregate link extractor.
|
|
10
|
+
* @param extractors The link extractors to aggregate.
|
|
11
|
+
*/
|
|
12
|
+
constructor(...extractors: LinkExtractor[]);
|
|
13
|
+
/**
|
|
14
|
+
* @inheritDoc
|
|
15
|
+
*/
|
|
16
|
+
getLinks(response: Response): Promise<Link[]>;
|
|
17
|
+
}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.AggregateLinkExtractor = void 0;
|
|
13
4
|
/**
|
|
@@ -24,15 +15,13 @@ class AggregateLinkExtractor {
|
|
|
24
15
|
/**
|
|
25
16
|
* @inheritDoc
|
|
26
17
|
*/
|
|
27
|
-
getLinks(response) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return result;
|
|
34
|
-
});
|
|
18
|
+
async getLinks(response) {
|
|
19
|
+
let result = [];
|
|
20
|
+
for (const extractor of this.extractors) {
|
|
21
|
+
result = result.concat(await extractor.getLinks(response));
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
35
24
|
}
|
|
36
25
|
}
|
|
37
26
|
exports.AggregateLinkExtractor = AggregateLinkExtractor;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdncmVnYXRlTGlua0V4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkFnZ3JlZ2F0ZUxpbmtFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0E7O0dBRUc7QUFDSCxNQUFhLHNCQUFzQjtJQUcvQjs7O09BR0c7SUFDSCxZQUFZLEdBQUcsVUFBMkI7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFrQjtRQUM3QixJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDeEIsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDSjtBQXJCRCx3REFxQkMifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Link } from "./Link";
|
|
2
|
+
import { LinkExtractor } from "./LinkExtractor";
|
|
3
|
+
/**
|
|
4
|
+
* Extracts links from JSON bodies according to the Hypertext Application Language (HAL) specification.
|
|
5
|
+
*/
|
|
6
|
+
export declare class HalLinkExtractor implements LinkExtractor {
|
|
7
|
+
/**
|
|
8
|
+
* @inheritDoc
|
|
9
|
+
*/
|
|
10
|
+
getLinks(response: Response): Promise<Link[]>;
|
|
11
|
+
private parseJsonBody;
|
|
12
|
+
private parseLink;
|
|
13
|
+
}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.HalLinkExtractor = void 0;
|
|
13
4
|
const Link_1 = require("./Link");
|
|
@@ -19,16 +10,14 @@ class HalLinkExtractor {
|
|
|
19
10
|
/**
|
|
20
11
|
* @inheritDoc
|
|
21
12
|
*/
|
|
22
|
-
getLinks(response) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
});
|
|
13
|
+
async getLinks(response) {
|
|
14
|
+
const contentType = response.headers.get(http_1.HttpHeader.ContentType);
|
|
15
|
+
if (contentType === null || contentType === void 0 ? void 0 : contentType.startsWith("application/hal+json")) {
|
|
16
|
+
return this.parseJsonBody(await response.clone().json());
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
32
21
|
}
|
|
33
22
|
parseJsonBody(body) {
|
|
34
23
|
const links = [];
|
|
@@ -54,4 +43,4 @@ class HalLinkExtractor {
|
|
|
54
43
|
}
|
|
55
44
|
}
|
|
56
45
|
exports.HalLinkExtractor = HalLinkExtractor;
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFsTGlua0V4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkhhbExpbmtFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQThCO0FBRTlCLGtDQUFxQztBQUVyQzs7R0FFRztBQUNILE1BQWEsZ0JBQWdCO0lBQ3pCOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFrQjtRQUM3QixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQVM7UUFDM0IsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDO1FBRXpCLE1BQU0sYUFBYSxHQUE0QixJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNELElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQVcsRUFBRSxHQUFRO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUM5RSxPQUFPLElBQUksV0FBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBQ0o7QUFyQ0QsNENBcUNDIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Link } from "./Link";
|
|
2
|
+
import { LinkExtractor } from "./LinkExtractor";
|
|
3
|
+
/**
|
|
4
|
+
* Extracts links from HTTP headers.
|
|
5
|
+
*/
|
|
6
|
+
export declare class HeaderLinkExtractor implements LinkExtractor {
|
|
7
|
+
/**
|
|
8
|
+
* @inheritDoc
|
|
9
|
+
*/
|
|
10
|
+
getLinks(response: Response): Promise<Link[]>;
|
|
11
|
+
private parseLink;
|
|
12
|
+
private split;
|
|
13
|
+
}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.HeaderLinkExtractor = void 0;
|
|
13
4
|
const Link_1 = require("./Link");
|
|
@@ -19,11 +10,9 @@ class HeaderLinkExtractor {
|
|
|
19
10
|
/**
|
|
20
11
|
* @inheritDoc
|
|
21
12
|
*/
|
|
22
|
-
getLinks(response) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return (_c = (_b = (_a = response.headers.get(http_1.HttpHeader.Link)) === null || _a === void 0 ? void 0 : _a.match(/<[^>]*>\s*(\s*;\s*[^\(\)<>@,;:"\/\[\]\?={} \t]+=(([^\(\)<>@,;:"\/\[\]\?={} \t]+)|("[^"]*")))*(,|$)/g)) === null || _b === void 0 ? void 0 : _b.map(value => this.parseLink(value))) !== null && _c !== void 0 ? _c : [];
|
|
26
|
-
});
|
|
13
|
+
async getLinks(response) {
|
|
14
|
+
var _a, _b, _c;
|
|
15
|
+
return (_c = (_b = (_a = response.headers.get(http_1.HttpHeader.Link)) === null || _a === void 0 ? void 0 : _a.match(/<[^>]*>\s*(\s*;\s*[^\(\)<>@,;:"\/\[\]\?={} \t]+=(([^\(\)<>@,;:"\/\[\]\?={} \t]+)|("[^"]*")))*(,|$)/g)) === null || _b === void 0 ? void 0 : _b.map(value => this.parseLink(value))) !== null && _c !== void 0 ? _c : [];
|
|
27
16
|
}
|
|
28
17
|
parseLink(value) {
|
|
29
18
|
var _a;
|
|
@@ -65,4 +54,4 @@ class HeaderLinkExtractor {
|
|
|
65
54
|
}
|
|
66
55
|
}
|
|
67
56
|
exports.HeaderLinkExtractor = HeaderLinkExtractor;
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhZGVyTGlua0V4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkhlYWRlckxpbmtFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQThCO0FBRTlCLGtDQUFxQztBQUVyQzs7R0FFRztBQUNILE1BQWEsbUJBQW1CO0lBQzVCOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFrQjs7UUFDN0IsT0FBTyxNQUFBLE1BQUEsTUFBQSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBVSxDQUFDLElBQUksQ0FBQywwQ0FDdEMsS0FBSyxDQUFDLHFHQUFxRyxDQUFDLDBDQUM1RyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLG1DQUNsQyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWE7O1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksR0FBdUIsQ0FBQztRQUM1QixJQUFJLEtBQXlCLENBQUM7UUFDOUIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXRCLE1BQUEsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsNEVBQTRFLENBQUMsMENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUN6QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMvQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxVQUFVLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN4RSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sSUFBSSxXQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLEtBQUssQ0FBQyxHQUFXLEVBQUUsU0FBaUI7UUFDeEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQztnQkFDRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDZixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUM7YUFDOUQ7WUFDRCxDQUFDLENBQUM7Z0JBQ0UsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsS0FBSyxFQUFFLEVBQUU7YUFDWixDQUFDO0lBQ1YsQ0FBQztDQUNKO0FBaERELGtEQWdEQyJ9
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Represents a link to another resource.
|
|
3
3
|
*/
|
|
4
|
-
export class Link {
|
|
4
|
+
export declare class Link {
|
|
5
|
+
rel: string;
|
|
6
|
+
href: string;
|
|
7
|
+
title?: string | undefined;
|
|
8
|
+
templated: boolean;
|
|
5
9
|
/**
|
|
6
10
|
* Creates a new link.
|
|
7
11
|
* @param rel The relation type of the link.
|
|
@@ -9,5 +13,5 @@ export class Link {
|
|
|
9
13
|
* @param title The title of the link.
|
|
10
14
|
* @param templated Indicates whether the link is an URI Template (RFC 6570).
|
|
11
15
|
*/
|
|
12
|
-
constructor(
|
|
16
|
+
constructor(rel: string, href: string, title?: string | undefined, templated?: boolean);
|
|
13
17
|
}
|