@snabcentr/client-core 3.5.6 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
- import { inject, Injectable } from '@angular/core';
2
+ import { DestroyRef, inject, Injectable } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
4
  import { interval, of, ReplaySubject, switchMap, tap } from 'rxjs';
4
5
  import { SC_UPDATE_INTERVAL, SC_URLS } from '../../tokens';
5
6
  import { SC_USER_INFO } from '../../user/tokens/sc-user-providers';
@@ -22,6 +23,10 @@ export class ScNotificationsService {
22
23
  * {@link Observable} данных о текущем пользователе.
23
24
  */
24
25
  this.user$ = inject(SC_USER_INFO);
26
+ /**
27
+ * Ссылка на жизненный цикл сервиса.
28
+ */
29
+ this.destroyRef = inject(DestroyRef);
25
30
  /**
26
31
  * Интервалы обновления данных.
27
32
  */
@@ -50,7 +55,7 @@ export class ScNotificationsService {
50
55
  else {
51
56
  this.updateUserNotificationsCount();
52
57
  }
53
- }), switchMap((user) => (user.isGuest ? of() : this.interval$)))
58
+ }), switchMap((user) => (user.isGuest ? of() : this.interval$)), takeUntilDestroyed(this.destroyRef))
54
59
  .subscribe();
55
60
  }
