@lenne.tech/ng-base 0.2.2 → 0.3.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 (32) hide show
  1. package/bundles/lenne.tech-ng-base-src-lib-base.umd.js +308 -159
  2. package/bundles/lenne.tech-ng-base-src-lib-base.umd.js.map +1 -1
  3. package/bundles/lenne.tech-ng-base.umd.js +308 -159
  4. package/bundles/lenne.tech-ng-base.umd.js.map +1 -1
  5. package/esm2015/lib/base/directives/match-height.directive.js +45 -29
  6. package/esm2015/lib/base/factories/apollo-options.factory.js +3 -2
  7. package/esm2015/lib/base/public-api.js +2 -1
  8. package/esm2015/lib/base/services/image.service.js +113 -0
  9. package/esm2015/lib/base/services/scroll.service.js +9 -84
  10. package/esm2015/lib/base/services/seo.service.js +70 -14
  11. package/esm2015/src/lib/base/directives/match-height.directive.js +45 -29
  12. package/esm2015/src/lib/base/factories/apollo-options.factory.js +3 -2
  13. package/esm2015/src/lib/base/public-api.js +2 -1
  14. package/esm2015/src/lib/base/services/image.service.js +113 -0
  15. package/esm2015/src/lib/base/services/scroll.service.js +9 -84
  16. package/esm2015/src/lib/base/services/seo.service.js +70 -14
  17. package/fesm2015/lenne.tech-ng-base-src-lib-base.js +231 -127
  18. package/fesm2015/lenne.tech-ng-base-src-lib-base.js.map +1 -1
  19. package/fesm2015/lenne.tech-ng-base.js +231 -127
  20. package/fesm2015/lenne.tech-ng-base.js.map +1 -1
  21. package/lib/base/directives/match-height.directive.d.ts +7 -3
  22. package/lib/base/public-api.d.ts +1 -0
  23. package/lib/base/services/image.service.d.ts +25 -0
  24. package/lib/base/services/scroll.service.d.ts +5 -21
  25. package/lib/base/services/seo.service.d.ts +36 -3
  26. package/package.json +12 -11
  27. package/src/lib/base/directives/match-height.directive.d.ts +7 -3
  28. package/src/lib/base/lenne.tech-ng-base-src-lib-base.metadata.json +1 -1
  29. package/src/lib/base/public-api.d.ts +1 -0
  30. package/src/lib/base/services/image.service.d.ts +25 -0
  31. package/src/lib/base/services/scroll.service.d.ts +5 -21
  32. package/src/lib/base/services/seo.service.d.ts +36 -3
@@ -2,9 +2,11 @@ import { __awaiter } from "tslib";
2
2
  import { Inject, Injectable } from '@angular/core';
3
3
  import { Router } from '@angular/router';
4
4
  import { BASE_MODULE_CONFIG } from '../interfaces/base-module-config.interface';
5
+ import { ImageService } from './image.service';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/router";
7
8
  import * as i2 from "../interfaces/base-module-config.interface";
9
+ import * as i3 from "./image.service";
8
10
  /**
9
11
  * Scroll service for autoscroll to specific fragments
10
12
  */
@@ -12,9 +14,10 @@ export class ScrollService {
12
14
  /**
13
15
  * Initializer
14
16
  */
15
- constructor(router, moduleConfig) {
17
+ constructor(router, moduleConfig, imageService) {
16
18
  this.router = router;
17
19
  this.moduleConfig = moduleConfig;
20
+ this.imageService = imageService;
18
21
  /**
19
22
  * Is a scroll listener set
20
23
  *
@@ -64,7 +67,7 @@ export class ScrollService {
64
67
  }
65
68
  // Load images before scrolling (once)
66
69
  if (config.loadImagesBefore) {
67
- yield this.preLoadImages();
70
+ yield this.imageService.preLoadImages();
68
71
  }
69
72
  // Get get bounding rect of target element
70
73
  const cords = el.getBoundingClientRect();
@@ -175,87 +178,8 @@ export class ScrollService {
175
178
  // Return promise
176
179
  return this.scrollPromise;
177
180
  }
178
- /**
179
- * Preaload images (for lazy handling)
180
- *
181
- * @param options
182
- * @protected
183
- */
184
- preLoadImages(options) {
185
- // Init configuration
186
- const config = Object.assign({ doneFunnction: undefined, timeout: undefined }, options);
187
- return new Promise((resolve) => {
188
- // Init variables
189
- let resolved = false;
190
- let timeoutId;
191
- // Init loading
192
- const images = Array.from(document.getElementsByTagName('img'));
193
- const promises = [];
194
- // Prepare images
195
- for (const image of images) {
196
- const src = image.getAttribute('src');
197
- // Check if changes are necessary and possible
198
- if ((image.complete && image.naturalHeight !== 0) || image.getAttribute('loading') !== 'lazy' || !src) {
199
- continue;
200
- }
201
- const newImage = document.createElement('img');
202
- Array.from(image.attributes).forEach((attr) => {
203
- if (attr.name !== 'loading' && attr.name !== 'src') {
204
- newImage.setAttribute(attr.name, attr.value);
205
- }
206
- });
207
- image.replaceWith(newImage);
208
- promises.push(this.loadImage(newImage, src));
209
- }
210
- if (config.timeout) {
211
- timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
212
- resolved = true;
213
- if (config.doneFunnction) {
214
- yield config.doneFunction();
215
- }
216
- resolve(undefined);
217
- }));
218
- }
219
- // Wait until all images loaded
220
- Promise.all(promises)
221
- .catch((e) => console.error('Error during image loading', e))
222
- .finally(() => __awaiter(this, void 0, void 0, function* () {
223
- // Check if already resolved
224
- if (resolved) {
225
- return;
226
- }
227
- // Stop timeout
228
- if (timeoutId) {
229
- clearTimeout(timeoutId);
230
- }
231
- // Return result
232
- let result;
233
- if (config.doneFunnction) {
234
- result = yield config.doneFunction();
235
- }
236
- resolve(result);
237
- }));
238
- });
239
- }
240
- /**
241
- * Load image for image element
242
- *
243
- * @param imageElement
244
- * @param src
245
- * @protected
246
- */
247
- loadImage(imageElement, src) {
248
- return __awaiter(this, void 0, void 0, function* () {
249
- src = src || imageElement.src;
250
- return new Promise((resolve, reject) => {
251
- imageElement.onload = () => resolve(imageElement);
252
- imageElement.onerror = reject;
253
- imageElement.src = src;
254
- });
255
- });
256
- }
257
181
  }
