taxtank-core 0.33.103 → 0.33.105

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 (21) hide show
  1. package/esm2022/src/lib/collections/bank-account.collection.mjs +2 -2
  2. package/esm2022/src/lib/collections/property/property-category-movement.collection.mjs +2 -1
  3. package/esm2022/src/lib/db/Models/property/property-forecast.mjs +1 -1
  4. package/esm2022/src/lib/forms/property/property-add.form.mjs +25 -38
  5. package/esm2022/src/lib/forms/property/property-forecast.form.mjs +1 -2
  6. package/esm2022/src/lib/models/client/sharesight/sharesight-details-messages.enum.mjs +3 -2
  7. package/esm2022/src/lib/models/client/sharesight/sharesight-details.mjs +5 -1
  8. package/esm2022/src/lib/models/property/property-forecast.mjs +6 -11
  9. package/esm2022/src/lib/models/property/property.mjs +3 -3
  10. package/esm2022/src/lib/models/report/property/property-report-item-depreciation.mjs +1 -2
  11. package/esm2022/src/lib/services/http/property/property-valuation/property-valuation.service.mjs +2 -1
  12. package/esm2022/src/lib/services/http/property/property.service.mjs +5 -2
  13. package/fesm2022/taxtank-core.mjs +40 -50
  14. package/fesm2022/taxtank-core.mjs.map +1 -1
  15. package/package.json +1 -1
  16. package/src/lib/db/Models/property/property-forecast.d.ts +3 -3
  17. package/src/lib/forms/property/property-add.form.d.ts +5 -7
  18. package/src/lib/models/client/sharesight/sharesight-details-messages.enum.d.ts +2 -1
  19. package/src/lib/models/client/sharesight/sharesight-details.d.ts +1 -0
  20. package/src/lib/models/property/property-forecast.d.ts +0 -6
  21. package/src/lib/services/http/property/property-valuation/property-valuation.service.d.ts +1 -0
@@ -1,5 +1,5 @@
1
1
  import { Inject, Injectable } from '@angular/core';
2
- import { throwError } from 'rxjs';
2
+ import { of, throwError } from 'rxjs';
3
3
  import { catchError, map } from 'rxjs/operators';
4
4
  import { plainToClass } from 'class-transformer';
5
5
  import { AppEvent, AppEventTypeEnum, Property, PropertyCategoryMovement, PropertySale, PropertyShare, PropertySubscription, PropertyValuation } from '../../../models';
@@ -116,6 +116,9 @@ export class PropertyService extends RestService {
116
116
  updatedProperty.corelogicLastRequest = new Date();
117
117
  this.updateCache([updatedProperty], 'put');
118
118
  return stats;
119
+ }), catchError((error) => {
120
+ this.handleError(error);
121
+ return of({ growthPercent: 0, lowMarketValue: 0, marketValue: 0, highMarketValue: 0 });
119
122
  }));
120
123
  }