56
61
  /**
@@ -160,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
160
165
  providedIn: 'root',
161
166
  }]
162
167
  }], ctorParameters: () => [] });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtbm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9ub3RpZmljYXRpb25zL3NlcnZpY2VzL3NjLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBTW5FLE1BQU0sT0FBTyxzQkFBc0I7SUF3Qy9COzs7T0FHRztJQUNIO1FBM0NBOztXQUVHO1FBQ2MsU0FBSSxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLFNBQUksR0FBWSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFakQ7O1dBRUc7UUFDYyxVQUFLLEdBQXVCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVsRTs7V0FFRztRQUNjLG1CQUFjLEdBQXNCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRWhGOztXQUVHO1FBQ2Msd0JBQW1CLEdBQXFELElBQUksYUFBYSxDQUFvQyxDQUFDLENBQUMsQ0FBQztRQUVqSjs7V0FFRztRQUNjLG1CQUFjLEdBQXlDLElBQUksYUFBYSxDQUF3QixDQUFDLENBQUMsQ0FBQztRQUVwSDs7V0FFRztRQUNjLGNBQVMsR0FBdUIsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMs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SSxDQUFDLE1BQU0sQ0FBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSx1QkFBdUIsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHFCQUFxQixDQUFDLGNBQXNCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sdUJBQXVCLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRDs7T0FFRztJQUNJLDRCQUE0QjtRQUMvQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSx1QkFBdUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssMkJBQTJCLENBQUMsa0JBQXFEO1FBQ3JGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHNCQUFzQixDQUFDLGFBQW9DO1FBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7K0dBbExRLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRm5CLE1BQU07OzRGQUVULHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjSVVwZGF0ZUludGVydmFsLCBTY0lVcmxzIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IFNDX1VQREFURV9JTlRFUlZBTCwgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBTY1VzZXIgfSBmcm9tICcuLi8uLi91c2VyL2R0by9zYy11c2VyJztcbmltcG9ydCB7IFNDX1VTRVJfSU5GTyB9IGZyb20gJy4uLy4uL3VzZXIvdG9rZW5zL3NjLXVzZXItcHJvdmlkZXJzJztcbmltcG9ydCB7IFNjSU5vdGlmaWNhdGlvbnNDb3VudCwgU2NJVXNlck5vdGlmaWNhdGlvbiB9IGZyb20gJy4uJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NOb3RpZmljYXRpb25zU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogSFRUUC3QutC70LjQtdC90YIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMgPSBpbmplY3QoU0NfVVJMUyk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LTQsNC90L3Ri9GFINC+INGC0LXQutGD0YnQtdC8INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXIkOiBPYnNlcnZhYmxlPFNjVXNlcj4gPSBpbmplY3QoU0NfVVNFUl9JTkZPKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3RgtC10YDQstCw0LvRiyDQvtCx0L3QvtCy0LvQtdC90LjRjyDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGVJbnRlcnZhbDogU2NJVXBkYXRlSW50ZXJ2YWwgPSBpbmplY3QoU0NfVVBEQVRFX0lOVEVSVkFMKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBSZXBsYXlTdWJqZWN0fSDQtNCw0L3QvdGL0YUg0L4g0LrQvtC70LjRh9C10YHRgtCy0LUg0YPQstC10LTQvtC80LvQtdC90LjQuSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25zQ291bnQkOiBSZXBsYXlTdWJqZWN0PFNjSU5vdGlmaWNhdGlvbnNDb3VudCB8IHVuZGVmaW5lZD4gPSBuZXcgUmVwbGF5U3ViamVjdDxTY0lOb3RpZmljYXRpb25zQ291bnQgfCB1bmRlZmluZWQ+KDEpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFJlcGxheVN1YmplY3R9INC00LDQvdC90YvRhSDQvtCxINGD0LLQtdC00L7QvNC70LXQvdC40Y/RhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25zJDogUmVwbGF5U3ViamVjdDxTY0lVc2VyTm90aWZpY2F0aW9uW10+ID0gbmV3IFJlcGxheVN1YmplY3Q8U2NJVXNlck5vdGlmaWNhdGlvbltdPigxKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3RgtC10YDQstCw0LssINGH0LXRgNC10Lcg0LrQvtGC0L7RgNGL0Lkg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyDQt9Cw0L/RgNC+0YEg0YPQstC10LTQvtC80LvQtdC90LjQuSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnRlcnZhbCQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IGludGVydmFsKHRoaXMudXBkYXRlSW50ZXJ2YWwubm90aWZpY2F0aW9uc1VwZGF0ZSkucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXNlck5vdGlmaWNhdGlvbnNDb3VudCgpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjTm90aWZpY2F0aW9uc1NlcnZpY2V9LlxuICAgICAqXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnVzZXIkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKHVzZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tc2VsZWN0b3ItcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLmlzR3Vlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXVzZWxlc3MtdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNDb3VudCQubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVVc2VyTm90aWZpY2F0aW9uc0NvdW50KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHVzZXIpID0+ICh1c2VyLmlzR3Vlc3QgPyBvZigpIDogdGhpcy5pbnRlcnZhbCQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHQvdC+0LLQu9GP0LXRgiDQutC+0LvQuNGH0LXRgdGC0LLQviDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVVc2VyTm90aWZpY2F0aW9uc0NvdW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFVzZXJOb3RpZmljYXRpb25zQ291bnQkKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoY291bnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpZmljYXRpb25zQ291bnRDaGFuZ2UoY291bnQpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdC90L7QstC70Y/QtdGCINGB0L/QuNGB0L7QuiDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVVc2VyTm90aWZpY2F0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRVc2VyTm90aWZpY2F0aW9ucyQoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChub3RpZmljYXRpb25zTGlzdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vdGlmaWNhdGlvbnNDaGFuZ2Uobm90aWZpY2F0aW9uc0xpc3QpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdC90L7QstC70Y/QtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INC4INGB0L/QuNGB0L7QuiDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVOb3RpZmljYXRpb25zTGlzdEFuZENvdW50JCgpOiBPYnNlcnZhYmxlPFNjSVVzZXJOb3RpZmljYXRpb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2VyTm90aWZpY2F0aW9uc0NvdW50JCgpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKGNvdW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpZmljYXRpb25zQ291bnRDaGFuZ2UoY291bnQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5nZXRVc2VyTm90aWZpY2F0aW9ucyQoKSksXG4gICAgICAgICAgICB0YXAoKG5vdGlmaWNhdGlvbnNMaXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpZmljYXRpb25zQ2hhbmdlKG5vdGlmaWNhdGlvbnNMaXN0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0YPQstC10LTQvtC80LvQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VXNlck5vdGlmaWNhdGlvbnMkKCk6IE9ic2VydmFibGU8U2NJVXNlck5vdGlmaWNhdGlvbltdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFNjSVVzZXJOb3RpZmljYXRpb25bXT4oYCR7dGhpcy51cmxzLmFwaVVybH0vdXNlci9ub3RpZmljYXRpb25zYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRVc2VyTm90aWZpY2F0aW9uc0NvdW50JCgpOiBPYnNlcnZhYmxlPFNjSU5vdGlmaWNhdGlvbnNDb3VudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTY0lOb3RpZmljYXRpb25zQ291bnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L3VzZXIvbm90aWZpY2F0aW9ucy9jb3VudGApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCINC30LDQv9GA0L7RgSDQvdCwINGD0LTQsNC70LXQvdC40LUg0LLRgdC10YUg0YPQstC10LTQvtC80LvQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlQWxsTm90aWZpY2F0aW9ucyQoKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dW5kZWZpbmVkPihgJHt0aGlzLnVybHMuYXBpVXJsfS91c2VyL25vdGlmaWNhdGlvbnNgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L3QsCDQv9GA0L7Rh9GC0LXQvdC40LUg0LLRgdC10YUg0YPQstC10LTQvtC80LvQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZEFsbE5vdGlmaWNhdGlvbnMkKCk6IE9ic2VydmFibGU8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8dW5kZWZpbmVkPihgJHt0aGlzLnVybHMuYXBpVXJsfS91c2VyL25vdGlmaWNhdGlvbnNgLCB7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC90LAg0YPQtNCw0LvQtdC90LjQtSDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPINC/0L4g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRgy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub3RpZmljYXRpb25JZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPLCDQutC+0YLQvtGA0L7QtSDQvdC10L7QsdGF0L7QtNC40LzQviDRg9C00LDQu9C40YLRjC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlTm90aWZpY2F0aW9uQnlJZCQobm90aWZpY2F0aW9uSWQ6IG51bWJlcik6IE9ic2VydmFibGU8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHVuZGVmaW5lZD4oYCR7dGhpcy51cmxzLmFwaVVybH0vdXNlci9ub3RpZmljYXRpb25zLyR7bm90aWZpY2F0aW9uSWR9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC90LAg0L/RgNC+0YfRgtC10L3QuNC1INGD0LLQtdC00L7QvNC70LXQvdC40Y8g0L/QviDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbklkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGD0LLQtdC00L7QvNC70LXQvdC40Y8sINC60L7RgtC+0YDQvtC1INC90LXQvtCx0YXQvtC00LjQvNC+INC/0L7QvNC10YLQuNGC0Ywg0L/RgNC+0YfQuNGC0LDQvdC90YvQvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZE5vdGlmaWNhdGlvbkJ5SWQkKG5vdGlmaWNhdGlvbklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPHVuZGVmaW5lZD4oYCR7dGhpcy51cmxzLmFwaVVybH0vdXNlci9ub3RpZmljYXRpb25zLyR7bm90aWZpY2F0aW9uSWR9YCwge30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQutC+0LvQuNGH0LXRgdGC0LLQsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9uc0NvdW50Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPFNjSU5vdGlmaWNhdGlvbnNDb3VudCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zQ291bnQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDRgdC/0LjRgdC60LAg0YPQstC10LTQvtC80LvQtdC90LjQuSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICovXG4gICAgcHVibGljIGdldE5vdGlmaWNhdGlvbnNDaGFuZ2UkKCk6IE9ic2VydmFibGU8U2NJVXNlck5vdGlmaWNhdGlvbltdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQutC+0LvQuNGH0LXRgdGC0LLQsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub3RpZmljYXRpb25zQ291bnQg0JTQsNC90L3Ri9C1INC+INC60L7Qu9C40YfQtdGB0YLQstC1INGD0LLQtdC00L7QvNC70LXQvdC40LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXROb3RpZmljYXRpb25zQ291bnRDaGFuZ2Uobm90aWZpY2F0aW9uc0NvdW50OiBTY0lOb3RpZmljYXRpb25zQ291bnQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zQ291bnQkLm5leHQobm90aWZpY2F0aW9uc0NvdW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQv9C40YHQutCwINGD0LLQtdC00L7QvNC70LXQvdC40Lkg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbnMg0JTQsNC90L3Ri9C1INC+INGB0L/QuNGB0LrQtSDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Tm90aWZpY2F0aW9uc0NoYW5nZShub3RpZmljYXRpb25zOiBTY0lVc2VyTm90aWZpY2F0aW9uW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zJC5uZXh0KG5vdGlmaWNhdGlvbnMpO1xuICAgIH1cbn1cbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtbm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9ub3RpZmljYXRpb25zL3NlcnZpY2VzL3NjLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQU1uRSxNQUFNLE9BQU8sc0JBQXNCO0lBNkMvQjs7O09BR0c7SUFDSDtRQWhEQTs7V0FFRztRQUNjLFNBQUksR0FBZSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkQ7O1dBRUc7UUFDYyxTQUFJLEdBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpEOztXQUVHO1FBQ2MsVUFBSyxHQUF1QixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEU7O1dBRUc7UUFDYyxlQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTdEOztXQUVHO1FBQ2MsbUJBQWMsR0FBc0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFaEY7O1dBRUc7UUFDYyx3QkFBbUIsR0FBcUQsSUFBSSxhQUFhLENBQW9DLENBQUMsQ0FBQyxDQUFDO1FBRWpKOztXQUVHO1FBQ2MsbUJBQWMs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bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0lVcGRhdGVJbnRlcnZhbCwgU2NJVXJscyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBTQ19VUERBVEVfSU5URVJWQUwsIFNDX1VSTFMgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgU2NVc2VyIH0gZnJvbSAnLi4vLi4vdXNlci9kdG8vc2MtdXNlcic7XG5pbXBvcnQgeyBTQ19VU0VSX0lORk8gfSBmcm9tICcuLi8uLi91c2VyL3Rva2Vucy9zYy11c2VyLXByb3ZpZGVycyc7XG5pbXBvcnQgeyBTY0lOb3RpZmljYXRpb25zQ291bnQsIFNjSVVzZXJOb3RpZmljYXRpb24gfSBmcm9tICcuLic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjTm90aWZpY2F0aW9uc1NlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIEhUVFAt0LrQu9C40LXQvdGCLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L/RgNC40LvQvtC20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cmxzOiBTY0lVcmxzID0gaW5qZWN0KFNDX1VSTFMpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC00LDQvdC90YvRhSDQviDRgtC10LrRg9GJ0LXQvCDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyJDogT2JzZXJ2YWJsZTxTY1VzZXI+ID0gaW5qZWN0KFNDX1VTRVJfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L3QsCDQttC40LfQvdC10L3QvdGL0Lkg0YbQuNC60Lsg0YHQtdGA0LLQuNGB0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmOiBEZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdGC0LXRgNCy0LDQu9GLINC+0LHQvdC+0LLQu9C10L3QuNGPINC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZUludGVydmFsOiBTY0lVcGRhdGVJbnRlcnZhbCA9IGluamVjdChTQ19VUERBVEVfSU5URVJWQUwpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFJlcGxheVN1YmplY3R9INC00LDQvdC90YvRhSDQviDQutC+0LvQuNGH0LXRgdGC0LLQtSDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnNDb3VudCQ6IFJlcGxheVN1YmplY3Q8U2NJTm90aWZpY2F0aW9uc0NvdW50IHwgdW5kZWZpbmVkPiA9IG5ldyBSZXBsYXlTdWJqZWN0PFNjSU5vdGlmaWNhdGlvbnNDb3VudCB8IHVuZGVmaW5lZD4oMSk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgUmVwbGF5U3ViamVjdH0g0LTQsNC90L3Ri9GFINC+0LEg0YPQstC10LTQvtC80LvQtdC90LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnMkOiBSZXBsYXlTdWJqZWN0PFNjSVVzZXJOb3RpZmljYXRpb25bXT4gPSBuZXcgUmVwbGF5U3ViamVjdDxTY0lVc2VyTm90aWZpY2F0aW9uW10+KDEpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdGC0LXRgNCy0LDQuywg0YfQtdGA0LXQtyDQutC+0YLQvtGA0YvQuSDQstGL0L/QvtC70L3Rj9C10YLRgdGPINC30LDQv9GA0L7RgSDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGludGVydmFsJDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gaW50ZXJ2YWwodGhpcy51cGRhdGVJbnRlcnZhbC5ub3RpZmljYXRpb25zVXBkYXRlKS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVc2VyTm90aWZpY2F0aW9uc0NvdW50KCk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NOb3RpZmljYXRpb25zU2VydmljZX0uXG4gICAgICpcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudXNlciRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgodXNlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9uby1zZWxlY3Rvci1wYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXIuaXNHdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdXNlbGVzcy11bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc0NvdW50JC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJOb3RpZmljYXRpb25zQ291bnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgodXNlcikgPT4gKHVzZXIuaXNHdWVzdCA/IG9mKCkgOiB0aGlzLmludGVydmFsJCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdC90L7QstC70Y/QtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INGD0LLQtdC00L7QvNC70LXQvdC40LkuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVVzZXJOb3RpZmljYXRpb25zQ291bnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0VXNlck5vdGlmaWNhdGlvbnNDb3VudCQoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChjb3VudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vdGlmaWNhdGlvbnNDb3VudENoYW5nZShjb3VudCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0YHQv9C40YHQvtC6INGD0LLQtdC00L7QvNC70LXQvdC40LkuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVVzZXJOb3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFVzZXJOb3RpZmljYXRpb25zJCgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKG5vdGlmaWNhdGlvbnNMaXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm90aWZpY2F0aW9uc0NoYW5nZShub3RpZmljYXRpb25zTGlzdCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0Lgg0YHQv9C40YHQvtC6INGD0LLQtdC00L7QvNC70LXQvdC40LkuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZU5vdGlmaWNhdGlvbnNMaXN0QW5kQ291bnQkKCk6IE9ic2VydmFibGU8U2NJVXNlck5vdGlmaWNhdGlvbltdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJOb3RpZmljYXRpb25zQ291bnQkKCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoY291bnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vdGlmaWNhdGlvbnNDb3VudENoYW5nZShjb3VudCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdldFVzZXJOb3RpZmljYXRpb25zJCgpKSxcbiAgICAgICAgICAgIHRhcCgobm90aWZpY2F0aW9uc0xpc3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vdGlmaWNhdGlvbnNDaGFuZ2Uobm90aWZpY2F0aW9uc0xpc3QpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRVc2VyTm90aWZpY2F0aW9ucyQoKTogT2JzZXJ2YWJsZTxTY0lVc2VyTm90aWZpY2F0aW9uW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8U2NJVXNlck5vdGlmaWNhdGlvbltdPihgJHt0aGlzLnVybHMuYXBpVXJsfS91c2VyL25vdGlmaWNhdGlvbnNgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINC60L7Qu9C40YfQtdGB0YLQstCwINGD0LLQtdC00L7QvNC70LXQvdC40LkuXG4gICAgICovXG4gICAgcHVibGljIGdldFVzZXJOb3RpZmljYXRpb25zQ291bnQkKCk6IE9ic2VydmFibGU8U2NJTm90aWZpY2F0aW9uc0NvdW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFNjSU5vdGlmaWNhdGlvbnNDb3VudD4oYCR7dGhpcy51cmxzLmFwaVVybH0vdXNlci9ub3RpZmljYXRpb25zL2NvdW50YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC90LAg0YPQtNCw0LvQtdC90LjQtSDQstGB0LXRhSDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVBbGxOb3RpZmljYXRpb25zJCgpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx1bmRlZmluZWQ+KGAke3RoaXMudXJscy5hcGlVcmx9L3VzZXIvbm90aWZpY2F0aW9uc2ApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCINC30LDQv9GA0L7RgSDQvdCwINC/0YDQvtGH0YLQtdC90LjQtSDQstGB0LXRhSDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkQWxsTm90aWZpY2F0aW9ucyQoKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDx1bmRlZmluZWQ+KGAke3RoaXMudXJscy5hcGlVcmx9L3VzZXIvbm90aWZpY2F0aW9uc2AsIHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L3QsCDRg9C00LDQu9C10L3QuNC1INGD0LLQtdC00L7QvNC70LXQvdC40Y8g0L/QviDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbklkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGD0LLQtdC00L7QvNC70LXQvdC40Y8sINC60L7RgtC+0YDQvtC1INC90LXQvtCx0YXQvtC00LjQvNC+INGD0LTQsNC70LjRgtGMLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVOb3RpZmljYXRpb25CeUlkJChub3RpZmljYXRpb25JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dW5kZWZpbmVkPihgJHt0aGlzLnVybHMuYXBpVXJsfS91c2VyL25vdGlmaWNhdGlvbnMvJHtub3RpZmljYXRpb25JZH1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L3QsCDQv9GA0L7Rh9GC0LXQvdC40LUg0YPQstC10LTQvtC80LvQtdC90LjRjyDQv9C+INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0YMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm90aWZpY2F0aW9uSWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YPQstC10LTQvtC80LvQtdC90LjRjywg0LrQvtGC0L7RgNC+0LUg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L/QvtC80LXRgtC40YLRjCDQv9GA0L7Rh9C40YLQsNC90L3Ri9C8LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkTm90aWZpY2F0aW9uQnlJZCQobm90aWZpY2F0aW9uSWQ6IG51bWJlcik6IE9ic2VydmFibGU8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8dW5kZWZpbmVkPihgJHt0aGlzLnVybHMuYXBpVXJsfS91c2VyL25vdGlmaWNhdGlvbnMvJHtub3RpZmljYXRpb25JZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC60L7Qu9C40YfQtdGB0YLQstCwINGD0LLQtdC00L7QvNC70LXQvdC40Lkg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROb3RpZmljYXRpb25zQ291bnRDaGFuZ2UkKCk6IE9ic2VydmFibGU8U2NJTm90aWZpY2F0aW9uc0NvdW50IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnNDb3VudCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INGB0L/QuNGB0LrQsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9uc0NoYW5nZSQoKTogT2JzZXJ2YWJsZTxTY0lVc2VyTm90aWZpY2F0aW9uW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9ucyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC60L7Qu9C40YfQtdGB0YLQstCwINGD0LLQtdC00L7QvNC70LXQvdC40Lkg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbnNDb3VudCDQlNCw0L3QvdGL0LUg0L4g0LrQvtC70LjRh9C10YHRgtCy0LUg0YPQstC10LTQvtC80LvQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldE5vdGlmaWNhdGlvbnNDb3VudENoYW5nZShub3RpZmljYXRpb25zQ291bnQ6IFNjSU5vdGlmaWNhdGlvbnNDb3VudCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNDb3VudCQubmV4dChub3RpZmljYXRpb25zQ291bnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDRgdC/0LjRgdC60LAg0YPQstC10LTQvtC80LvQtdC90LjQuSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm90aWZpY2F0aW9ucyDQlNCw0L3QvdGL0LUg0L4g0YHQv9C40YHQutC1INGD0LLQtdC00L7QvNC70LXQvdC40LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXROb3RpZmljYXRpb25zQ2hhbmdlKG5vdGlmaWNhdGlvbnM6IFNjSVVzZXJOb3RpZmljYXRpb25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMkLm5leHQobm90aWZpY2F0aW9ucyk7XG4gICAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import * as i1 from 'rxjs';
2
- import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
2
+ import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, EMPTY, from, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
3
3
  import { map, startWith, catchError } from 'rxjs/operators';
4
4
  import { parseISO, parse, isValid, format } from 'date-fns';
5
5
  import { isString, isNil, isMatch, isArray, get } from 'lodash-es';
@@ -13,9 +13,9 @@ import { HttpContextToken, HttpContext, HttpHeaders, HttpClient, HttpParams, Htt
13
13
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
14
14
  import { tuiIsPresent, TuiDay, tuiPure, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
15
15
  import { tuiCleanObject } from '@taiga-ui/addon-doc/utils';
16
- import { __decorate } from 'tslib';
17
16
  import * as i2 from '@angular/router';
18
- import { NavigationEnd, Router, ActivatedRoute } from '@angular/router';
17
+ import { Router, NavigationEnd, ActivatedRoute } from '@angular/router';
18
+ import { __decorate } from 'tslib';
19
19
  import { objectToSnake, objectToCamel, toSnake } from 'ts-case-convert';
20
20
  import { Meta, Title } from '@angular/platform-browser';
21
21
 
@@ -3132,6 +3132,16 @@ class ScCatalogFilterService {
3132
3132
  */