258
- ScrollService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ScrollService_Factory() { return new ScrollService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.BASE_MODULE_CONFIG)); }, token: ScrollService, providedIn: "root" });
182
+ ScrollService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ScrollService_Factory() { return new ScrollService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.BASE_MODULE_CONFIG), i0.ɵɵinject(i3.ImageService)); }, token: ScrollService, providedIn: "root" });
259
183
  ScrollService.decorators = [
260
184
  { type: Injectable, args: [{
261
185
  providedIn: 'root',
@@ -263,6 +187,7 @@ ScrollService.decorators = [
263
187
  ];
264
188
  ScrollService.ctorParameters = () => [
265
189
  { type: Router },
266
- { type: undefined, decorators: [{ type: Inject, args: [BASE_MODULE_CONFIG,] }] }
190
+ { type: undefined, decorators: [{ type: Inject, args: [BASE_MODULE_CONFIG,] }] },
191
+ { type: ImageService }
267
192
  ];
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9saWIvYmFzZS9zZXJ2aWNlcy9zY3JvbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSw0Q0FBNEMsQ0FBQzs7OztBQUVsRzs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBNkN4Qjs7T0FFRztJQUNILFlBQW9CLE1BQWMsRUFBc0MsWUFBOEI7UUFBbEYsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFzQyxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFqQ3RHOzs7O1dBSUc7UUFDTyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUVqQzs7OztXQUlHO1FBQ08sZ0JBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQXNCekIsTUFBTSxNQUFNLG1CQUNWLHFCQUFxQixFQUFFLEdBQUcsRUFDMUIsWUFBWSxFQUFFLEdBQUcsRUFDakIsa0JBQWtCLEVBQUUsR0FBRyxJQUNwQixZQUFZLENBQ2hCLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztRQUNwRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDRyxRQUFRLENBQ1osRUFBVSxFQUNWLFVBTUksRUFBRTs7WUFFTixpQkFBaUI7WUFDakIsTUFBTSxNQUFNLG1CQUNWLFFBQVEsRUFBRSxJQUFJLEVBQ2QsZ0JBQWdCLEVBQUUs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QUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTs7OztZQXBWRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVJRLE1BQU07NENBeUR3QixNQUFNLFNBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQkFTRV9NT0RVTEVfQ09ORklHLCBCYXNlTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9iYXNlLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBTY3JvbGwgc2VydmljZSBmb3IgYXV0b3Njcm9sbCB0byBzcGVjaWZpYyBmcmFnbWVudHNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbFNlcnZpY2Uge1xuICAvKipcbiAgICogQ3VycmVudCBzY3JvbGwgcHJvbWlzZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmVzb2x2ZSBmdW5jdGlvbiBvZiBjdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxQcm9taXNlUmVzb2x2ZTogKHZhbHVlOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4pID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIElzIGEgc2Nyb2xsIGxpc3RlbmVyIHNldFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsTGlzdGVuZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ3VycmVudCBzY3JvbGwgdGltZXI7XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxUaW1lciA9IC0xO1xuXG4gIC8qKlxuICAgKiBTY3JvbGwgb2Zmc2V0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2Nyb2xsT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERldGVjdGlvbiBvZmZzZXRcbiAgICogU2hvdWxkIGJlID49IHNjcm9sbE9mZnNldFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRldGVjdGlvbk9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTYW1wbGluZyByYXRlIGZvciBzY3JvbGwgZG9uZSBkZXRlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxTYW1wbGluZ1JhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIEBJbmplY3QoQkFTRV9NT0RVTEVfQ09ORklHKSBwcml2YXRlIG1vZHVsZUNvbmZpZzogQmFzZU1vZHVsZUNvbmZpZykge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIHNjcm9sbERldGVjdGlvbk9mZnNldDogMjAwLFxuICAgICAgc2Nyb2xsT2Zmc2V0OiAxMDAsXG4gICAgICBzY3JvbGxTYW1wbGluZ1JhdGU6IDEwMCxcbiAgICAgIC4uLm1vZHVsZUNvbmZpZyxcbiAgICB9O1xuXG4gICAgdGhpcy5kZXRlY3Rpb25PZmZzZXQgPSBjb25maWcuc2Nyb2xsRGV0ZWN0aW9uT2Zmc2V0O1xuICAgIHRoaXMuc2Nyb2xsT2Zmc2V0ID0gY29uZmlnLnNjcm9sbE9mZnNldDtcbiAgICB0aGlzLnNjcm9sbFNhbXBsaW5nUmF0ZSA9IGNvbmZpZy5zY3JvbGxTYW1wbGluZ1JhdGU7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIHN0cnVjdHVyZUVsZW1lbnQgd2l0aCBzcGVjaWZpYyBJRFxuICAgKi9cbiAgYXN5bmMgc2Nyb2xsVG8oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjaGVja1VybD86IGJvb2xlYW47XG4gICAgICBsb2FkSW1hZ2VzQmVmb3JlPzogYm9vbGVhbjtcbiAgICAgIHJlc2V0U3R5bGVzPzogYm9vbGVhbjtcbiAgICAgIHNldE92ZXJmbG93PzogYm9vbGVhbjtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbj86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8vIFByZXBhcmUgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgY2hlY2tVcmw6IHRydWUsXG4gICAgICBsb2FkSW1hZ2VzQmVmb3JlOiB0cnVlLFxuICAgICAgcmVzZXRTdHlsZXM6IGZhbHNlLFxuICAgICAgc2V0T3ZlcmZsb3c6IHRydWUsXG4gICAgICBzdG9wUHJvcGFnYXRpb246IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBjdXJyZW50IFVSTFxuICAgIGlmIChjb25maWcuY2hlY2tVcmwgJiYgdGhpcy5yb3V0ZXIudXJsICE9PSAnLycgJiYgIXRoaXMucm91dGVyLnVybC5zdGFydHNXaXRoKCcvIycpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSwgeyBmcmFnbWVudDogaWQgfSk7XG4gICAgICByZXR1cm4gIWNvbmZpZy5zdG9wUHJvcGFnYXRpb247XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGFyZ2V0IGVsZW1lbnQgZXhpdHNcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoIWVsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIHNjcm9sbCBlbGVtZW50IHdpdGggSUQ6JywgaWQpO1xuICAgICAgcmV0dXJuICFjb25maWcuc3RvcFByb3BhZ2F0aW9uO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGJvZHkgb3ZlcmZsb3cgaXMgdmlzaWJsZVxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBzY3JvbGwgaGFuZGxpbmdcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xuICAgIGxldCB1bmRvT3ZlcmZsb3dDaGFuZ2VzID0gZmFsc2U7XG4gICAgY29uc3Qgc2Nyb2xsQm9keVN0eWxlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkod2luZG93LmdldENvbXB1dGVkU3R5bGUoYm9keSkpKTtcbiAgICBpZiAoY29uZmlnLnNldE92ZXJmbG93ICYmIChzY3JvbGxCb2R5U3R5bGVzLm92ZXJmbG93WCAhPT0gJ3Zpc2libGUnIHx8IHNjcm9sbEJvZHlTdHlsZXMub3ZlcmZsb3dZICE9PSAndmlzaWJsZScpKSB7XG4gICAgICAvLyBTZXQgYm9keSBvdmVyZmxvdyB0byB2aXNpYmxlXG4gICAgICBjb25zb2xlLndhcm4oJ1N0eWxlIG9mIGJvZHkgZWxlbWVudCBmb3Igb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgd2lsbCBiZSBzZXQgdG8gXCJ2aXNpYmxlXCIgZm9yIHNjcm9sbGluZyEnKTtcbiAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3dYID0gJ3Zpc2libGUnO1xuICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1kgPSAndmlzaWJsZSc7XG4gICAgICB1bmRvT3ZlcmZsb3dDaGFuZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIGltYWdlcyBiZWZvcmUgc2Nyb2xsaW5nIChvbmNlKVxuICAgIGlmIChjb25maWcubG9hZEltYWdlc0JlZm9yZSkge1xuICAgICAgYXdhaXQgdGhpcy5wcmVMb2FkSW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGdldCBib3VuZGluZyByZWN0IG9mIHRhcmdldCBlbGVtZW50XG4gICAgY29uc3QgY29yZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIFNjcm9sbCB0byBlbGVtZW50XG4gICAgd2luZG93LnNjcm9sbEJ5KHsgdG9wOiBjb3Jkcy50b3AgLSB0aGlzLnNjcm9sbE9mZnNldCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZSh7XG4gICAgICBkb25lRnVuY3Rpb246ICgpID0+IHtcbiAgICAgICAgLy8gVW5kbyBjaGFuZ2VzXG4gICAgICAgIGlmICh1bmRvT3ZlcmZsb3dDaGFuZ2VzICYmIGNvbmZpZy5yZXNldFN0eWxlcykge1xuICAgICAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3dYID0gc2Nyb2xsQm9keVN0eWxlcy5vdmVyZmxvd1g7XG4gICAgICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1kgPSBzY3JvbGxCb2R5U3R5bGVzLm92ZXJmbG93WTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ09yaWdpbmFsIHN0eWxlIG9mIGJvZHkgZWxlbWVudCBmb3Igb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJuIHN0b3AgcHJvcGFnYXRpb24gY29uZmlndXJhdGlvblxuICAgIHJldHVybiAhY29uZmlnLnN0b3BQcm9wYWdhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCBhY3RpdmUgc3RydWN0dXJlRWxlbWVudFxuICAgKi9cbiAgZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdD8pOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZO1xuICAgIGNvbnN0IGVsZW1lbnRzV2l0aElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXScpO1xuICAgIGxldCBsYXN0SWQgPSBudWxsO1xuICAgIGxldCBsYXN0UG9zaXRpb24gPSAwIC0gdGhpcy5kZXRlY3Rpb25PZmZzZXQgLSAxO1xuICAgIGVsZW1lbnRzV2l0aElkLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvcmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvcCA9IGNvcmRzLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCAtIHRoaXMuZGV0ZWN0aW9uT2Zmc2V0O1xuICAgICAgaWYgKFxuICAgICAgICAoIWxpc3QgfHwgIWxpc3QubGVuZ3RoIHx8IGxpc3QuaW5jbHVkZXMoZWxlbWVudC5pZCkpICYmIC8vIEluIGxpc3RcbiAgICAgICAgdG9wIDwgY3VycmVudFNjcm9sbFBvc2l0aW9uICYmIC8vIEluIGFjdGl2ZSBhcmVhXG4gICAgICAgIGxhc3RQb3NpdGlvbiA8IHRvcCAvLyBIaWdoZXIgdGhhbiB0aGUgbGFzdCBvbmVcbiAgICAgICkge1xuICAgICAgICBsYXN0SWQgPSBlbGVtZW50LmlkO1xuICAgICAgICBsYXN0UG9zaXRpb24gPSB0b3A7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxhc3RJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBJRCBpcyBhY3RpdmVcbiAgICovXG4gIGlzQWN0aXZlKGlkLCBsaXN0PywgaXNGaXJzdD8pIHtcbiAgICBjb25zdCBsYXN0QWN0aXZlRWxlbWVudCA9IHRoaXMuZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdCk7XG4gICAgcmV0dXJuIGlkID09PSBsYXN0QWN0aXZlRWxlbWVudCB8fCAobGFzdEFjdGl2ZUVsZW1lbnQgPT09IG51bGwgJiYgaXNGaXJzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgcHJvbWlzZVxuICAgKi9cbiAgcHVibGljIHNjcm9sbERvbmUob3B0aW9uczogeyBkb25lRnVuY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4gfCBhbnkgfCB2b2lkOyB0aW1lb3V0PzogbnVtYmVyIH0gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gSW5pdCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZG9uZUZ1bmN0aW9uOiB1bmRlZmluZWQsXG4gICAgICB0aW1lb3V0OiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBSZXR1cm4gcHJvbWlzZSBmb3Igc2Nyb2xsIGRvbmVcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gSW5pdCB2YXJpYWJsZXNcbiAgICAgIGxldCByZWplY3RlZCA9IGZhbHNlO1xuICAgICAgbGV0IHRpbWVvdXRJZDogbnVtYmVyO1xuXG4gICAgICAvLyBTZXQgdGltZW91dCBoYW5kbGluZyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVvdXQgZm9yIHNjcm9sbERvbmUgYWZ0ZXI6JyArIGNvbmZpZy50aW1lb3V0KSk7XG4gICAgICAgIH0sIGNvbmZpZy50aW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCBmb3Igc2Nyb2xsIGRvbmVcbiAgICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZURldGVjdGlvbigpO1xuXG4gICAgICAvLyBSZXNvbHZlIHByb21pc2UgaWYgbm90IGFscmVhZHkgcmVqZWN0ZWRcbiAgICAgIGlmICghcmVqZWN0ZWQpIHtcbiAgICAgICAgLy8gU3RvcCB0aW1lb3V0IGlmIHNldFxuICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHJlc3VsdCAoaWYgZG9uZUZ1bmN0aW9uIGlzIHNldClcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgaWYgKGNvbmZpZy5kb25lRnVuY3Rpb24pIHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25maWcuZG9uZUZ1bmN0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY3JvbGwgZG9uZVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgZGV0ZWN0b25cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHNjcm9sbERvbmVEZXRlY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmV0dXJuIGN1cnJlbnQgc2Nyb2xsIHByb21pc2UgKFNpbmdlbHRvbilcbiAgICBpZiAodGhpcy5zY3JvbGxQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxQcm9taXNlO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAgdGhpcy5zY3JvbGxQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVGltZXIgIT09IC0xKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lcik7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxEb25lRGV0ZWN0aW9uLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnNjcm9sbFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHRoaXMuc2Nyb2xsU2FtcGxpbmdSYXRlKTtcbiAgICB9KTtcblxuICAgIC8vIExpc2l0ZW5pbmcgdG8gc2Nyb2xsIGV2ZW50O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbERvbmVEZXRlY3Rpb24uYmluZCh0aGlzKSk7XG5cbiAgICAvLyBSZXR1cm4gcHJvbWlzZVxuICAgIHJldHVybiB0aGlzLnNjcm9sbFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogUHJlYWxvYWQgaW1hZ2VzIChmb3IgbGF6eSBoYW5kbGluZylcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZUxvYWRJbWFnZXMob3B0aW9ucz86IHtcbiAgICBkb25lRnVuY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4gfCBhbnkgfCB2b2lkO1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIEluaXQgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGRvbmVGdW5uY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgLy8gSW5pdCB2YXJpYWJsZXNcbiAgICAgIGxldCByZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgbGV0IHRpbWVvdXRJZDtcblxuICAgICAgLy8gSW5pdCBsb2FkaW5nXG4gICAgICBjb25zdCBpbWFnZXMgPSBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKSk7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gICAgICAvLyBQcmVwYXJlIGltYWdlc1xuICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBpbWFnZXMpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gaW1hZ2UuZ2V0QXR0cmlidXRlKCdzcmMnKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBjaGFuZ2VzIGFyZSBuZWNlc3NhcnkgYW5kIHBvc3NpYmxlXG4gICAgICAgIGlmICgoaW1hZ2UuY29tcGxldGUgJiYgaW1hZ2UubmF0dXJhbEhlaWdodCAhPT0gMCkgfHwgaW1hZ2UuZ2V0QXR0cmlidXRlKCdsb2FkaW5nJykgIT09ICdsYXp5JyB8fCAhc3JjKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBBcnJheS5mcm9tKGltYWdlLmF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAnbG9hZGluZycgJiYgYXR0ci5uYW1lICE9PSAnc3JjJykge1xuICAgICAgICAgICAgbmV3SW1hZ2Uuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW1hZ2UucmVwbGFjZVdpdGgobmV3SW1hZ2UpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMubG9hZEltYWdlKG5ld0ltYWdlLCBzcmMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoY29uZmlnLmRvbmVGdW5uY3Rpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IGNvbmZpZy5kb25lRnVuY3Rpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCB1bnRpbCBhbGwgaW1hZ2VzIGxvYWRlZFxuICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGltYWdlIGxvYWRpbmcnLCBlKSlcbiAgICAgICAgLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdG9wIHRpbWVvdXRcbiAgICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZXR1cm4gcmVzdWx0XG4gICAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgICBpZiAoY29uZmlnLmRvbmVGdW5uY3Rpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbmZpZy5kb25lRnVuY3Rpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGltYWdlIGZvciBpbWFnZSBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSBpbWFnZUVsZW1lbnRcbiAgICogQHBhcmFtIHNyY1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEltYWdlKGltYWdlRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCwgc3JjPzogc3RyaW5nKSB7XG4gICAgc3JjID0gc3JjIHx8IGltYWdlRWxlbWVudC5zcmM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGltYWdlRWxlbWVudC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltYWdlRWxlbWVudCk7XG4gICAgICBpbWFnZUVsZW1lbnQub25lcnJvciA9IHJlamVjdDtcbiAgICAgIGltYWdlRWxlbWVudC5zcmMgPSBzcmM7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9saWIvYmFzZS9zZXJ2aWNlcy9zY3JvbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRS9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUE2Q3hCOztPQUVHO0lBQ0gsWUFDWSxNQUFjLEVBQ2MsWUFBOEIsRUFDMUQsWUFBMEI7UUFGMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNjLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUMxRCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXBDdEM7Ozs7V0FJRztRQUNPLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWpDOzs7O1dBSUc7UUFDTyxnQkFBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBMEJ6QixNQUFNLE1BQU0sbUJBQ1YscUJBQXFCLEVBQUUsR0FBRyxFQUMxQixZQUFZLEVBQUUsR0FBRyxFQUNqQixrQkFBa0IsRUFBRSxHQUFHLElBQ3BCLFlBQVksQ0FDaEIsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN4QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNHLFFBQVEsQ0FDWixFQUFVLEVB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b3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCQVNFX01PRFVMRV9DT05GSUcsIEJhc2VNb2R1bGVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Jhc2UtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi9pbWFnZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBTY3JvbGwgc2VydmljZSBmb3IgYXV0b3Njcm9sbCB0byBzcGVjaWZpYyBmcmFnbWVudHNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbFNlcnZpY2Uge1xuICAvKipcbiAgICogQ3VycmVudCBzY3JvbGwgcHJvbWlzZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmVzb2x2ZSBmdW5jdGlvbiBvZiBjdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxQcm9taXNlUmVzb2x2ZTogKHZhbHVlOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4pID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIElzIGEgc2Nyb2xsIGxpc3RlbmVyIHNldFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsTGlzdGVuZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ3VycmVudCBzY3JvbGwgdGltZXI7XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxUaW1lciA9IC0xO1xuXG4gIC8qKlxuICAgKiBTY3JvbGwgb2Zmc2V0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2Nyb2xsT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERldGVjdGlvbiBvZmZzZXRcbiAgICogU2hvdWxkIGJlID49IHNjcm9sbE9mZnNldFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRldGVjdGlvbk9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTYW1wbGluZyByYXRlIGZvciBzY3JvbGwgZG9uZSBkZXRlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxTYW1wbGluZ1JhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBASW5qZWN0KEJBU0VfTU9EVUxFX0NPTkZJRykgcHJvdGVjdGVkIG1vZHVsZUNvbmZpZzogQmFzZU1vZHVsZUNvbmZpZyxcbiAgICBwcm90ZWN0ZWQgaW1hZ2VTZXJ2aWNlOiBJbWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgc2Nyb2xsRGV0ZWN0aW9uT2Zmc2V0OiAyMDAsXG4gICAgICBzY3JvbGxPZmZzZXQ6IDEwMCxcbiAgICAgIHNjcm9sbFNhbXBsaW5nUmF0ZTogMTAwLFxuICAgICAgLi4ubW9kdWxlQ29uZmlnLFxuICAgIH07XG5cbiAgICB0aGlzLmRldGVjdGlvbk9mZnNldCA9IGNvbmZpZy5zY3JvbGxEZXRlY3Rpb25PZmZzZXQ7XG4gICAgdGhpcy5zY3JvbGxPZmZzZXQgPSBjb25maWcuc2Nyb2xsT2Zmc2V0O1xuICAgIHRoaXMuc2Nyb2xsU2FtcGxpbmdSYXRlID0gY29uZmlnLnNjcm9sbFNhbXBsaW5nUmF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgdG8gc3RydWN0dXJlRWxlbWVudCB3aXRoIHNwZWNpZmljIElEXG4gICAqL1xuICBhc3luYyBzY3JvbGxUbyhcbiAgICBpZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGNoZWNrVXJsPzogYm9vbGVhbjtcbiAgICAgIGxvYWRJbWFnZXNCZWZvcmU/OiBib29sZWFuO1xuICAgICAgcmVzZXRTdHlsZXM/OiBib29sZWFuO1xuICAgICAgc2V0T3ZlcmZsb3c/OiBib29sZWFuO1xuICAgICAgc3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gUHJlcGFyZSBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBjaGVja1VybDogdHJ1ZSxcbiAgICAgIGxvYWRJbWFnZXNCZWZvcmU6IHRydWUsXG4gICAgICByZXNldFN0eWxlczogZmFsc2UsXG4gICAgICBzZXRPdmVyZmxvdzogdHJ1ZSxcbiAgICAgIHN0b3BQcm9wYWdhdGlvbjogdHJ1ZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGN1cnJlbnQgVVJMXG4gICAgaWYgKGNvbmZpZy5jaGVja1VybCAmJiB0aGlzLnJvdXRlci51cmwgIT09ICcvJyAmJiAhdGhpcy5yb3V0ZXIudXJsLnN0YXJ0c1dpdGgoJy8jJykpIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddLCB7IGZyYWdtZW50OiBpZCB9KTtcbiAgICAgIHJldHVybiAhY29uZmlnLnN0b3BQcm9wYWdhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0YXJnZXQgZWxlbWVudCBleGl0c1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01pc3Npbmcgc2Nyb2xsIGVsZW1lbnQgd2l0aCBJRDonLCBpZCk7XG4gICAgICByZXR1cm4gIWNvbmZpZy5zdG9wUHJvcGFnYXRpb247XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYm9keSBvdmVyZmxvdyBpcyB2aXNpYmxlXG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHNjcm9sbCBoYW5kbGluZ1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgbGV0IHVuZG9PdmVyZmxvd0NoYW5nZXMgPSBmYWxzZTtcbiAgICBjb25zdCBzY3JvbGxCb2R5U3R5bGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib2R5KSkpO1xuICAgIGlmIChjb25maWcuc2V0T3ZlcmZsb3cgJiYgKHNjcm9sbEJvZHlTdHlsZXMub3ZlcmZsb3dYICE9PSAndmlzaWJsZScgfHwgc2Nyb2xsQm9keVN0eWxlcy5vdmVyZmxvd1kgIT09ICd2aXNpYmxlJykpIHtcbiAgICAgIC8vIFNldCBib2R5IG92ZXJmbG93IHRvIHZpc2libGVcbiAgICAgIGNvbnNvbGUud2FybignU3R5bGUgb2YgYm9keSBlbGVtZW50IGZvciBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSB3aWxsIGJlIHNldCB0byBcInZpc2libGVcIiBmb3Igc2Nyb2xsaW5nIScpO1xuICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1ggPSAndmlzaWJsZSc7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93WSA9ICd2aXNpYmxlJztcbiAgICAgIHVuZG9PdmVyZmxvd0NoYW5nZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIExvYWQgaW1hZ2VzIGJlZm9yZSBzY3JvbGxpbmcgKG9uY2UpXG4gICAgaWYgKGNvbmZpZy5sb2FkSW1hZ2VzQmVmb3JlKSB7XG4gICAgICBhd2FpdCB0aGlzLmltYWdlU2VydmljZS5wcmVMb2FkSW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGdldCBib3VuZGluZyByZWN0IG9mIHRhcmdldCBlbGVtZW50XG4gICAgY29uc3QgY29yZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIFNjcm9sbCB0byBlbGVtZW50XG4gICAgd2luZG93LnNjcm9sbEJ5KHsgdG9wOiBjb3Jkcy50b3AgLSB0aGlzLnNjcm9sbE9mZnNldCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZSh7XG4gICAgICBkb25lRnVuY3Rpb246ICgpID0+IHtcbiAgICAgICAgLy8gVW5kbyBjaGFuZ2VzXG4gICAgICAgIGlmICh1bmRvT3ZlcmZsb3dDaGFuZ2VzICYmIGNvbmZpZy5yZXNldFN0eWxlcykge1xuICAgICAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3dYID0gc2Nyb2xsQm9keVN0eWxlcy5vdmVyZmxvd1g7XG4gICAgICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1kgPSBzY3JvbGxCb2R5U3R5bGVzLm92ZXJmbG93WTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ09yaWdpbmFsIHN0eWxlIG9mIGJvZHkgZWxlbWVudCBmb3Igb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJuIHN0b3AgcHJvcGFnYXRpb24gY29uZmlndXJhdGlvblxuICAgIHJldHVybiAhY29uZmlnLnN0b3BQcm9wYWdhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCBhY3RpdmUgc3RydWN0dXJlRWxlbWVudFxuICAgKi9cbiAgZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdD8pOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZO1xuICAgIGNvbnN0IGVsZW1lbnRzV2l0aElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXScpO1xuICAgIGxldCBsYXN0SWQgPSBudWxsO1xuICAgIGxldCBsYXN0UG9zaXRpb24gPSAwIC0gdGhpcy5kZXRlY3Rpb25PZmZzZXQgLSAxO1xuICAgIGVsZW1lbnRzV2l0aElkLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvcmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvcCA9IGNvcmRzLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCAtIHRoaXMuZGV0ZWN0aW9uT2Zmc2V0O1xuICAgICAgaWYgKFxuICAgICAgICAoIWxpc3QgfHwgIWxpc3QubGVuZ3RoIHx8IGxpc3QuaW5jbHVkZXMoZWxlbWVudC5pZCkpICYmIC8vIEluIGxpc3RcbiAgICAgICAgdG9wIDwgY3VycmVudFNjcm9sbFBvc2l0aW9uICYmIC8vIEluIGFjdGl2ZSBhcmVhXG4gICAgICAgIGxhc3RQb3NpdGlvbiA8IHRvcCAvLyBIaWdoZXIgdGhhbiB0aGUgbGFzdCBvbmVcbiAgICAgICkge1xuICAgICAgICBsYXN0SWQgPSBlbGVtZW50LmlkO1xuICAgICAgICBsYXN0UG9zaXRpb24gPSB0b3A7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxhc3RJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBJRCBpcyBhY3RpdmVcbiAgICovXG4gIGlzQWN0aXZlKGlkLCBsaXN0PywgaXNGaXJzdD8pIHtcbiAgICBjb25zdCBsYXN0QWN0aXZlRWxlbWVudCA9IHRoaXMuZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdCk7XG4gICAgcmV0dXJuIGlkID09PSBsYXN0QWN0aXZlRWxlbWVudCB8fCAobGFzdEFjdGl2ZUVsZW1lbnQgPT09IG51bGwgJiYgaXNGaXJzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgcHJvbWlzZVxuICAgKi9cbiAgcHVibGljIHNjcm9sbERvbmUob3B0aW9uczogeyBkb25lRnVuY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4gfCBhbnkgfCB2b2lkOyB0aW1lb3V0PzogbnVtYmVyIH0gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gSW5pdCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZG9uZUZ1bmN0aW9uOiB1bmRlZmluZWQsXG4gICAgICB0aW1lb3V0OiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBSZXR1cm4gcHJvbWlzZSBmb3Igc2Nyb2xsIGRvbmVcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gSW5pdCB2YXJpYWJsZXNcbiAgICAgIGxldCByZWplY3RlZCA9IGZhbHNlO1xuICAgICAgbGV0IHRpbWVvdXRJZDogbnVtYmVyO1xuXG4gICAgICAvLyBTZXQgdGltZW91dCBoYW5kbGluZyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVvdXQgZm9yIHNjcm9sbERvbmUgYWZ0ZXI6JyArIGNvbmZpZy50aW1lb3V0KSk7XG4gICAgICAgIH0sIGNvbmZpZy50aW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCBmb3Igc2Nyb2xsIGRvbmVcbiAgICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZURldGVjdGlvbigpO1xuXG4gICAgICAvLyBSZXNvbHZlIHByb21pc2UgaWYgbm90IGFscmVhZHkgcmVqZWN0ZWRcbiAgICAgIGlmICghcmVqZWN0ZWQpIHtcbiAgICAgICAgLy8gU3RvcCB0aW1lb3V0IGlmIHNldFxuICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHJlc3VsdCAoaWYgZG9uZUZ1bmN0aW9uIGlzIHNldClcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgaWYgKGNvbmZpZy5kb25lRnVuY3Rpb24pIHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25maWcuZG9uZUZ1bmN0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY3JvbGwgZG9uZVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgZGV0ZWN0b25cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHNjcm9sbERvbmVEZXRlY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmV0dXJuIGN1cnJlbnQgc2Nyb2xsIHByb21pc2UgKFNpbmdlbHRvbilcbiAgICBpZiAodGhpcy5zY3JvbGxQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxQcm9taXNlO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAgdGhpcy5zY3JvbGxQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVGltZXIgIT09IC0xKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lcik7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxEb25lRGV0ZWN0aW9uLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnNjcm9sbFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHRoaXMuc2Nyb2xsU2FtcGxpbmdSYXRlKTtcbiAgICB9KTtcblxuICAgIC8vIExpc2l0ZW5pbmcgdG8gc2Nyb2xsIGV2ZW50O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbERvbmVEZXRlY3Rpb24uYmluZCh0aGlzKSk7XG5cbiAgICAvLyBSZXR1cm4gcHJvbWlzZVxuICAgIHJldHVybiB0aGlzLnNjcm9sbFByb21pc2U7XG4gIH1cbn1cbiJdfQ==
@@ -10,23 +10,79 @@ export class SEOService {
10
10
  this.titleService = titleService;
11
11
  this.metaTagService = metaTagService;
12
12
  }
13
- initPageForSEO(title, description, keywords) {
14
- this.setPageTitle(title);
15
- this.setPageDescription(description);
16
- if (keywords) {
17
- this.setPageKeywords(keywords);
13
+ initPageForSEO(input) {
14
+ this.setGeneralData(input);
15
+ this.setTwitterData(input);
16
+ this.setTwitterData(input);
17
+ this.setFacebookData(input);
18
+ if (input.keywords) {
19
+ this.setPageKeywords(input.keywords);
18
20
  }
19
21
  }
20
- setPageTitle(title) {
21
- this.titleService.setTitle(title);
22
- this.metaTagService.updateTag({ property: 'og:title', content: title });
23
- this.metaTagService.updateTag({ name: 'twitter:title', content: title });
22
+ /**
23
+ * Set general metadata
24
+ *
25
+ * @param data
26
+ * @private
27
+ */
28
+ setGeneralData(data) {
29
+ this.titleService.setTitle(data.title);
30
+ this.metaTagService.updateTag({ name: 'description', content: data.description });
24
31
  }
25
- setPageDescription(description) {
26
- this.metaTagService.updateTag({ name: 'description', content: description });
27
- this.metaTagService.updateTag({ property: 'og:description', content: description });
28
- this.metaTagService.updateTag({ name: 'twitter:description', content: description });
32
+ /**
33
+ * Set metadata for twitter
34
+ *
35
+ * @param data
36
+ * @private
37
+ */
38
+ setTwitterData(data) {
39
+ this.metaTagService.updateTag({ name: 'twitter:title', content: data.title });
40
+ this.metaTagService.updateTag({ name: 'twitter:description', content: data.description });
41
+ this.metaTagService.updateTag({
42
+ property: 'twitter:url',
43
+ content: data.url ? data.url : window.location.href,
44
+ });
45
+ if (data.image) {
46
+ this.metaTagService.updateTag({
47
+ property: 'twitter:image',
48
+ content: data.image,
49
+ });
50
+ this.metaTagService.updateTag({
51
+ property: 'twitter:card',
52
+ content: 'summary_large_image',
53
+ });
54
+ }
55
+ }
56
+ /**
57
+ * Set metadata for facebook
58
+ *
59
+ * @param data
60
+ * @private
61
+ */
62
+ setFacebookData(data) {
63
+ this.metaTagService.updateTag({ property: 'og:title', content: data.title });
64
+ this.metaTagService.updateTag({ property: 'og:description', content: data.description });
65
+ this.metaTagService.updateTag({
66
+ property: 'og:type',
67
+ content: 'website',
68
+ });
69
+ this.metaTagService.updateTag({
70
+ property: 'og:url',
71
+ content: data.url ? data.url : window.location.href,
72
+ });
73
+ if (data.image) {
74
+ this.metaTagService.updateTag({
75
+ property: 'og:image',
76
+ content: data.image,
77
+ });
78
+ }
29
79
  }
80
+ /**
81
+ * Set page keywords
82
+ *
83
+ * @param keywords
84
+ * @private
85
+ */
30
86
  setPageKeywords(keywords) {
31
87
  this.metaTagService.updateTag({ name: 'keywords', content: keywords });
32
88
  }
@@ -41,4 +97,4 @@ SEOService.ctorParameters = () => [
41
97
  { type: Title },
42
98
  { type: Meta }
43
99
  ];
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9saWIvYmFzZS9zZXJ2aWNlcy9zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUV4RDs7R0FFRztBQUlILE1BQU0sT0FBTyxVQUFVO0lBQ3JCLFlBQW9CLFlBQW1CLEVBQVUsY0FBb0I7UUFBakQsaUJBQVksR0FBWixZQUFZLENBQU87UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBTTtJQUFHLENBQUM7SUFFbEUsY0FBYyxDQUFDLEtBQWEsRUFBRSxXQUFtQixFQUFFLFFBQWlCO1FBQ3pFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJDLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxXQUFtQjtRQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFnQjtRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQzs7OztZQTdCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVBjLEtBQUs7WUFBWCxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuLyoqXG4gKiBTRU8gc2VydmljZSBmb3Igc2V0dGluZyBIVE1MIG1ldGEgZGF0YVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU0VPU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGl0bGVTZXJ2aWNlOiBUaXRsZSwgcHJpdmF0ZSBtZXRhVGFnU2VydmljZTogTWV0YSkge31cblxuICBwdWJsaWMgaW5pdFBhZ2VGb3JTRU8odGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywga2V5d29yZHM/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFBhZ2VUaXRsZSh0aXRsZSk7XG4gICAgdGhpcy5zZXRQYWdlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pO1xuXG4gICAgaWYgKGtleXdvcmRzKSB7XG4gICAgICB0aGlzLnNldFBhZ2VLZXl3b3JkcyhrZXl3b3Jkcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdlVGl0bGUodGl0bGU6IHN0cmluZykge1xuICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRpdGxlKTtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7cHJvcGVydHk6ICdvZzp0aXRsZScsIGNvbnRlbnQ6IHRpdGxlfSk7XG4gICAgdGhpcy5tZXRhVGFnU2VydmljZS51cGRhdGVUYWcoe25hbWU6ICd0d2l0dGVyOnRpdGxlJywgY29udGVudDogdGl0bGV9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7bmFtZTogJ2Rlc2NyaXB0aW9uJywgY29udGVudDogZGVzY3JpcHRpb259KTtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7cHJvcGVydHk6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IGRlc2NyaXB0aW9ufSk7XG4gICAgdGhpcy5tZXRhVGFnU2VydmljZS51cGRhdGVUYWcoe25hbWU6ICd0d2l0dGVyOmRlc2NyaXB0aW9uJywgY29udGVudDogZGVzY3JpcHRpb259KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnZUtleXdvcmRzKGtleXdvcmRzOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7bmFtZTogJ2tleXdvcmRzJywgY29udGVudDoga2V5d29yZHN9KTtcbiAgfVxufVxuIl19
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9saWIvYmFzZS9zZXJ2aWNlcy9zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQVV4RDs7R0FFRztBQUlILE1BQU0sT0FBTyxVQUFVO0lBQ3JCLFlBQW9CLFlBQW1CLEVBQVUsY0FBb0I7UUFBakQsaUJBQVksR0FBWixZQUFZLENBQU87UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBTTtJQUFHLENBQUM7SUFFbEUsY0FBYyxDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxjQUFjLENBQUMsSUFBYTtRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxjQUFjLENBQUMsSUFBYTtRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztZQUM1QixRQUFRLEVBQUUsYUFBYTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1NBQ3BELENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO2dCQUM1QixRQUFRLEVBQUUsZUFBZTtnQkFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ3BCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO2dCQUM1QixRQUFRLEVBQUUsY0FBYztnQkFDeEIsT0FBTyxFQUFFLHFCQUFxQjthQUMvQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGVBQWUsQ0FBQyxJQUFhO1FBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1lBQzVCLFFBQVEsRUFBRSxTQUFTO1lBQ25CLE9BQU8sRUFBRSxTQUFTO1NBQ25CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1lBQzVCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7U0FDcEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVCLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxlQUFlLENBQUMsUUFBZ0I7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Ozs7WUF6RkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFmYyxLQUFLO1lBQVgsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGEsIFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmludGVyZmFjZSBTRU9EYXRhIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaW1hZ2U/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAga2V5d29yZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU0VPIHNlcnZpY2UgZm9yIHNldHRpbmcgSFRNTCBtZXRhIGRhdGFcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNFT1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRpdGxlU2VydmljZTogVGl0bGUsIHByaXZhdGUgbWV0YVRhZ1NlcnZpY2U6IE1ldGEpIHt9XG5cbiAgcHVibGljIGluaXRQYWdlRm9yU0VPKGlucHV0OiBTRU9EYXRhKSB7XG4gICAgdGhpcy5zZXRHZW5lcmFsRGF0YShpbnB1dCk7XG4gICAgdGhpcy5zZXRUd2l0dGVyRGF0YShpbnB1dCk7XG4gICAgdGhpcy5zZXRUd2l0dGVyRGF0YShpbnB1dCk7XG4gICAgdGhpcy5zZXRGYWNlYm9va0RhdGEoaW5wdXQpO1xuXG4gICAgaWYgKGlucHV0LmtleXdvcmRzKSB7XG4gICAgICB0aGlzLnNldFBhZ2VLZXl3b3JkcyhpbnB1dC5rZXl3b3Jkcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBnZW5lcmFsIG1ldGFkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldEdlbmVyYWxEYXRhKGRhdGE6IFNFT0RhdGEpIHtcbiAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZShkYXRhLnRpdGxlKTtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICdkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IGRhdGEuZGVzY3JpcHRpb24gfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG1ldGFkYXRhIGZvciB0d2l0dGVyXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldFR3aXR0ZXJEYXRhKGRhdGE6IFNFT0RhdGEpIHtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICd0d2l0dGVyOnRpdGxlJywgY29udGVudDogZGF0YS50aXRsZSB9KTtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICd0d2l0dGVyOmRlc2NyaXB0aW9uJywgY29udGVudDogZGF0YS5kZXNjcmlwdGlvbiB9KTtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7XG4gICAgICBwcm9wZXJ0eTogJ3R3aXR0ZXI6dXJsJyxcbiAgICAgIGNvbnRlbnQ6IGRhdGEudXJsID8gZGF0YS51cmwgOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICB9KTtcblxuICAgIGlmIChkYXRhLmltYWdlKSB7XG4gICAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7XG4gICAgICAgIHByb3BlcnR5OiAndHdpdHRlcjppbWFnZScsXG4gICAgICAgIGNvbnRlbnQ6IGRhdGEuaW1hZ2UsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5tZXRhVGFnU2VydmljZS51cGRhdGVUYWcoe1xuICAgICAgICBwcm9wZXJ0eTogJ3R3aXR0ZXI6Y2FyZCcsXG4gICAgICAgIGNvbnRlbnQ6ICdzdW1tYXJ5X2xhcmdlX2ltYWdlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbWV0YWRhdGEgZm9yIGZhY2Vib29rXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldEZhY2Vib29rRGF0YShkYXRhOiBTRU9EYXRhKSB7XG4gICAgdGhpcy5tZXRhVGFnU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnRpdGxlJywgY29udGVudDogZGF0YS50aXRsZSB9KTtcbiAgICB0aGlzLm1ldGFUYWdTZXJ2aWNlLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6ZGVzY3JpcHRpb24nLCBjb250ZW50OiBkYXRhLmRlc2NyaXB0aW9uIH0pO1xuICAgIHRoaXMubWV0YVRhZ1NlcnZpY2UudXBkYXRlVGFnKHtcbiAgICAgIHByb3BlcnR5OiAnb2c6dHlwZScsXG4gICAgICBjb250ZW50OiAnd2Vic2l0ZScsXG4gICAgfSk7XG4gICAgdGhpcy5tZXRhVGFnU2VydmljZS51cGRhdGVUYWcoe1xuICAgICAgcHJvcGVydHk6ICdvZzp1cmwnLFxuICAgICAgY29udGVudDogZGF0YS51cmwgPyBkYXRhLnVybCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEuaW1hZ2UpIHtcbiAgICAgIHRoaXMubWV0YVRhZ1NlcnZpY2UudXBkYXRlVGFnKHtcbiAgICAgICAgcHJvcGVydHk6ICdvZzppbWFnZScsXG4gICAgICAgIGNvbnRlbnQ6IGRhdGEuaW1hZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHBhZ2Uga2V5d29yZHNcbiAgICpcbiAgICogQHBhcmFtIGtleXdvcmRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldFBhZ2VLZXl3b3JkcyhrZXl3b3Jkczogc3RyaW5nKSB7XG4gICAgdGhpcy5tZXRhVGFnU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiAna2V5d29yZHMnLCBjb250ZW50OiBrZXl3b3JkcyB9KTtcbiAgfVxufVxuIl19