@cubejs-client/ngx 1.7.40 → 1.7.42

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.
@@ -1,70 +0,0 @@
1
- import { Injectable, Inject } from '@angular/core';
2
- import { Observable, from, BehaviorSubject } from 'rxjs';
3
- import cube from '@cubejs-client/core';
4
- import * as i0 from "@angular/core";
5
- export class CubeClient {
6
- config;
7
- ready$ = new BehaviorSubject(false);
8
- cubeApi;
9
- constructor(config) {
10
- this.config = config;
11
- if (this.config instanceof Observable) {
12
- this.config.subscribe(() => {
13
- this.ready$.next(true);
14
- });
15
- }
16
- else {
17
- this.ready$.next(true);
18
- }
19
- }
20
- apiInstance() {
21
- if (!this.cubeApi) {
22
- if (this.config instanceof Observable) {
23
- this.config.subscribe((config) => {
24
- this.cubeApi = cube(config.token, config.options);
25
- if (!this.cubeApi) {
26
- throw new Error('Cannot create CubeApi instance. Please check that the config is passed correctly and contains all required options.');
27
- }
28
- });
29
- }
30
- else {
31
- this.cubeApi = cube(this.config.token, this.config.options);
32
- }
33
- }
34
- return this.cubeApi;
35
- }
36
- load(query, options) {
37
- return from(this.apiInstance().load(query, options));
38
- }
39
- sql(query, options) {
40
- return from(this.apiInstance().sql(query, options));
41
- }
42
- dryRun(query, options) {
43
- return from(this.apiInstance().dryRun(query, options));
44
- }
45
- meta(options) {
46
- return from(this.apiInstance().meta(options));
47
- }
48
- watch(query, params = {}) {
49
- return new Observable((observer) => query.subscribe({
50
- next: async (currentQuery) => {
51
- try {
52
- const resultSet = await this.apiInstance().load(currentQuery, params);
53
- observer.next(resultSet);
54
- }
55
- catch (err) {
56
- observer.error(err);
57
- }
58
- },
59
- }));
60
- }
61
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CubeClient, deps: [{ token: 'config' }], target: i0.ɵɵFactoryTarget.Injectable });
62
- /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CubeClient });
63
- }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CubeClient, decorators: [{
65
- type: Injectable
66
- }], ctorParameters: () => [{ type: undefined, decorators: [{
67
- type: Inject,
68
- args: ['config']
69
- }] }] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxJQVNOLE1BQU0scUJBQXFCLENBQUM7O0FBUTdCLE1BQU0sT0FBTyxVQUFVO0lBS3dCO0lBSnRDLE1BQU0sR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0QsT0FBTyxDQUFVO0lBRXpCLFlBQTZDLE1BQTZCO1FBQTdCLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBQ3hFLElBQUksSUFBSSxDQUFDLE1BQU0sWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLFlBQVksVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUVsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNsQixNQUFNLElBQUksS0FBSyxDQUNiLHFIQUFxSCxDQUN0SCxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRU0sSUFBSSxDQUNULEtBQXNCLEVBQ3RCLE9BQTJCO1FBRTNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBNEIsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTSxHQUFHLENBQ1IsS0FBc0IsRUFDdEIsT0FBMkI7UUFFM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sTUFBTSxDQUNYLEtBQXNCLEVBQ3RCLE9BQTJCO1FBRTNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUEyQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDN0IsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUM7b0JBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDdEUsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDOzJIQXZFVSxVQUFVLGtCQUtNLFFBQVE7K0hBTHhCLFVBQVU7OzRGQUFWLFVBQVU7a0JBRHRCLFVBQVU7OzBCQU1XLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgY3ViZSwge1xuICBDdWJlQXBpLFxuICBDdWJlQXBpT3B0aW9ucyxcbiAgRHJ5UnVuUmVzcG9uc2UsXG4gIExvYWRNZXRob2RPcHRpb25zLFxuICBNZXRhLFxuICBRdWVyeSxcbiAgUmVzdWx0U2V0LFxuICBTcWxRdWVyeSxcbn0gZnJvbSAnQGN1YmVqcy1jbGllbnQvY29yZSc7XG5cbmV4cG9ydCB0eXBlIEN1YmVDb25maWcgPSB7XG4gIHRva2VuOiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBDdWJlQXBpT3B0aW9ucztcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDdWJlQ2xpZW50IHtcbiAgcHVibGljIHJlYWR5JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBjdWJlQXBpOiBDdWJlQXBpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihASW5qZWN0KCdjb25maWcnKSBwcml2YXRlIGNvbmZpZzogYW55IHwgT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuY29uZmlnIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgdGhpcy5jb25maWcuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWFkeSQubmV4dCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWR5JC5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBpSW5zdGFuY2UoKTogQ3ViZUFwaSB7XG4gICAgaWYgKCF0aGlzLmN1YmVBcGkpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZyBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgdGhpcy5jb25maWcuc3Vic2NyaWJlKChjb25maWcpID0+IHtcbiAgICAgICAgICB0aGlzLmN1YmVBcGkgPSBjdWJlKGNvbmZpZy50b2tlbiwgY29uZmlnLm9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmN1YmVBcGkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0Nhbm5vdCBjcmVhdGUgQ3ViZUFwaSBpbnN0YW5jZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhlIGNvbmZpZyBpcyBwYXNzZWQgY29ycmVjdGx5IGFuZCBjb250YWlucyBhbGwgcmVxdWlyZWQgb3B0aW9ucy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1YmVBcGkgPSBjdWJlKHRoaXMuY29uZmlnLnRva2VuLCB0aGlzLmNvbmZpZy5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jdWJlQXBpO1xuICB9XG5cbiAgcHVibGljIGxvYWQoXG4gICAgcXVlcnk6IFF1ZXJ5IHwgUXVlcnlbXSxcbiAgICBvcHRpb25zPzogTG9hZE1ldGhvZE9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxSZXN1bHRTZXQ8YW55Pj4ge1xuICAgIHJldHVybiBmcm9tKHRoaXMuYXBpSW5zdGFuY2UoKS5sb2FkKHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFJlc3VsdFNldDxhbnk+Pik7XG4gIH1cblxuICBwdWJsaWMgc3FsKFxuICAgIHF1ZXJ5OiBRdWVyeSB8IFF1ZXJ5W10sXG4gICAgb3B0aW9ucz86IExvYWRNZXRob2RPcHRpb25zXG4gICk6IE9ic2VydmFibGU8U3FsUXVlcnk+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmFwaUluc3RhbmNlKCkuc3FsKHF1ZXJ5LCBvcHRpb25zKSk7XG4gIH1cblxuICBwdWJsaWMgZHJ5UnVuKFxuICAgIHF1ZXJ5OiBRdWVyeSB8IFF1ZXJ5W10sXG4gICAgb3B0aW9ucz86IExvYWRNZXRob2RPcHRpb25zXG4gICk6IE9ic2VydmFibGU8RHJ5UnVuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmFwaUluc3RhbmNlKCkuZHJ5UnVuKHF1ZXJ5LCBvcHRpb25zKSk7XG4gIH1cblxuICBwdWJsaWMgbWV0YShvcHRpb25zPzogTG9hZE1ldGhvZE9wdGlvbnMpOiBPYnNlcnZhYmxlPE1ldGE+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmFwaUluc3RhbmNlKCkubWV0YShvcHRpb25zKSk7XG4gIH1cblxuICBwdWJsaWMgd2F0Y2gocXVlcnksIHBhcmFtcyA9IHt9KTogT2JzZXJ2YWJsZTxSZXN1bHRTZXQ8YW55Pj4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHF1ZXJ5LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhc3luYyAoY3VycmVudFF1ZXJ5KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0U2V0ID0gYXdhaXQgdGhpcy5hcGlJbnN0YW5jZSgpLmxvYWQoY3VycmVudFF1ZXJ5LCBwYXJhbXMpO1xuICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzdWx0U2V0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,27 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CubeClient } from './client';
3
- import * as i0 from "@angular/core";
4
- export class CubeClientModule {
5
- static forRoot(config) {
6
- return {
7
- ngModule: CubeClientModule,
8
- providers: [
9
- CubeClient,
10
- {
11
- provide: 'config',
12
- useValue: config,
13
- },
14
- ],
15
- };
16
- }
17
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CubeClientModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
- /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CubeClientModule });
19
- /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CubeClientModule, providers: [CubeClient] });
20
- }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CubeClientModule, decorators: [{
22
- type: NgModule,
23
- args: [{
24
- providers: [CubeClient],
25
- }]
26
- }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUt0QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBVztRQUMvQixPQUFPO1lBQ0wsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixTQUFTLEVBQUU7Z0JBQ1QsVUFBVTtnQkFDVjtvQkFDRSxPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzsySEFaVSxnQkFBZ0I7NEhBQWhCLGdCQUFnQjs0SEFBaEIsZ0JBQWdCLGFBRmhCLENBQUMsVUFBVSxDQUFDOzs0RkFFWixnQkFBZ0I7a0JBSDVCLFFBQVE7bUJBQUM7b0JBQ1IsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdWJlQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBwcm92aWRlcnM6IFtDdWJlQ2xpZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQ3ViZUNsaWVudE1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IGFueSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Q3ViZUNsaWVudE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQ3ViZUNsaWVudE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBDdWJlQ2xpZW50LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogJ2NvbmZpZycsXG4gICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,12 +0,0 @@
1
- /*
2
- * Public API Surface of cubejs-client-ngx
3
- */
4
- export { CubeClientModule } from './module';
5
- export * from './client';
6
- export * from './query-builder/query-builder.service';
7
- export * from './query-builder/query';
8
- export * from './query-builder/builder-meta';
9
- export * from './query-builder/query-members';
10
- export * from './query-builder/pivot-config';
11
- export * from './query-builder/chart-type';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjdWJlanMtY2xpZW50LW5neFxuICovXG5cbmV4cG9ydCB7IEN1YmVDbGllbnRNb2R1bGUgfSBmcm9tICcuL21vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvYnVpbGRlci1tZXRhJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9xdWVyeS1tZW1iZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9waXZvdC1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1idWlsZGVyL2NoYXJ0LXR5cGUnO1xuIl19
@@ -1,27 +0,0 @@
1
- export class BuilderMeta {
2
- meta;
3
- measures;
4
- dimensions;
5
- segments;
6
- timeDimensions;
7
- filters;
8
- constructor(meta) {
9
- this.meta = meta;
10
- this.mapMeta();
11
- }
12
- mapMeta() {
13
- const allDimensions = this.meta.membersForQuery(null, 'dimensions');
14
- this.measures = this.meta.membersForQuery(null, 'measures');
15
- this.segments = this.meta.membersForQuery(null, 'segments');
16
- this.dimensions = allDimensions.filter(({ type }) => type !== 'time');
17
- this.timeDimensions = allDimensions.filter(({ type }) => type === 'time');
18
- this.filters = [...allDimensions, ...this.measures].map((member) => ({
19
- ...member,
20
- operators: this.meta.filterOperatorsForMember(member.name, [
21
- 'dimensions',
22
- 'measures',
23
- ]),
24
- }));
25
- }
26
- }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1tZXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3F1ZXJ5LWJ1aWxkZXIvYnVpbGRlci1tZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxXQUFXO0lBV2E7SUFWNUIsUUFBUSxDQUFpQjtJQUV6QixVQUFVLENBQW1CO0lBRTdCLFFBQVEsQ0FBaUI7SUFFekIsY0FBYyxDQUFtQjtJQUVqQyxPQUFPLENBQXVDO0lBRXJELFlBQW1DLElBQVU7UUFBVixTQUFJLEdBQUosSUFBSSxDQUFNO1FBQzNDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sT0FBTztRQUNiLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUM3QyxJQUFJLEVBQ0osWUFBWSxDQUNPLENBQUM7UUFFdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFtQixDQUFDO1FBQzlFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxHQUFHLE1BQU07WUFDVCxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUN6RCxZQUFZO2dCQUNaLFVBQVU7YUFDWCxDQUFDO1NBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBNZXRhLFxuICBUQ3ViZURpbWVuc2lvbixcbiAgVEN1YmVNZWFzdXJlLFxuICBUQ3ViZVNlZ21lbnQsXG59IGZyb20gJ0BjdWJlanMtY2xpZW50L2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgQnVpbGRlck1ldGEge1xuICBwdWJsaWMgbWVhc3VyZXM6IFRDdWJlTWVhc3VyZVtdO1xuXG4gIHB1YmxpYyBkaW1lbnNpb25zOiBUQ3ViZURpbWVuc2lvbltdO1xuXG4gIHB1YmxpYyBzZWdtZW50czogVEN1YmVTZWdtZW50W107XG5cbiAgcHVibGljIHRpbWVEaW1lbnNpb25zOiBUQ3ViZURpbWVuc2lvbltdO1xuXG4gIHB1YmxpYyBmaWx0ZXJzOiBBcnJheTxUQ3ViZU1lYXN1cmUgfCBUQ3ViZURpbWVuc2lvbj47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBtZXRhOiBNZXRhKSB7XG4gICAgdGhpcy5tYXBNZXRhKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcE1ldGEoKSB7XG4gICAgY29uc3QgYWxsRGltZW5zaW9ucyA9IHRoaXMubWV0YS5tZW1iZXJzRm9yUXVlcnkoXG4gICAgICBudWxsLFxuICAgICAgJ2RpbWVuc2lvbnMnXG4gICAgKSBhcyBUQ3ViZURpbWVuc2lvbltdO1xuXG4gICAgdGhpcy5tZWFzdXJlcyA9IHRoaXMubWV0YS5tZW1iZXJzRm9yUXVlcnkobnVsbCwgJ21lYXN1cmVzJykgYXMgVEN1YmVNZWFzdXJlW107XG4gICAgdGhpcy5zZWdtZW50cyA9IHRoaXMubWV0YS5tZW1iZXJzRm9yUXVlcnkobnVsbCwgJ3NlZ21lbnRzJyk7XG4gICAgdGhpcy5kaW1lbnNpb25zID0gYWxsRGltZW5zaW9ucy5maWx0ZXIoKHsgdHlwZSB9KSA9PiB0eXBlICE9PSAndGltZScpO1xuICAgIHRoaXMudGltZURpbWVuc2lvbnMgPSBhbGxEaW1lbnNpb25zLmZpbHRlcigoeyB0eXBlIH0pID0+IHR5cGUgPT09ICd0aW1lJyk7XG4gICAgdGhpcy5maWx0ZXJzID0gWy4uLmFsbERpbWVuc2lvbnMsIC4uLnRoaXMubWVhc3VyZXNdLm1hcCgobWVtYmVyKSA9PiAoe1xuICAgICAgLi4ubWVtYmVyLFxuICAgICAgb3BlcmF0b3JzOiB0aGlzLm1ldGEuZmlsdGVyT3BlcmF0b3JzRm9yTWVtYmVyKG1lbWJlci5uYW1lLCBbXG4gICAgICAgICdkaW1lbnNpb25zJyxcbiAgICAgICAgJ21lYXN1cmVzJyxcbiAgICAgIF0pLFxuICAgIH0pKTtcbiAgfVxufVxuIl19
@@ -1,7 +0,0 @@
1
- import { StateSubject } from './common';
2
- export class ChartType extends StateSubject {
3
- constructor(value) {
4
- super(value);
5
- }
6
- }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9xdWVyeS1idWlsZGVyL2NoYXJ0LXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUl4QyxNQUFNLE9BQU8sU0FBVSxTQUFRLFlBQXdCO0lBQ3JELFlBQW1CLEtBQUs7UUFDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhdGVTdWJqZWN0IH0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBUQ2hhcnRUeXBlID0gJ2xpbmUnIHwgJ2FyZWEnIHwgJ2JhcicgfCAnbnVtYmVyJyB8ICd0YWJsZScgfCAncGllJztcblxuZXhwb3J0IGNsYXNzIENoYXJ0VHlwZSBleHRlbmRzIFN0YXRlU3ViamVjdDxUQ2hhcnRUeXBlPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlKTtcbiAgfVxufVxuIl19
@@ -1,14 +0,0 @@
1
- import { BehaviorSubject } from 'rxjs';
2
- export class StateSubject {
3
- subject;
4
- constructor(value) {
5
- this.subject = new BehaviorSubject(value);
6
- }
7
- get() {
8
- return this.subject.getValue();
9
- }
10
- set(value) {
11
- this.subject.next(value);
12
- }
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3F1ZXJ5LWJ1aWxkZXIvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsTUFBTSxPQUFPLFlBQVk7SUFDaEIsT0FBTyxDQUFxQjtJQUVuQyxZQUFtQixLQUFRO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLEdBQUcsQ0FBQyxLQUFRO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgU3RhdGVTdWJqZWN0PFQgPSBhbnk+IHtcbiAgcHVibGljIHN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxUPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLnN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldCh2YWx1ZTogVCkge1xuICAgIHRoaXMuc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxufVxuIl19
@@ -1,17 +0,0 @@
1
- import { movePivotItem, } from '@cubejs-client/core';
2
- import { StateSubject } from './common';
3
- export class PivotConfig extends StateSubject {
4
- constructor(pivotConfig) {
5
- super(pivotConfig);
6
- }
7
- moveItem(sourceIndex, destinationIndex, sourceAxis, destinationAxis) {
8
- this.subject.next(movePivotItem(this.get(), sourceIndex, destinationIndex, sourceAxis, destinationAxis));
9
- }
10
- setFillMissingDates(fillMissingDates) {
11
- this.subject.next({
12
- ...this.get(),
13
- fillMissingDates
14
- });
15
- }
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3F1ZXJ5LWJ1aWxkZXIvcGl2b3QtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxhQUFhLEdBR2QsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXhDLE1BQU0sT0FBTyxXQUFZLFNBQVEsWUFBMEI7SUFDekQsWUFBbUIsV0FBeUI7UUFDMUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxRQUFRLENBQ2IsV0FBbUIsRUFDbkIsZ0JBQXdCLEVBQ3hCLFVBQXVCLEVBQ3ZCLGVBQTRCO1FBRTVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLGFBQWEsQ0FDWCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsZUFBZSxDQUNoQixDQUNGLENBQUM7SUFDSixDQUFDO0lBRU0sbUJBQW1CLENBQUMsZ0JBQXlCO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNiLGdCQUFnQjtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBtb3ZlUGl2b3RJdGVtLFxuICBQaXZvdENvbmZpZyBhcyBUUGl2b3RDb25maWcsXG4gIFRTb3VyY2VBeGlzLFxufSBmcm9tICdAY3ViZWpzLWNsaWVudC9jb3JlJztcbmltcG9ydCB7IFN0YXRlU3ViamVjdCB9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGNsYXNzIFBpdm90Q29uZmlnIGV4dGVuZHMgU3RhdGVTdWJqZWN0PFRQaXZvdENvbmZpZz4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocGl2b3RDb25maWc6IFRQaXZvdENvbmZpZykge1xuICAgIHN1cGVyKHBpdm90Q29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlSXRlbShcbiAgICBzb3VyY2VJbmRleDogbnVtYmVyLFxuICAgIGRlc3RpbmF0aW9uSW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VBeGlzOiBUU291cmNlQXhpcyxcbiAgICBkZXN0aW5hdGlvbkF4aXM6IFRTb3VyY2VBeGlzXG4gICkge1xuICAgIHRoaXMuc3ViamVjdC5uZXh0KFxuICAgICAgbW92ZVBpdm90SXRlbShcbiAgICAgICAgdGhpcy5nZXQoKSxcbiAgICAgICAgc291cmNlSW5kZXgsXG4gICAgICAgIGRlc3RpbmF0aW9uSW5kZXgsXG4gICAgICAgIHNvdXJjZUF4aXMsXG4gICAgICAgIGRlc3RpbmF0aW9uQXhpc1xuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsbE1pc3NpbmdEYXRlcyhmaWxsTWlzc2luZ0RhdGVzOiBib29sZWFuKSB7XG4gICAgdGhpcy5zdWJqZWN0Lm5leHQoe1xuICAgICAgLi4udGhpcy5nZXQoKSxcbiAgICAgIGZpbGxNaXNzaW5nRGF0ZXNcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,127 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { ResultSet, isQueryPresent, defaultHeuristics, } from '@cubejs-client/core';
3
- import { BehaviorSubject, combineLatest, of, Subject } from 'rxjs';
4
- import { catchError, switchMap } from 'rxjs/operators';
5
- import { Query } from './query';
6
- import { BuilderMeta } from './builder-meta';
7
- import { PivotConfig } from './pivot-config';
8
- import { ChartType } from './chart-type';
9
- import { StateSubject } from './common';
10
- import * as i0 from "@angular/core";
11
- export class QueryBuilderService {
12
- _cube;
13
- _meta;
14
- _query;
15
- _disableHeuristics = false;
16
- _resolveQuery;
17
- _resolveBuilderMeta;
18
- _heuristicChange$ = new Subject();
19
- builderMeta = new Promise((resolve) => {
20
- this._resolveBuilderMeta = resolve;
21
- });
22
- query = new Promise((resolve) => {
23
- this._resolveQuery = resolve;
24
- });
25
- state = new BehaviorSubject({});
26
- pivotConfig;
27
- chartType;
28
- async init() {
29
- this.pivotConfig = new PivotConfig(null);
30
- this.chartType = new ChartType('line');
31
- this._cube.meta().subscribe((meta) => {
32
- this._meta = meta;
33
- this._query = new Query(this._meta, this._handleQueryChange.bind(this));
34
- this._resolveQuery(this._query);
35
- this._resolveBuilderMeta(new BuilderMeta(this._meta));
36
- });
37
- this.subscribe();
38
- if (!this._disableHeuristics) {
39
- this._heuristicChange$
40
- .pipe(switchMap((data) => combineLatest([
41
- this._cube.dryRun(data.query).pipe(catchError((error) => {
42
- console.error(error);
43
- return of(null);
44
- })),
45
- of(data.shouldApplyHeuristicOrder),
46
- ])))
47
- .subscribe(([dryRunResponse, shouldApplyHeuristicOrder]) => {
48
- if (!dryRunResponse) {
49
- return;
50
- }
51
- const { pivotQuery, queryOrder } = dryRunResponse;
52
- this.pivotConfig.set(ResultSet.getNormalizedPivotConfig(pivotQuery, this.pivotConfig.get()));
53
- if (shouldApplyHeuristicOrder) {
54
- this._query.order.set(queryOrder.reduce((a, b) => ({ ...a, ...b }), {}));
55
- }
56
- });
57
- }
58
- }
59
- _handleQueryChange(newQuery, oldQuery) {
60
- const { chartType, shouldApplyHeuristicOrder, query: heuristicQuery, } = defaultHeuristics(newQuery, oldQuery, {
61
- meta: this._meta,
62
- sessionGranularity: newQuery?.timeDimensions?.[0]?.granularity,
63
- });
64
- const query = this._disableHeuristics
65
- ? newQuery
66
- : heuristicQuery || newQuery;
67
- if (isQueryPresent(query) && !this._disableHeuristics) {
68
- this._heuristicChange$.next({
69
- shouldApplyHeuristicOrder: Boolean(shouldApplyHeuristicOrder),
70
- query,
71
- });
72
- }
73
- if (!this._disableHeuristics && chartType) {
74
- this.chartType.set(chartType);
75
- }
76
- return query;
77
- }
78
- setCubeClient(cubeClient) {
79
- this._cube = cubeClient;
80
- this.init();
81
- }
82
- subscribe() {
83
- Object.getOwnPropertyNames(this).forEach((key) => {
84
- if (this[key] instanceof StateSubject) {
85
- this[key].subject.subscribe((value) => this.setPartialState({
86
- [key]: value,
87
- }));
88
- }
89
- });
90
- this.query.then((query) => {
91
- query.subject.subscribe((cubeQuery) => {
92
- this.setPartialState({
93
- query: cubeQuery,
94
- });
95
- });
96
- });
97
- }
98
- async deserialize(state) {
99
- if (state.query) {
100
- (await this.query).setQuery(state.query);
101
- }
102
- Object.entries(state).forEach(([key, value]) => {
103
- if (this[key] instanceof StateSubject) {
104
- this[key].set(value);
105
- }
106
- });
107
- this.subscribe();
108
- }
109
- setPartialState(partialState) {
110
- this.state.next({
111
- ...this.state.getValue(),
112
- ...partialState,
113
- });
114
- }
115
- disableHeuristics() {
116
- this._disableHeuristics = true;
117
- }
118
- enableHeuristics() {
119
- this._disableHeuristics = false;
120
- }
121
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QueryBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
122
- /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QueryBuilderService });
123
- }
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QueryBuilderService, decorators: [{
125
- type: Injectable
126
- }] });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUVMLFNBQVMsRUFHVCxjQUFjLEVBQ2QsaUJBQWlCLEdBQ2xCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBU3hDLE1BQU0sT0FBTyxtQkFBbUI7SUFDdEIsS0FBSyxDQUFhO0lBRWxCLEtBQUssQ0FBTztJQUVaLE1BQU0sQ0FBUTtJQUVkLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUVwQyxhQUFhLENBQXlCO0lBRXRDLG1CQUFtQixDQUErQjtJQUVsRCxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0lBRS9CLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2pFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7SUFFYSxLQUFLLEdBQUcsSUFBSSxPQUFP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VSxtQkFBbUI7K0hBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE1ldGEsXG4gIFJlc3VsdFNldCxcbiAgUXVlcnkgYXMgVEN1YmVRdWVyeSxcbiAgUGl2b3RDb25maWcgYXMgVFBpdm90Q29uZmlnLFxuICBpc1F1ZXJ5UHJlc2VudCxcbiAgZGVmYXVsdEhldXJpc3RpY3MsXG59IGZyb20gJ0BjdWJlanMtY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDdWJlQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBCdWlsZGVyTWV0YSB9IGZyb20gJy4vYnVpbGRlci1tZXRhJztcbmltcG9ydCB7IFBpdm90Q29uZmlnIH0gZnJvbSAnLi9waXZvdC1jb25maWcnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlLCBUQ2hhcnRUeXBlIH0gZnJvbSAnLi9jaGFydC10eXBlJztcbmltcG9ydCB7IFN0YXRlU3ViamVjdCB9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IHR5cGUgVFF1ZXJ5QnVpbGRlclN0YXRlID0ge1xuICBxdWVyeT86IFRDdWJlUXVlcnk7XG4gIHBpdm90Q29uZmlnPzogVFBpdm90Q29uZmlnO1xuICBjaGFydFR5cGU/OiBUQ2hhcnRUeXBlO1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlclNlcnZpY2Uge1xuICBwcml2YXRlIF9jdWJlOiBDdWJlQ2xpZW50O1xuXG4gIHByaXZhdGUgX21ldGE6IE1ldGE7XG5cbiAgcHJpdmF0ZSBfcXVlcnk6IFF1ZXJ5O1xuXG4gIHByaXZhdGUgX2Rpc2FibGVIZXVyaXN0aWNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfcmVzb2x2ZVF1ZXJ5OiAocXVlcnk6IFF1ZXJ5KSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX3Jlc29sdmVCdWlsZGVyTWV0YTogKHF1ZXJ5OiBCdWlsZGVyTWV0YSkgPT4gdm9pZDtcblxuICBwcml2YXRlIF9oZXVyaXN0aWNDaGFuZ2UkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBidWlsZGVyTWV0YSA9IG5ldyBQcm9taXNlPEJ1aWxkZXJNZXRhPigocmVzb2x2ZSkgPT4ge1xuICAgIHRoaXMuX3Jlc29sdmVCdWlsZGVyTWV0YSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBxdWVyeSA9IG5ldyBQcm9taXNlPFF1ZXJ5PigocmVzb2x2ZSkgPT4ge1xuICAgIHRoaXMuX3Jlc29sdmVRdWVyeSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFF1ZXJ5QnVpbGRlclN0YXRlPih7fSk7XG5cbiAgcHVibGljIHBpdm90Q29uZmlnOiBQaXZvdENvbmZpZztcblxuICBwdWJsaWMgY2hhcnRUeXBlOiBDaGFydFR5cGU7XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0KCkge1xuICAgIHRoaXMucGl2b3RDb25maWcgPSBuZXcgUGl2b3RDb25maWcobnVsbCk7XG4gICAgdGhpcy5jaGFydFR5cGUgPSBuZXcgQ2hhcnRUeXBlKCdsaW5lJyk7XG5cbiAgICB0aGlzLl9jdWJlLm1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgIHRoaXMuX21ldGEgPSBtZXRhO1xuXG4gICAgICB0aGlzLl9xdWVyeSA9IG5ldyBRdWVyeShcbiAgICAgICAgdGhpcy5fbWV0YSxcbiAgICAgICAgdGhpcy5faGFuZGxlUXVlcnlDaGFuZ2UuYmluZCh0aGlzKVxuICAgICAgKTtcbiAgICAgIHRoaXMuX3Jlc29sdmVRdWVyeSh0aGlzLl9xdWVyeSk7XG4gICAgICB0aGlzLl9yZXNvbHZlQnVpbGRlck1ldGEobmV3IEJ1aWxkZXJNZXRhKHRoaXMuX21ldGEpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVIZXVyaXN0aWNzKSB7XG4gICAgICB0aGlzLl9oZXVyaXN0aWNDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoZGF0YSkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl9jdWJlLmRyeVJ1bihkYXRhLnF1ZXJ5KS5waXBlKGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBvZihkYXRhLnNob3VsZEFwcGx5SGV1cmlzdGljT3JkZXIpLFxuICAgICAgICAgIF0pKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKFtkcnlSdW5SZXNwb25zZSwgc2hvdWxkQXBwbHlIZXVyaXN0aWNPcmRlcl0pID0+IHtcbiAgICAgICAgICAgIGlmICghZHJ5UnVuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IHBpdm90UXVlcnksIHF1ZXJ5T3JkZXIgfSA9IGRyeVJ1blJlc3BvbnNlO1xuXG4gICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlnLnNldChcbiAgICAgICAgICAgICAgUmVzdWx0U2V0LmdldE5vcm1hbGl6ZWRQaXZvdENvbmZpZyhcbiAgICAgICAgICAgICAgICBwaXZvdFF1ZXJ5LFxuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWcuZ2V0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRBcHBseUhldXJpc3RpY09yZGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5Lm9yZGVyLnNldChcbiAgICAgICAgICAgICAgICBxdWVyeU9yZGVyLnJlZHVjZSgoYSwgYikgPT4gKHsgLi4uYSwgLi4uYiB9KSwge30pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVF1ZXJ5Q2hhbmdlKG5ld1F1ZXJ5LCBvbGRRdWVyeSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYXJ0VHlwZSxcbiAgICAgIHNob3VsZEFwcGx5SGV1cmlzdGljT3JkZXIsXG4gICAgICBxdWVyeTogaGV1cmlzdGljUXVlcnksXG4gICAgfSA9IGRlZmF1bHRIZXVyaXN0aWNzKG5ld1F1ZXJ5LCBvbGRRdWVyeSwge1xuICAgICAgbWV0YTogdGhpcy5fbWV0YSxcbiAgICAgIHNlc3Npb25HcmFudWxhcml0eTogbmV3UXVlcnk/LnRpbWVEaW1lbnNpb25zPy5bMF0/LmdyYW51bGFyaXR5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9kaXNhYmxlSGV1cmlzdGljc1xuICAgICAgPyBuZXdRdWVyeVxuICAgICAgOiBoZXVyaXN0aWNRdWVyeSB8fCBuZXdRdWVyeTtcblxuICAgIGlmIChpc1F1ZXJ5UHJlc2VudChxdWVyeSkgJiYgIXRoaXMuX2Rpc2FibGVIZXVyaXN0aWNzKSB7XG4gICAgICB0aGlzLl9oZXVyaXN0aWNDaGFuZ2UkLm5leHQoe1xuICAgICAgICBzaG91bGRBcHBseUhldXJpc3RpY09yZGVyOiBCb29sZWFuKHNob3VsZEFwcGx5SGV1cmlzdGljT3JkZXIpLFxuICAgICAgICBxdWVyeSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fZGlzYWJsZUhldXJpc3RpY3MgJiYgY2hhcnRUeXBlKSB7XG4gICAgICB0aGlzLmNoYXJ0VHlwZS5zZXQoY2hhcnRUeXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q3ViZUNsaWVudChjdWJlQ2xpZW50OiBDdWJlQ2xpZW50KSB7XG4gICAgdGhpcy5fY3ViZSA9IGN1YmVDbGllbnQ7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZSgpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzW2tleV0gaW5zdGFuY2VvZiBTdGF0ZVN1YmplY3QpIHtcbiAgICAgICAgdGhpc1trZXldLnN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5zZXRQYXJ0aWFsU3RhdGUoe1xuICAgICAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucXVlcnkudGhlbigocXVlcnkpID0+IHtcbiAgICAgIHF1ZXJ5LnN1YmplY3Quc3Vic2NyaWJlKChjdWJlUXVlcnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRQYXJ0aWFsU3RhdGUoe1xuICAgICAgICAgIHF1ZXJ5OiBjdWJlUXVlcnksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzZXJpYWxpemUoc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUucXVlcnkpIHtcbiAgICAgIChhd2FpdCB0aGlzLnF1ZXJ5KS5zZXRRdWVyeShzdGF0ZS5xdWVyeSk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmVudHJpZXMoc3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHRoaXNba2V5XSBpbnN0YW5jZW9mIFN0YXRlU3ViamVjdCkge1xuICAgICAgICB0aGlzW2tleV0uc2V0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGFydGlhbFN0YXRlKHBhcnRpYWxTdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUubmV4dCh7XG4gICAgICAuLi50aGlzLnN0YXRlLmdldFZhbHVlKCksXG4gICAgICAuLi5wYXJ0aWFsU3RhdGUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZUhldXJpc3RpY3MoKSB7XG4gICAgdGhpcy5fZGlzYWJsZUhldXJpc3RpY3MgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZUhldXJpc3RpY3MoKSB7XG4gICAgdGhpcy5fZGlzYWJsZUhldXJpc3RpY3MgPSBmYWxzZTtcbiAgfVxufVxuIl19
@@ -1,224 +0,0 @@
1
- import { moveItemInArray, } from '@cubejs-client/core';
2
- import { BehaviorSubject } from 'rxjs';
3
- import equal from 'fast-deep-equal/es6';
4
- export class BaseMember {
5
- query;
6
- field;
7
- constructor(query, field) {
8
- this.query = query;
9
- this.field = field;
10
- }
11
- get members() {
12
- return this.query.asCubeQuery()[this.field] || [];
13
- }
14
- add(name) {
15
- this.query.setPartialQuery({
16
- [this.field]: [...this.members, name],
17
- });
18
- }
19
- replace(name, replaceWithName) {
20
- this.query.setPartialQuery({
21
- [this.field]: this.members.map((currentName) => (currentName === name ? replaceWithName : currentName)),
22
- });
23
- }
24
- remove(by) {
25
- this.query.setPartialQuery({
26
- [this.field]: this.members.filter((currentName, index) => {
27
- if (typeof by === 'string') {
28
- return currentName !== by;
29
- }
30
- return index !== by;
31
- }),
32
- });
33
- }
34
- set(members) {
35
- this.query.setPartialQuery({
36
- [this.field]: members,
37
- });
38
- }
39
- asArray() {
40
- return this.members.map((name) => this.query.meta.resolveMember(name, this.field));
41
- }
42
- }
43
- export class TimeDimensionMember {
44
- query;
45
- constructor(query) {
46
- this.query = query;
47
- }
48
- get members() {
49
- return this.query.asCubeQuery().timeDimensions || [];
50
- }
51
- get granularity() {
52
- return this.members[0]?.granularity;
53
- }
54
- updateTimeDimension(by, updateWith) {
55
- const timeDimensions = this.members.map((td, index) => {
56
- if (td.dimension === by || index === by) {
57
- return {
58
- ...td,
59
- ...updateWith,
60
- };
61
- }
62
- return td;
63
- });
64
- this.query.setPartialQuery({
65
- timeDimensions,
66
- });
67
- }
68
- add(name) {
69
- this.query.setPartialQuery({
70
- timeDimensions: [
71
- {
72
- dimension: name,
73
- },
74
- ],
75
- });
76
- }
77
- remove(name) {
78
- this.query.setPartialQuery({
79
- timeDimensions: this.members.filter(({ dimension }) => dimension !== name),
80
- });
81
- }
82
- set(timeDimensions) {
83
- this.query.setPartialQuery({
84
- timeDimensions,
85
- });
86
- }
87
- setDateRange(by, dateRange) {
88
- this.updateTimeDimension(by, { dateRange });
89
- }
90
- setGranularity(by, granularity) {
91
- this.updateTimeDimension(by, { granularity });
92
- }
93
- asArray() {
94
- return this.members.map((td) => ({
95
- ...this.query.meta.resolveMember(td.dimension, 'dimensions'),
96
- ...td,
97
- }));
98
- }
99
- }
100
- export class Order {
101
- query;
102
- orderMembers = new BehaviorSubject([]);
103
- constructor(query) {
104
- this.query = query;
105
- this.query.subject.subscribe(this.handleQueryChange.bind(this));
106
- this.orderMembers.subscribe(this.handleOrderMembersChange.bind(this));
107
- }
108
- handleOrderMembersChange(orderMembers) {
109
- const order = orderMembers
110
- .filter((orderMember) => orderMember.order !== 'none')
111
- .reduce((memo, orderMember) => ({ ...memo, [orderMember.id]: orderMember.order }), {});
112
- if (!equal(order, this.asObject())) {
113
- this.query.setPartialQuery({ order });
114
- }
115
- }
116
- handleQueryChange() {
117
- this.orderMembers.next([
118
- ...this.query.measures.asArray(),
119
- ...this.query.dimensions.asArray(),
120
- ...this.query.timeDimensions.asArray(),
121
- ].map(({ name, title }) => ({
122
- id: name,
123
- order: this.of(name),
124
- title,
125
- })));
126
- }
127
- setMemberOrder(id, order) {
128
- this.orderMembers.next(this.orderMembers.getValue().map((orderMember) => {
129
- if (orderMember.id === id) {
130
- return {
131
- ...orderMember,
132
- order,
133
- };
134
- }
135
- return orderMember;
136
- }));
137
- }
138
- reorder(sourceIndex, destinationIndex) {
139
- this.orderMembers.next(moveItemInArray(this.orderMembers.getValue(), sourceIndex, destinationIndex));
140
- }
141
- of(member) {
142
- return (this.query.asCubeQuery().order || {})[member] || 'none';
143
- }
144
- set(order) {
145
- this.query.setPartialQuery({ order });
146
- }
147
- asArray() {
148
- if (Array.isArray(this.query.asCubeQuery().order)) {
149
- return this.query.asCubeQuery().order;
150
- }
151
- return Object.entries(this.query.asCubeQuery().order || {});
152
- }
153
- asObject() {
154
- return this.asArray().reduce((memo, [key, value]) => ({ ...memo, [key]: value }), {});
155
- }
156
- }
157
- export class FilterMember {
158
- query;
159
- constructor(query) {
160
- this.query = query;
161
- }
162
- get filters() {
163
- // TODO: update this type assertion once the QueryBuilder supports logical and/or
164
- return (this.query.asCubeQuery().filters || []);
165
- }
166
- update(by, updateWith) {
167
- const filters = this.filters.map((filter, index) => {
168
- if (index === by || filter.member === by || filter.dimension === by) {
169
- return {
170
- ...filter,
171
- ...updateWith,
172
- };
173
- }
174
- return filter;
175
- });
176
- this.query.setPartialQuery({
177
- filters: filters,
178
- });
179
- }
180
- add(filter) {
181
- this.query.setPartialQuery({
182
- filters: [...this.filters, filter],
183
- });
184
- }
185
- remove(by) {
186
- this.query.setPartialQuery({
187
- filters: this.filters.filter((filter, index) => {
188
- if (filter.member === by || filter.dimension === by || index === by) {
189
- return false;
190
- }
191
- return true;
192
- }),
193
- });
194
- }
195
- set(filters) {
196
- this.query.setPartialQuery({
197
- filters,
198
- });
199
- }
200
- replace(name, replaceWithName) {
201
- this.query.setPartialQuery({
202
- filters: this.filters.map((filter) => {
203
- const field = filter.member ? 'member' : 'dimension';
204
- return filter.member === name || filter.dimension === name
205
- ? {
206
- ...filter,
207
- [field]: replaceWithName,
208
- }
209
- : filter;
210
- }),
211
- });
212
- }
213
- asArray() {
214
- return this.filters.map((filter) => ({
215
- ...this.query.meta.resolveMember(filter.member || filter.dimension, [
216
- 'dimensions',
217
- 'measures',
218
- ]),
219
- operators: this.query.meta.filterOperatorsForMember(filter.member || filter.dimension, ['dimensions', 'measures']),
220
- ...filter,
221
- }));
222
- }
223
- }
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktbWVtYmVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9xdWVyeS1idWlsZGVyL3F1ZXJ5LW1lbWJlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLGVBQWUsR0FJaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxNQUFNLHFCQUFxQixDQUFDO0FBWXhDLE1BQU0sT0FBTyxVQUFVO0lBRVg7SUFDQTtJQUZWLFlBQ1UsS0FBWSxFQUNaLEtBQTZDO1FBRDdDLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixVQUFLLEdBQUwsS0FBSyxDQUF3QztJQUNwRCxDQUFDO0lBRUosSUFBWSxPQUFPO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFTSxHQUFHLENBQUMsSUFBWTtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUN6QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFZLEVBQUUsZUFBdUI7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDekIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQzVCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQ3hFO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVN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IFRpbWVEaW1lbnNpb25HcmFudWxhcml0eSxcbiAgVFF1ZXJ5T3JkZXJPYmplY3QsXG4gIFRRdWVyeU9yZGVyQXJyYXksXG4gIG1vdmVJdGVtSW5BcnJheSxcbiAgRmlsdGVyLFxuICBVbmFyeUZpbHRlcixcbiAgQmluYXJ5RmlsdGVyLFxufSBmcm9tICdAY3ViZWpzLWNsaWVudC9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuXG5leHBvcnQgdHlwZSBUT3JkZXIgPSAnYXNjJyB8ICdkZXNjJyB8ICdub25lJztcblxuZXhwb3J0IHR5cGUgVE9yZGVyTWVtYmVyID0ge1xuICBpZDogc3RyaW5nO1xuICBvcmRlcjogVE9yZGVyO1xuICB0aXRsZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIEJhc2VNZW1iZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBxdWVyeTogUXVlcnksXG4gICAgcHJpdmF0ZSBmaWVsZDogJ21lYXN1cmVzJyB8ICdkaW1lbnNpb25zJyB8ICdzZWdtZW50cydcbiAgKSB7fVxuXG4gIHByaXZhdGUgZ2V0IG1lbWJlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkuYXNDdWJlUXVlcnkoKVt0aGlzLmZpZWxkXSB8fCBbXTtcbiAgfVxuXG4gIHB1YmxpYyBhZGQobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5xdWVyeS5zZXRQYXJ0aWFsUXVlcnkoe1xuICAgICAgW3RoaXMuZmllbGRdOiBbLi4udGhpcy5tZW1iZXJzLCBuYW1lXSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlKG5hbWU6IHN0cmluZywgcmVwbGFjZVdpdGhOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnF1ZXJ5LnNldFBhcnRpYWxRdWVyeSh7XG4gICAgICBbdGhpcy5maWVsZF06IHRoaXMubWVtYmVycy5tYXAoXG4gICAgICAgIChjdXJyZW50TmFtZSkgPT4gKGN1cnJlbnROYW1lID09PSBuYW1lID8gcmVwbGFjZVdpdGhOYW1lIDogY3VycmVudE5hbWUpXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZShieTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5xdWVyeS5zZXRQYXJ0aWFsUXVlcnkoe1xuICAgICAgW3RoaXMuZmllbGRdOiB0aGlzLm1lbWJlcnMuZmlsdGVyKChjdXJyZW50TmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudE5hbWUgIT09IGJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4ICE9PSBieTtcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldChtZW1iZXJzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucXVlcnkuc2V0UGFydGlhbFF1ZXJ5KHtcbiAgICAgIFt0aGlzLmZpZWxkXTogbWVtYmVycyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLm1lbWJlcnMubWFwKChuYW1lKSA9PiB0aGlzLnF1ZXJ5Lm1ldGEucmVzb2x2ZU1lbWJlcihuYW1lLCB0aGlzLmZpZWxkKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRpbWVEaW1lbnNpb25NZW1iZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBxdWVyeTogUXVlcnkpIHt9XG5cbiAgcHJpdmF0ZSBnZXQgbWVtYmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeS5hc0N1YmVRdWVyeSgpLnRpbWVEaW1lbnNpb25zIHx8IFtdO1xuICB9XG5cbiAgcHVibGljIGdldCBncmFudWxhcml0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZW1iZXJzWzBdPy5ncmFudWxhcml0eTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVUaW1lRGltZW5zaW9uKGJ5OiBzdHJpbmcgfCBudW1iZXIsIHVwZGF0ZVdpdGg6IGFueSkge1xuICAgIGNvbnN0IHRpbWVEaW1lbnNpb25zID0gdGhpcy5tZW1iZXJzLm1hcCgodGQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAodGQuZGltZW5zaW9uID09PSBieSB8fCBpbmRleCA9PT0gYnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50ZCxcbiAgICAgICAgICAuLi51cGRhdGVXaXRoLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRkO1xuICAgIH0pO1xuXG4gICAgdGhpcy5xdWVyeS5zZXRQYXJ0aWFsUXVlcnkoe1xuICAgICAgdGltZURpbWVuc2lvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucXVlcnkuc2V0UGFydGlhbFF1ZXJ5KHtcbiAgICAgIHRpbWVEaW1lbnNpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkaW1lbnNpb246IG5hbWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnF1ZXJ5LnNldFBhcnRpYWxRdWVyeSh7XG4gICAgICB0aW1lRGltZW5zaW9uczogdGhpcy5tZW1iZXJzLmZpbHRlcihcbiAgICAgICAgKHsgZGltZW5zaW9uIH0pID0+IGRpbWVuc2lvbiAhPT0gbmFtZVxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQodGltZURpbWVuc2lvbnM6IGFueVtdKSB7XG4gICAgdGhpcy5xdWVyeS5zZXRQYXJ0aWFsUXVlcnkoe1xuICAgICAgdGltZURpbWVuc2lvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0ZVJhbmdlKGJ5OiBzdHJpbmcgfCBudW1iZXIsIGRhdGVSYW5nZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLnVwZGF0ZVRpbWVEaW1lbnNpb24oYnksIHsgZGF0ZVJhbmdlIH0pO1xuICB9XG5cbiAgcHVibGljIHNldEdyYW51bGFyaXR5KGJ5OiBzdHJpbmcgfCBudW1iZXIsIGdyYW51bGFyaXR5OiBUaW1lRGltZW5zaW9uR3JhbnVsYXJpdHkpIHtcbiAgICB0aGlzLnVwZGF0ZVRpbWVEaW1lbnNpb24oYnksIHsgZ3JhbnVsYXJpdHkgfSk7XG4gIH1cblxuICBwdWJsaWMgYXNBcnJheSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMubWVtYmVycy5tYXAoKHRkKSA9PiAoe1xuICAgICAgLi4udGhpcy5xdWVyeS5tZXRhLnJlc29sdmVNZW1iZXIodGQuZGltZW5zaW9uLCAnZGltZW5zaW9ucycpLFxuICAgICAgLi4udGQsXG4gICAgfSkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcmRlciB7XG4gIHB1YmxpYyBvcmRlck1lbWJlcnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRPcmRlck1lbWJlcltdPihbXSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcXVlcnk6IFF1ZXJ5KSB7XG4gICAgdGhpcy5xdWVyeS5zdWJqZWN0LnN1YnNjcmliZSh0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlLmJpbmQodGhpcykpO1xuICAgIHRoaXMub3JkZXJNZW1iZXJzLnN1YnNjcmliZSh0aGlzLmhhbmRsZU9yZGVyTWVtYmVyc0NoYW5nZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT3JkZXJNZW1iZXJzQ2hhbmdlKG9yZGVyTWVtYmVyczogVE9yZGVyTWVtYmVyW10pIHtcbiAgICBjb25zdCBvcmRlciA9IG9yZGVyTWVtYmVyc1xuICAgICAgLmZpbHRlcigob3JkZXJNZW1iZXIpID0+IG9yZGVyTWVtYmVyLm9yZGVyICE9PSAnbm9uZScpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAobWVtbywgb3JkZXJNZW1iZXIpID0+ICh7IC4uLm1lbW8sIFtvcmRlck1lbWJlci5pZF06IG9yZGVyTWVtYmVyLm9yZGVyIH0pLFxuICAgICAgICB7fVxuICAgICAgKSBhcyBUUXVlcnlPcmRlck9iamVjdDtcblxuICAgIGlmICghZXF1YWwob3JkZXIsIHRoaXMuYXNPYmplY3QoKSkpIHtcbiAgICAgIHRoaXMucXVlcnkuc2V0UGFydGlhbFF1ZXJ5KHsgb3JkZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVRdWVyeUNoYW5nZSgpIHtcbiAgICB0aGlzLm9yZGVyTWVtYmVycy5uZXh0KFxuICAgICAgW1xuICAgICAgICAuLi50aGlzLnF1ZXJ5Lm1lYXN1cmVzLmFzQXJyYXkoKSxcbiAgICAgICAgLi4udGhpcy5xdWVyeS5kaW1lbnNpb25zLmFzQXJyYXkoKSxcbiAgICAgICAgLi4udGhpcy5xdWVyeS50aW1lRGltZW5zaW9ucy5hc0FycmF5KCksXG4gICAgICBdLm1hcDxUT3JkZXJNZW1iZXI+KCh7IG5hbWUsIHRpdGxlIH0pID0+ICh7XG4gICAgICAgIGlkOiBuYW1lLFxuICAgICAgICBvcmRlcjogdGhpcy5vZihuYW1lKSxcbiAgICAgICAgdGl0bGUsXG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNldE1lbWJlck9yZGVyKGlkOiBzdHJpbmcsIG9yZGVyOiBUT3JkZXIpIHtcbiAgICB0aGlzLm9yZGVyTWVtYmVycy5uZXh0KFxuICAgICAgdGhpcy5vcmRlck1lbWJlcnMuZ2V0VmFsdWUoKS5tYXAoKG9yZGVyTWVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChvcmRlck1lbWJlci5pZCA9PT0gaWQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ub3JkZXJNZW1iZXIsXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmRlck1lbWJlcjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZW9yZGVyKHNvdXJjZUluZGV4OiBudW1iZXIsIGRlc3RpbmF0aW9uSW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMub3JkZXJNZW1iZXJzLm5leHQoXG4gICAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICAgIHRoaXMub3JkZXJNZW1iZXJzLmdldFZhbHVlKCksXG4gICAgICAgIHNvdXJjZUluZGV4LFxuICAgICAgICBkZXN0aW5hdGlvbkluZGV4XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvZihtZW1iZXI6IHN0cmluZykge1xuICAgIHJldHVybiAodGhpcy5xdWVyeS5hc0N1YmVRdWVyeSgpLm9yZGVyIHx8IHt9KVttZW1iZXJdIHx8ICdub25lJztcbiAgfVxuXG4gIHB1YmxpYyBzZXQob3JkZXI6IFRRdWVyeU9yZGVyT2JqZWN0IHwgVFF1ZXJ5T3JkZXJBcnJheSkge1xuICAgIHRoaXMucXVlcnkuc2V0UGFydGlhbFF1ZXJ5KHsgb3JkZXIgfSk7XG4gIH1cblxuICBwdWJsaWMgYXNBcnJheSgpOiBUUXVlcnlPcmRlckFycmF5IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnF1ZXJ5LmFzQ3ViZVF1ZXJ5KCkub3JkZXIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyeS5hc0N1YmVRdWVyeSgpLm9yZGVyIGFzIFRRdWVyeU9yZGVyQXJyYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMucXVlcnkuYXNDdWJlUXVlcnkoKS5vcmRlciB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgYXNPYmplY3QoKTogVFF1ZXJ5T3JkZXJPYmplY3Qge1xuICAgIHJldHVybiB0aGlzLmFzQXJyYXkoKS5yZWR1Y2UoXG4gICAgICAobWVtbywgW2tleSwgdmFsdWVdKSA9PiAoeyAuLi5tZW1vLCBba2V5XTogdmFsdWUgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpbHRlck1lbWJlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHF1ZXJ5OiBRdWVyeSkge31cblxuICBwcml2YXRlIGdldCBmaWx0ZXJzKCkge1xuICAgIC8vIFRPRE86IHVwZGF0ZSB0aGlzIHR5cGUgYXNzZXJ0aW9uIG9uY2UgdGhlIFF1ZXJ5QnVpbGRlciBzdXBwb3J0cyBsb2dpY2FsIGFuZC9vclxuICAgIHJldHVybiAodGhpcy5xdWVyeS5hc0N1YmVRdWVyeSgpLmZpbHRlcnMgfHwgW10pIGFzIChVbmFyeUZpbHRlciB8IEJpbmFyeUZpbHRlcilbXTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUoYnk6IHN0cmluZyB8IG51bWJlciwgdXBkYXRlV2l0aDogUGFydGlhbDxGaWx0ZXI+KSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVycy5tYXAoKGZpbHRlciwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gYnkgfHwgZmlsdGVyLm1lbWJlciA9PT0gYnkgfHwgZmlsdGVyLmRpbWVuc2lvbiA9PT0gYnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgLi4udXBkYXRlV2l0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfSk7XG5cbiAgICB0aGlzLnF1ZXJ5LnNldFBhcnRpYWxRdWVyeSh7XG4gICAgICBmaWx0ZXJzOiBmaWx0ZXJzIGFzIEZpbHRlcltdLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZChmaWx0ZXI6IEZpbHRlcikge1xuICAgIHRoaXMucXVlcnkuc2V0UGFydGlhbFF1ZXJ5KHtcbiAgICAgIGZpbHRlcnM6IFsuLi50aGlzLmZpbHRlcnMsIGZpbHRlcl0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlKGJ5OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLnF1ZXJ5LnNldFBhcnRpYWxRdWVyeSh7XG4gICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnMuZmlsdGVyKChmaWx0ZXIsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIubWVtYmVyID09PSBieSB8fCBmaWx0ZXIuZGltZW5zaW9uID09PSBieSB8fCBpbmRleCA9PT0gYnkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldChmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgIHRoaXMucXVlcnkuc2V0UGFydGlhbFF1ZXJ5KHtcbiAgICAgIGZpbHRlcnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVwbGFjZShuYW1lOiBzdHJpbmcsIHJlcGxhY2VXaXRoTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5xdWVyeS5zZXRQYXJ0aWFsUXVlcnkoe1xuICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZmlsdGVyLm1lbWJlciA/ICdtZW1iZXInIDogJ2RpbWVuc2lvbic7XG4gICAgICAgIHJldHVybiBmaWx0ZXIubWVtYmVyID09PSBuYW1lIHx8IGZpbHRlci5kaW1lbnNpb24gPT09IG5hbWVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgIFtmaWVsZF06IHJlcGxhY2VXaXRoTmFtZSxcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBmaWx0ZXI7XG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc0FycmF5KCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiAoe1xuICAgICAgLi4udGhpcy5xdWVyeS5tZXRhLnJlc29sdmVNZW1iZXIoZmlsdGVyLm1lbWJlciB8fCBmaWx0ZXIuZGltZW5zaW9uLCBbXG4gICAgICAgICdkaW1lbnNpb25zJyxcbiAgICAgICAgJ21lYXN1cmVzJyxcbiAgICAgIF0pLFxuICAgICAgb3BlcmF0b3JzOiB0aGlzLnF1ZXJ5Lm1ldGEuZmlsdGVyT3BlcmF0b3JzRm9yTWVtYmVyKFxuICAgICAgICBmaWx0ZXIubWVtYmVyIHx8IGZpbHRlci5kaW1lbnNpb24sXG4gICAgICAgIFsnZGltZW5zaW9ucycsICdtZWFzdXJlcyddXG4gICAgICApLFxuICAgICAgLi4uZmlsdGVyLFxuICAgIH0pKTtcbiAgfVxufVxuIl19