3133
3133
  this.filterMap = new Map();
3134
3134
  }
3135
+ /**
3136
+ * Удаляет просроченные записи кэша, чтобы карта не удерживала фильтры неиспользуемых категорий.
3137
+ */
3138
+ deleteExpiredCacheItems() {
3139
+ this.filterMap.forEach((cachedItem, key) => {
3140
+ if (!cachedItem.cachedDataIsActual()) {
3141
+ this.filterMap.delete(key);
3142
+ }
3143
+ });
3144
+ }
3135
3145
  /**
3136
3146
  * Возвращает список доступных фильтров продуктов в категории.
3137
3147
  *
@@ -3140,6 +3150,7 @@ class ScCatalogFilterService {
3140
3150
  */
3141
3151
  getFilters$(categoryIdOrSlug, recursively) {
3142
3152
  const key = `${categoryIdOrSlug}:${recursively ?? ''}`;
3153
+ this.deleteExpiredCacheItems();
3143
3154
  let cachedItem = this.filterMap.get(key);
3144
3155
  if (!cachedItem) {
3145
3156
  let params = new HttpParams();
@@ -3273,10 +3284,14 @@ class ScCatalogService {
3273
3284
  * Сервис информации о пользователе.
3274
3285
  */
3275
3286
  this.userService = inject(ScUserService);
3287
+ /**
3288
+ * Ссылка на жизненный цикл сервиса.
3289
+ */
3290
+ this.destroyRef = inject(DestroyRef);
3276
3291
  /**
3277
3292
  * {@link Observable} изменения списка товаров со скидкой.
3278
3293
  */
3279
- this.firstDiscounted$ = inject(SC_USER_INFO).pipe(switchMap((user) => user.isGuest ? of(null) : this.getProducts$({ filters: { onlyDiscounted: true }, paginate: true, page: 1, perPage: this.countFirstDiscountedProducts })), shareReplay(1));
3294
+ this.firstDiscounted$ = inject(SC_USER_INFO).pipe(switchMap((user) => user.isGuest ? of(null) : this.getProducts$({ filters: { onlyDiscounted: true }, paginate: true, page: 1, perPage: this.countFirstDiscountedProducts })), shareReplay({ refCount: true, bufferSize: 1 }));
3280
3295
  /**
3281
3296
  * {@link Observable} изменения списка из первых товаров со скидкой.
3282
3297
  */
@@ -3287,16 +3302,24 @@ class ScCatalogService {
3287
3302
  this.countDiscountedProducts$ = this.firstDiscounted$.pipe(map$1((data) => data?.meta.total ?? 0));
3288
3303
  this.userService
3289
3304
  .getUserChange$()
3290
- .pipe(skip(1))
3305
+ .pipe(skip(1), takeUntilDestroyed(this.destroyRef))
3291
3306
  .subscribe(() => {
3292
- this.idCategoryMap.clear();
3293
- this.categoryMap.clear();
3294
- this.productHistoryMap.clear();
3295
- this.productMap.clear();
3296
- this.categoryProductsMap.clear();
3297
- this.virtualCategoryMap.clear();
3307
+ this.clearCache();
3298
3308
  });
3299
3309
  }
3310
+ /**
3311
+ * Очищает данные каталога, привязанные к текущему пользователю.
3312
+ */
3313
+ clearCache() {
3314
+ this.idCategoryMap.clear();
3315
+ this.categoryMap.clear();
3316
+ this.productHistoryMap.clear();
3317
+ this.productMap.clear();
3318
+ this.categoryProductsMap.clear();
3319
+ this.virtualCategoryMap.clear();
3320
+ this.categoryIdOrSlugMap.clear();
3321
+ this.productIdOrSlugMap.clear();
3322
+ }
3300
3323
  /**
3301
3324
  * Возвращает категорию из коллекции каталога, если её срок жизни не истёк.
3302
3325
  *
@@ -3407,6 +3430,9 @@ class ScCatalogService {
3407
3430
  .pipe(catchError$1(() => of({}))), null);
3408
3431
  this.productHistoryMap.set(product.id.toString(), cachedItem);
3409
3432
  }
3433
+ if (!cachedItem.cachedDataIsActual()) {
3434
+ cachedItem.update();
3435
+ }
3410
3436
  return cachedItem.item$;
3411
3437
  }
3412
3438
  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
@@ -3463,6 +3489,28 @@ class ScCatalogService {
3463
3489
  }
3464
3490
  }));
3465
3491
  }
3492
+ /**
3493
+ * Возвращает данные о родительской категории для редиректа, когда категория недоступна (HTTP 404).
3494
+ * Если у категории нет нескрытой родительской категории, возвращается пустой объект.
3495
+ *
3496
+ * @param categoryIdOrSlug Идентификатор или slug недоступной категории.
3497
+ */
3498
+ getCategoryParentCategory$(categoryIdOrSlug) {
3499
+ return this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/parent-category`, {
3500
+ context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
3501
+ });
3502
+ }
3503
+ /**
3504
+ * Возвращает данные о родительской категории для редиректа, когда товар недоступен (HTTP 404).
3505
+ * Если у товара нет нескрытой родительской категории, возвращается пустой объект.
3506
+ *
3507
+ * @param productIdOrSlug Идентификатор или slug недоступного товара.
3508
+ */
3509
+ getProductParentCategory$(productIdOrSlug) {
3510
+ return this.http.get(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/parent-category`, {
3511
+ context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
3512
+ });
3513
+ }
3466
3514
  getProductDataCached$(productIdOrSlug) {
3467
3515
  const valueFromMap = this.productIdOrSlugMap.get(productIdOrSlug);
3468
3516
  if (valueFromMap) {
@@ -3525,6 +3573,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
3525
3573
  args: [SC_CACHE_LIFETIME]
3526
3574
  }] }, { type: ScUserMetrikaService }] });
