typedrest 0.4.1 → 0.5.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 +2 -0
- package/endpoints/Endpoint.js +9 -22
- package/endpoints/EntryEndpoint.js +3 -14
- package/endpoints/generic/ETagEndpointBase.js +27 -42
- package/endpoints/generic/ElementEndpoint.js +39 -60
- package/endpoints/generic/GenericCollectionEndpoint.js +70 -44
- package/endpoints/generic/GenericCollectionEndpoint.test.ts +123 -0
- package/endpoints/generic/GenericCollectionEndpoint.ts +54 -1
- package/endpoints/generic/PartialResponse.js +33 -0
- package/endpoints/generic/PartialResponse.ts +28 -0
- package/endpoints/generic/index.js +2 -1
- package/endpoints/generic/index.ts +1 -0
- package/endpoints/index.js +3 -2
- package/endpoints/index.ts +1 -0
- package/endpoints/raw/BlobEndpoint.js +10 -27
- package/endpoints/raw/UploadEndpoint.js +11 -22
- package/endpoints/reactive/Delay.js +27 -0
- package/endpoints/reactive/Delay.ts +26 -0
- package/endpoints/reactive/GenericStreamingCollectionEndpoint.js +79 -0
- package/endpoints/reactive/GenericStreamingCollectionEndpoint.ts +73 -0
- package/endpoints/reactive/PollingEndpoint.js +67 -0
- package/endpoints/reactive/PollingEndpoint.test.ts +84 -0
- package/endpoints/reactive/PollingEndpoint.ts +66 -0
- package/endpoints/reactive/SseStreamingEndpoint.js +120 -0
- package/endpoints/reactive/SseStreamingEndpoint.test.ts +169 -0
- package/endpoints/reactive/SseStreamingEndpoint.ts +115 -0
- package/endpoints/reactive/StreamingCollectionEndpoint.js +23 -0
- package/endpoints/reactive/StreamingCollectionEndpoint.test.ts +110 -0
- package/endpoints/reactive/StreamingCollectionEndpoint.ts +20 -0
- package/endpoints/reactive/StreamingEndpoint.js +56 -0
- package/endpoints/reactive/StreamingEndpoint.test.ts +130 -0
- package/endpoints/reactive/StreamingEndpoint.ts +50 -0
- package/endpoints/reactive/index.js +22 -0
- package/endpoints/reactive/index.ts +5 -0
- package/endpoints/rpc/ActionEndpoint.js +3 -14
- package/endpoints/rpc/ConsumerEndpoint.js +5 -16
- package/endpoints/rpc/FunctionEndpoint.js +6 -17
- package/endpoints/rpc/ProducerEndpoint.js +4 -15
- package/endpoints/rpc/RpcEndpointBase.js +3 -14
- package/errors/DefaultErrorHandler.js +19 -27
- package/errors/DefaultErrorHandler.ts +4 -1
- package/errors/Errors.js +8 -2
- package/errors/Errors.ts +5 -0
- package/http/EntityStream.js +42 -0
- package/http/EntityStream.ts +40 -0
- package/http/HttpContentRange.js +39 -0
- package/http/HttpContentRange.ts +41 -0
- package/http/HttpHeader.js +6 -1
- package/http/HttpHeader.ts +6 -1
- package/http/HttpStatusCode.js +4 -1
- package/http/HttpStatusCode.ts +4 -1
- package/http/ResponseCache.js +4 -15
- package/http/RetryAfter.js +24 -0
- package/http/RetryAfter.ts +19 -0
- package/http/ServerSentEvents.js +140 -0
- package/http/ServerSentEvents.ts +145 -0
- package/http/index.js +5 -1
- package/http/index.ts +4 -0
- package/links/AggregateLinkExtractor.js +7 -18
- package/links/HalLinkExtractor.js +9 -20
- package/links/HeaderLinkExtractor.js +4 -15
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -29,3 +29,5 @@ await smith.delete();
|
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Read a more detailed **[Introduction](https://typedrest.net/introduction/)** to TypedRest or jump right in with the **[setup guide](https://typedrest.net/setup/typescript/)**.
|
|
32
|
+
|
|
33
|
+
You can also take a look at our [Sample project](https://github.com/TypedRest/Sample-TypeScript).
|
package/endpoints/Endpoint.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
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -90,24 +81,20 @@ class Endpoint {
|
|
|
90
81
|
* @param body The body to send.
|
|
91
82
|
* @throws {@link errors!HttpError}
|
|
92
83
|
*/
|
|
93
|
-
send(method, signal, headers, body) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return response;
|
|
98
|
-
});
|
|
84
|
+
async send(method, signal, headers, body) {
|
|
85
|
+
const response = await this.httpClient.send(this.uri, method, signal, headers, body);
|
|
86
|
+
await this.handle(response);
|
|
87
|
+
return response;
|
|
99
88
|
}
|
|
100
89
|
/**
|
|
101
90
|
* Handles various cross-cutting concerns regarding a response message such as discovering links and handling errors.
|
|
102
91
|
* @param response The response to process.
|
|
103
92
|
* @throws {@link errors!HttpError}
|
|
104
93
|
*/
|
|
105
|
-
handle(response) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
yield this.errorHandler.handle(response);
|
|
110
|
-
});
|
|
94
|
+
async handle(response) {
|
|
95
|
+
this.links = await this.linkExtractor.getLinks(response);
|
|
96
|
+
this.handleCapabilities(response);
|
|
97
|
+
await this.errorHandler.handle(response);
|
|
111
98
|
}
|
|
112
99
|
/**
|
|
113
100
|
* Registers one or more default links for a specific relation type.
|
|
@@ -210,4 +197,4 @@ class Endpoint {
|
|
|
210
197
|
}
|
|
211
198
|
}
|
|
212
199
|
exports.Endpoint = Endpoint;
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJFbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrQ0FBNkU7QUFFN0Usc0NBQXdEO0FBRXhELGdFQUFvQztBQUVwQyxNQUFhLFFBQVE7SUEwQmpCOzs7Ozs7OztPQVFHO0lBQ0gsWUFDSSxRQUE4QixFQUM5QixHQUFpQixFQUNqQixVQUF1QixFQUN2QixZQUEyQixFQUMzQixhQUE2QixFQUM3QixVQUF1QjtRQThFM0Isb0ZBQW9GO1FBQzVFLFVBQUssR0FBVyxFQUFFLENBQUM7UUFFM0IsNERBQTREO1FBQ3BELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN0Qyx5QkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQTJGekQsb0ZBQW9GO1FBQzVFLG1CQUFjLEdBQWlCLEVBQUUsQ0FBQztRQTlLdEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ2hFLElBQUksVUFBVTtnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQ3RDLElBQUksWUFBWTtnQkFDWixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQzFDLElBQUksYUFBYTtnQkFDYixNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQzVDLElB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
|
|
@@ -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.EntryEndpoint = void 0;
|
|
13
4
|
const Endpoint_1 = require("./Endpoint");
|
|
@@ -41,11 +32,9 @@ class EntryEndpoint extends Endpoint_1.Endpoint {
|
|
|
41
32
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
42
33
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
43
34
|
*/
|
|
44
|
-
readMeta(signal) {
|
|
45
|
-
|
|
46
|
-
yield this.send(http_1.HttpMethod.Get, signal);
|
|
47
|
-
});
|
|
35
|
+
async readMeta(signal) {
|
|
36
|
+
await this.send(http_1.HttpMethod.Get, signal);
|
|
48
37
|
}
|
|
49
38
|
}
|
|
50
39
|
exports.EntryEndpoint = EntryEndpoint;
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW50cnlFbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkVudHJ5RW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXNDO0FBQ3RDLGtDQUE4RTtBQUM5RSxnREFBNEQ7QUFDNUQsc0NBQThEO0FBQzlELG9DQUF3RztBQUV4Rzs7R0FFRztBQUNILE1BQWEsYUFBYyxTQUFRLG1CQUFRO0lBQ3ZDOzs7Ozs7O09BT0c7SUFDSCxZQUNJLEdBQWlCLEVBQ2pCLFVBQXVCLEVBQ3ZCLFlBQTJCLEVBQzNCLGFBQTZCLEVBQzdCLFVBQXVCO1FBQ3ZCLEtBQUssQ0FBQyxTQUFTLEVBQ1gsbUJBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFDakMsVUFBVSxhQUFWLFVBQVUsY0FBVixVQUFVLEdBQUksSUFBSSw0QkFBYyxFQUFFLEVBQ2xDLFlBQVksYUFBWixZQUFZLGNBQVosWUFBWSxHQUFJLElBQUksNEJBQW1CLEVBQUUsRUFDekMsYUFBYSxhQUFiLGFBQWEsY0FBYixhQUFhLEdBQUksSUFBSSw4QkFBc0IsQ0FBQyxJQUFJLDJCQUFtQixFQUFFLEVBQUUsSUFBSSx3QkFBZ0IsRUFBRSxDQUFDLEVBQzlGLFVBQVUsYUFBVixVQUFVLGNBQVYsVUFBVSxHQUFJLElBQUksc0JBQWUsRUFBRSxDQUFDLENBQUM7UUFFekMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGlCQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBb0I7UUFDL0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDSjtBQXRDRCxzQ0FzQ0MifQ==
|
|
@@ -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.ETagEndpointBase = void 0;
|
|
13
4
|
const Endpoint_1 = require("../Endpoint");
|
|
@@ -33,19 +24,17 @@ class ETagEndpointBase extends Endpoint_1.Endpoint {
|
|
|
33
24
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
34
25
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
35
26
|
*/
|
|
36
|
-
getContent(signal) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return this.responseCache.content;
|
|
48
|
-
});
|
|
27
|
+
async getContent(signal) {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
const headers = new Headers();
|
|
30
|
+
if ((_a = this.responseCache) === null || _a === void 0 ? void 0 : _a.eTag)
|
|
31
|
+
headers.append(http_1.HttpHeader.IfNoneMatch, this.responseCache.eTag);
|
|
32
|
+
const response = await this.httpClient.send(this.uri, http_1.HttpMethod.Get, signal, new Headers(headers));
|
|
33
|
+
if (response.status !== http_1.HttpStatusCode.NotModified || !((_b = this.responseCache) === null || _b === void 0 ? void 0 : _b.content)) {
|
|
34
|
+
await this.handle(response);
|
|
35
|
+
this.responseCache = await http_1.ResponseCache.from(response);
|
|
36
|
+
}
|
|
37
|
+
return this.responseCache.content;
|
|
49
38
|
}
|
|
50
39
|
/**
|
|
51
40
|
* Performs an {@link http!HttpMethod.Put} request on the {@link uri}. Sets {@link http!HttpHeader.IfMatch} if there is a cached {@link http!HttpHeader.ETag} to detect lost updates.
|
|
@@ -57,16 +46,14 @@ class ETagEndpointBase extends Endpoint_1.Endpoint {
|
|
|
57
46
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
58
47
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
59
48
|
*/
|
|
60
|
-
putContent(content, signal) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return this.send(http_1.HttpMethod.Put, signal, headers, this.serializer.serialize(content));
|
|
69
|
-
});
|
|
49
|
+
async putContent(content, signal) {
|
|
50
|
+
var _a;
|
|
51
|
+
const headers = new Headers();
|
|
52
|
+
headers.append(http_1.HttpHeader.ContentType, this.serializer.supportedMediaTypes[0]);
|
|
53
|
+
if ((_a = this.responseCache) === null || _a === void 0 ? void 0 : _a.eTag)
|
|
54
|
+
headers.append(http_1.HttpHeader.IfMatch, this.responseCache.eTag);
|
|
55
|
+
this.responseCache = undefined;
|
|
56
|
+
return this.send(http_1.HttpMethod.Put, signal, headers, this.serializer.serialize(content));
|
|
70
57
|
}
|
|
71
58
|
/**
|
|
72
59
|
* Performs an {@link http!HttpMethod.Delete} request on the {@link uri}. Sets {@link http!HttpHeader.IfMatch} if there is a cached {@link http!HttpHeader.ETag} to detect lost updates.
|
|
@@ -78,16 +65,14 @@ class ETagEndpointBase extends Endpoint_1.Endpoint {
|
|
|
78
65
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
79
66
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
80
67
|
*/
|
|
81
|
-
deleteContent(signal) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return this.send(http_1.HttpMethod.Delete, signal, headers);
|
|
89
|
-
});
|
|
68
|
+
async deleteContent(signal) {
|
|
69
|
+
var _a;
|
|
70
|
+
const headers = new Headers();
|
|
71
|
+
if ((_a = this.responseCache) === null || _a === void 0 ? void 0 : _a.eTag)
|
|
72
|
+
headers.append(http_1.HttpHeader.IfMatch, this.responseCache.eTag);
|
|
73
|
+
this.responseCache = undefined;
|
|
74
|
+
return this.send(http_1.HttpMethod.Delete, signal, headers);
|
|
90
75
|
}
|
|
91
76
|
}
|
|
92
77
|
exports.ETagEndpointBase = ETagEndpointBase;
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRVRhZ0VuZHBvaW50QmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkVUYWdFbmRwb2ludEJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMENBQXVDO0FBRXZDLHFDQUFtRjtBQUVuRjs7R0FFRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsbUJBQVE7SUFDMUM7Ozs7T0FJRztJQUNILFlBQVksUUFBa0IsRUFBRSxXQUF5QjtRQUNyRCxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFPRDs7Ozs7Ozs7T0FRRztJQUNPLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBb0I7O1FBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSSxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLElBQUk7WUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGlCQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxxQkFBYyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxPQUFPLENBQUEsRUFBRSxDQUFDO1lBQ2pGLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sb0JBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNPLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBWSxFQUFFLE1BQW9COztRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUJBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlFLElBQUksTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxJQUFJO1lBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxpQkFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNPLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBb0I7O1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSSxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLElBQUk7WUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0o7QUF6RUQsNENBeUVDIn0=
|
|
@@ -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.ElementEndpoint = void 0;
|
|
13
4
|
const ETagEndpointBase_1 = require("./ETagEndpointBase");
|
|
@@ -42,10 +33,8 @@ class ElementEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
42
33
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
43
34
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
44
35
|
*/
|
|
45
|
-
read(signal) {
|
|
46
|
-
return
|
|
47
|
-
return this.serializer.deserialize(yield this.getContent(signal));
|
|
48
|
-
});
|
|
36
|
+
async read(signal) {
|
|
37
|
+
return this.serializer.deserialize(await this.getContent(signal));
|
|
49
38
|
}
|
|
50
39
|
/**
|
|
51
40
|
* Determines whether the element currently exists.
|
|
@@ -54,16 +43,14 @@ class ElementEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
54
43
|
* @throws {@link errors!AuthorizationError}: {@link http!HttpStatusCode.Forbidden}
|
|
55
44
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
56
45
|
*/
|
|
57
|
-
exists(signal) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (response.status === http_1.HttpStatusCode.NotFound || response.status === http_1.HttpStatusCode.Gone)
|
|
63
|
-
return false;
|
|
64
|
-
yield this.errorHandler.handle(response);
|
|
46
|
+
async exists(signal) {
|
|
47
|
+
const response = await this.httpClient.send(this.uri, http_1.HttpMethod.Head, signal);
|
|
48
|
+
if (response.ok)
|
|
49
|
+
return true;
|
|
50
|
+
if (response.status === http_1.HttpStatusCode.NotFound || response.status === http_1.HttpStatusCode.Gone)
|
|
65
51
|
return false;
|
|
66
|
-
|
|
52
|
+
await this.errorHandler.handle(response);
|
|
53
|
+
return false;
|
|
67
54
|
}
|
|
68
55
|
/**
|
|
69
56
|
* Shows whether the server has indicated that {@link set} is currently allowed.
|
|
@@ -83,14 +70,12 @@ class ElementEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
83
70
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
84
71
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
85
72
|
*/
|
|
86
|
-
set(entity, signal) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
});
|
|
73
|
+
async set(entity, signal) {
|
|
74
|
+
const response = await this.putContent(entity, signal);
|
|
75
|
+
const text = await response.text();
|
|
76
|
+
if (text) {
|
|
77
|
+
return this.serializer.deserialize(text);
|
|
78
|
+
}
|
|
94
79
|
}
|
|
95
80
|
/**
|
|
96
81
|
* Shows whether the server has indicated that {@link merge} is currently allowed.
|
|
@@ -110,17 +95,15 @@ class ElementEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
110
95
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
111
96
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
112
97
|
*/
|
|
113
|
-
merge(entity, signal) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
});
|
|
98
|
+
async merge(entity, signal) {
|
|
99
|
+
this.responseCache = undefined;
|
|
100
|
+
const response = await this.send(http_1.HttpMethod.Patch, signal, {
|
|
101
|
+
[http_1.HttpHeader.ContentType]: this.serializer.supportedMediaTypes[0]
|
|
102
|
+
}, this.serializer.serialize(entity));
|
|
103
|
+
const text = await response.text();
|
|
104
|
+
if (text) {
|
|
105
|
+
return this.serializer.deserialize(text);
|
|
106
|
+
}
|
|
124
107
|
}
|
|
125
108
|
/**
|
|
126
109
|
* Reads the current state of the entity, applies a change to it and stores the result. Applies optimistic concurrency using automatic retries.
|
|
@@ -135,21 +118,19 @@ class ElementEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
135
118
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
136
119
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
137
120
|
*/
|
|
138
|
-
update(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
throw err;
|
|
150
|
-
}
|
|
121
|
+
async update(updateAction, maxRetries = 3, signal) {
|
|
122
|
+
let retryCounter = 0;
|
|
123
|
+
while (true) {
|
|
124
|
+
const entity = await this.read(signal);
|
|
125
|
+
updateAction(entity);
|
|
126
|
+
try {
|
|
127
|
+
return await this.set(entity, signal);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
if (retryCounter++ >= maxRetries || !(err instanceof errors_1.ConcurrencyError))
|
|
131
|
+
throw err;
|
|
151
132
|
}
|
|
152
|
-
}
|
|
133
|
+
}
|
|
153
134
|
}
|
|
154
135
|
/**
|
|
155
136
|
* Shows whether the server has indicated that {@link delete} is currently allowed.
|
|
@@ -166,11 +147,9 @@ class ElementEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
166
147
|
* @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
|
|
167
148
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
168
149
|
*/
|
|
169
|
-
delete(signal) {
|
|
170
|
-
|
|
171
|
-
yield this.deleteContent(signal);
|
|
172
|
-
});
|
|
150
|
+
async delete(signal) {
|
|
151
|
+
await this.deleteContent(signal);
|
|
173
152
|
}
|
|
174
153
|
}
|
|
175
154
|
exports.ElementEndpoint = ElementEndpoint;
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEVuZHBvaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRWxlbWVudEVuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlEQUFzRDtBQUV0RCxxQ0FBb0U7QUFDcEUseUNBQWdEO0FBRWhEOzs7R0FHRztBQUNILE1BQWEsZUFBeUIsU0FBUSxtQ0FBZ0I7SUFDMUQ7Ozs7T0FJRztJQUNILFlBQVksUUFBa0IsRUFBRSxXQUF5QjtRQUNyRCxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWE7WUFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFVLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQW9CO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQVUsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBb0I7UUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGlCQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLElBQUksUUFBUSxDQUFDLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3QixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUsscUJBQWMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxxQkFBYyxDQUFDLElBQUk7WUFBRSxPQUFPLEtB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
|
|
@@ -1,16 +1,8 @@
|
|
|
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.GenericCollectionEndpoint = void 0;
|
|
13
4
|
const ETagEndpointBase_1 = require("./ETagEndpointBase");
|
|
5
|
+
const PartialResponse_1 = require("./PartialResponse");
|
|
14
6
|
const http_1 = require("../../http");
|
|
15
7
|
/**
|
|
16
8
|
* Endpoint for a collection of `TEntity`s addressable as `TElementEndpoint`s.<br>
|
|
@@ -28,6 +20,12 @@ class GenericCollectionEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
28
20
|
constructor(referrer, relativeUri, elementEndpoint) {
|
|
29
21
|
super(referrer, relativeUri);
|
|
30
22
|
this.elementEndpoint = elementEndpoint;
|
|
23
|
+
/**
|
|
24
|
+
* The unit used when requesting ranges of elements. Sent in the {@link http!HttpHeader.Range} header.
|
|
25
|
+
*/
|
|
26
|
+
this.rangeUnit = "elements";
|
|
27
|
+
// NOTE: Only modified when the server reports its capabilities.
|
|
28
|
+
this.acceptedRangeUnits = [];
|
|
31
29
|
this.setDefaultLinkTemplate("child", "./{id}");
|
|
32
30
|
}
|
|
33
31
|
/**
|
|
@@ -64,10 +62,44 @@ class GenericCollectionEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
64
62
|
* @throws {@link errors!ConflictError}: {@link http!HttpStatusCode.Conflict}
|
|
65
63
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
66
64
|
*/
|
|
67
|
-
readAll(signal) {
|
|
68
|
-
return
|
|
69
|
-
|
|
65
|
+
async readAll(signal) {
|
|
66
|
+
return this.serializer.deserialize(await this.getContent(signal));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @inheritDoc
|
|
70
|
+
*/
|
|
71
|
+
handleCapabilities(response) {
|
|
72
|
+
super.handleCapabilities(response);
|
|
73
|
+
const header = response.headers.get(http_1.HttpHeader.AcceptRanges);
|
|
74
|
+
if (header) {
|
|
75
|
+
this.acceptedRangeUnits = header.split(",").map(x => x.trim());
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Shows whether the server has indicated that {@link readRange} is currently allowed.
|
|
80
|
+
* Uses cached data from last response.
|
|
81
|
+
* @returns `true` if the method is allowed, `false` if the method is not allowed, `undefined` if no request has been sent yet or the server did not specify accepted range units.
|
|
82
|
+
*/
|
|
83
|
+
get readRangeAllowed() {
|
|
84
|
+
if (this.acceptedRangeUnits.length === 0)
|
|
85
|
+
return undefined;
|
|
86
|
+
return this.acceptedRangeUnits.indexOf(this.rangeUnit) !== -1;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Returns a subset of the `TEntity`s in the collection.
|
|
90
|
+
* @param from The index of the first element to return. Leave unspecified to return the last `to` elements ("tail").
|
|
91
|
+
* @param to The index of the last element to return. Leave unspecified to return all elements starting at `from`.
|
|
92
|
+
* @param signal Used to cancel the request.
|
|
93
|
+
* @throws {@link errors!AuthenticationError}: {@link http!HttpStatusCode.Unauthorized}
|
|
94
|
+
* @throws {@link errors!AuthorizationError}: {@link http!HttpStatusCode.Forbidden}
|
|
95
|
+
* @throws {@link errors!RangeNotSatisfiableError}: {@link http!HttpStatusCode.RangeNotSatisfiable}, i.e. the requested range lies outside of the elements currently available
|
|
96
|
+
* @throws {@link errors!HttpError}: Other non-success status code
|
|
97
|
+
*/
|
|
98
|
+
async readRange(from, to, signal) {
|
|
99
|
+
const response = await this.send(http_1.HttpMethod.Get, signal, {
|
|
100
|
+
[http_1.HttpHeader.Range]: `${this.rangeUnit}=${from !== null && from !== void 0 ? from : ""}-${to !== null && to !== void 0 ? to : ""}`
|
|
70
101
|
});
|
|
102
|
+
return new PartialResponse_1.PartialResponse(this.serializer.deserialize(await response.text()), http_1.HttpContentRange.from(response));
|
|
71
103
|
}
|
|
72
104
|
/**
|
|
73
105
|
* Shows whether the server has indicated that {@link create} is currently allowed.
|
|
@@ -86,30 +118,28 @@ class GenericCollectionEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
86
118
|
* @throws {@link errors!ConflictError}: {@link http!HttpStatusCode.Conflict}
|
|
87
119
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
88
120
|
*/
|
|
89
|
-
create(entity, signal) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
121
|
+
async create(entity, signal) {
|
|
122
|
+
const response = await this.send(http_1.HttpMethod.Post, signal, {
|
|
123
|
+
[http_1.HttpHeader.ContentType]: this.serializer.supportedMediaTypes[0]
|
|
124
|
+
}, this.serializer.serialize(entity));
|
|
125
|
+
const location = response.headers.get(http_1.HttpHeader.Location);
|
|
126
|
+
let elementEndpoint;
|
|
127
|
+
if (location) {
|
|
128
|
+
// Explicit element endpoint URL from "Location" header
|
|
129
|
+
elementEndpoint = new this.elementEndpoint(this, this.join(location));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
try {
|
|
133
|
+
// Infer URL from entity ID in response body
|
|
134
|
+
elementEndpoint = this.get(this.serializer.deserialize(await response.clone().text()));
|
|
99
135
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
elementEndpoint = this.get(this.serializer.deserialize(yield response.clone().text()));
|
|
104
|
-
}
|
|
105
|
-
catch (_a) {
|
|
106
|
-
// No element endpoint
|
|
107
|
-
return undefined;
|
|
108
|
-
}
|
|
136
|
+
catch (_a) {
|
|
137
|
+
// No element endpoint
|
|
138
|
+
return undefined;
|
|
109
139
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
140
|
+
}
|
|
141
|
+
elementEndpoint.responseCache = await http_1.ResponseCache.from(response);
|
|
142
|
+
return elementEndpoint;
|
|
113
143
|
}
|
|
114
144
|
/**
|
|
115
145
|
* Shows whether the server has indicated that {@link createAll} is currently allowed.
|
|
@@ -127,12 +157,10 @@ class GenericCollectionEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
127
157
|
* @throws {@link errors!ConflictError}: {@link http!HttpStatusCode.Conflict}
|
|
128
158
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
129
159
|
*/
|
|
130
|
-
createAll(entities, signal) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}, this.serializer.serialize(entities));
|
|
135
|
-
});
|
|
160
|
+
async createAll(entities, signal) {
|
|
161
|
+
await this.send(http_1.HttpMethod.Patch, signal, {
|
|
162
|
+
[http_1.HttpHeader.ContentType]: this.serializer.supportedMediaTypes[0]
|
|
163
|
+
}, this.serializer.serialize(entities));
|
|
136
164
|
}
|
|
137
165
|
/**
|
|
138
166
|
* Shows whether the server has indicated that {@link setAll} is currently allowed.
|
|
@@ -149,9 +177,7 @@ class GenericCollectionEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
149
177
|
* @throws {@link errors!ConflictError}: {@link http!HttpStatusCode.Conflict}
|
|
150
178
|
* @throws {@link errors!HttpError}: Other non-success status code
|
|
151
179
|
*/
|
|
152
|
-
setAll(entities) {
|
|
153
|
-
return __awaiter(this, void 0, void 0, function* () { yield this.putContent(entities); });
|
|
154
|
-
}
|
|
180
|
+
async setAll(entities) { await this.putContent(entities); }
|
|
155
181
|
/**
|
|
156
182
|
* Determines whether the collection contains a specific element.
|
|
157
183
|
* @param element The ID identifying the entity or an entity to extract the ID from.
|
|
@@ -193,4 +219,4 @@ class GenericCollectionEndpoint extends ETagEndpointBase_1.ETagEndpointBase {
|
|
|
193
219
|
delete(element) { return this.get(element).delete(); }
|
|
194
220
|
}
|
|
195
221
|
exports.GenericCollectionEndpoint = GenericCollectionEndpoint;
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuZXJpY0NvbGxlY3Rpb25FbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdlbmVyaWNDb2xsZWN0aW9uRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBQXNEO0FBRXRELHVEQUFvRDtBQUdwRCxxQ0FBcUY7QUFFckY7Ozs7O0dBS0c7QUFDSCxNQUFhLHlCQUFzRixTQUFRLG1DQUFnQjtJQUN2SDs7Ozs7T0FLRztJQUNILFlBQVksUUFBa0IsRUFBRSxXQUF5QixFQUFtQixlQUF1RTtRQUMvSSxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRDJDLG9CQUFlLEdBQWYsZUFBZSxDQUF3RDtRQTJDbko7O1dBRUc7UUFDSCxjQUFTLEdBQUcsVUFBVSxDQUFDO1FBRXZCLGdFQUFnRTtRQUN4RCx1QkFBa0IsR0FBYSxFQUFFLENBQUM7UUEvQ3RDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxPQUEyQjtRQUMzQixJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBRWpGLElBQUksRUFBVSxDQUFDO1FBQ2YsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ0osRUFBRSxHQUFJLE9BQWUsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxFQUFFLEtBQUssU0FBUztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsT0FBTyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFD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
|