@sumaris-net/ngx-components 2.0.2 → 2.0.3

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.
Files changed (27) hide show
  1. package/esm2020/public_api.mjs +2 -2
  2. package/esm2020/src/app/core/home/home.mjs +3 -3
  3. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
  4. package/esm2020/src/app/shared/material/datetime/material.date.mjs +2 -2
  5. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +2 -2
  6. package/esm2020/src/app/social/job/job.model.mjs +1 -23
  7. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +11 -8
  8. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +3 -3
  9. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +23 -0
  10. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +71 -0
  11. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +4 -5
  12. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +2 -2
  13. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +2 -2
  14. package/fesm2015/sumaris-net.ngx-components.mjs +28 -25
  15. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  16. package/fesm2020/sumaris-net.ngx-components.mjs +28 -24
  17. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  18. package/package.json +1 -1
  19. package/public_api.d.ts +1 -1
  20. package/src/app/social/job/job.model.d.ts +0 -11
  21. package/src/app/social/job/progression/job-progression.icon.d.ts +2 -2
  22. package/src/app/social/job/progression/job-progression.list.d.ts +1 -1
  23. package/src/app/social/job/progression/job-progression.model.d.ts +11 -0
  24. package/src/app/social/job/{job.service.d.ts → progression/job-progression.service.d.ts} +5 -5
  25. package/src/app/social/job/testing/job-progression.testing.d.ts +4 -4
  26. package/src/app/social/job/testing/job-progression.testing.service.d.ts +2 -2
  27. package/esm2020/src/app/social/job/job.service.mjs +0 -71
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sumaris-net/ngx-components",
3
3
  "description": "SUMARiS Angular components",
4
- "version": "2.0.2",
4
+ "version": "2.0.3",
5
5
  "author": "contact@e-is.pro",
6
6
  "license": "AGPL-3.0",
7
7
  "readmeFilename": "README.md",
package/public_api.d.ts CHANGED
@@ -205,7 +205,7 @@ export * from './src/app/social/user-event/user-event.service';
205
205
  export * from './src/app/social/user-event/notification/user-event-notification.icon';
206
206
  export * from './src/app/social/job/job.module';
207
207
  export * from './src/app/social/job/job.model';
208
- export * from './src/app/social/job/job.service';
208
+ export * from './src/app/social/job/progression/job-progression.service';
209
209
  export * from './src/app/social/job/progression/job-progression.icon';
210
210
  export * from './src/app/social/job/progression/job-progression.list';
211
211
  export * from './src/app/social/message/message.module';
@@ -1,5 +1,4 @@
1
1
  import { Moment } from 'moment';
2
- import { Entity } from '../../core/services/model/entity.model';
3
2
  export declare type JobStatus = 'PENDING' | 'RUNNING' | 'SUCCESS' | 'ERROR' | 'FAILED' | 'WARNING' | 'CANCELLED';