3527
3575
 
3576
+ /**
3577
+ * Сервис редиректа на родительскую категорию при недоступности (HTTP 404) товара или категории.
3578
+ *
3579
+ * Запрашивает у бэкенда родительскую категорию недоступной сущности и выполняет редирект:
3580
+ * - на сервере (SSR) — выставляет HTTP-статус 302 и заголовок `Location` для корректного редиректа поисковых ботов;
3581
+ * - в браузере — выполняет навигацию средствами {@link Router}.
3582
+ *
3583
+ * Если родительская категория не найдена, поток завершается ошибкой {@link HttpErrorResponse},
3584
+ * чтобы вызывающий код отобразил страницу ошибки.
3585
+ */
3586
+ class ScCatalogRedirectService {
3587
+ constructor() {
3588
+ /**
3589
+ * Сервис для работы с каталогом.
3590
+ */
3591
+ this.catalogService = inject(ScCatalogService);
3592
+ /**
3593
+ * Сервис маршрутизации.
3594
+ */
3595
+ this.router = inject(Router);
3596
+ /**
3597
+ * Признак использования идентификатора или slug в маршрутах товаров и категорий.
3598
+ */
3599
+ this.idOrSlug = inject(SC_ID_OR_SLUG_IN_ROUTE);
3600
+ /**
3601
+ * Признак, что текущий скрипт исполняется на сервере.
3602
+ */
3603
+ this.isServer = inject(IS_SERVER);
3604
+ /**
3605
+ * Данные об ответе на запрос (доступны только на сервере при SSR).
3606
+ */
3607
+ this.response = inject(RESPONSE, { optional: true });
3608
+ }
3609
+ /**
3610
+ * Выполняет редирект на родительскую категорию недоступной категории.
3611
+ *
3612
+ * @param categoryIdOrSlug Идентификатор или slug недоступной категории.
3613
+ * @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
3614
+ */
3615
+ redirectToCategoryParent$(categoryIdOrSlug) {
3616
+ return this.redirectToParentCategory$(this.catalogService.getCategoryParentCategory$(categoryIdOrSlug));
3617
+ }
3618
+ /**
3619
+ * Выполняет редирект на родительскую категорию недоступного товара.
3620
+ *
3621
+ * @param productIdOrSlug Идентификатор или slug недоступного товара.
3622
+ * @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
3623
+ */
3624
+ redirectToProductParent$(productIdOrSlug) {
3625
+ return this.redirectToParentCategory$(this.catalogService.getProductParentCategory$(productIdOrSlug));
3626
+ }
3627
+ /**
3628
+ * Выполняет редирект на полученную родительскую категорию.
3629
+ *
3630
+ * @param parentCategory$ Поток с данными родительской категории.
3631
+ * @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse} с кодом 404, если родительская категория не найдена.
3632
+ */
3633
+ redirectToParentCategory$(parentCategory$) {
3634
+ return parentCategory$.pipe(switchMap((parentCategory) => {
3635
+ // eslint-disable-next-line security/detect-object-injection
3636
+ const target = parentCategory[this.idOrSlug];
3637
+ // Родительская категория не найдена — отображаем страницу ошибки.
3638
+ if (!tuiIsPresent(target)) {
3639
+ return throwError(() => new HttpErrorResponse({ status: 404 }));
3640
+ }
3641
+ const urlTree = this.router.createUrlTree(['/catalog', target]);
3642
+ if (this.isServer) {
3643
+ // SSR: выставляем 302 и заголовок Location для корректного редиректа поисковых ботов.
3644
+ this.response?.setHeader('Location', this.router.serializeUrl(urlTree));
3645
+ this.response?.status(302);
3646
+ return EMPTY;
3647
+ }
3648
+ return from(this.router.navigateByUrl(urlTree, { replaceUrl: true })).pipe(switchMap(() => EMPTY));
3649
+ }));
3650
+ }
3651
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3652
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, providedIn: 'root' }); }
3653
+ }
3654
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, decorators: [{
3655
+ type: Injectable,
3656
+ args: [{
3657
+ providedIn: 'root',
3658
+ }]
3659
+ }] });
3660
+
3528
3661
  /* eslint-disable no-param-reassign,no-return-assign,no-void */
