@vcd/sdk 0.13.0 → 15.0.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 -118
- package/client/client/api.result.service.d.ts +20 -0
- package/client/client/constants.d.ts +10 -0
- package/client/client/index.d.ts +7 -0
- package/client/client/logging.interceptor.d.ts +14 -0
- package/client/client/request.headers.interceptor.d.ts +20 -0
- package/client/client/response.normalization.interceptor.d.ts +39 -0
- package/client/client/vcd.api.client.d.ts +351 -0
- package/client/client/vcd.http.client.d.ts +32 -0
- package/client/client/vcd.transfer.client.d.ts +121 -0
- package/client/container-hooks/index.d.ts +58 -0
- package/client/index.d.ts +2 -0
- package/client/openapi.d.ts +76 -0
- package/client/query/filter.builder.d.ts +162 -0
- package/client/query/index.d.ts +2 -0
- package/client/query/query.builder.d.ts +30 -0
- package/common/container-hooks.d.ts +2 -2
- package/core/plugin.module.d.ts +10 -5
- package/esm2020/client/client/api.result.service.mjs +43 -0
- package/esm2020/client/client/constants.mjs +13 -0
- package/esm2020/client/client/index.mjs +8 -0
- package/esm2020/client/client/logging.interceptor.mjs +44 -0
- package/esm2020/client/client/request.headers.interceptor.mjs +91 -0
- package/esm2020/client/client/response.normalization.interceptor.mjs +59 -0
- package/esm2020/client/client/vcd.api.client.mjs +602 -0
- package/esm2020/client/client/vcd.http.client.mjs +52 -0
- package/esm2020/client/client/vcd.transfer.client.mjs +166 -0
- package/esm2020/client/container-hooks/index.mjs +57 -0
- package/esm2020/client/index.mjs +3 -0
- package/esm2020/client/openapi.mjs +16 -0
- package/esm2020/client/query/filter.builder.mjs +195 -0
- package/esm2020/client/query/index.mjs +3 -0
- package/esm2020/client/query/query.builder.mjs +79 -0
- package/esm2020/common/container-hooks.mjs +74 -0
- package/esm2020/common/index.mjs +2 -0
- package/esm2020/core/index.mjs +2 -0
- package/esm2020/core/plugin.module.mjs +18 -0
- package/esm2020/main.mjs +45 -0
- package/esm2020/public-api.mjs +8 -0
- package/esm2020/vcd-sdk.mjs +5 -0
- package/fesm2015/vcd-sdk.mjs +1513 -0
- package/fesm2015/vcd-sdk.mjs.map +1 -0
- package/fesm2020/vcd-sdk.mjs +1508 -0
- package/fesm2020/vcd-sdk.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/main.d.ts +11 -5
- package/package.json +30 -39
- package/public-api.d.ts +1 -1
- package/LICENSE.txt +0 -12
- package/bundles/vcd-sdk.umd.js +0 -810
- package/bundles/vcd-sdk.umd.js.map +0 -1
- package/bundles/vcd-sdk.umd.min.js +0 -16
- package/bundles/vcd-sdk.umd.min.js.map +0 -1
- package/esm2015/common/container-hooks.js +0 -219
- package/esm2015/common/index.js +0 -6
- package/esm2015/core/index.js +0 -6
- package/esm2015/core/plugin.module.js +0 -53
- package/esm2015/i18n/index.js +0 -8
- package/esm2015/i18n/translate.pipe.js +0 -92
- package/esm2015/i18n/translate.service.js +0 -229
- package/esm2015/i18n/translation.loader.js +0 -63
- package/esm2015/main.js +0 -37
- package/esm2015/public-api.js +0 -12
- package/esm2015/vcd-sdk.js +0 -10
- package/esm5/common/container-hooks.js +0 -266
- package/esm5/common/index.js +0 -6
- package/esm5/core/index.js +0 -6
- package/esm5/core/plugin.module.js +0 -64
- package/esm5/i18n/index.js +0 -8
- package/esm5/i18n/translate.pipe.js +0 -108
- package/esm5/i18n/translate.service.js +0 -280
- package/esm5/i18n/translation.loader.js +0 -68
- package/esm5/main.js +0 -41
- package/esm5/public-api.js +0 -12
- package/esm5/vcd-sdk.js +0 -10
- package/fesm2015/vcd-sdk.js +0 -511
- package/fesm2015/vcd-sdk.js.map +0 -1
- package/fesm5/vcd-sdk.js +0 -620
- package/fesm5/vcd-sdk.js.map +0 -1
- package/i18n/index.d.ts +0 -3
- package/i18n/translate.pipe.d.ts +0 -12
- package/i18n/translate.service.d.ts +0 -21
- package/i18n/translation.loader.d.ts +0 -11
- package/schematics/collection.json +0 -10
- package/schematics/ng-add/index.d.ts +0 -3
- package/schematics/ng-add/index.js +0 -101
- package/schematics/ng-add/index.ts +0 -134
- package/schematics/ng-add/schema.d.ts +0 -8
- package/schematics/ng-add/schema.json +0 -19
- package/vcd-sdk.d.ts +0 -5
- package/vcd-sdk.metadata.json +0 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
import * as i2 from "./logging.interceptor";
|
|
6
|
+
import * as i3 from "./request.headers.interceptor";
|
|
7
|
+
import * as i4 from "./response.normalization.interceptor";
|
|
8
|
+
/**
|
|
9
|
+
* Angular's HttpInterceptorHandler is not publicly exposed. This is a clone of it.
|
|
10
|
+
*/
|
|
11
|
+
class VcdHttpInterceptorHandler {
|
|
12
|
+
constructor(next, interceptor) {
|
|
13
|
+
this.next = next;
|
|
14
|
+
this.interceptor = interceptor;
|
|
15
|
+
}
|
|
16
|
+
handle(req) {
|
|
17
|
+
return this.interceptor.intercept(req, this.next);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* This is a specialist subclass of HttpClient. The HttpClient that is defined/imported
|
|
22
|
+
* by HttpClientModule is a singleton from the container, meaning that all extensions would
|
|
23
|
+
* get the same one. We sub-class it so that each extension gets their own instance.
|
|
24
|
+
* Extension consumers should inject this.
|
|
25
|
+
* @see HttpClient
|
|
26
|
+
*/
|
|
27
|
+
export class VcdHttpClient extends HttpClient {
|
|
28
|
+
/**
|
|
29
|
+
* Create an HttpClient with the logging and header interceptors in the chain.
|
|
30
|
+
* @param httpBackend backend (likely injected from HttpClientModule)
|
|
31
|
+
* @param hateoasHeaderInterceptor the hateoas header interceptor
|
|
32
|
+
* @param loggingInterceptor the logging interceptor
|
|
33
|
+
* @param requestHeadersInterceptor the request header interceptor
|
|
34
|
+
*/
|
|
35
|
+
constructor(httpBackend, loggingInterceptor, requestHeadersInterceptor, responseNormalizationInterceptor) {
|
|
36
|
+
const interceptors = [
|
|
37
|
+
loggingInterceptor,
|
|
38
|
+
requestHeadersInterceptor,
|
|
39
|
+
responseNormalizationInterceptor
|
|
40
|
+
];
|
|
41
|
+
const chain = interceptors.reduceRight((next, interceptor) => new VcdHttpInterceptorHandler(next, interceptor), httpBackend);
|
|
42
|
+
super(chain);
|
|
43
|
+
this.loggingInterceptor = loggingInterceptor;
|
|
44
|
+
this.requestHeadersInterceptor = requestHeadersInterceptor;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
VcdHttpClient.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: VcdHttpClient, deps: [{ token: i1.HttpBackend }, { token: i2.LoggingInterceptor }, { token: i3.RequestHeadersInterceptor }, { token: i4.ResponseNormalizationInterceptor }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
48
|
+
VcdHttpClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: VcdHttpClient });
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: VcdHttpClient, decorators: [{
|
|
50
|
+
type: Injectable
|
|
51
|
+
}], ctorParameters: function () { return [{ type: i1.HttpBackend }, { type: i2.LoggingInterceptor }, { type: i3.RequestHeadersInterceptor }, { type: i4.ResponseNormalizationInterceptor }]; } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmNkLmh0dHAuY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmNkL3Nkay9zcmMvY2xpZW50L2NsaWVudC92Y2QuaHR0cC5jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBdUQsTUFBTSxzQkFBc0IsQ0FBQztBQUNuSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFNekM7O0dBRUc7QUFDSCxNQUFNLHlCQUF5QjtJQUMzQixZQUFvQixJQUFpQixFQUFVLFdBQTRCO1FBQXZELFNBQUksR0FBSixJQUFJLENBQWE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7SUFBRyxDQUFDO0lBRS9FLE1BQU0sQ0FBQyxHQUFxQjtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNKO0FBRUQ7Ozs7OztHQU1HO0FBRUgsTUFBTSxPQUFPLGFBQWMsU0FBUSxVQUFVO0lBV3pDOzs7Ozs7T0FNRztJQUNILFlBQVksV0FBd0IsRUFDeEIsa0JBQXNDLEVBQ3RDLHlCQUFvRCxFQUNwRCxnQ0FBa0U7UUFDMUUsTUFBTSxZQUFZLEdBQXNCO1lBQ3BDLGtCQUFrQjtZQUNsQix5QkFBeUI7WUFDekIsZ0NBQWdDO1NBQ25DLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsV0FBVyxDQUNsQyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUkseUJBQXlCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUN2RSxXQUFXLENBQ2QsQ0FBQztRQUNGLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsQ0FBQzs7MEdBbENRLGFBQWE7OEdBQWIsYUFBYTsyRkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQmFja2VuZCwgSHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvZ2dpbmdJbnRlcmNlcHRvcn0gZnJvbSAnLi9sb2dnaW5nLmludGVyY2VwdG9yJztcbmltcG9ydCB7UmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvcn0gZnJvbSAnLi9yZXF1ZXN0LmhlYWRlcnMuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtSZXNwb25zZU5vcm1hbGl6YXRpb25JbnRlcmNlcHRvcn0gZnJvbSAnLi9yZXNwb25zZS5ub3JtYWxpemF0aW9uLmludGVyY2VwdG9yJztcblxuLyoqXG4gKiBBbmd1bGFyJ3MgSHR0cEludGVyY2VwdG9ySGFuZGxlciBpcyBub3QgcHVibGljbHkgZXhwb3NlZC4gIFRoaXMgaXMgYSBjbG9uZSBvZiBpdC5cbiAqL1xuY2xhc3MgVmNkSHR0cEludGVyY2VwdG9ySGFuZGxlciBpbXBsZW1lbnRzIEh0dHBIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5leHQ6IEh0dHBIYW5kbGVyLCBwcml2YXRlIGludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3IpIHt9XG5cbiAgICBoYW5kbGUocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcmNlcHRvci5pbnRlcmNlcHQocmVxLCB0aGlzLm5leHQpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgc3BlY2lhbGlzdCBzdWJjbGFzcyBvZiBIdHRwQ2xpZW50LiAgVGhlIEh0dHBDbGllbnQgdGhhdCBpcyBkZWZpbmVkL2ltcG9ydGVkXG4gKiBieSBIdHRwQ2xpZW50TW9kdWxlIGlzIGEgc2luZ2xldG9uIGZyb20gdGhlIGNvbnRhaW5lciwgbWVhbmluZyB0aGF0IGFsbCBleHRlbnNpb25zIHdvdWxkXG4gKiBnZXQgdGhlIHNhbWUgb25lLiAgV2Ugc3ViLWNsYXNzIGl0IHNvIHRoYXQgZWFjaCBleHRlbnNpb24gZ2V0cyB0aGVpciBvd24gaW5zdGFuY2UuXG4gKiBFeHRlbnNpb24gY29uc3VtZXJzIHNob3VsZCBpbmplY3QgdGhpcy5cbiAqIEBzZWUgSHR0cENsaWVudFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmNkSHR0cENsaWVudCBleHRlbmRzIEh0dHBDbGllbnQge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgYWNjZXNzIHRvIHRoZSBsb2dnaW5nIGludGVyY2VwdG9yIGZvciBlbmFibGluZy9kaXNhYmxpbmcgYW5kIGNvbmZpZ3VyaW5nLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGxvZ2dpbmdJbnRlcmNlcHRvcjogTG9nZ2luZ0ludGVyY2VwdG9yO1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGhlYWRlcnMgaW50ZXJjZXB0b3IgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBhbmQgY29uZmlndXJpbmcuXG4gICAgICovXG4gICAgcmVhZG9ubHkgcmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvcjogUmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvcjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBIdHRwQ2xpZW50IHdpdGggdGhlIGxvZ2dpbmcgYW5kIGhlYWRlciBpbnRlcmNlcHRvcnMgaW4gdGhlIGNoYWluLlxuICAgICAqIEBwYXJhbSBodHRwQmFja2VuZCBiYWNrZW5kIChsaWtlbHkgaW5qZWN0ZWQgZnJvbSBIdHRwQ2xpZW50TW9kdWxlKVxuICAgICAqIEBwYXJhbSBoYXRlb2FzSGVhZGVySW50ZXJjZXB0b3IgdGhlIGhhdGVvYXMgaGVhZGVyIGludGVyY2VwdG9yXG4gICAgICogQHBhcmFtIGxvZ2dpbmdJbnRlcmNlcHRvciB0aGUgbG9nZ2luZyBpbnRlcmNlcHRvclxuICAgICAqIEBwYXJhbSByZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yIHRoZSByZXF1ZXN0IGhlYWRlciBpbnRlcmNlcHRvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGh0dHBCYWNrZW5kOiBIdHRwQmFja2VuZCxcbiAgICAgICAgICAgICAgICBsb2dnaW5nSW50ZXJjZXB0b3I6IExvZ2dpbmdJbnRlcmNlcHRvcixcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yOiBSZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlTm9ybWFsaXphdGlvbkludGVyY2VwdG9yOiBSZXNwb25zZU5vcm1hbGl6YXRpb25JbnRlcmNlcHRvcikge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnM6IEh0dHBJbnRlcmNlcHRvcltdID0gW1xuICAgICAgICAgICAgbG9nZ2luZ0ludGVyY2VwdG9yLFxuICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvcixcbiAgICAgICAgICAgIHJlc3BvbnNlTm9ybWFsaXphdGlvbkludGVyY2VwdG9yXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGNoYWluID0gaW50ZXJjZXB0b3JzLnJlZHVjZVJpZ2h0KFxuICAgICAgICAgICAgKG5leHQsIGludGVyY2VwdG9yKSA9PiBuZXcgVmNkSHR0cEludGVyY2VwdG9ySGFuZGxlcihuZXh0LCBpbnRlcmNlcHRvciksXG4gICAgICAgICAgICBodHRwQmFja2VuZFxuICAgICAgICApO1xuICAgICAgICBzdXBlcihjaGFpbik7XG4gICAgICAgIHRoaXMubG9nZ2luZ0ludGVyY2VwdG9yID0gbG9nZ2luZ0ludGVyY2VwdG9yO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IgPSByZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { Observable, throwError } from 'rxjs';
|
|
3
|
+
import { catchError, flatMap, map, retry, switchMap } from 'rxjs/operators';
|
|
4
|
+
/**
|
|
5
|
+
* Default chunk size is 50MiB. This is equal to the chunk size the VCD UI uses for library uploads.
|
|
6
|
+
*/
|
|
7
|
+
export const MAX_CHUNK_SIZE = 50 * 1024 * 1024;
|
|
8
|
+
/**
|
|
9
|
+
* How many times to retry a chunk upload.
|
|
10
|
+
*/
|
|
11
|
+
export const MAX_CHUNK_RETRY_COUNT = 5;
|
|
12
|
+
/**
|
|
13
|
+
* A special error thrown by the transfer client. It gives access to the causing error, and the final progress
|
|
14
|
+
* before the error occurred.
|
|
15
|
+
*/
|
|
16
|
+
export class TransferError extends Error {
|
|
17
|
+
constructor(message, originalError, lastProgress) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.originalError = originalError;
|
|
20
|
+
this.lastProgress = lastProgress;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* This is used to upload files to a VCD API transfer URL. It is not suggested to create this class - instead
|
|
25
|
+
* use the startTransfer method in VcdApiClient.
|
|
26
|
+
*/
|
|
27
|
+
export class VcdTransferClient {
|
|
28
|
+
/**
|
|
29
|
+
* Create a transfer client.
|
|
30
|
+
* @param httpClient the http client to be used
|
|
31
|
+
* @param transferUrl the URL to upload to
|
|
32
|
+
*/
|
|
33
|
+
constructor(httpClient, transferUrl, maxChunkSize = MAX_CHUNK_SIZE, maxChunkRetryCount = MAX_CHUNK_RETRY_COUNT) {
|
|
34
|
+
this.httpClient = httpClient;
|
|
35
|
+
this.transferUrl = transferUrl;
|
|
36
|
+
this.maxChunkSize = maxChunkSize;
|
|
37
|
+
this.maxChunkRetryCount = maxChunkRetryCount;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Upload data, optionally listening for progress updates.
|
|
41
|
+
* @param source what to upload.
|
|
42
|
+
* @param progressObserver (optional) this will get progress notifications during the upload
|
|
43
|
+
* @returns fetails of the finished upload.
|
|
44
|
+
* @throws TransferError when a chunk upload fails.
|
|
45
|
+
*/
|
|
46
|
+
upload(source, progressObserver) {
|
|
47
|
+
// Cache the client and url so they don't change from under us.
|
|
48
|
+
const { httpClient, transferUrl, maxChunkSize, maxChunkRetryCount } = this;
|
|
49
|
+
// Compute static information used through the upload.
|
|
50
|
+
const filename = source.name || '<blob>';
|
|
51
|
+
const totalChunks = Math.ceil(source.size / maxChunkSize);
|
|
52
|
+
const totalBytes = source.size;
|
|
53
|
+
const startTimeMs = new Date().getTime();
|
|
54
|
+
let retryCount = 0;
|
|
55
|
+
// This helper function creates a TransferProgress object for sending to the progressObserver.
|
|
56
|
+
// It relies on the above static information, hence being nested.
|
|
57
|
+
function createTransferProgress(retryNumber, rtryCount, chunksSent) {
|
|
58
|
+
const chunksRemaining = totalChunks - chunksSent;
|
|
59
|
+
const bytesSent = Math.min(chunksSent * maxChunkSize, totalBytes);
|
|
60
|
+
const bytesRemaining = totalBytes - bytesSent;
|
|
61
|
+
const percent = bytesSent / totalBytes * 100;
|
|
62
|
+
const timeTakenMs = new Date().getTime() - startTimeMs;
|
|
63
|
+
const estimatedTotalTimeMs = (bytesSent / bytesRemaining) * timeTakenMs;
|
|
64
|
+
const estimatedTimeRemainingMs = Math.max(estimatedTotalTimeMs - timeTakenMs, 0);
|
|
65
|
+
return {
|
|
66
|
+
filename, transferUrl, retryNumber, retryCount: rtryCount,
|
|
67
|
+
chunksSent, chunksRemaining, bytesSent, bytesRemaining,
|
|
68
|
+
percent, timeTakenMs, estimatedTimeRemainingMs
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// This is the main chunk upload function
|
|
72
|
+
function transferChunk(chunkIndex) {
|
|
73
|
+
// Calculate chunk details.
|
|
74
|
+
const chunkStart = chunkIndex * maxChunkSize;
|
|
75
|
+
const chunkEnd = Math.min(chunkStart + maxChunkSize, totalBytes);
|
|
76
|
+
const contentRangeHeader = `bytes ${chunkStart}-${chunkEnd - 1}/${totalBytes}`;
|
|
77
|
+
// Dispatch progress
|
|
78
|
+
if (progressObserver) {
|
|
79
|
+
const progress = createTransferProgress(0, retryCount, chunkIndex);
|
|
80
|
+
progressObserver.next(progress);
|
|
81
|
+
}
|
|
82
|
+
// Read in the chunk
|
|
83
|
+
return Observable.create(observer => {
|
|
84
|
+
const chunkSlice = source.slice(chunkStart, chunkEnd);
|
|
85
|
+
const fileReader = new FileReader();
|
|
86
|
+
fileReader.onerror = err => {
|
|
87
|
+
observer.error(err);
|
|
88
|
+
};
|
|
89
|
+
fileReader.onabort = err => {
|
|
90
|
+
observer.error(err);
|
|
91
|
+
};
|
|
92
|
+
fileReader.onload = () => {
|
|
93
|
+
};
|
|
94
|
+
fileReader.onloadend = () => {
|
|
95
|
+
observer.next(fileReader.result);
|
|
96
|
+
observer.complete();
|
|
97
|
+
};
|
|
98
|
+
return fileReader.readAsArrayBuffer(chunkSlice);
|
|
99
|
+
// Transfer the chunk
|
|
100
|
+
}).pipe(
|
|
101
|
+
// Upon read error, abort the upload process. No point retrying read failures.
|
|
102
|
+
catchError((e) => {
|
|
103
|
+
// Abandon the upload and propagate a consumable error.
|
|
104
|
+
const progress = createTransferProgress(0, retryCount, chunkIndex);
|
|
105
|
+
return throwError(() => new TransferError('Read error', e, progress));
|
|
106
|
+
}),
|
|
107
|
+
// Upon successful read, transfer the chunk.
|
|
108
|
+
switchMap((data) => {
|
|
109
|
+
let retryNumber = 0;
|
|
110
|
+
return httpClient.put(transferUrl, data, {
|
|
111
|
+
headers: new HttpHeaders({
|
|
112
|
+
'Content-Range': contentRangeHeader
|
|
113
|
+
}),
|
|
114
|
+
responseType: 'text'
|
|
115
|
+
}).pipe(
|
|
116
|
+
// This is called upon any chunk upload failure.
|
|
117
|
+
catchError((e) => {
|
|
118
|
+
// Increase the total retry count.
|
|
119
|
+
retryCount++;
|
|
120
|
+
// Increase the current chunk retry number.
|
|
121
|
+
retryNumber++;
|
|
122
|
+
// Dispatch progress (the retry information has changed).
|
|
123
|
+
if (progressObserver) {
|
|
124
|
+
const progress = createTransferProgress(retryNumber, retryCount, chunkIndex);
|
|
125
|
+
progressObserver.next(progress);
|
|
126
|
+
}
|
|
127
|
+
// Rethrow the error so that the "retry" call handles it.
|
|
128
|
+
return throwError(() => e);
|
|
129
|
+
}),
|
|
130
|
+
// Retry the chunk upload up to the limit - this will run the entire chain again.
|
|
131
|
+
retry(maxChunkRetryCount),
|
|
132
|
+
// This is called when all retries for the chunk are exhausted.
|
|
133
|
+
catchError((e) => {
|
|
134
|
+
// Abandon the upload and propagate a consumable error.
|
|
135
|
+
const progress = createTransferProgress(retryNumber, retryCount, chunkIndex);
|
|
136
|
+
return throwError(() => new TransferError('Transfer error', e, progress));
|
|
137
|
+
}));
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
// This creates the final transfer progress, dispatches it, and returns the transfer result.
|
|
141
|
+
function finishUpload() {
|
|
142
|
+
const transferProgress = createTransferProgress(0, retryCount, totalChunks);
|
|
143
|
+
if (progressObserver) {
|
|
144
|
+
progressObserver.next(transferProgress);
|
|
145
|
+
progressObserver.complete();
|
|
146
|
+
}
|
|
147
|
+
const transferResult = {
|
|
148
|
+
filename: transferProgress.filename,
|
|
149
|
+
transferUrl: transferProgress.transferUrl,
|
|
150
|
+
retryCount: transferProgress.retryCount,
|
|
151
|
+
chunksSent: transferProgress.chunksSent,
|
|
152
|
+
bytesSent: transferProgress.bytesSent,
|
|
153
|
+
timeTakenMs: transferProgress.timeTakenMs
|
|
154
|
+
};
|
|
155
|
+
return transferResult;
|
|
156
|
+
}
|
|
157
|
+
// Upload all of the chunks
|
|
158
|
+
let chain = transferChunk(0);
|
|
159
|
+
for (let currentChunk = 1; currentChunk < totalChunks; currentChunk++) {
|
|
160
|
+
chain = chain.pipe(flatMap(() => transferChunk(currentChunk)));
|
|
161
|
+
}
|
|
162
|
+
// Finish transfer
|
|
163
|
+
return chain.pipe(map(finishUpload));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmNkLnRyYW5zZmVyLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZjZC9zZGsvc3JjL2NsaWVudC9jbGllbnQvdmNkLnRyYW5zZmVyLmNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFlLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFDLFVBQVUsRUFBWSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFDLFVBQVUsRUFBVSxPQUFPLEVBQVEsR0FBRyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUdyRzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUUvQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQWlHdkM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxLQUFLO0lBQ3BDLFlBQVksT0FBZSxFQUFXLGFBQWtCLEVBQVcsWUFBOEI7UUFDN0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRG1CLGtCQUFhLEdBQWIsYUFBYSxDQUFLO1FBQVcsaUJBQVksR0FBWixZQUFZLENBQWtCO0lBRWpHLENBQUM7Q0FDSjtBQUVEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDMUI7Ozs7T0FJRztJQUNILFlBQW1CLFVBQXlCLEVBQVMsV0FBbUIsRUFDckQsZUFBZSxjQUFjLEVBQVMscUJBQXFCLHFCQUFxQjtRQURoRixlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDckQsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQVMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF3QjtJQUNuRyxDQUFDO0lBRUQ7Ozs7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QUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtnQkFDdkMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVM7Z0JBQ3JDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXO2FBQzVDLENBQUM7WUFDRixPQUFPLGNBQWMsQ0FBQztRQUMxQixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixLQUFLLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxZQUFZLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxFQUFFO1lBQ25FLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUNkLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDN0MsQ0FBQztTQUNMO1FBRUQsa0JBQWtCO1FBQ2xCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBleHBhbmQsIGZsYXRNYXAsIGxhc3QsIG1hcCwgcmVkdWNlLCByZXRyeSwgc3dpdGNoTWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VmNkSHR0cENsaWVudH0gZnJvbSAnLi92Y2QuaHR0cC5jbGllbnQnO1xuXG4vKipcbiAqIERlZmF1bHQgY2h1bmsgc2l6ZSBpcyA1ME1pQi4gIFRoaXMgaXMgZXF1YWwgdG8gdGhlIGNodW5rIHNpemUgdGhlIFZDRCBVSSB1c2VzIGZvciBsaWJyYXJ5IHVwbG9hZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQ0hVTktfU0laRSA9IDUwICogMTAyNCAqIDEwMjQ7XG5cbi8qKlxuICogSG93IG1hbnkgdGltZXMgdG8gcmV0cnkgYSBjaHVuayB1cGxvYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQ0hVTktfUkVUUllfQ09VTlQgPSA1O1xuXG4vKipcbiAqIERldGFpbHMgYWJvdXQgYSBjb21wbGV0ZWQgZmlsZSB0cmFuc2Zlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2ZlclJlc3VsdCB7XG4gICAgLyoqXG4gICAgICogRmlsZW5hbWUgYmVpbmcgdHJhbnNmZXJyZWQuXG4gICAgICovXG4gICAgZmlsZW5hbWU6IHN0cmluZ3wnPGJsb2I+JztcblxuICAgIC8qKlxuICAgICAqIFVSTCBiZWluZyB1c2VkIGZvciB0aGUgdHJhbnNmZXIuXG4gICAgICovXG4gICAgdHJhbnNmZXJVcmw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEhvdyBtYW55IHJldHJpZXMgaW4gdG90YWwgd2VyZSByZXF1aXJlZFxuICAgICAqL1xuICAgIHJldHJ5Q291bnQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgY2h1bmtzIHRoYXQgaGF2ZSBiZWVuIHNlbnQuXG4gICAgICovXG4gICAgY2h1bmtzU2VudDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogSG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHNlbnQuXG4gICAgICovXG4gICAgYnl0ZXNTZW50OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBIb3cgbWFueSBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2Ugc3RhcnRpbmcgdGhlIHRyYW5zZmVyLlxuICAgICAqL1xuICAgIHRpbWVUYWtlbk1zOiBudW1iZXI7XG59XG5cbi8qKlxuICogRGV0YWlscyBhYm91dCBhIGZpbGUgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmZXJQcm9ncmVzcyB7XG4gICAgLyoqXG4gICAgICogRmlsZW5hbWUgYmVpbmcgdHJhbnNmZXJyZWQuXG4gICAgICovXG4gICAgZmlsZW5hbWU6IHN0cmluZ3wnPGJsb2I+JztcblxuICAgIC8qKlxuICAgICAqIFVSTCBiZWluZyB1c2VkIGZvciB0aGUgdHJhbnNmZXIuXG4gICAgICovXG4gICAgdHJhbnNmZXJVcmw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJldHJ5IG51bWJlciBmb3IgdGhlIGN1cnJlbnQgY2h1bmsuXG4gICAgICovXG4gICAgcmV0cnlOdW1iZXI6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgcmV0cmllcyBpbiB0b3RhbC5cbiAgICAgKi9cbiAgICByZXRyeUNvdW50OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGNodW5rcyB0aGF0IGhhdmUgYmVlbiBzZW50LlxuICAgICAqL1xuICAgIGNodW5rc1NlbnQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgY2h1bmtzIHJlbWFpbmluZy5cbiAgICAgKi9cbiAgICBjaHVua3NSZW1haW5pbmc6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiBzZW50LlxuICAgICAqL1xuICAgIGJ5dGVzU2VudDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogSG93IG1hbnkgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHNlbnQuXG4gICAgICovXG4gICAgYnl0ZXNSZW1haW5pbmc6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFBlcmNlbnRhZ2UgY29tcGxldGlvbi5cbiAgICAgKi9cbiAgICBwZXJjZW50OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBIb3cgbWFueSBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2Ugc3RhcnRpbmcgdGhlIHRyYW5zZmVyLlxuICAgICAqL1xuICAgIHRpbWVUYWtlbk1zOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBOYWl2ZSBlc3RpbWF0ZSBvZiB0aW1lIHJlbWFpbmluZy4gIFRoaXMgaXMgbm90IHNjaWVudGlmaWMgYXQgYWxsIC0gYSBzaW1wbGUgbGluZWFyIGV4dHJhcG9sYXRpb24uXG4gICAgICovXG4gICAgZXN0aW1hdGVkVGltZVJlbWFpbmluZ01zOiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsIGVycm9yIHRocm93biBieSB0aGUgdHJhbnNmZXIgY2xpZW50LiAgSXQgZ2l2ZXMgYWNjZXNzIHRvIHRoZSBjYXVzaW5nIGVycm9yLCBhbmQgdGhlIGZpbmFsIHByb2dyZXNzXG4gKiBiZWZvcmUgdGhlIGVycm9yIG9jY3VycmVkLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNmZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHJlYWRvbmx5IG9yaWdpbmFsRXJyb3I6IGFueSwgcmVhZG9ubHkgbGFzdFByb2dyZXNzOiBUcmFuc2ZlclByb2dyZXNzKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIHVzZWQgdG8gdXBsb2FkIGZpbGVzIHRvIGEgVkNEIEFQSSB0cmFuc2ZlciBVUkwuICBJdCBpcyBub3Qgc3VnZ2VzdGVkIHRvIGNyZWF0ZSB0aGlzIGNsYXNzIC0gaW5zdGVhZFxuICogdXNlIHRoZSBzdGFydFRyYW5zZmVyIG1ldGhvZCBpbiBWY2RBcGlDbGllbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBWY2RUcmFuc2ZlckNsaWVudCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgdHJhbnNmZXIgY2xpZW50LlxuICAgICAqIEBwYXJhbSBodHRwQ2xpZW50IHRoZSBodHRwIGNsaWVudCB0byBiZSB1c2VkXG4gICAgICogQHBhcmFtIHRyYW5zZmVyVXJsIHRoZSBVUkwgdG8gdXBsb2FkIHRvXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHVibGljIGh0dHBDbGllbnQ6IFZjZEh0dHBDbGllbnQsIHB1YmxpYyB0cmFuc2ZlclVybDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBtYXhDaHVua1NpemUgPSBNQVhfQ0hVTktfU0laRSwgcHVibGljIG1heENodW5rUmV0cnlDb3VudCA9IE1BWF9DSFVOS19SRVRSWV9DT1VOVCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZCBkYXRhLCBvcHRpb25hbGx5IGxpc3RlbmluZyBmb3IgcHJvZ3Jlc3MgdXBkYXRlcy5cbiAgICAgKiBAcGFyYW0gc291cmNlIHdoYXQgdG8gdXBsb2FkLlxuICAgICAqIEBwYXJhbSBwcm9ncmVzc09ic2VydmVyIChvcHRpb25hbCkgdGhpcyB3aWxsIGdldCBwcm9ncmVzcyBub3RpZmljYXRpb25zIGR1cmluZyB0aGUgdXBsb2FkXG4gICAgICogQHJldHVybnMgZmV0YWlscyBvZiB0aGUgZmluaXNoZWQgdXBsb2FkLlxuICAgICAqIEB0aHJvd3MgVHJhbnNmZXJFcnJvciB3aGVuIGEgY2h1bmsgdXBsb2FkIGZhaWxzLlxuICAgICAqL1xuICAgIHVwbG9hZChzb3VyY2U6IEJsb2J8RmlsZSwgcHJvZ3Jlc3NPYnNlcnZlcj86IE9ic2VydmVyPFRyYW5zZmVyUHJvZ3Jlc3M+KTogT2JzZXJ2YWJsZTxUcmFuc2ZlclJlc3VsdD4ge1xuICAgICAgICAvLyBDYWNoZSB0aGUgY2xpZW50IGFuZCB1cmwgc28gdGhleSBkb24ndCBjaGFuZ2UgZnJvbSB1bmRlciB1cy5cbiAgICAgICAgY29uc3Qge2h0dHBDbGllbnQsIHRyYW5zZmVyVXJsLCBtYXhDaHVua1NpemUsIG1heENodW5rUmV0cnlDb3VudH0gPSB0aGlzO1xuXG4gICAgICAgIC8vIENvbXB1dGUgc3RhdGljIGluZm9ybWF0aW9uIHVzZWQgdGhyb3VnaCB0aGUgdXBsb2FkLlxuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IChzb3VyY2UgYXMgRmlsZSkubmFtZSB8fCAnPGJsb2I+JztcbiAgICAgICAgY29uc3QgdG90YWxDaHVua3MgPSBNYXRoLmNlaWwoc291cmNlLnNpemUgLyBtYXhDaHVua1NpemUpO1xuICAgICAgICBjb25zdCB0b3RhbEJ5dGVzID0gc291cmNlLnNpemU7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZU1zID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcblxuICAgICAgICAvLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBjcmVhdGVzIGEgVHJhbnNmZXJQcm9ncmVzcyBvYmplY3QgZm9yIHNlbmRpbmcgdG8gdGhlIHByb2dyZXNzT2JzZXJ2ZXIuXG4gICAgICAgIC8vIEl0IHJlbGllcyBvbiB0aGUgYWJvdmUgc3RhdGljIGluZm9ybWF0aW9uLCBoZW5jZSBiZWluZyBuZXN0ZWQuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRyYW5zZmVyUHJvZ3Jlc3MocmV0cnlOdW1iZXI6IG51bWJlciwgcnRyeUNvdW50OiBudW1iZXIsIGNodW5rc1NlbnQ6IG51bWJlcik6IFRyYW5zZmVyUHJvZ3Jlc3Mge1xuICAgICAgICAgICAgY29uc3QgY2h1bmtzUmVtYWluaW5nID0gdG90YWxDaHVua3MgLSBjaHVua3NTZW50O1xuICAgICAgICAgICAgY29uc3QgYnl0ZXNTZW50ID0gTWF0aC5taW4oY2h1bmtzU2VudCAqIG1heENodW5rU2l6ZSwgdG90YWxCeXRlcyk7XG4gICAgICAgICAgICBjb25zdCBieXRlc1JlbWFpbmluZyA9IHRvdGFsQnl0ZXMgLSBieXRlc1NlbnQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50ID0gYnl0ZXNTZW50IC8gdG90YWxCeXRlcyAqIDEwMDtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVUYWtlbk1zID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWVNcztcbiAgICAgICAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsVGltZU1zID0gKGJ5dGVzU2VudCAvIGJ5dGVzUmVtYWluaW5nKSAqIHRpbWVUYWtlbk1zO1xuICAgICAgICAgICAgY29uc3QgZXN0aW1hdGVkVGltZVJlbWFpbmluZ01zID0gTWF0aC5tYXgoZXN0aW1hdGVkVG90YWxUaW1lTXMgLSB0aW1lVGFrZW5NcywgMCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lLCAgdHJhbnNmZXJVcmwsIHJldHJ5TnVtYmVyLCByZXRyeUNvdW50OiBydHJ5Q291bnQsXG4gICAgICAgICAgICAgICAgY2h1bmtzU2VudCwgY2h1bmtzUmVtYWluaW5nLCBieXRlc1NlbnQsIGJ5dGVzUmVtYWluaW5nLFxuICAgICAgICAgICAgICAgIHBlcmNlbnQsIHRpbWVUYWtlbk1zLCBlc3RpbWF0ZWRUaW1lUmVtYWluaW5nTXNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIGlzIHRoZSBtYWluIGNodW5rIHVwbG9hZCBmdW5jdGlvblxuICAgICAgICBmdW5jdGlvbiB0cmFuc2ZlckNodW5rKGNodW5rSW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBjaHVuayBkZXRhaWxzLlxuICAgICAgICAgICAgY29uc3QgY2h1bmtTdGFydCA9IGNodW5rSW5kZXggKiBtYXhDaHVua1NpemU7XG4gICAgICAgICAgICBjb25zdCBjaHVua0VuZCA9IE1hdGgubWluKGNodW5rU3RhcnQgKyBtYXhDaHVua1NpemUsIHRvdGFsQnl0ZXMpO1xuICAgICAgICAgICAgY29uc3QgY29udGVudFJhbmdlSGVhZGVyID0gYGJ5dGVzICR7Y2h1bmtTdGFydH0tJHtjaHVua0VuZCAtIDF9LyR7dG90YWxCeXRlc31gO1xuXG4gICAgICAgICAgICAvLyBEaXNwYXRjaCBwcm9ncmVzc1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IGNyZWF0ZVRyYW5zZmVyUHJvZ3Jlc3MoMCwgcmV0cnlDb3VudCwgY2h1bmtJbmRleCk7XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NPYnNlcnZlci5uZXh0KHByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmVhZCBpbiB0aGUgY2h1bmtcbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2h1bmtTbGljZTogQmxvYiA9IHNvdXJjZS5zbGljZShjaHVua1N0YXJ0LCBjaHVua0VuZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgZmlsZVJlYWRlci5vbmVycm9yID0gZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZpbGVSZWFkZXIub25hYm9ydCA9IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZpbGVSZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGZpbGVSZWFkZXIucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVSZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoY2h1bmtTbGljZSk7XG5cbiAgICAgICAgICAgIC8vIFRyYW5zZmVyIHRoZSBjaHVua1xuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgICAvLyBVcG9uIHJlYWQgZXJyb3IsIGFib3J0IHRoZSB1cGxvYWQgcHJvY2Vzcy4gIE5vIHBvaW50IHJldHJ5aW5nIHJlYWQgZmFpbHVyZXMuXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBBYmFuZG9uIHRoZSB1cGxvYWQgYW5kIHByb3BhZ2F0ZSBhIGNvbnN1bWFibGUgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gY3JlYXRlVHJhbnNmZXJQcm9ncmVzcygwLCByZXRyeUNvdW50LCBjaHVua0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IFRyYW5zZmVyRXJyb3IoJ1JlYWQgZXJyb3InLCBlLCBwcm9ncmVzcykpO1xuICAgICAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAgICAgLy8gVXBvbiBzdWNjZXNzZnVsIHJlYWQsIHRyYW5zZmVyIHRoZSBjaHVuay5cbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHJ5TnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBDbGllbnQucHV0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJVcmwsIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtUmFuZ2UnOiBjb250ZW50UmFuZ2VIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB1cG9uIGFueSBjaHVuayB1cGxvYWQgZmFpbHVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgdG90YWwgcmV0cnkgY291bnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGN1cnJlbnQgY2h1bmsgcmV0cnkgbnVtYmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5TnVtYmVyKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNwYXRjaCBwcm9ncmVzcyAodGhlIHJldHJ5IGluZm9ybWF0aW9uIGhhcyBjaGFuZ2VkKS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IGNyZWF0ZVRyYW5zZmVyUHJvZ3Jlc3MocmV0cnlOdW1iZXIsIHJldHJ5Q291bnQsIGNodW5rSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc09ic2VydmVyLm5leHQocHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldGhyb3cgdGhlIGVycm9yIHNvIHRoYXQgdGhlIFwicmV0cnlcIiBjYWxsIGhhbmRsZXMgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0cnkgdGhlIGNodW5rIHVwbG9hZCB1cCB0byB0aGUgbGltaXQgLSB0aGlzIHdpbGwgcnVuIHRoZSBlbnRpcmUgY2hhaW4gYWdhaW4uXG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeShtYXhDaHVua1JldHJ5Q291bnQpLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIGFsbCByZXRyaWVzIGZvciB0aGUgY2h1bmsgYXJlIGV4aGF1c3RlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYmFuZG9uIHRoZSB1cGxvYWQgYW5kIHByb3BhZ2F0ZSBhIGNvbnN1bWFibGUgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBjcmVhdGVUcmFuc2ZlclByb2dyZXNzKHJldHJ5TnVtYmVyLCByZXRyeUNvdW50LCBjaHVua0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgVHJhbnNmZXJFcnJvcignVHJhbnNmZXIgZXJyb3InLCBlLCBwcm9ncmVzcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgY3JlYXRlcyB0aGUgZmluYWwgdHJhbnNmZXIgcHJvZ3Jlc3MsIGRpc3BhdGNoZXMgaXQsIGFuZCByZXR1cm5zIHRoZSB0cmFuc2ZlciByZXN1bHQuXG4gICAgICAgIGZ1bmN0aW9uIGZpbmlzaFVwbG9hZCgpOiBUcmFuc2ZlclJlc3VsdCB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2ZlclByb2dyZXNzID0gY3JlYXRlVHJhbnNmZXJQcm9ncmVzcygwLCByZXRyeUNvdW50LCB0b3RhbENodW5rcyk7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgIHByb2dyZXNzT2JzZXJ2ZXIubmV4dCh0cmFuc2ZlclByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICBwcm9ncmVzc09ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyUmVzdWx0OiBUcmFuc2ZlclJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICBmaWxlbmFtZTogdHJhbnNmZXJQcm9ncmVzcy5maWxlbmFtZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlclVybDogdHJhbnNmZXJQcm9ncmVzcy50cmFuc2ZlclVybCxcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50OiB0cmFuc2ZlclByb2dyZXNzLnJldHJ5Q291bnQsXG4gICAgICAgICAgICAgICAgY2h1bmtzU2VudDogdHJhbnNmZXJQcm9ncmVzcy5jaHVua3NTZW50LFxuICAgICAgICAgICAgICAgIGJ5dGVzU2VudDogdHJhbnNmZXJQcm9ncmVzcy5ieXRlc1NlbnQsXG4gICAgICAgICAgICAgICAgdGltZVRha2VuTXM6IHRyYW5zZmVyUHJvZ3Jlc3MudGltZVRha2VuTXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmZXJSZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGxvYWQgYWxsIG9mIHRoZSBjaHVua3NcbiAgICAgICAgbGV0IGNoYWluID0gdHJhbnNmZXJDaHVuaygwKTtcbiAgICAgICAgZm9yIChsZXQgY3VycmVudENodW5rID0gMTsgY3VycmVudENodW5rIDwgdG90YWxDaHVua3M7IGN1cnJlbnRDaHVuaysrKSB7XG4gICAgICAgICAgICBjaGFpbiA9IGNoYWluLnBpcGUoXG4gICAgICAgICAgICAgICAgZmxhdE1hcCgoKSA9PiB0cmFuc2ZlckNodW5rKGN1cnJlbnRDaHVuaykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluaXNoIHRyYW5zZmVyXG4gICAgICAgIHJldHVybiBjaGFpbi5waXBlKG1hcChmaW5pc2hVcGxvYWQpKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is the currently supported - albeit very minimal - public SDK.
|
|
3
|
+
*/
|
|
4
|
+
import { InjectionToken } from '@angular/core';
|
|
5
|
+
// Bind straight into the hooks provided by the container.
|
|
6
|
+
if (!window.System || !window.System.registry || !window.System.registry.get) {
|
|
7
|
+
throw new Error('SystemJS registry not found');
|
|
8
|
+
}
|
|
9
|
+
let containerHooks = window.System.registry.get('@vcd/common');
|
|
10
|
+
if (!containerHooks) {
|
|
11
|
+
containerHooks = window.System.registry.get('@vcd-ui/common');
|
|
12
|
+
}
|
|
13
|
+
if (!containerHooks) {
|
|
14
|
+
throw new Error('VCD UI container hooks not present in SystemJS registry');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Wire in as a string. Gives the root URL for API access (for example, the load balancer URL
|
|
18
|
+
* or the single-cell URL).
|
|
19
|
+
*/
|
|
20
|
+
export const API_ROOT_URL = containerHooks.API_ROOT_URL;
|
|
21
|
+
/**
|
|
22
|
+
* Wire in as a string. Gives the root URL for the legacy Flex application.
|
|
23
|
+
*/
|
|
24
|
+
export const FLEX_APP_URL = containerHooks.API_ROOT_URL;
|
|
25
|
+
/**
|
|
26
|
+
* Wire in as a string. Gives the current scope of the VCD-UI. As of current, this will be
|
|
27
|
+
* either 'tenant' for the tenant portal, or 'service-provider' for the service-provider portal.
|
|
28
|
+
*/
|
|
29
|
+
export const SESSION_SCOPE = containerHooks.SESSION_SCOPE;
|
|
30
|
+
/**
|
|
31
|
+
* Wire in as a string. Gives the unique name (not the display name) of the current tenant
|
|
32
|
+
* organization that the VCD-UI is being used for.
|
|
33
|
+
*/
|
|
34
|
+
export const SESSION_ORGANIZATION = containerHooks.SESSION_ORGANIZATION;
|
|
35
|
+
/**
|
|
36
|
+
* Wire in as a string. Gives the UUID identifier of the current tenant
|
|
37
|
+
* organization that the VCD-UI is being used for.
|
|
38
|
+
*/
|
|
39
|
+
export const SESSION_ORG_ID = containerHooks.SESSION_ORG_ID ? containerHooks.SESSION_ORG_ID : '';
|
|
40
|
+
/**
|
|
41
|
+
* Wire in as a string. Gives the full root path for module assets (e.g. images, scripts, text files)
|
|
42
|
+
*
|
|
43
|
+
* ATTENTION!
|
|
44
|
+
* Add || new InjectionToken to workaround the Angular security mechanics which prevent use of injection tokens
|
|
45
|
+
* which potentially are not defiend. The same fix can be applied for the rest tokens if needed.
|
|
46
|
+
*/
|
|
47
|
+
export const EXTENSION_ASSET_URL = containerHooks.EXTENSION_ASSET_URL || new InjectionToken('EXTENSION_ASSET_URL');
|
|
48
|
+
/**
|
|
49
|
+
* Wire in as a string. Gives the Angular 2 route that the module is registered under.
|
|
50
|
+
*/
|
|
51
|
+
export const EXTENSION_ROUTE = containerHooks.EXTENSION_ROUTE;
|
|
52
|
+
/**
|
|
53
|
+
* Wire in as a boolean. True if running under the SDK, false if running in production.
|
|
54
|
+
*/
|
|
55
|
+
export const SDK_MODE = containerHooks.SDK_MODE;
|
|
56
|
+
export const AuthTokenHolderService = containerHooks.AuthTokenHolderService;
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Y2Qvc2RrL3NyYy9jbGllbnQvY29udGFpbmVyLWhvb2tzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3QywwREFBMEQ7QUFDMUQsSUFBSSxDQUFFLE1BQWMsQ0FBQyxNQUFNLElBQUksQ0FBRSxNQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFFLE1BQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtJQUNyRyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7Q0FDbEQ7QUFFRCxJQUFJLGNBQWMsR0FBUyxNQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0UsSUFBSSxDQUFDLGNBQWMsRUFBRTtJQUNqQixjQUFjLEdBQUksTUFBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Q0FDMUU7QUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFO0lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztDQUM5RTtBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBMkIsY0FBYyxDQUFDLFlBQVksQ0FBQztBQUVoRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBMkIsY0FBYyxDQUFDLFlBQVksQ0FBQztBQUVoRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQTJCLGNBQWMsQ0FBQyxhQUFhLENBQUM7QUFFbEY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQTJCLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztBQUVoRzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQTJCLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUV6SDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBMkIsY0FBYyxDQUFDLG1CQUFtQixJQUFJLElBQUksY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFM0k7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTJCLGNBQWMsQ0FBQyxlQUFlLENBQUM7QUFFdEY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQTRCLGNBQWMsQ0FBQyxRQUFRLENBQUM7QUFpQnpFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUEyQixjQUFjLENBQUMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgaXMgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgLSBhbGJlaXQgdmVyeSBtaW5pbWFsIC0gcHVibGljIFNESy5cbiAqL1xuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIEJpbmQgc3RyYWlnaHQgaW50byB0aGUgaG9va3MgcHJvdmlkZWQgYnkgdGhlIGNvbnRhaW5lci5cbmlmICghKHdpbmRvdyBhcyBhbnkpLlN5c3RlbSB8fCAhKHdpbmRvdyBhcyBhbnkpLlN5c3RlbS5yZWdpc3RyeSB8fCAhKHdpbmRvdyBhcyBhbnkpLlN5c3RlbS5yZWdpc3RyeS5nZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbUpTIHJlZ2lzdHJ5IG5vdCBmb3VuZCcpO1xufVxuXG5sZXQgY29udGFpbmVySG9va3M6IGFueSA9ICh3aW5kb3cgYXMgYW55KS5TeXN0ZW0ucmVnaXN0cnkuZ2V0KCdAdmNkL2NvbW1vbicpO1xuaWYgKCFjb250YWluZXJIb29rcykge1xuICAgIGNvbnRhaW5lckhvb2tzID0gKHdpbmRvdyBhcyBhbnkpLlN5c3RlbS5yZWdpc3RyeS5nZXQoJ0B2Y2QtdWkvY29tbW9uJyk7XG59XG5cbmlmICghY29udGFpbmVySG9va3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZDRCBVSSBjb250YWluZXIgaG9va3Mgbm90IHByZXNlbnQgaW4gU3lzdGVtSlMgcmVnaXN0cnknKTtcbn1cblxuLyoqXG4gKiBXaXJlIGluIGFzIGEgc3RyaW5nLiAgR2l2ZXMgdGhlIHJvb3QgVVJMIGZvciBBUEkgYWNjZXNzIChmb3IgZXhhbXBsZSwgdGhlIGxvYWQgYmFsYW5jZXIgVVJMXG4gKiBvciB0aGUgc2luZ2xlLWNlbGwgVVJMKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9ST09UX1VSTDogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IGNvbnRhaW5lckhvb2tzLkFQSV9ST09UX1VSTDtcblxuLyoqXG4gKiBXaXJlIGluIGFzIGEgc3RyaW5nLiAgR2l2ZXMgdGhlIHJvb3QgVVJMIGZvciB0aGUgbGVnYWN5IEZsZXggYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBGTEVYX0FQUF9VUkw6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBjb250YWluZXJIb29rcy5BUElfUk9PVF9VUkw7XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSBjdXJyZW50IHNjb3BlIG9mIHRoZSBWQ0QtVUkuICBBcyBvZiBjdXJyZW50LCB0aGlzIHdpbGwgYmVcbiAqIGVpdGhlciAndGVuYW50JyBmb3IgdGhlIHRlbmFudCBwb3J0YWwsIG9yICdzZXJ2aWNlLXByb3ZpZGVyJyBmb3IgdGhlIHNlcnZpY2UtcHJvdmlkZXIgcG9ydGFsLlxuICovXG5leHBvcnQgY29uc3QgU0VTU0lPTl9TQ09QRTogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IGNvbnRhaW5lckhvb2tzLlNFU1NJT05fU0NPUEU7XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSB1bmlxdWUgbmFtZSAobm90IHRoZSBkaXNwbGF5IG5hbWUpIG9mIHRoZSBjdXJyZW50IHRlbmFudFxuICogb3JnYW5pemF0aW9uIHRoYXQgdGhlIFZDRC1VSSBpcyBiZWluZyB1c2VkIGZvci5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFU1NJT05fT1JHQU5JWkFUSU9OOiBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+ID0gY29udGFpbmVySG9va3MuU0VTU0lPTl9PUkdBTklaQVRJT047XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSBVVUlEIGlkZW50aWZpZXIgb2YgdGhlIGN1cnJlbnQgdGVuYW50XG4gKiBvcmdhbml6YXRpb24gdGhhdCB0aGUgVkNELVVJIGlzIGJlaW5nIHVzZWQgZm9yLlxuICovXG5leHBvcnQgY29uc3QgU0VTU0lPTl9PUkdfSUQ6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBjb250YWluZXJIb29rcy5TRVNTSU9OX09SR19JRCA/IGNvbnRhaW5lckhvb2tzLlNFU1NJT05fT1JHX0lEIDogJyc7XG5cbi8qKlxuICogV2lyZSBpbiBhcyBhIHN0cmluZy4gIEdpdmVzIHRoZSBmdWxsIHJvb3QgcGF0aCBmb3IgbW9kdWxlIGFzc2V0cyAoZS5nLiBpbWFnZXMsIHNjcmlwdHMsIHRleHQgZmlsZXMpXG4gKlxuICogQVRURU5USU9OIVxuICogQWRkIHx8IG5ldyBJbmplY3Rpb25Ub2tlbiB0byB3b3JrYXJvdW5kIHRoZSBBbmd1bGFyIHNlY3VyaXR5IG1lY2hhbmljcyB3aGljaCBwcmV2ZW50IHVzZSBvZiBpbmplY3Rpb24gdG9rZW5zXG4gKiB3aGljaCBwb3RlbnRpYWxseSBhcmUgbm90IGRlZmllbmQuIFRoZSBzYW1lIGZpeCBjYW4gYmUgYXBwbGllZCBmb3IgdGhlIHJlc3QgdG9rZW5zIGlmIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYVEVOU0lPTl9BU1NFVF9VUkw6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBjb250YWluZXJIb29rcy5FWFRFTlNJT05fQVNTRVRfVVJMIHx8IG5ldyBJbmplY3Rpb25Ub2tlbignRVhURU5TSU9OX0FTU0VUX1VSTCcpO1xuXG4vKipcbiAqIFdpcmUgaW4gYXMgYSBzdHJpbmcuICBHaXZlcyB0aGUgQW5ndWxhciAyIHJvdXRlIHRoYXQgdGhlIG1vZHVsZSBpcyByZWdpc3RlcmVkIHVuZGVyLlxuICovXG5leHBvcnQgY29uc3QgRVhURU5TSU9OX1JPVVRFOiBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+ID0gY29udGFpbmVySG9va3MuRVhURU5TSU9OX1JPVVRFO1xuXG4vKipcbiAqIFdpcmUgaW4gYXMgYSBib29sZWFuLiAgVHJ1ZSBpZiBydW5uaW5nIHVuZGVyIHRoZSBTREssIGZhbHNlIGlmIHJ1bm5pbmcgaW4gcHJvZHVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNES19NT0RFOiBJbmplY3Rpb25Ub2tlbjxib29sZWFuPiA9IGNvbnRhaW5lckhvb2tzLlNES19NT0RFO1xuXG4vKipcbiAqIEluamVjdCB0aGlzIHRvIGFjY2VzcyB0aGUgYXV0aGVudGljYXRpb24gdG9rZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFRva2VuSG9sZGVyU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogVGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuLlxuICAgICAqL1xuICAgIHRva2VuOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBKV1QgdG9rZW5cbiAgICAgKi9cbiAgICBqd3Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlOiBBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlID0gY29udGFpbmVySG9va3MuQXV0aFRva2VuSG9sZGVyU2VydmljZTtcblxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './query';
|
|
2
|
+
export * from './client';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Y2Qvc2RrL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vY2xpZW50JzsiXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity reference used to describe VCD entities
|
|
3
|
+
*/
|
|
4
|
+
export class EntityReference {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Session
|
|
8
|
+
*/
|
|
9
|
+
export class Session {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A location accessible to this session.
|
|
13
|
+
*/
|
|
14
|
+
export class AccessibleLocation {
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZjZC9zZGsvc3JjL2NsaWVudC9vcGVuYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7Q0FHM0I7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxPQUFPO0NBNkJuQjtBQWlDRDs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7Q0FPOUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVudGl0eSByZWZlcmVuY2UgdXNlZCB0byBkZXNjcmliZSBWQ0QgZW50aXRpZXNcbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eVJlZmVyZW5jZSB7XG4gICAgJ25hbWUnOiBzdHJpbmc7XG4gICAgJ2lkJzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlc3Npb25cbiAqL1xuZXhwb3J0IGNsYXNzIFNlc3Npb24ge1xuICAgIC8qKlxuICAgICAqIElEIG9mIHNlc3Npb25cbiAgICAgKi9cbiAgICAnaWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVXNlciBvZiB0aGlzIHNlc3Npb25cbiAgICAgKi9cbiAgICAndXNlcic6IEVudGl0eVJlZmVyZW5jZTtcbiAgICAvKipcbiAgICAgKiBPcmdhbml6YXRpb24gdXNlciBpcyBsb2dnZWQgaW50byBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICovXG4gICAgJ29yZyc6IEVudGl0eVJlZmVyZW5jZTtcbiAgICAvKipcbiAgICAgKiBUaGUgYWNjZXNzaWJsZSBsb2NhdGlvbiB0aGlzIHNlc3Npb24gaXMgdmFsaWQgZm9yXG4gICAgICovXG4gICAgJ2xvY2F0aW9uJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFVzZXIncyByb2xlcyBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICovXG4gICAgJ3JvbGVzJzogQXJyYXk8c3RyaW5nPjtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2VzIHRvIHVzZXIncyByb2xlc1xuICAgICAqL1xuICAgICdyb2xlUmVmcyc6IEFycmF5PEVudGl0eVJlZmVyZW5jZT47XG4gICAgLyoqXG4gICAgICogVGhlIHNlc3Npb24gaWRsZSB0aW1lb3V0IGluIG1pbnV0ZXNcbiAgICAgKi9cbiAgICAnc2Vzc2lvbklkbGVUaW1lb3V0TWludXRlcyc6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2YgbG9jYXRpb25zIGFjY2Vzc2libGUgdG8gdGhpcyBzZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc2libGVMb2NhdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEhvdyBtYW55IHJlc3VsdHMgdGhlcmUgYXJlIGluIHRvdGFsIChpLmUuLCBjb25zaWRlcmluZyBhbGwgcGFnZXMpLlxuICAgICAqL1xuICAgIHJlc3VsdFRvdGFsPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogSG93IG1hbnkgcGFnZXMgdGhlcmUgYXJlIGluIHRvdGFsLlxuICAgICAqL1xuICAgIHBhZ2VDb3VudD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwYWdlIHRoYXQgd2FzIGZldGNoZWQsIDEtaW5kZXhlZC5cbiAgICAgKi9cbiAgICBwYWdlPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogUmVzdWx0IGNvdW50IGZvciBwYWdlIHRoYXQgd2FzIGZldGNoZWQuXG4gICAgICovXG4gICAgcGFnZVNpemU/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBwYWdlIG9mIGFjY2Vzc2libGUgbG9jYXRpb25zLlxuICAgICAqL1xuICAgIHZhbHVlcz86IEFycmF5PEFjY2Vzc2libGVMb2NhdGlvbj47XG5cbn1cblxuLyoqXG4gKiBBIGxvY2F0aW9uIGFjY2Vzc2libGUgdG8gdGhpcyBzZXNzaW9uLlxuICovXG5leHBvcnQgY2xhc3MgQWNjZXNzaWJsZUxvY2F0aW9uIHtcbiAgICAnbG9jYXRpb25JZCc6IHN0cmluZztcbiAgICAnc2l0ZSc6IEVudGl0eVJlZmVyZW5jZTtcbiAgICAnb3JnJzogRW50aXR5UmVmZXJlbmNlO1xuICAgICdyZXN0QXBpRW5kcG9pbnQnOiBzdHJpbmc7XG4gICAgJ3VpRW5kcG9pbnQnOiBzdHJpbmc7XG4gICAgJ2FwaVZlcnNpb24nOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// tslint:disable-next-line:no-namespace
|
|
2
|
+
export var Filter;
|
|
3
|
+
(function (Filter) {
|
|
4
|
+
class Operators {
|
|
5
|
+
}
|
|
6
|
+
Operators.OR = ',';
|
|
7
|
+
Operators.AND = ';';
|
|
8
|
+
Operators.GT = '=gt=';
|
|
9
|
+
Operators.GE = '=ge=';
|
|
10
|
+
Operators.LT = '=lt=';
|
|
11
|
+
Operators.LE = '=le=';
|
|
12
|
+
Operators.EQ = '==';
|
|
13
|
+
Operators.NEQ = '!=';
|
|
14
|
+
/**
|
|
15
|
+
* Collection of strategies for wilcard string matching.
|
|
16
|
+
*/
|
|
17
|
+
class MatchMode {
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Match the start of a string.
|
|
21
|
+
*/
|
|
22
|
+
MatchMode.START = 'START';
|
|
23
|
+
/**
|
|
24
|
+
* Match the end of a string.
|
|
25
|
+
*/
|
|
26
|
+
MatchMode.END = 'END';
|
|
27
|
+
/**
|
|
28
|
+
* Match anywhere in the string.
|
|
29
|
+
*/
|
|
30
|
+
MatchMode.ANYWHERE = 'ANYWHERE';
|
|
31
|
+
Filter.MatchMode = MatchMode;
|
|
32
|
+
class BuilderChain {
|
|
33
|
+
constructor(parent) {
|
|
34
|
+
this.result = '';
|
|
35
|
+
this.parent = parent;
|
|
36
|
+
}
|
|
37
|
+
query() {
|
|
38
|
+
return this.buildPartial();
|
|
39
|
+
}
|
|
40
|
+
// tslint:disable-next-line:max-line-length
|
|
41
|
+
and(condition1, condition2, conditionN) {
|
|
42
|
+
if (!condition1) {
|
|
43
|
+
return this.simpleAnd();
|
|
44
|
+
}
|
|
45
|
+
this.result += '(' + condition1.buildPartial() + Operators.AND + condition2.buildPartial();
|
|
46
|
+
if (conditionN && conditionN.length) {
|
|
47
|
+
conditionN.forEach((condition) => {
|
|
48
|
+
this.result += Operators.AND + condition.buildPartial();
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
this.result += ')';
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
simpleAnd() {
|
|
55
|
+
if (this.currentCompositeOp === Operators.OR || this.parent && this.parent.currentCompositeOp === Operators.OR) {
|
|
56
|
+
if (this.parent) {
|
|
57
|
+
this.parent.result = '(' + this.parent.result;
|
|
58
|
+
this.result += ')';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.wrap();
|
|
62
|
+
}
|
|
63
|
+
this.currentCompositeOp = Operators.AND;
|
|
64
|
+
}
|
|
65
|
+
this.result += Operators.AND;
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
// tslint:disable-next-line:max-line-length
|
|
69
|
+
or(condition1, condition2, conditionN) {
|
|
70
|
+
if (!condition1) {
|
|
71
|
+
return this.simpleOr();
|
|
72
|
+
}
|
|
73
|
+
this.result += '(' + condition1.buildPartial() + Operators.OR + condition2.buildPartial();
|
|
74
|
+
if (conditionN && conditionN.length) {
|
|
75
|
+
conditionN.forEach((condition) => {
|
|
76
|
+
this.result += Operators.OR + condition.buildPartial();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
this.result += ')';
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
simpleOr() {
|
|
83
|
+
if (this.currentCompositeOp === Operators.AND || (this.parent && this.parent.currentCompositeOp === Operators.AND)) {
|
|
84
|
+
if (this.parent) {
|
|
85
|
+
this.parent.result = '(' + this.parent.result;
|
|
86
|
+
this.result += ')';
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.wrap();
|
|
90
|
+
}
|
|
91
|
+
this.currentCompositeOp = Operators.OR;
|
|
92
|
+
}
|
|
93
|
+
this.result += Operators.OR;
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
wrap() {
|
|
97
|
+
this.result = '(' + this.result + ')';
|
|
98
|
+
this.currentCompositeOp = null;
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
buildPartial() {
|
|
102
|
+
return (this.parent) ? this.parent.buildPartial() + this.result : this.result;
|
|
103
|
+
}
|
|
104
|
+
is(property) {
|
|
105
|
+
const builder = new BuilderChain(this);
|
|
106
|
+
builder.result = property;
|
|
107
|
+
return builder;
|
|
108
|
+
}
|
|
109
|
+
equalTo(value, ...moreValues) {
|
|
110
|
+
return this.condition(Operators.EQ, value, ...moreValues);
|
|
111
|
+
}
|
|
112
|
+
notEqualTo(value) {
|
|
113
|
+
return this.condition(Operators.NEQ, value);
|
|
114
|
+
}
|
|
115
|
+
lessThan(value) {
|
|
116
|
+
return this.condition(Operators.LT, value);
|
|
117
|
+
}
|
|
118
|
+
lessOrEqualTo(value) {
|
|
119
|
+
return this.condition(Operators.LE, value);
|
|
120
|
+
}
|
|
121
|
+
greaterThan(value) {
|
|
122
|
+
return this.condition(Operators.GT, value);
|
|
123
|
+
}
|
|
124
|
+
greaterOrEqualTo(value) {
|
|
125
|
+
return this.condition(Operators.GE, value);
|
|
126
|
+
}
|
|
127
|
+
like(value, mode = MatchMode.START) {
|
|
128
|
+
let wildcardValue;
|
|
129
|
+
switch (mode) {
|
|
130
|
+
case MatchMode.START:
|
|
131
|
+
wildcardValue = `${value}*`;
|
|
132
|
+
break;
|
|
133
|
+
case MatchMode.END:
|
|
134
|
+
wildcardValue = `*${value}`;
|
|
135
|
+
break;
|
|
136
|
+
case MatchMode.ANYWHERE:
|
|
137
|
+
wildcardValue = `*${value}*`;
|
|
138
|
+
break;
|
|
139
|
+
default:
|
|
140
|
+
wildcardValue = value;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
return this.condition(Operators.EQ, wildcardValue);
|
|
144
|
+
}
|
|
145
|
+
condition(operator, value, ...moreValues) {
|
|
146
|
+
const name = this.result;
|
|
147
|
+
this.result += operator + encodeURI(value);
|
|
148
|
+
if (moreValues.length) {
|
|
149
|
+
moreValues.forEach((next) => {
|
|
150
|
+
this.result += ',' + name + operator + encodeURI(next);
|
|
151
|
+
});
|
|
152
|
+
this.currentCompositeOp = Operators.OR;
|
|
153
|
+
}
|
|
154
|
+
return this;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Builds a FIQL search condition using a fluent interface.
|
|
159
|
+
*/
|
|
160
|
+
class Builder {
|
|
161
|
+
/**
|
|
162
|
+
* Create a simple property to be evaulated as a filter condition.
|
|
163
|
+
*
|
|
164
|
+
* @param property the name of the property
|
|
165
|
+
* @returns a Property instance for defining a filter condition
|
|
166
|
+
*/
|
|
167
|
+
is(property) {
|
|
168
|
+
return new BuilderChain().is(property);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create a conjunction (AND) condition from existing conditions.
|
|
172
|
+
*
|
|
173
|
+
* @param condition1 first condition
|
|
174
|
+
* @param condition2 second condition
|
|
175
|
+
* @param conditionN any additional conditions
|
|
176
|
+
* @returns an evaluatable filter condition
|
|
177
|
+
*/
|
|
178
|
+
and(condition1, condition2, conditionN) {
|
|
179
|
+
return new BuilderChain().and(condition1, condition2, conditionN);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create a disjunction (OR) condition from existing conditions.
|
|
183
|
+
*
|
|
184
|
+
* @param condition1 first condition
|
|
185
|
+
* @param condition2 second condition
|
|
186
|
+
* @param conditionN any additional conditions
|
|
187
|
+
* @returns an evaluatable filter condition
|
|
188
|
+
*/
|
|
189
|
+
or(condition1, condition2, conditionN) {
|
|
190
|
+
return new BuilderChain().or(condition1, condition2, conditionN);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
Filter.Builder = Builder;
|
|
194
|
+
})(Filter || (Filter = {}));
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Y2Qvc2RrL3NyYy9jbGllbnQvcXVlcnkvZmlsdGVyLmJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE1BQU0sS0FBVyxNQUFNLENBa1d0QjtBQWxXRCxXQUFpQixNQUFNO0lBQ25CLE1BQU0sU0FBUzs7SUFDWSxZQUFFLEdBQVcsR0FBRyxDQUFDO0lBQ2pCLGFBQUcsR0FBVyxHQUFHLENBQUM7SUFDbEIsWUFBRSxHQUFXLE1BQU0sQ0FBQztJQUNwQixZQUFFLEdBQVcsTUFBTSxDQUFDO0lBQ3BCLFlBQUUsR0FBVyxNQUFNLENBQUM7SUFDcEIsWUFBRSxHQUFXLE1BQU0sQ0FBQztJQUNwQixZQUFFLEdBQVcsSUFBSSxDQUFDO0lBQ2xCLGFBQUcsR0FBVyxJQUFJLENBQUM7SUFHOUM7O09BRUc7SUFDSCxNQUFhLFNBQVM7O0lBQ2xCOztPQUVHO0lBQ29CLGVBQUssR0FBVyxPQUFPLENBQUM7SUFFL0M7O09BRUc7SUFDb0IsYUFBRyxHQUFXLEtBQUssQ0FBQztJQUUzQzs7T0FFRztJQUNvQixrQkFBUSxHQUFXLFVBQVUsQ0FBQztJQWQ1QyxnQkFBUyxZQWVyQixDQUFBO0lBZ0lELE1BQU0sWUFBWTtRQUtkLFlBQVksTUFBcUI7WUFKekIsV0FBTSxHQUFHLEVBQUUsQ0FBQztZQUtoQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN6QixDQUFDO1FBRU0sS0FBSztZQUNSLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFJRCwyQ0FBMkM7UUFDcEMsR0FBRyxDQUFDLFVBQThCLEVBQUUsVUFBOEIsRUFBRSxVQUFnQztZQUN2RyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQzNCO1lBRUQs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QztnQkFFSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQzthQUMxQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FDSjtJQUVEOztPQUVHO0lBQ0gsTUFBYSxPQUFPO1FBQ2hCOzs7OztXQUtHO1FBQ0gsRUFBRSxDQUFDLFFBQWdCO1lBQ2YsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQ7Ozs7Ozs7V0FPRztRQUNILEdBQUcsQ0FBQyxVQUE2QixFQUFFLFVBQTZCLEVBQUUsVUFBZ0M7WUFDOUYsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRDs7Ozs7OztXQU9HO1FBQ0gsRUFBRSxDQUFDLFVBQTZCLEVBQUUsVUFBNkIsRUFBRSxVQUFnQztZQUM3RixPQUFPLElBQUksWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsQ0FBQztLQUNKO0lBbENZLGNBQU8sVUFrQ25CLENBQUE7QUFDTCxDQUFDLEVBbFdnQixNQUFNLEtBQU4sTUFBTSxRQWtXdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbmFtZXNwYWNlXG5leHBvcnQgbmFtZXNwYWNlIEZpbHRlciB7XG4gICAgY2xhc3MgT3BlcmF0b3JzIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBPUjogc3RyaW5nID0gJywnO1xuICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFORDogc3RyaW5nID0gJzsnO1xuICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdUOiBzdHJpbmcgPSAnPWd0PSc7XG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR0U6IHN0cmluZyA9ICc9Z2U9JztcbiAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBMVDogc3RyaW5nID0gJz1sdD0nO1xuICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExFOiBzdHJpbmcgPSAnPWxlPSc7XG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRVE6IHN0cmluZyA9ICc9PSc7XG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkVROiBzdHJpbmcgPSAnIT0nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2Ygc3RyYXRlZ2llcyBmb3Igd2lsY2FyZCBzdHJpbmcgbWF0Y2hpbmcuXG4gICAgICovXG4gICAgZXhwb3J0IGNsYXNzIE1hdGNoTW9kZSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYXRjaCB0aGUgc3RhcnQgb2YgYSBzdHJpbmcuXG4gICAgICAgICAqL1xuICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUQVJUOiBzdHJpbmcgPSAnU1RBUlQnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYXRjaCB0aGUgZW5kIG9mIGEgc3RyaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkQ6IHN0cmluZyA9ICdFTkQnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYXRjaCBhbnl3aGVyZSBpbiB0aGUgc3RyaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTllXSEVSRTogc3RyaW5nID0gJ0FOWVdIRVJFJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGZpbHRlciBpdGVtIHRoYXQgY2FuIGRlZmluZSBhIGNvbXBhcmlzb24vY29uZGl0aW9uLlxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlIGEgZmlsdGVyIGNvbmRpdGlvbiB0byBldmFsdWF0ZSB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHBhdHRlcm4gdG8gZXZhbHVhdGVcbiAgICAgICAgICogQHBhcmFtIG1vcmVWYWx1ZXMgb3B0aW9uYWwgYWRkaXRpb25hbCBwYXR0ZXJucyB0byBldmFsdWF0ZSB0aGF0IHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBPUiBjb25kaXRpb25cbiAgICAgICAgICogQHJldHVybnMgYW4gZXZhbHVhdGFibGUgZmlsdGVyIGNvbmRpdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZXF1YWxUbyh2YWx1ZTogKGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcpLCAuLi5tb3JlVmFsdWVzOiAoYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZylbXSk6IENvbXBsZXRlQ29uZGl0aW9uO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGUgYSBmaWx0ZXIgY29uZGl0aW9uIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIG5vdCBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHBhdHRlcm4gdG8gZXZhbHVhdGVcbiAgICAgICAgICogQHJldHVybnMgYW4gZXZhbHVhdGFibGUgZmlsdGVyIGNvbmRpdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbm90RXF1YWxUbyh2YWx1ZTogKGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcpKTogQ29tcGxldGVDb25kaXRpb247XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZSBhIGZpbHRlciBjb25kaXRpb24gdG8gZXZhbHVhdGUgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgdmFsdWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgcGF0dGVybiB0byBldmFsdWF0ZVxuICAgICAgICAgKiBAcmV0dXJucyBhbiBldmFsdWF0YWJsZSBmaWx0ZXIgY29uZGl0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBsZXNzVGhhbih2YWx1ZTogbnVtYmVyKTogQ29tcGxldGVDb25kaXRpb247XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZSBhIGZpbHRlciBjb25kaXRpb24gdG8gZXZhbHVhdGUgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgcGF0dGVybiB0byBldmFsdWF0ZVxuICAgICAgICAgKiBAcmV0dXJucyBhbiBldmFsdWF0YWJsZSBmaWx0ZXIgY29uZGl0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBsZXNzT3JFcXVhbFRvKHZhbHVlOiBudW1iZXIpOiBDb21wbGV0ZUNvbmRpdGlvbjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlIGEgZmlsdGVyIGNvbmRpdGlvbiB0byBldmFsdWF0ZSB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBncmVhdGVyIHRoYW4gdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbHVlIHRoZSBwYXR0ZXJuIHRvIGV2YWx1YXRlXG4gICAgICAgICAqIEByZXR1cm5zIGFuIGV2YWx1YXRhYmxlIGZpbHRlciBjb25kaXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGdyZWF0ZXJUaGFuKHZhbHVlOiBudW1iZXIpOiBDb21wbGV0ZUNvbmRpdGlvbjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlIGEgZmlsdGVyIGNvbmRpdGlvbiB0byBldmFsdWF0ZSB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHZhbHVlIHRoZSBwYXR0ZXJuIHRvIGV2YWx1YXRlXG4gICAgICAgICAqIEByZXR1cm5zIGFuIGV2YWx1YXRhYmxlIGZpbHRlciBjb25kaXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGdyZWF0ZXJPckVxdWFsVG8odmFsdWU6IG51bWJlcik6IENvbXBsZXRlQ29uZGl0aW9uO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGUgYSBmaWx0ZXIgY29uZGl0aW9uIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEgd2lsZGNhcmQgbWF0Y2ggd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHBhdHRlcm4gdG8gZXZhbHVhdGVcbiAgICAgICAgICogQHBhcmFtIG1vZGUgdGhlIHR5cGUgb2Ygd2lsZGNhcmQgZXZhbHVhdGlvbiB0byBwZXJmb3JtXG4gICAgICAgICAqIEByZXR1cm5zIGFuIGV2YWx1YXRhYmxlIGZpbHRlciBjb25kaXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGxpa2UodmFsdWU6IHN0cmluZywgbW9kZTogTWF0Y2hNb2RlKTogQ29tcGxldGVDb25kaXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbmRpdGlvbiB0aGF0IGlzIGluY29tcGxldGUgYnkgaXRzZWxmLCBsaWtlIGFuIGVtcHR5IGNvbmRpdGlvbiwgYWdncmVnYXRpb24gd3JhcHBlciwgb3IganVuY3Rpb24uXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBQYXJ0aWFsQ29uZGl0aW9uIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZSBhIHNpbXBsZSBwcm9wZXJ0eSB0byBiZSBldmF1bGF0ZWQgYXMgYSBmaWx0ZXIgY29uZGl0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHkgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4gICAgICAgICAqIEByZXR1cm5zIGEgUHJvcGVydHkgaW5zdGFuY2UgZm9yIGRlZmluaW5nIGEgZmlsdGVyIGNvbmRpdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXMocHJvcGVydHk6IHN0cmluZyk6IFByb3BlcnR5O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGUgYSBjb25qdW5jdGlvbiAoQU5EKSBjb25kaXRpb24gZnJvbSBleGlzdGluZyBjb25kaXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gY29uZGl0aW9uMSBmaXJzdCBjb25kaXRpb25cbiAgICAgICAgICogQHBhcmFtIGNvbmRpdGlvbjIgc2Vjb25kIGNvbmRpdGlvblxuICAgICAgICAgKiBAcGFyYW0gY29uZGl0aW9uTiBhbnkgYWRkaXRpb25hbCBjb25kaXRpb25zXG4gICAgICAgICAqIEByZXR1cm5zIGFuIGV2YWx1YXRhYmxlIGZpbHRlciBjb25kaXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFuZChjb25kaXRpb24xOiBDb21wbGV0ZUNvbmRpdGlvbiwgY29uZGl0aW9uMjogQ29tcGxldGVDb25kaXRpb24sIGNvbmRpdGlvbk4/OiBDb21wbGV0ZUNvbmRpdGlvbltdKTogQ29tcGxldGVDb25kaXRpb247XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZSBhIGRpc2p1bmN0aW9uIChPUikgY29uZGl0aW9uIGZyb20gZXhpc3RpbmcgY29uZGl0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGNvbmRpdGlvbjEgZmlyc3QgY29uZGl0aW9uXG4gICAgICAgICAqIEBwYXJhbSBjb25kaXRpb24yIHNlY29uZCBjb25kaXRpb25cbiAgICAgICAgICogQHBhcmFtIGNvbmRpdGlvbk4gYW55IGFkZGl0aW9uYWwgY29uZGl0aW9uc1xuICAgICAgICAgKiBAcmV0dXJucyBhbiBldmFsdWF0YWJsZSBmaWx0ZXIgY29uZGl0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBvcihjb25kaXRpb24xOiBDb21wbGV0ZUNvbmRpdGlvbiwgY29uZGl0aW9uMjogQ29tcGxldGVDb25kaXRpb24sIGNvbmRpdGlvbk4/OiBDb21wbGV0ZUNvbmRpdGlvbltdKTogQ29tcGxldGVDb25kaXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gZXZhbHVhdGFibGUgZmlsdGVyIGNvbmRpdGlvbi5cbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIENvbXBsZXRlQ29uZGl0aW9uIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIGNvbmR0aW9uIHRvIHRoaXMgY29uZGl0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIG5ldyBjb25kaXRpb24gd2lsbCBiZSBBTkRlZCB0byB0aGUgZXhpc3RpbmcgY29uZGl0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyBhbiBpbmNvbXBsZXRlIChlbXB0eSkgY29uZGl0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhbmQoKTogUGFydGlhbENvbmRpdGlvbjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29uZHRpb24gdG8gdGhpcyBjb25kaXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgbmV3IGNvbmRpdGlvbiB3aWxsIGJlIE9SZWQgdG8gdGhlIGV4aXN0aW5nIGNvbmRpdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMgYW4gaW5jb21wbGV0ZSAoZW1wdHkpIGNvbmRpdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgb3IoKTogUGFydGlhbENvbmRpdGlvbjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQnVpbGQgdGhlIEZJUUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbmRpdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMgYSBGSVFMIHN0cmluZ1xuICAgICAgICAgKi9cbiAgICAgICAgcXVlcnkoKTogc3RyaW5nO1xuICAgIH1cblxuICAgIGNsYXNzIEJ1aWxkZXJDaGFpbiBpbXBsZW1lbnRzIENvbXBsZXRlQ29uZGl0aW9uLCBQYXJ0aWFsQ29uZGl0aW9uLCBQcm9wZXJ0eSB7XG4gICAgICAgIHByaXZhdGUgcmVzdWx0ID0gJyc7XG4gICAgICAgIHByaXZhdGUgcGFyZW50OiBCdWlsZGVyQ2hhaW47XG4gICAgICAgIHByaXZhdGUgY3VycmVudENvbXBvc2l0ZU9wOiBzdHJpbmc7XG5cbiAgICAgICAgY29uc3RydWN0b3IocGFyZW50PzogQnVpbGRlckNoYWluKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBxdWVyeSgpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRQYXJ0aWFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgYW5kKCk6IFBhcnRpYWxDb25kaXRpb247XG4gICAgICAgIHB1YmxpYyBhbmQoY29uZGl0aW9uMTogQ29tcGxldGVDb25kaXRpb24sIGNvbmRpdGlvbjI6IENvbXBsZXRlQ29uZGl0aW9uLCBjb25kaXRpb25OPzogQ29tcGxldGVDb25kaXRpb25bXSk6IENvbXBsZXRlQ29uZGl0aW9uO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHB1YmxpYyBhbmQoY29uZGl0aW9uMT86IENvbXBsZXRlQ29uZGl0aW9uLCBjb25kaXRpb24yPzogQ29tcGxldGVDb25kaXRpb24sIGNvbmRpdGlvbk4/OiBDb21wbGV0ZUNvbmRpdGlvbltdKTogUGFydGlhbENvbmRpdGlvbiB8IENvbXBsZXRlQ29uZGl0aW9uIHtcbiAgICAgICAgICAgIGlmICghY29uZGl0aW9uMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpbXBsZUFuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlc3VsdCArPSAnKCcgKyAoY29uZGl0aW9uMSBhcyBCdWlsZGVyQ2hhaW4pLmJ1aWxkUGFydGlhbCgpICsgT3BlcmF0b3JzLkFORCArIChjb25kaXRpb24yIGFzIEJ1aWxkZXJDaGFpbikuYnVpbGRQYXJ0aWFsKCk7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uTiAmJiBjb25kaXRpb25OLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbk4uZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9IE9wZXJhdG9ycy5BTkQgKyAoY29uZGl0aW9uIGFzIEJ1aWxkZXJDaGFpbikuYnVpbGRQYXJ0aWFsKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9ICcpJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZSBzaW1wbGVBbmQoKTogUGFydGlhbENvbmRpdGlvbiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29tcG9zaXRlT3AgPT09IE9wZXJhdG9ycy5PUiB8fCB0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5jdXJyZW50Q29tcG9zaXRlT3AgPT09IE9wZXJhdG9ycy5PUikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5yZXN1bHQgPSAnKCcgKyB0aGlzLnBhcmVudC5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9ICcpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndyYXAoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDb21wb3NpdGVPcCA9IE9wZXJhdG9ycy5BTkQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9IE9wZXJhdG9ycy5BTkQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBvcigpOiBQYXJ0aWFsQ29uZGl0aW9uO1xuICAgICAgICBwdWJsaWMgb3IoY29uZGl0aW9uMTogQ29tcGxldGVDb25kaXRpb24sIGNvbmRpdGlvbjI6IENvbXBsZXRlQ29uZGl0aW9uLCBjb25kaXRpb25OPzogQ29tcGxldGVDb25kaXRpb25bXSk6IENvbXBsZXRlQ29uZGl0aW9uO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHB1YmxpYyBvcihjb25kaXRpb24xPzogQ29tcGxldGVDb25kaXRpb24sIGNvbmRpdGlvbjI/OiBDb21wbGV0ZUNvbmRpdGlvbiwgY29uZGl0aW9uTj86IENvbXBsZXRlQ29uZGl0aW9uW10pOiBQYXJ0aWFsQ29uZGl0aW9uIHwgQ29tcGxldGVDb25kaXRpb24ge1xuICAgICAgICAgICAgaWYgKCFjb25kaXRpb24xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2ltcGxlT3IoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZXN1bHQgKz0gJygnICsgKGNvbmRpdGlvbjEgYXMgQnVpbGRlckNoYWluKS5idWlsZFBhcnRpYWwoKSArIE9wZXJhdG9ycy5PUiArIChjb25kaXRpb24yIGFzIEJ1aWxkZXJDaGFpbikuYnVpbGRQYXJ0aWFsKCk7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uTiAmJiBjb25kaXRpb25OLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbk4uZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9IE9wZXJhdG9ycy5PUiArIChjb25kaXRpb24gYXMgQnVpbGRlckNoYWluKS5idWlsZFBhcnRpYWwoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZXN1bHQgKz0gJyknO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBwcml2YXRlIHNpbXBsZU9yKCk6IFBhcnRpYWxDb25kaXRpb24ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENvbXBvc2l0ZU9wID09PSBPcGVyYXRvcnMuQU5EIHx8ICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5jdXJyZW50Q29tcG9zaXRlT3AgPT09IE9wZXJhdG9ycy5BTkQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnJlc3VsdCA9ICcoJyArIHRoaXMucGFyZW50LnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQgKz0gJyknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JhcCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENvbXBvc2l0ZU9wID0gT3BlcmF0b3JzLk9SO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlc3VsdCArPSBPcGVyYXRvcnMuT1I7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgd3JhcCgpOiBDb21wbGV0ZUNvbmRpdGlvbiB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdCA9ICcoJyArIHRoaXMucmVzdWx0ICsgJyknO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29tcG9zaXRlT3AgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBwcml2YXRlIGJ1aWxkUGFydGlhbCgpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudCkgPyB0aGlzLnBhcmVudC5idWlsZFBhcnRpYWwoKSArIHRoaXMucmVzdWx0IDogdGhpcy5yZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgaXMocHJvcGVydHk6IHN0cmluZyk6IFByb3BlcnR5IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXI6IEJ1aWxkZXJDaGFpbiA9IG5ldyBCdWlsZGVyQ2hhaW4odGhpcyk7XG4gICAgICAgICAgICBidWlsZGVyLnJlc3VsdCA9IHByb3BlcnR5O1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgZXF1YWxUbyh2YWx1ZTogKGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcpLCAuLi5tb3JlVmFsdWVzOiAoYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZylbXSk6IENvbXBsZXRlQ29uZGl0aW9uIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbihPcGVyYXRvcnMuRVEsIHZhbHVlLCAuLi5tb3JlVmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBub3RFcXVhbFRvKHZhbHVlOiAoYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZykpOiBDb21wbGV0ZUNvbmRpdGlvbiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb24oT3BlcmF0b3JzLk5FUSwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIGxlc3NUaGFuKHZhbHVlOiBudW1iZXIpOiBDb21wbGV0ZUNvbmRpdGlvbiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb24oT3BlcmF0b3JzLkxULCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgbGVzc09yRXF1YWxUbyh2YWx1ZTogbnVtYmVyKTogQ29tcGxldGVDb25kaXRpb24ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uKE9wZXJhdG9ycy5MRSwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIGdyZWF0ZXJUaGFuKHZhbHVlOiBudW1iZXIpOiBDb21wbGV0ZUNvbmRpdGlvbiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb24oT3BlcmF0b3JzLkdULCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgZ3JlYXRlck9yRXF1YWxUbyh2YWx1ZTogbnVtYmVyKTogQ29tcGxldGVDb25kaXRpb24ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uKE9wZXJhdG9ycy5HRSwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIGxpa2UodmFsdWU6IHN0cmluZywgbW9kZTogTWF0Y2hNb2RlID0gTWF0Y2hNb2RlLlNUQVJUKTogQ29tcGxldGVDb25kaXRpb24ge1xuICAgICAgICAgICAgbGV0IHdpbGRjYXJkVmFsdWU6IHN0cmluZztcbiAgICAgICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgTWF0Y2hNb2RlLlNUQVJUOlxuICAgICAgICAgICAgICAgICAgICB3aWxkY2FyZFZhbHVlID0gYCR7dmFsdWV9KmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTWF0Y2hNb2RlLkVORDpcbiAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRWYWx1ZSA9IGAqJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE1hdGNoTW9kZS5BTllXSEVSRTpcbiAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRWYWx1ZSA9IGAqJHt2YWx1ZX0qYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uKE9wZXJhdG9ycy5FUSwgd2lsZGNhcmRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwcml2YXRlIGNvbmRpdGlvbihvcGVyYXRvcjogc3RyaW5nLCB2YWx1ZTogYW55LCAuLi5tb3JlVmFsdWVzOiBhbnlbXSk6IENvbXBsZXRlQ29uZGl0aW9uIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnJlc3VsdDtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9IG9wZXJhdG9yICsgZW5jb2RlVVJJKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICBpZiAobW9yZVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtb3JlVmFsdWVzLmZvckVhY2goKG5leHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQgKz0gJywnICsgbmFtZSArIG9wZXJhdG9yICsgZW5jb2RlVVJJKG5leHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENvbXBvc2l0ZU9wID0gT3BlcmF0b3JzLk9SO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhIEZJUUwgc2VhcmNoIGNvbmRpdGlvbiB1c2luZyBhIGZsdWVudCBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZXhwb3J0IGNsYXNzIEJ1aWxkZXIgaW1wbGVtZW50cyBQYXJ0aWFsQ29uZGl0aW9uIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZSBhIHNpbXBsZSBwcm9wZXJ0eSB0byBiZSBldmF1bGF0ZWQgYXMgYSBmaWx0ZXIgY29uZGl0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHkgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4gICAgICAgICAqIEByZXR1cm5zIGEgUHJvcGVydHkgaW5zdGFuY2UgZm9yIGRlZmluaW5nIGEgZmlsdGVyIGNvbmRpdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXMocHJvcGVydHk6IHN0cmluZyk6IFByb3BlcnR5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVpbGRlckNoYWluKCkuaXMocHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZSBhIGNvbmp1bmN0aW9uIChBTkQpIGNvbmRpdGlvbiBmcm9tIGV4aXN0aW5nIGNvbmRpdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBjb25kaXRpb24xIGZpcnN0IGNvbmRpdGlvblxuICAgICAgICAgKiBAcGFyYW0gY29uZGl0aW9uMiBzZWNvbmQgY29uZGl0aW9uXG4gICAgICAgICAqIEBwYXJhbSBjb25kaXRpb25OIGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnNcbiAgICAgICAgICogQHJldHVybnMgYW4gZXZhbHVhdGFibGUgZmlsdGVyIGNvbmRpdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYW5kKGNvbmRpdGlvbjE6IENvbXBsZXRlQ29uZGl0aW9uLCBjb25kaXRpb24yOiBDb21wbGV0ZUNvbmRpdGlvbiwgY29uZGl0aW9uTj86IENvbXBsZXRlQ29uZGl0aW9uW10pOiBDb21wbGV0ZUNvbmRpdGlvbiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXJDaGFpbigpLmFuZChjb25kaXRpb24xLCBjb25kaXRpb24yLCBjb25kaXRpb25OKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGUgYSBkaXNqdW5jdGlvbiAoT1IpIGNvbmRpdGlvbiBmcm9tIGV4aXN0aW5nIGNvbmRpdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBjb25kaXRpb24xIGZpcnN0IGNvbmRpdGlvblxuICAgICAgICAgKiBAcGFyYW0gY29uZGl0aW9uMiBzZWNvbmQgY29uZGl0aW9uXG4gICAgICAgICAqIEBwYXJhbSBjb25kaXRpb25OIGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnNcbiAgICAgICAgICogQHJldHVybnMgYW4gZXZhbHVhdGFibGUgZmlsdGVyIGNvbmRpdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgb3IoY29uZGl0aW9uMTogQ29tcGxldGVDb25kaXRpb24sIGNvbmRpdGlvbjI6IENvbXBsZXRlQ29uZGl0aW9uLCBjb25kaXRpb25OPzogQ29tcGxldGVDb25kaXRpb25bXSk6IENvbXBsZXRlQ29uZGl0aW9uIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVpbGRlckNoYWluKCkub3IoY29uZGl0aW9uMSwgY29uZGl0aW9uMiwgY29uZGl0aW9uTik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './query.builder';
|
|
2
|
+
export * from './filter.builder';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Y2Qvc2RrL3NyYy9jbGllbnQvcXVlcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9xdWVyeS5idWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsdGVyLmJ1aWxkZXInO1xuIl19
|