4
3
  export interface IJob {
5
4
  id: number;
@@ -21,13 +20,3 @@ export declare class Job implements IJob {
21
20
  configuration: string;
22
21
  report: string;
23
22
  }
24
- export declare class JobProgression extends Entity<JobProgression> {
25
- static fromObject: (source: any, opts?: any) => JobProgression;
26
- id: number;
27
- name: string;
28
- message: string;
29
- current: number;
30
- total: number;
31
- constructor(id?: number);
32
- fromObject(source: any): void;
33
- }
@@ -1,8 +1,8 @@
1
1
  import { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { ThemePalette } from '@angular/material/core';
3
3
  import { ProgressSpinnerMode } from '@angular/material/progress-spinner';
4
- import { IJobProgressionService } from '../job.service';
5
- import { JobProgression } from '../job.model';
4
+ import { IJobProgressionService } from './job-progression.service';
5
+ import { JobProgression } from './job-progression.model';
6
6
  import { PopoverController } from '@ionic/angular';
7
7
  import * as i0 from "@angular/core";
8
8
  export interface JobProgressionOptions {
@@ -1,5 +1,5 @@
1
1
  import { OnInit } from '@angular/core';
2
- import { JobProgression } from '../job.model';
2
+ import { JobProgression } from './job-progression.model';
3
3
  import * as i0 from "@angular/core";
4
4
  export interface JobProgressionListOptions {
5
5
  titleI18n?: string;
@@ -0,0 +1,11 @@
1
+ import { Entity } from '../../../core/services/model/entity.model';
2
+ export declare class JobProgression extends Entity<JobProgression> {
3
+ static fromObject: (source: any, opts?: any) => JobProgression;
4
+ id: number;
5
+ name: string;
6
+ message: string;
7
+ current: number;
8
+ total: number;
9
+ constructor(id?: number);
10
+ fromObject(source: any): void;
11
+ }
@@ -1,12 +1,12 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- import { JobProgression } from './job.model';
3
- import { BaseGraphqlService } from '../../core/services/base-graphql-service.class';
4
- import { GraphqlService } from '../../core/graphql/graphql.service';
5
- import { Environment } from '../../../environments/environment.class';
2
+ import { JobProgression } from './job-progression.model';
3
+ import { BaseGraphqlService } from '../../../core/services/base-graphql-service.class';
4
+ import { GraphqlService } from '../../../core/graphql/graphql.service';
5
+ import { Environment } from '../../../../environments/environment.class';
6
6
  import { Observable } from 'rxjs';
7
7
  import { FetchPolicy, WatchQueryFetchPolicy } from '@apollo/client/core';
8
8
  import * as i0 from "@angular/core";
9
- export declare const APP_JOB_PROGRESSION_SERVICE: InjectionToken<JobProgressionService>;
9
+ export declare const APP_JOB_PROGRESSION_SERVICE: InjectionToken<IJobProgressionService>;
10
10
  export interface IJobProgressionService {
11
11
  watchAll(): Observable<JobProgression[]>;
12
12
  addJob(id: number, job?: JobProgression): any;
@@ -1,14 +1,14 @@
1
1
  import { JobProgressionIcon, JobProgressionOptions } from '../progression/job-progression.icon';
2
- import { JobProgression } from '../job.model';
3
- import { JobProgressionService } from '../job.service';
2
+ import { JobProgression } from '../progression/job-progression.model';
3
+ import { IJobProgressionService } from '../progression/job-progression.service';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class JobProgressionTestingPage {
6
- protected jobProgressionService: JobProgressionService;
6
+ protected jobProgressionService: IJobProgressionService;
7
7
  jobProgressionIcon: JobProgressionIcon;
8
8
  jobId: number;
9
9
  job: JobProgression;
10
10
  options: JobProgressionOptions;
11
- constructor(jobProgressionService: JobProgressionService);
11
+ constructor(jobProgressionService: IJobProgressionService);
12
12
  incrementJob(value: number): void;
13
13
  addJob(): void;
14
14
  private createJob;
@@ -1,7 +1,7 @@
1
- import { IJobProgressionService } from '../job.service';
1
+ import { IJobProgressionService } from '../progression/job-progression.service';
2
2
  import { FetchPolicy } from '@apollo/client/core';
3
3
  import { Observable } from 'rxjs';
4
- import { JobProgression } from '../job.model';
4
+ import { JobProgression } from '../progression/job-progression.model';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class JobProgressionTestService implements IJobProgressionService {
7
7
  private jobsSubject;
@@ -1,71 +0,0 @@
1
- import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
- import { JobProgression } from './job.model';
3
- import { BaseGraphqlService } from '../../core/services/base-graphql-service.class';
4
- import { ENVIRONMENT } from '../../../environments/environment.class';
5
- import { of } from 'rxjs';
6
- import { gql } from '@apollo/client/core';
7
- import { isNil, toNumber } from '../../shared/functions';
8
- import { map } from 'rxjs/operators';
9
- import { SocialErrorCodes } from '../social.errors';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "../../core/graphql/graphql.service";
12
- import * as i2 from "../../../environments/environment.class";
13
- export const APP_JOB_PROGRESSION_SERVICE = new InjectionToken('JobProgressionService');
14
- const QUERIES = {
15
- listenChanges: gql `subscription UpdateJobProgression($id: Int!, $interval: Int){
16
- data: updateJobProgression(id: $id, interval: $interval) {
17
- id
18
- name
19
- message
20
- current
21
- total
22
- }
23
- }`
24
- };
25
- export class JobProgressionService extends BaseGraphqlService {
26
- constructor(graphql, environment) {
27
- super(graphql, environment);
28
- this.graphql = graphql;
29
- this.environment = environment;
30
- this._logPrefix = '[job-progression-service] ';
31
- // For DEV only
32
- this._debug = environment && !environment.production;
33
- }
34
- watchAll(options) {
35
- return of([]); // TODO
36
- }
37
- addJob(id, job) {
38
- throw new Error('no implemented');
39
- }
40
- removeJob(id) {
41
- throw new Error('no implemented');
42
- }
43
- listenChanges(id, options) {
44
- if (isNil(id))
45
- throw new Error(`${this._logPrefix}Missing argument 'id'`);
46
- if (this._debug)
47
- console.debug(`${this._logPrefix}[WS] Listening changes for job progression {${id}}...`);
48
- return this.graphql.subscribe({
49
- query: QUERIES.listenChanges,
50
- fetchPolicy: options?.fetchPolicy,
51
- variables: { id, interval: toNumber(options?.interval, 10) },
52
- error: { code: SocialErrorCodes.SUBSCRIBE_JOB_PROGRESSION_ERROR, message: 'SOCIAL.ERROR.SUBSCRIBE_JOB_PROGRESSION_ERROR' }
53
- }).pipe(map(({ data }) => {
54
- const progression = data && JobProgression.fromObject(data);
55
- if (progression && this._debug)
56
- console.debug(`${this._logPrefix}Job progression ${id} updated on server`, progression);
57
- return progression;
58
- }));
59
- }
60
- }
61
- JobProgressionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService, deps: [{ token: i1.GraphqlService }, { token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
62
- JobProgressionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService });
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService, decorators: [{
64
- type: Injectable
65
- }], ctorParameters: function () { return [{ type: i1.GraphqlService }, { type: i2.Environment, decorators: [{
66
- type: Optional
67
- }, {
68
- type: Inject,
69
- args: [ENVIRONMENT]
70
- }] }]; } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2Ivam9iLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXBGLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBYyxHQUFHLEVBQXdCLE1BQU0scUJBQXFCLENBQUM7QUFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFHcEQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQXdCLHVCQUF1QixDQUFDLENBQUM7QUFFOUcsTUFBTSxPQUFPLEdBQUc7SUFDZCxhQUFhLEVBQUUsR0FBRyxDQUFBOzs7Ozs7OztJQVFoQjtDQUNILENBQUE7QUFVRCxNQUFNLE9BQU8scUJBQ1gsU0FBUSxrQkFBa0M7SUFHMUMsWUFDWSxPQUF1QixFQUNVLFdBQXdCO1FBRW5FLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFIbEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUduRSxJQUFJLENBQUMsVUFBVSxHQUFHLDRCQUE0QixDQUFDO1FBQy9DLGVBQWU7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUVSO1FBQ0MsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPO0lBQ3hCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBVSxFQUFFLEdBQW9CO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQVU7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBVSxFQUFFLE9BR3pCO1FBRUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHVCQUF1QixDQUFDLENBQUM7UUFDMUUsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSwrQ0FBK0MsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFnQjtZQUMzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDNUIsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXO1lBQ2pDLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUM7WUFDM0QsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLCtCQUErQixFQUFFLE9BQU8sRUFBRSw4Q0FBOEMsRUFBQztTQUN6SCxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRTtZQUNiLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN4SCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUosQ0FBQzs7a0hBakRVLHFCQUFxQixnREFNVixXQUFXO3NIQU50QixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBT04sUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEpvYlByb2dyZXNzaW9uIH0gZnJvbSAnLi9qb2IubW9kZWwnO1xuaW1wb3J0IHsgQmFzZUdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBHcmFwaHFsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGZXRjaFBvbGljeSwgZ3FsLCBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3l9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgaXNOaWwsIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTb2NpYWxFcnJvckNvZGVzIH0gZnJvbSAnLi4vc29jaWFsLmVycm9ycyc7XG5pbXBvcnQge0Jhc2VFbnRpdHlHcmFwaHFsUXVlcmllc30gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9iYXNlLWVudGl0eS1zZXJ2aWNlLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IEFQUF9KT0JfUFJPR1JFU1NJT05fU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxKb2JQcm9ncmVzc2lvblNlcnZpY2U+KCdKb2JQcm9ncmVzc2lvblNlcnZpY2UnKTtcblxuY29uc3QgUVVFUklFUyA9IHtcbiAgbGlzdGVuQ2hhbmdlczogZ3FsYHN1YnNjcmlwdGlvbiBVcGRhdGVKb2JQcm9ncmVzc2lvbigkaWQ6IEludCEsICRpbnRlcnZhbDogSW50KXtcbiAgICBkYXRhOiB1cGRhdGVKb2JQcm9ncmVzc2lvbihpZDogJGlkLCBpbnRlcnZhbDogJGludGVydmFsKSB7XG4gICAgICBpZFxuICAgICAgbmFtZVxuICAgICAgbWVzc2FnZVxuICAgICAgY3VycmVudFxuICAgICAgdG90YWxcbiAgICB9XG4gIH1gXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUpvYlByb2dyZXNzaW9uU2VydmljZSB7XG4gIHdhdGNoQWxsKCk6IE9ic2VydmFibGU8Sm9iUHJvZ3Jlc3Npb25bXT47XG4gIGFkZEpvYihpZDogbnVtYmVyLCBqb2I/OiBKb2JQcm9ncmVzc2lvbik7XG4gIHJlbW92ZUpvYihpZDogbnVtYmVyKTtcbiAgbGlzdGVuQ2hhbmdlcyhpZDogbnVtYmVyLCBvcHRpb25zPzogeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSB9KTogT2JzZXJ2YWJsZTxKb2JQcm9ncmVzc2lvbj47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKb2JQcm9ncmVzc2lvblNlcnZpY2VcbiAgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8Sm9iUHJvZ3Jlc3Npb24+XG4gIGltcGxlbWVudHMgSUpvYlByb2dyZXNzaW9uU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMuX2xvZ1ByZWZpeCA9ICdbam9iLXByb2dyZXNzaW9uLXNlcnZpY2VdICc7XG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSBlbnZpcm9ubWVudCAmJiAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIHdhdGNoQWxsKG9wdGlvbnM/OiB7XG4gICAgZmV0Y2hQb2xpY3k/OiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3lcbiAgfSk6IE9ic2VydmFibGU8Sm9iUHJvZ3Jlc3Npb25bXT4ge1xuICAgIHJldHVybiBvZihbXSk7IC8vIFRPRE9cbiAgfVxuXG4gIGFkZEpvYihpZDogbnVtYmVyLCBqb2I/OiBKb2JQcm9ncmVzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHJlbW92ZUpvYihpZDogbnVtYmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgbGlzdGVuQ2hhbmdlcyhpZDogbnVtYmVyLCBvcHRpb25zPzoge1xuICAgIGludGVydmFsPzogbnVtYmVyO1xuICAgIGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3lcbiAgfSk6IE9ic2VydmFibGU8Sm9iUHJvZ3Jlc3Npb24+IHtcblxuICAgIGlmIChpc05pbChpZCkpIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLl9sb2dQcmVmaXh9TWlzc2luZyBhcmd1bWVudCAnaWQnYCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1bV1NdIExpc3RlbmluZyBjaGFuZ2VzIGZvciBqb2IgcHJvZ3Jlc3Npb24geyR7aWR9fS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgcXVlcnk6IFFVRVJJRVMubGlzdGVuQ2hhbmdlcyxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRpb25zPy5mZXRjaFBvbGljeSxcbiAgICAgIHZhcmlhYmxlczogeyBpZCwgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdGlvbnM/LmludGVydmFsLCAxMCl9LFxuICAgICAgZXJyb3I6IHtjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNVQlNDUklCRV9KT0JfUFJPR1JFU1NJT05fRVJST1IsIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuU1VCU0NSSUJFX0pPQl9QUk9HUkVTU0lPTl9FUlJPUid9XG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgoe2RhdGF9KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzaW9uID0gZGF0YSAmJiBKb2JQcm9ncmVzc2lvbi5mcm9tT2JqZWN0KGRhdGEpO1xuICAgICAgICBpZiAocHJvZ3Jlc3Npb24gJiYgdGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUpvYiBwcm9ncmVzc2lvbiAke2lkfSB1cGRhdGVkIG9uIHNlcnZlcmAsIHByb2dyZXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIHByb2dyZXNzaW9uO1xuICAgICAgfSlcbiAgICApO1xuXG4gIH1cbn1cbiJdfQ==