3529
3662
  /**
3530
3663
  * Сервис для работы с избранными товарами и категориями.
@@ -3550,7 +3683,7 @@ class ScFavoriteService {
3550
3683
  /**
3551
3684
  * {@link Observable} списка избранных категорий.
3552
3685
  */
3553
- this.categories$ = this.categoriesUpdateSubject.pipe(switchMap(() => this.user$), switchMap((user) => (user.isGuest ? of([]) : this.getFavoriteCategories$())), shareReplay(1) // Подогреваем запрос во избежание повторения запросов получения списка избранных категорий для новых подписчиков.
3686
+ this.categories$ = this.categoriesUpdateSubject.pipe(switchMap(() => this.user$), switchMap((user) => (user.isGuest ? of([]) : this.getFavoriteCategories$())), shareReplay({ refCount: true, bufferSize: 1 }) // Подогреваем запрос во избежание повторения запросов получения списка избранных категорий для новых подписчиков.
3554
3687
  );
3555
3688
  }
3556
3689
  /**
@@ -3641,11 +3774,41 @@ class ScRecommendationService {
3641
3774
  * Сервис для работы с корзиной.
3642
3775
  */
3643
3776
  this.cartService = inject(ScCartService);
3777
+ /**
3778
+ * Ссылка на жизненный цикл сервиса.
3779
+ */
3780
+ this.destroyRef = inject(DestroyRef);
3644
3781
  inject(SC_USER_INFO)