121
124
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PropertyService, deps: [{ token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -130,4 +133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
130
133
  type: Inject,
131
134
  args: ['environment']
132
135
  }] }] });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Byb3BlcnR5L3Byb3BlcnR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixRQUFRLEVBQUUsd0JBQXdCLEVBQ2xDLFlBQVksRUFDWixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBRXBGOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUF1RDtJQU0xRixZQUE2QyxXQUFnQjtRQUMzRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFEd0IsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFMN0QsZUFBVSxHQUFvQixRQUFRLENBQUM7UUFDdkMsb0JBQWUsR0FBOEIsa0JBQWtCLENBQUM7UUFDaEUsZ0JBQVcsR0FBRyxZQUFZLENBQUM7UUFDM0Isb0JBQWUsR0FBaUIs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QyxDQUFDO1lBQ2xFLGVBQWUsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUzQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDOytHQXBJVSxlQUFlLGtCQU1OLGFBQWE7bUhBTnRCLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBT2MsTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBQcm9wZXJ0eSBhcyBQcm9wZXJ0eUJhc2UsXG4gIFByb3BlcnR5U3Vic2NyaXB0aW9uIGFzIFByb3BlcnR5U3Vic2NyaXB0aW9uQmFzZVxufSBmcm9tICcuLi8uLi8uLi9kYi9Nb2RlbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtcbiAgQXBwRXZlbnQsXG4gIEFwcEV2ZW50VHlwZUVudW0sIE5vdGlmaWNhdGlvbixcbiAgUHJvcGVydHksIFByb3BlcnR5Q2F0ZWdvcnlNb3ZlbWVudCxcbiAgUHJvcGVydHlTYWxlLFxuICBQcm9wZXJ0eVNoYXJlLFxuICBQcm9wZXJ0eVN1YnNjcmlwdGlvbixcbiAgUHJvcGVydHlWYWx1YXRpb25cbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IElFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZXN0TWV0aG9kLCBSZXN0U2VydmljZSB9IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IHsgUHJvcGVydHlDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgVXNlclJvbGVzRW51bSB9IGZyb20gJ3RheHRhbmstY29yZS9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBQcm9wZXJ0eU1lc3NhZ2VzRW51bSB9IGZyb20gJy4vcHJvcGVydHktbWVzc2FnZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eUNvcmVsb2dpY1N0YXRzSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5LWNvcmVsb2dpYy1zdGF0cy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXNlckV2ZW50VHlwZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vZGIvRW51bXMvdXNlci1ldmVudC10eXBlLXR5cGUuZW51bSc7XG5cbi8qKlxuICogQFRvZG8gQWxleCByZW1vdmUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIFByb3BlcnR5U2hhcmVcbiAqIEBUT0RPIEFsZXggKFRULTE3NzcpOiByZXBsYWNlIGFsbCBldmVudCBsaXN0ZW5lcnMgd2l0aCB0aGUgbmV3IHRoaXMubGlzdGVuKClcbiAqIFNlcnZpY2UgZm9yIHdvcmsgd2l0aCBQcm9wZXJ0eVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxQcm9wZXJ0eUJhc2UsIFByb3BlcnR5LCBQcm9wZXJ0eUNvbGxlY3Rpb24+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICBtb2RlbENsYXNzOiB0eXBlb2YgUHJvcGVydHkgPSBQcm9wZXJ0eTtcbiAgY29sbGVjdGlvbkNsYXNzOiB0eXBlb2YgUHJvcGVydHlDb2xsZWN0aW9uID0gUHJvcGVydHlDb2xsZWN0aW9uO1xuICBlbmRwb2ludFVyaSA9ICdwcm9wZXJ0aWVzJztcbiAgZGlzYWJsZWRNZXRob2RzOiBSZXN0TWV0aG9kW10gPSBbJ2RlbGV0ZUJhdGNoJ107XG5cbiAgY29uc3RydWN0b3IoQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueSkge1xuICAgIHN1cGVyKGVudmlyb25tZW50KTtcbiAgICB0aGlzLmxpc3RlbkV2ZW50cygpO1xuICAgIHRoaXMubGlzdGVuTm90aWZpY2F0aW9ucygpO1xuICB9XG5cbiAgZ2V0KCk6IE9ic2VydmFibGU8UHJvcGVydHlDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldCgpLnBpcGUobWFwKChwcm9wZXJ0aWVzKSA9PiBwcm9wZXJ0aWVzLmdldEFjdGl2ZSgpKSk7XG4gIH1cblxuICBnZXRBbGwoKTogT2JzZXJ2YWJsZTxQcm9wZXJ0eUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQFRPRE8gcmVtb3ZlIHdoZW4gZm9yZWNhc3QgbW92ZWQgdG8gc2VwYXJhdGVkIGFwaVxuICAgKi9cbiAgcHV0KHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8UHJvcGVydHk+IHtcbiAgICByZXR1cm4gc3VwZXIucHV0KHByb3BlcnR5KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodXBkYXRlZFByb3BlcnR5OiBQcm9wZXJ0eSk6IFByb3BlcnR5ID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfVVBEQVRFRCwgcHJvcGVydHkpKTtcblxuICAgICAgICAgIHJldHVybiB1cGRhdGVkUHJvcGVydHk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgc2hhcmVzaWdodENvbm5lY3QocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTxQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBzdXBlci5wdXQocHJvcGVydHksIGAke3RoaXMuYXBpVXJsfS8ke3Byb3BlcnR5LmlkfS9zaGFyZXNpZ2h0LWNvbm5lY3RgKTtcbiAgfVxuXG4gIHNoYXJlc2lnaHREaXNjb25uZWN0KHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8UHJvcGVydHk+IHtcbiAgICByZXR1cm4gc3VwZXIucHV0KHByb3BlcnR5LCBgJHt0aGlzLmFwaVVybH0vJHtwcm9wZXJ0eS5pZH0vc2hhcmVzaWdodC1kaXNjb25uZWN0YCk7XG4gIH1cblxuICAvKipcbiAgICogQFRPRE8gbm8gcmVmcmVzaCBjYWNoZSB3aXRoIHRoaXMudXBkYXRlQ2FjaGUoW3RoaXMuZ2V0Q2FjaGUoKS5maW5kQnkoJ2lkJywgY2hhbmdlLm1vZGVsLnByb3BlcnR5LmlkKV0sICdwdXQnKTtcbiAgICovXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICAvLyBzaGFyZSBpbnZpdGUgYWNjZXB0ZWQgZXZlbnQgZ2l2ZXMgYWNjZXNzIHRvIG5ldyBwcm9wZXJ0eVxuICAgIHRoaXMubGlzdGVuQ1NFKFByb3BlcnR5U2hhcmUsIHRoaXMucmVmcmVzaENhY2hlLCBbJ3B1dCddKTtcbiAgICAvLyBAVE9ETyBnZXQgZnJvbSBzZXBhcmF0ZWQgYXBpP1xuICAgIHRoaXMubGlzdGVuQ1NFKFByb3BlcnR5U2FsZSwgdGhpcy5yZWZyZXNoQ2FjaGUsIFsncG9zdCcsICdwdXQnLCAnZGVsZXRlJ10pO1xuICAgIC8vIHByb3BlcnR5IGNhY2hlcyBjaGlsZCBlbnRpdGllcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlXG4gICAgdGhpcy5saXN0ZW5DU0UoUHJvcGVydHlWYWx1YXRpb24sICh2YWx1YXRpb25zOiBQcm9wZXJ0eVZhbHVhdGlvbltdKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuZ2V0Q2FjaGUoKS5maW5kQnkoJ2lkJywgdmFsdWF0aW9uc1swXS5wcm9wZXJ0eS5pZCk7XG4gICAgICBpZiAocHJvcGVydHkudmFsdWF0aW9uLmRhdGUgPCB2YWx1YXRpb25zWzBdLmRhdGUpIHtcbiAgICAgICAgcHJvcGVydHkudmFsdWF0aW9uID0gdmFsdWF0aW9uc1swXTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWNoZShbcHJvcGVydHldLCAncHV0Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5saXN0ZW5DU0UoUHJvcGVydHlDYXRlZ29yeU1vdmVtZW50LCB0aGlzLnJlZnJlc2hDYWNoZSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3Rlbk5vdGlmaWNhdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uTk9USUZJQ0FUSU9OX0FEREVEKS5zdWJzY3JpYmUoKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbi5pc1JlYWQgJiYgbm90aWZpY2F0aW9uLmV2ZW50VHlwZSA9PT0gVXNlckV2ZW50VHlwZVR5cGVFbnVtLlNIQVJFU0lHSFRfSU1QT1JUKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaENhY2hlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVEZXByZWNpYXRpb25DYWxjdWxhdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBwcm9wZXJ0eVRvVXBkYXRlOiBQcm9wZXJ0eSA9IHBsYWluVG9DbGFzcyhQcm9wZXJ0eSwgeyBpZDogcHJvcGVydHkuaWQsIGRlcHJlY2lhdGlvbkNhbGN1bGF0aW9uOiBwcm9wZXJ0eS5kZXByZWNpYXRpb25DYWxjdWxhdGlvbiB9KVxuXG4gICAgcmV0dXJuIHRoaXMucHV0KHByb3BlcnR5VG9VcGRhdGUpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh1cGRhdGVkUHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX0RFUFJFQ0lBVElPTl9DQUxDVUxBVElPTl9VUERBVEVELCB1cGRhdGVkUHJvcGVydHkpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQFRPRE8gbW92ZSB0byBzZXBhcmF0ZWQgYXBpXG4gICAqIEFjdGl2YXRlIGRlYWN0aXZhdGVkIHByb3BlcnR5XG4gICAqL1xuICBhY3RpdmF0ZShwcm9wZXJ0eTogUHJvcGVydHkpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vcHJvcGVydHktc3Vic2NyaXB0aW9uc2AsIHsgcHJvcGVydHkgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHByb3BlcnR5U3Vic2NyaXB0aW9uQmFzZTogUHJvcGVydHlTdWJzY3JpcHRpb25CYXNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3UHJvcGVydHlTdWJzY3JpcHRpb246IFByb3BlcnR5U3Vic2NyaXB0aW9uID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5U3Vic2NyaXB0aW9uLCBwcm9wZXJ0eVN1YnNjcmlwdGlvbkJhc2UpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2YXRlZFByb3BlcnR5OiBQcm9wZXJ0eSA9IHBsYWluVG9DbGFzcyhQcm9wZXJ0eSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydHksIHsgc3Vic2NyaXB0aW9uczogW25ld1Byb3BlcnR5U3Vic2NyaXB0aW9uXSB9KSk7XG5cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKFthY3RpdmF0ZWRQcm9wZXJ0eV0sICdwdXQnKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQFRPRE8gbW92ZSB0byBzZXBhcmF0ZWQgYXBpXG4gICAqIERlYWN0aXZhdGUgYWN0aXZhdGVkIHByb3BlcnR5XG4gICAqL1xuICBkZWFjdGl2YXRlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3Byb3BlcnR5LXN1YnNjcmlwdGlvbnMvJHtwcm9wZXJ0eS5nZXRDdXJyZW50U3Vic2NyaXB0aW9uKCkuaWR9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlYWN0aXZhdGVkUHJvcGVydHk6IFByb3BlcnR5ID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5LCBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0eSwgeyBzdWJzY3JpcHRpb25zOiBbXSB9KSk7XG5cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKFtkZWFjdGl2YXRlZFByb3BlcnR5XSwgJ3B1dCcpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZShwcm9wZXJ0eTogUHJvcGVydHkpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKHByb3BlcnR5KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkge1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmVycm9yKFByb3BlcnR5TWVzc2FnZXNFbnVtLkRFTEVURV81MDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgKVxuICB9XG5cbiAgZ2V0Q29yZWxvZ2ljU3RhdHMocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTxQcm9wZXJ0eUNvcmVsb2dpY1N0YXRzSW50ZXJmYWNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UHJvcGVydHlDb3JlbG9naWNTdGF0c0ludGVyZmFjZT4oYCR7dGhpcy5hcGlVcmx9LyR7cHJvcGVydHkuaWR9L2NvcmVsb2dpYy1zdGF0c2ApXG4gICAgICAucGlwZShtYXAoKHN0YXRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQcm9wZXJ0eSA9IHRoaXMuZ2V0Q2FjaGUoKS5maW5kQnkoJ2lkJywgcHJvcGVydHkuaWQpO1xuICAgICAgICB1cGRhdGVkUHJvcGVydHkuY29yZWxvZ2ljTGFzdFJlcXVlc3QgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKFt1cGRhdGVkUHJvcGVydHldLCAncHV0Jyk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRzO1xuICAgICAgfSkpO1xuICB9XG59XG4iXX0=
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Byb3BlcnR5L3Byb3BlcnR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLbkQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUNMLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsUUFBUSxFQUFFLHdCQUF3QixFQUNsQyxZQUFZLEVBQ1osYUFBYSxFQUNiLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOztBQUVwRjs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGVBQWdCLFNBQVEsV0FBdUQ7SUFNMUYsWUFBNkMsV0FBZ0I7UUFDM0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRHdCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBTDdELGVBQVUsR0FBb0IsUUFBUSxDQUFDO1FBQ3ZDLG9CQUFlLEdBQThCLGtCQUFrQixDQUFDO1FBQ2hFLGdCQUFXLEdBQUcsWUFBWSxDQUFDO1FBQzNCLG9C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LEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLGVBQWUsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUzQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFeEIsT0FBTyxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzsrR0EzSVUsZUFBZSxrQkFNTixhQUFhO21IQU50QixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQU9jLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgUHJvcGVydHkgYXMgUHJvcGVydHlCYXNlLFxuICBQcm9wZXJ0eVN1YnNjcmlwdGlvbiBhcyBQcm9wZXJ0eVN1YnNjcmlwdGlvbkJhc2Vcbn0gZnJvbSAnLi4vLi4vLi4vZGIvTW9kZWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQge1xuICBBcHBFdmVudCxcbiAgQXBwRXZlbnRUeXBlRW51bSwgTm90aWZpY2F0aW9uLFxuICBQcm9wZXJ0eSwgUHJvcGVydHlDYXRlZ29yeU1vdmVtZW50LFxuICBQcm9wZXJ0eVNhbGUsXG4gIFByb3BlcnR5U2hhcmUsXG4gIFByb3BlcnR5U3Vic2NyaXB0aW9uLFxuICBQcm9wZXJ0eVZhbHVhdGlvblxufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgSUV2ZW50TGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJlc3RNZXRob2QsIFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgeyBQcm9wZXJ0eUNvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBVc2VyUm9sZXNFbnVtIH0gZnJvbSAndGF4dGFuay1jb3JlL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFByb3BlcnR5TWVzc2FnZXNFbnVtIH0gZnJvbSAnLi9wcm9wZXJ0eS1tZXNzYWdlcy5lbnVtJztcbmltcG9ydCB7IFByb3BlcnR5Q29yZWxvZ2ljU3RhdHNJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcHJvcGVydHkvcHJvcGVydHktY29yZWxvZ2ljLXN0YXRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVc2VyRXZlbnRUeXBlVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9kYi9FbnVtcy91c2VyLWV2ZW50LXR5cGUtdHlwZS5lbnVtJztcblxuLyoqXG4gKiBAVG9kbyBBbGV4IHJlbW92ZSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gUHJvcGVydHlTaGFyZVxuICogQFRPRE8gQWxleCAoVFQtMTc3Nyk6IHJlcGxhY2UgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHRoZSBuZXcgdGhpcy5saXN0ZW4oKVxuICogU2VydmljZSBmb3Igd29yayB3aXRoIFByb3BlcnR5XG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5U2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPFByb3BlcnR5QmFzZSwgUHJvcGVydHksIFByb3BlcnR5Q29sbGVjdGlvbj4gaW1wbGVtZW50cyBJRXZlbnRMaXN0ZW5lciB7XG4gIG1vZGVsQ2xhc3M6IHR5cGVvZiBQcm9wZXJ0eSA9IFByb3BlcnR5O1xuICBjb2xsZWN0aW9uQ2xhc3M6IHR5cGVvZiBQcm9wZXJ0eUNvbGxlY3Rpb24gPSBQcm9wZXJ0eUNvbGxlY3Rpb247XG4gIGVuZHBvaW50VXJpID0gJ3Byb3BlcnRpZXMnO1xuICBkaXNhYmxlZE1ldGhvZHM6IFJlc3RNZXRob2RbXSA9IFsnZGVsZXRlQmF0Y2gnXTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogYW55KSB7XG4gICAgc3VwZXIoZW52aXJvbm1lbnQpO1xuICAgIHRoaXMubGlzdGVuRXZlbnRzKCk7XG4gICAgdGhpcy5saXN0ZW5Ob3RpZmljYXRpb25zKCk7XG4gIH1cblxuICBnZXQoKTogT2JzZXJ2YWJsZTxQcm9wZXJ0eUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KCkucGlwZShtYXAoKHByb3BlcnRpZXMpID0+IHByb3BlcnRpZXMuZ2V0QWN0aXZlKCkpKTtcbiAgfVxuXG4gIGdldEFsbCgpOiBPYnNlcnZhYmxlPFByb3BlcnR5Q29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBzdXBlci5nZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAVE9ETyByZW1vdmUgd2hlbiBmb3JlY2FzdCBtb3ZlZCB0byBzZXBhcmF0ZWQgYXBpXG4gICAqL1xuICBwdXQocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTxQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBzdXBlci5wdXQocHJvcGVydHkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh1cGRhdGVkUHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgPT4ge1xuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9VUERBVEVELCBwcm9wZXJ0eSkpO1xuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRQcm9wZXJ0eTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBzaGFyZXNpZ2h0Q29ubmVjdChwcm9wZXJ0eTogUHJvcGVydHkpOiBPYnNlcnZhYmxlPFByb3BlcnR5PiB7XG4gICAgcmV0dXJuIHN1cGVyLnB1dChwcm9wZXJ0eSwgYCR7dGhpcy5hcGlVcmx9LyR7cHJvcGVydHkuaWR9L3NoYXJlc2lnaHQtY29ubmVjdGApO1xuICB9XG5cbiAgc2hhcmVzaWdodERpc2Nvbm5lY3QocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTxQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBzdXBlci5wdXQocHJvcGVydHksIGAke3RoaXMuYXBpVXJsfS8ke3Byb3BlcnR5LmlkfS9zaGFyZXNpZ2h0LWRpc2Nvbm5lY3RgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAVE9ETyBubyByZWZyZXNoIGNhY2hlIHdpdGggdGhpcy51cGRhdGVDYWNoZShbdGhpcy5nZXRDYWNoZSgpLmZpbmRCeSgnaWQnLCBjaGFuZ2UubW9kZWwucHJvcGVydHkuaWQpXSwgJ3B1dCcpO1xuICAgKi9cbiAgbGlzdGVuRXZlbnRzKCk6IHZvaWQge1xuICAgIC8vIHNoYXJlIGludml0ZSBhY2NlcHRlZCBldmVudCBnaXZlcyBhY2Nlc3MgdG8gbmV3IHByb3BlcnR5XG4gICAgdGhpcy5saXN0ZW5DU0UoUHJvcGVydHlTaGFyZSwgdGhpcy5yZWZyZXNoQ2FjaGUsIFsncHV0J10pO1xuICAgIC8vIEBUT0RPIGdldCBmcm9tIHNlcGFyYXRlZCBhcGk/XG4gICAgdGhpcy5saXN0ZW5DU0UoUHJvcGVydHlTYWxlLCB0aGlzLnJlZnJlc2hDYWNoZSwgWydwb3N0JywgJ3B1dCcsICdkZWxldGUnXSk7XG4gICAgLy8gcHJvcGVydHkgY2FjaGVzIGNoaWxkIGVudGl0aWVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2VcbiAgICB0aGlzLmxpc3RlbkNTRShQcm9wZXJ0eVZhbHVhdGlvbiwgKHZhbHVhdGlvbnM6IFByb3BlcnR5VmFsdWF0aW9uW10pID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5nZXRDYWNoZSgpLmZpbmRCeSgnaWQnLCB2YWx1YXRpb25zWzBdLnByb3BlcnR5LmlkKTtcbiAgICAgIGlmIChwcm9wZXJ0eS52YWx1YXRpb24uZGF0ZSA8IHZhbHVhdGlvbnNbMF0uZGF0ZSkge1xuICAgICAgICBwcm9wZXJ0eS52YWx1YXRpb24gPSB2YWx1YXRpb25zWzBdO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKFtwcm9wZXJ0eV0sICdwdXQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmxpc3RlbkNTRShQcm9wZXJ0eUNhdGVnb3J5TW92ZW1lbnQsIHRoaXMucmVmcmVzaENhY2hlKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuTm90aWZpY2F0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5OT1RJRklDQVRJT05fQURERUQpLnN1YnNjcmliZSgobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiB2b2lkID0+IHtcbiAgICAgIGlmICghbm90aWZpY2F0aW9uLmlzUmVhZCAmJiBub3RpZmljYXRpb24uZXZlbnRUeXBlID09PSBVc2VyRXZlbnRUeXBlVHlwZUVudW0uU0hBUkVTSUdIVF9JTVBPUlQpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ2FjaGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZURlcHJlY2lhdGlvbkNhbGN1bGF0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHByb3BlcnR5VG9VcGRhdGU6IFByb3BlcnR5ID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5LCB7IGlkOiBwcm9wZXJ0eS5pZCwgZGVwcmVjaWF0aW9uQ2FsY3VsYXRpb246IHByb3BlcnR5LmRlcHJlY2lhdGlvbkNhbGN1bGF0aW9uIH0pXG5cbiAgICByZXR1cm4gdGhpcy5wdXQocHJvcGVydHlUb1VwZGF0ZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHVwZGF0ZWRQcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfREVQUkVDSUFUSU9OX0NBTENVTEFUSU9OX1VQREFURUQsIHVwZGF0ZWRQcm9wZXJ0eSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAVE9ETyBtb3ZlIHRvIHNlcGFyYXRlZCBhcGlcbiAgICogQWN0aXZhdGUgZGVhY3RpdmF0ZWQgcHJvcGVydHlcbiAgICovXG4gIGFjdGl2YXRlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9wcm9wZXJ0eS1zdWJzY3JpcHRpb25zYCwgeyBwcm9wZXJ0eSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocHJvcGVydHlTdWJzY3JpcHRpb25CYXNlOiBQcm9wZXJ0eVN1YnNjcmlwdGlvbkJhc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdQcm9wZXJ0eVN1YnNjcmlwdGlvbjogUHJvcGVydHlTdWJzY3JpcHRpb24gPSBwbGFpblRvQ2xhc3MoUHJvcGVydHlTdWJzY3JpcHRpb24sIHByb3BlcnR5U3Vic2NyaXB0aW9uQmFzZSk7XG4gICAgICAgICAgY29uc3QgYWN0aXZhdGVkUHJvcGVydHk6IFByb3BlcnR5ID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5LCBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0eSwgeyBzdWJzY3JpcHRpb25zOiBbbmV3UHJvcGVydHlTdWJzY3JpcHRpb25dIH0pKTtcblxuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoW2FjdGl2YXRlZFByb3BlcnR5XSwgJ3B1dCcpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAVE9ETyBtb3ZlIHRvIHNlcGFyYXRlZCBhcGlcbiAgICogRGVhY3RpdmF0ZSBhY3RpdmF0ZWQgcHJvcGVydHlcbiAgICovXG4gIGRlYWN0aXZhdGUocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vcHJvcGVydHktc3Vic2NyaXB0aW9ucy8ke3Byb3BlcnR5LmdldEN1cnJlbnRTdWJzY3JpcHRpb24oKS5pZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVhY3RpdmF0ZWRQcm9wZXJ0eTogUHJvcGVydHkgPSBwbGFpblRvQ2xhc3MoUHJvcGVydHksIE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnR5LCB7IHN1YnNjcmlwdGlvbnM6IFtdIH0pKTtcblxuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoW2RlYWN0aXZhdGVkUHJvcGVydHldLCAncHV0Jyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiBzdXBlci5kZWxldGUocHJvcGVydHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZXJyb3IoUHJvcGVydHlNZXNzYWdlc0VudW0uREVMRVRFXzUwMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBnZXRDb3JlbG9naWNTdGF0cyhwcm9wZXJ0eTogUHJvcGVydHkpOiBPYnNlcnZhYmxlPFByb3BlcnR5Q29yZWxvZ2ljU3RhdHNJbnRlcmZhY2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxQcm9wZXJ0eUNvcmVsb2dpY1N0YXRzSW50ZXJmYWNlPihgJHt0aGlzLmFwaVVybH0vJHtwcm9wZXJ0eS5pZH0vY29yZWxvZ2ljLXN0YXRzYClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHN0YXRzKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZFByb3BlcnR5ID0gdGhpcy5nZXRDYWNoZSgpLmZpbmRCeSgnaWQnLCBwcm9wZXJ0eS5pZCk7XG4gICAgICAgICAgdXBkYXRlZFByb3BlcnR5LmNvcmVsb2dpY0xhc3RSZXF1ZXN0ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKFt1cGRhdGVkUHJvcGVydHldLCAncHV0Jyk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdHM7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKHsgZ3Jvd3RoUGVyY2VudDogMCwgbG93TWFya2V0VmFsdWU6IDAsIG1hcmtldFZhbHVlOiAwLCBoaWdoTWFya2V0VmFsdWU6IDAgfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
@@ -2311,6 +2311,7 @@ class PropertyCategoryMovementCollection extends Collection {
2311
2311
  * @TODO TT-2355 Alex refactor propertyForecast, use separated api (then I can remove property from param)
2312
2312
  */
2313
2313
  filterByForecast(property, forecast) {
2314
+ console.log(property, forecast);
2314
2315
  return this.filterBy('property.id', property.id)
2315
2316
  .filterByFinancialYear('fromDate', 'toDate', new FinancialYear(forecast.financialYear));
2316
2317
  }
@@ -4387,7 +4388,8 @@ __decorate([
4387
4388
 
4388
4389
  var SharesightDetailsMessagesEnum;
4389
4390
  (function (SharesightDetailsMessagesEnum) {
4390
- SharesightDetailsMessagesEnum["CONNECTED"] = "We're syncing your ShareSight trades, which might take a few minutes.";
4391
+ SharesightDetailsMessagesEnum["HOLDING_CONNECTED"] = "We're syncing your ShareSight trades, which might take a few minutes.";
4392
+ SharesightDetailsMessagesEnum["PROPERTY_CONNECTED"] = "We're syncing your properties, which might take a few minutes.";
4391
4393
  SharesightDetailsMessagesEnum["DISCONNECTED"] = "Sharesight disconnected";
4392
4394
  SharesightDetailsMessagesEnum["DISCONNECT_CONFIRM"] = "Disconnecting ShareSight means we can no longer sync data. Any trades already imported will become editable in TaxTank.";
4393
4395
  SharesightDetailsMessagesEnum["ERROR"] = "Sharesight connection error";
@@ -4403,6 +4405,9 @@ class SharesightDetails extends AbstractModel {
4403
4405
  isHolding() {
4404
4406
  return this.redirectUri.includes('holdings-tank');
4405
4407
  }
4408
+ get connectedMessage() {
4409
+ return this.isHolding() ? SharesightDetailsMessagesEnum.HOLDING_CONNECTED : SharesightDetailsMessagesEnum.PROPERTY_CONNECTED;
4410
+ }
4406
4411
  }
4407
4412
  __decorate([
4408
4413
  Type(() => Date)
@@ -5663,6 +5668,11 @@ __decorate([
5663
5668
  class PropertyForecast extends PropertyForecast$1 {
5664
5669
  constructor() {
5665
5670
  super(...arguments);
5671
+ this.income = 0;
5672
+ this.expense = 0;
5673
+ this.interest = 0;
5674
+ this.depreciation = 0;
5675
+ this.loanBalance = 0;
5666
5676
  this.financialYear = new FinancialYear(new Date()).year;
5667
5677
  }
5668
5678
  /**
@@ -5679,13 +5689,6 @@ class PropertyForecast extends PropertyForecast$1 {
5679
5689
  get taxPosition() {
5680
5690
  return this.cashPosition + this.depreciation;
5681
5691
  }
5682
- /**
5683
- * Get rental return percent
5684
- * Rental Return = Income / Market Value
5685
- */
5686
- get rentalReturn() {
5687
- return this.income / this.marketValue;
5688
- }
5689
5692
  }
5690
5693
  __decorate([
5691
5694
  Transform(({ value }) => +value)
@@ -5702,9 +5705,6 @@ __decorate([
5702
5705
  __decorate([
5703
5706
  Transform(({ value }) => +value)
5704
5707
  ], PropertyForecast.prototype, "loanBalance", void 0);
5705
- __decorate([
5706
- Transform(({ value }) => +value)
5707
- ], PropertyForecast.prototype, "marketValue", void 0);
5708
5708
 
5709
5709
  /**
5710
5710
  * propertySale docs - https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4209508353/Property+Sold+button
@@ -5749,7 +5749,7 @@ class Property extends Property$1 {
5749
5749
  ?? plainToClass(PropertyForecast, {});
5750
5750
  }
5751
5751
  get forecastedRentalReturn() {
5752
- return this.currentYearForecast?.rentalReturn || 0;
5752
+ return (this.currentYearForecast?.income ?? 0) / this.valuation.marketValue;
5753
5753
  }
5754
5754
  get forecastedTaxPosition() {
5755
5755
  return this.currentYearForecast?.taxPosition || 0;
@@ -5777,7 +5777,7 @@ class Property extends Property$1 {
5777
5777
  return this.subscriptions[0];
5778
5778
  }
5779
5779
  getForecastByYear(year) {
5780
- return this.forecasts.find((forecast) => forecast.financialYear === year);
5780
+ return this.forecasts.find((forecast) => forecast.financialYear === year) ?? plainToClass(PropertyForecast, {});
5781
5781
  }
5782
5782
  get isShared() {
5783
5783
  return this.shares.length > 1;
@@ -8101,7 +8101,6 @@ class PropertyReportItemDepreciation extends PropertyReportItem {
8101
8101
  constructor(depreciations, property, chartAccounts) {
8102
8102
  super(property, chartAccounts);
8103
8103
  this.amount = Math.abs(depreciations.getCurrentYearForecastAmount());
8104
- console.log(depreciations.first.type);
8105
8104
  this.description = DEPRECIATION_TYPE_LABELS[depreciations.first.type];
8106
8105
  }
8107
8106
  }
@@ -9072,7 +9071,7 @@ class BankAccountCollection extends Collection {
9072
9071
  return this.getLoanAccounts().reduce((sum, bankAccount) => sum + bankAccount.getMonthlyRepaymentAmount(propertyId), 0);
9073
9072
  }
9074
9073
  getLVR(property) {
9075
- return this.getPropertyBalanceAmount(property.id) / property.currentYearForecast.marketValue;
9074
+ return this.getPropertyBalanceAmount(property.id) / property.valuation.marketValue;
9076
9075
  }
9077
9076
  /**
9078
9077
  * @TODO Alex/Vik: maybe we should get it from jwtToken or think about some localStorageService?
@@ -14397,6 +14396,7 @@ class PropertyValuationService extends RestService$1 {
14397
14396
  this.modelClass = PropertyValuation;
14398
14397
  this.collectionClass = PropertyValuationCollection;
14399
14398
  this.disabledMethods = ['postBatch', 'putBatch'];
14399
+ this.useBackendError = true;
14400
14400
  }
14401
14401
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PropertyValuationService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
14402
14402
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PropertyValuationService, providedIn: 'root' }); }
@@ -14534,6 +14534,9 @@ class PropertyService extends RestService$1 {
14534
14534
  updatedProperty.corelogicLastRequest = new Date();
14535
14535
  this.updateCache([updatedProperty], 'put');
14536
14536
  return stats;
14537
+ }), catchError((error) => {
14538
+ this.handleError(error);
14539
+ return of({ growthPercent: 0, lowMarketValue: 0, marketValue: 0, highMarketValue: 0 });
14537
14540
  }));
14538
14541
  }
14539
14542
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PropertyService, deps: [{ token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -23310,7 +23313,6 @@ class PropertyForecastForm extends AbstractForm {
23310
23313
  const noIncome = movements.filterBy('propertyCategory.id', noIncomeCategories).length === movements.length;
23311
23314
  super({
23312
23315
  financialYear: new UntypedFormControl({ value: forecast.financialYear, disabled: true }),
23313
- marketValue: new UntypedFormControl(forecast.marketValue, Validators.required),
23314
23316
  income: new UntypedFormControl({ value: forecast.income, disabled: noIncome }, Validators.required),
23315
23317
  expense: new UntypedFormControl(forecast.expense, Validators.required),
23316
23318
  interest: new UntypedFormControl(forecast.interest, Validators.required),
@@ -23326,30 +23328,33 @@ class PropertyForecastForm extends AbstractForm {
23326
23328
  class PropertyAddForm extends AbstractForm {
23327
23329
  constructor() {
23328
23330
  super({
23329
- address: new UntypedFormControl(null, Validators.required),
23330
- purchasePrice: new UntypedFormControl(null, Validators.required),
23331
- contractDate: new UntypedFormControl(null, [
23331
+ address: new FormControl(null, Validators.required),
23332
+ purchasePrice: new FormControl(null, Validators.required),
23333
+ contractDate: new FormControl(null, [
23332
23334
  Validators.required,
23333
23335
  maxDateValidator(new FinancialYear().endDate, 'You cannot add a property with a contract date in future financial years.')
23334
23336
  ]),
23335
- settlementDate: new UntypedFormControl(null, Validators.required),
23336
- forecasts: new UntypedFormArray([
23337
- new PropertyForecastForm()
23338
- ]),
23339
- shares: new UntypedFormArray([
23340
- new PropertyShareForm()
23341
- ]),
23342
- categoryMovements: new UntypedFormArray([
23343
- new PropertyCategoryMovementForm()
23344
- ])
23337
+ settlementDate: new FormControl(null, Validators.required),
23338
+ share: new PropertyShareForm(),
23339
+ forecast: new PropertyForecastForm(),
23340
+ category: new FormControl(null, Validators.required)
23345
23341
  }, plainToClass(Property, {}));
23346
- // we should put the same market value to both, forecast and valuation. also we moved marketValue to another form - leave it as 0
23347
- this.valuationForm.get('marketValue').setValue(0);
23348
- this.forecastForm.get('marketValue').setValue(0);
23349
- this.get('contractDate').valueChanges.subscribe((contractDate) => {
23350
- this.categoryMovementForm.get('fromDate').setValue(contractDate);
23342
+ this.listenEvents();
23343
+ }
23344
+ get forecastForm() {
23345
+ return this.get('forecast');
23346
+ }
23347
+ submit() {
23348
+ return super.submit({
23349
+ shares: [this.value.share],
23350
+ forecasts: [this.forecastForm.submit()]
23351
23351
  });
23352
- this.categoryMovementForm.get('propertyCategory').valueChanges.subscribe((category) => {
23352
+ }
23353
+ listenEvents() {
23354
+ this.listenCategoryChanges();
23355
+ }
23356
+ listenCategoryChanges() {
23357
+ this.get('category').valueChanges.subscribe((category) => {
23353
23358
  if (category.isShared()) {
23354
23359
  this.forecastForm.get('claimPercent').enable();
23355
23360
  }
@@ -23366,21 +23371,6 @@ class PropertyAddForm extends AbstractForm {
23366
23371
  }
23367
23372
  });
23368
23373
  }
23369
- get valuationForm() {
23370
- return this.categoryMovementForm.get('valuation');
23371
- }
23372
- get forecastForm() {
23373
- // [0] because for property add form we have always 1 forecast form inside
23374
- return this.get('forecasts').controls[0];
23375
- }
23376
- get shareForm() {
23377
- // [0] because for property add form we have always 1 forecast form inside
23378
- return this.get('shares').controls[0];
23379
- }
23380
- get categoryMovementForm() {
23381
- // [0] because for property add form we always have 1 category movement form inside
23382
- return this.get('categoryMovements').controls[0];
23383
- }
23384
23374
  }
23385
23375
 
23386
23376
  class MyTaxBusinessDetailsForm extends AbstractForm {