3645
- .pipe(skip(1))
3782
+ .pipe(skip(1), takeUntilDestroyed(this.destroyRef))
3646
3783
  .subscribe(() => {
3647
- this.productsByCategoryMap.clear();
3648
- this.productsByProductMap.clear();
3784
+ this.clearCache();
3785
+ });
3786
+ }
3787
+ /**
3788
+ * Очищает кэшированные рекомендации.
3789
+ */
3790
+ clearCache() {
3791
+ this.productsByCategoryMap.clear();
3792
+ this.productsByProductMap.clear();
3793
+ }
3794
+ /**
3795
+ * Удаляет просроченные записи кэша, чтобы карты не росли бесконечно при смене ключей.
3796
+ */
3797
+ deleteExpiredCategoryCacheItems() {
3798
+ this.productsByCategoryMap.forEach((cachedItem, key) => {
3799
+ if (!cachedItem.cachedDataIsActual()) {
3800
+ this.productsByCategoryMap.delete(key);
3801
+ }
3802
+ });
3803
+ }
3804
+ /**
3805
+ * Удаляет просроченные записи кэша товаров, чтобы карты не росли бесконечно при смене ключей.
3806
+ */
3807
+ deleteExpiredProductCacheItems() {
3808
+ this.productsByProductMap.forEach((cachedItem, key) => {
3809
+ if (!cachedItem.cachedDataIsActual()) {
3810
+ this.productsByProductMap.delete(key);
3811
+ }
3649
3812
  });
3650
3813
  }
3651
3814
  /**
@@ -3654,6 +3817,7 @@ class ScRecommendationService {
3654
3817
  * @param categoryIdOrSlug Идентификатор или slug категории товаров.
3655
3818
  */
3656
3819
  getProductsByCategory$(categoryIdOrSlug) {
3820
+ this.deleteExpiredCategoryCacheItems();
3657
3821
  let cachedItem = this.productsByCategoryMap.get(categoryIdOrSlug.toString());
3658
3822
  if (!cachedItem) {
3659
3823
  // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().
@@ -3665,6 +3829,9 @@ class ScRecommendationService {
3665
3829
  .pipe(startWith$1(null)), null);
3666
3830
  this.productsByCategoryMap.set(categoryIdOrSlug.toString(), cachedItem);
3667
3831
  }
3832
+ if (!cachedItem.cachedDataIsActual()) {
3833
+ cachedItem.update();
3834
+ }
3668
3835
  return cachedItem.item$;
3669
3836
  }
3670
3837
  /**
@@ -3673,6 +3840,7 @@ class ScRecommendationService {
3673
3840
  * @param productIdOrSlug Идентификатор или slug товара/услуги.
3674
3841
  */
3675
3842
  getProductsByProduct$(productIdOrSlug) {
3843
+ this.deleteExpiredProductCacheItems();
3676
3844
  let cachedItem = this.productsByProductMap.get(productIdOrSlug.toString());
3677
3845
  if (!cachedItem) {
3678
3846
  // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().
@@ -3684,6 +3852,9 @@ class ScRecommendationService {
3684
3852
  .pipe(startWith$1(null)), null);
3685
3853
  this.productsByProductMap.set(productIdOrSlug.toString(), cachedItem);
3686
3854
  }
3855
+ if (!cachedItem.cachedDataIsActual()) {
3856
+ cachedItem.update();
3857
+ }
3687
3858
  return cachedItem.item$;
3688
3859
  }
3689
3860
  /**
@@ -6251,6 +6422,10 @@ class ScNotificationsService {
6251
6422
  * {@link Observable} данных о текущем пользователе.
6252
6423
  */
6253
6424
  this.user$ = inject(SC_USER_INFO);
6425
+ /**
6426
+ * Ссылка на жизненный цикл сервиса.
6427
+ */
6428
+ this.destroyRef = inject(DestroyRef);
6254
6429
  /**
6255
6430
  * Интервалы обновления данных.
6256
6431
  */
@@ -6279,7 +6454,7 @@ class ScNotificationsService {
6279
6454
  else {
6280
6455
  this.updateUserNotificationsCount();
6281
6456
  }
6282
- }), switchMap((user) => (user.isGuest ? of() : this.interval$)))
6457
+ }), switchMap((user) => (user.isGuest ? of() : this.interval$)), takeUntilDestroyed(this.destroyRef))
6283
6458
  .subscribe();
6284
6459
  }
6285
6460
  /**
@@ -8333,5 +8508,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8333
8508
  * Generated bundle index. Do not edit.
8334
8509
  */
8335
8510
 
8336
- export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, RESPONSE, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
8511
+ export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, RESPONSE, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogRedirectService, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
8337
8512
  //# sourceMappingURL=snabcentr-client-core.mjs.map