@angular/platform-browser 17.0.0-next.7 → 17.0.0-rc.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.
Files changed (34) hide show
  1. package/animations/async/index.d.ts +1 -1
  2. package/animations/index.d.ts +1 -14
  3. package/esm2022/animations/async/src/async_animation_renderer.mjs +42 -5
  4. package/esm2022/animations/src/module.mjs +8 -8
  5. package/esm2022/animations/src/private_export.mjs +1 -2
  6. package/esm2022/animations/src/providers.mjs +4 -7
  7. package/esm2022/src/browser/meta.mjs +3 -3
  8. package/esm2022/src/browser/title.mjs +3 -3
  9. package/esm2022/src/browser/xhr.mjs +3 -3
  10. package/esm2022/src/browser.mjs +4 -4
  11. package/esm2022/src/dom/dom_renderer.mjs +19 -19
  12. package/esm2022/src/dom/events/dom_events.mjs +3 -3
  13. package/esm2022/src/dom/events/event_manager.mjs +3 -3
  14. package/esm2022/src/dom/events/hammer_gestures.mjs +10 -10
  15. package/esm2022/src/dom/events/key_events.mjs +3 -3
  16. package/esm2022/src/dom/shared_styles_host.mjs +20 -47
  17. package/esm2022/src/errors.mjs +1 -1
  18. package/esm2022/src/hydration.mjs +31 -52
  19. package/esm2022/src/platform-browser.mjs +2 -2
  20. package/esm2022/src/private_export.mjs +1 -1
  21. package/esm2022/src/security/dom_sanitization_service.mjs +6 -6
  22. package/esm2022/src/version.mjs +1 -1
  23. package/esm2022/testing/src/browser.mjs +4 -4
  24. package/fesm2022/animations/async.mjs +42 -6
  25. package/fesm2022/animations/async.mjs.map +1 -1
  26. package/fesm2022/animations.mjs +14 -111
  27. package/fesm2022/animations.mjs.map +1 -1
  28. package/fesm2022/platform-browser.mjs +106 -154
  29. package/fesm2022/platform-browser.mjs.map +1 -1
  30. package/fesm2022/testing.mjs +5 -5
  31. package/index.d.ts +37 -47
  32. package/package.json +4 -4
  33. package/testing/index.d.ts +1 -1
  34. package/esm2022/animations/src/animation_builder.mjs +0 -106
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v17.0.0-next.7
2
+ * @license Angular v17.0.0-rc.0
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -26,9 +26,9 @@ const platformBrowserTesting = createPlatformFactory(platformCore, 'browserTesti
26
26
  * @publicApi
27
27
  */
28
28
  class BrowserTestingModule {
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: BrowserTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
30
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.0-next.7", ngImport: i0, type: BrowserTestingModule, exports: [BrowserModule] }); }
31
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: BrowserTestingModule, providers: [
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: BrowserTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
30
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.0-rc.0", ngImport: i0, type: BrowserTestingModule, exports: [BrowserModule] }); }
31
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: BrowserTestingModule, providers: [
32
32
  { provide: APP_ID, useValue: 'a' },
33
33
  provideZoneChangeDetection(),
34
34
  { provide: PlatformLocation, useClass: MockPlatformLocation },
@@ -36,7 +36,7 @@ class BrowserTestingModule {
36
36
  { provide: ɵEffectScheduler, useExisting: ɵZoneAwareQueueingScheduler },
37
37
  ], imports: [BrowserModule] }); }
38
38
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: BrowserTestingModule, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.0", ngImport: i0, type: BrowserTestingModule, decorators: [{
40
40
  type: NgModule,
41
41
  args: [{
42
42
  exports: [BrowserModule],
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v17.0.0-next.7
2
+ * @license Angular v17.0.0-rc.0
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -12,6 +12,7 @@ import { DebugElement } from '@angular/core';
12
12
  import { DebugNode } from '@angular/core';
13
13
  import { EnvironmentProviders } from '@angular/core';
14
14
  import { GetTestability } from '@angular/core';
15
+ import { HttpTransferCacheOptions } from '@angular/common/http';
15
16
  import * as i0 from '@angular/core';
16
17
  import * as i1 from '@angular/common';
17
18
  import { InjectionToken } from '@angular/core';
@@ -474,7 +475,6 @@ export declare class HammerModule {
474
475
  * Helper type to represent a Hydration feature.
475
476
  *
476
477
  * @publicApi
477
- * @developerPreview
478
478
  */
479
479
  export declare interface HydrationFeature<FeatureKind extends HydrationFeatureKind> {
480
480
  ɵkind: FeatureKind;
@@ -486,11 +486,10 @@ export declare interface HydrationFeature<FeatureKind extends HydrationFeatureKi
486
486
  * @see {@link HydrationFeature}
487
487
  *
488
488
  * @publicApi
489
- * @developerPreview
490
489
  */
491
490
  export declare const enum HydrationFeatureKind {
492
- NoDomReuseFeature = 0,
493
- NoHttpTransferCache = 1
491
+ NoHttpTransferCache = 0,
492
+ HttpTransferCacheOptions = 1
494
493
  }
495
494
 
496
495
  /**
@@ -635,19 +634,16 @@ export declare const platformBrowser: (extraProviders?: StaticProvider[]) => Pla
635
634
  * Sets up providers necessary to enable hydration functionality for the application.
636
635
  *
637
636
  * By default, the function enables the recommended set of features for the optimal
638
- * performance for most of the applications. You can enable/disable features by
639
- * passing special functions (from the `HydrationFeatures` set) as arguments to the
640
- * `provideClientHydration` function. It includes the following features:
637
+ * performance for most of the applications. It includes the following features:
641
638
  *
642
639
  * * Reconciling DOM hydration. Learn more about it [here](guide/hydration).
643
640
  * * [`HttpClient`](api/common/http/HttpClient) response caching while running on the server and
644
641
  * transferring this cache to the client to avoid extra HTTP requests. Learn more about data caching
645
642
  * [here](/guide/universal#caching-data-when-using-httpclient).
646
643
  *
647
- * These functions functions will allow you to disable some of the default features:
648
- * * {@link withNoDomReuse} to disable DOM nodes reuse during hydration
644
+ * These functions allow you to disable some of the default features or configure features
649
645
  * * {@link withNoHttpTransferCache} to disable HTTP transfer cache
650
- *
646
+ * * {@link withHttpTransferCacheOptions} to configure some HTTP transfer cache options
651
647
  *
652
648
  * @usageNotes
653
649
  *
@@ -670,14 +666,13 @@ export declare const platformBrowser: (extraProviders?: StaticProvider[]) => Pla
670
666
  * export class AppModule {}
671
667
  * ```
672
668
  *
673
- * @see {@link withNoDomReuse}
674
669
  * @see {@link withNoHttpTransferCache}
670
+ * @see {@link withHttpTransferCacheOptions}
675
671
  *
676
672
  * @param features Optional features to configure additional router behaviors.
677
673
  * @returns A set of providers to enable hydration.
678
674
  *
679
675
  * @publicApi
680
- * @developerPreview
681
676
  */
682
677
  export declare function provideClientHydration(...features: HydrationFeature<HydrationFeatureKind>[]): EnvironmentProviders;
683
678
 
@@ -696,7 +691,7 @@ export declare function provideProtractorTestingSupport(): Provider[];
696
691
 
697
692
  /**
698
693
  * A [DI token](guide/glossary#di-token "DI token definition") that indicates whether styles
699
- * of destroyed components should be disabled.
694
+ * of destroyed components should be removed from DOM.
700
695
  *
701
696
  * By default, the value is set to `true`.
702
697
  * @publicApi
@@ -825,44 +820,20 @@ export declare const TransferState: {
825
820
  export declare const VERSION: Version;
826
821
 
827
822
  /**
828
- * Disables DOM nodes reuse during hydration. Effectively makes
829
- * Angular re-render an application from scratch on the client.
830
- *
831
- * When this option is enabled, make sure that the initial navigation
832
- * option is configured for the Router as `enabledBlocking` by using the
833
- * `withEnabledBlockingInitialNavigation` in the `provideRouter` call:
834
- *
835
- * ```
836
- * bootstrapApplication(RootComponent, {
837
- * providers: [
838
- * provideRouter(
839
- * // ... other features ...
840
- * withEnabledBlockingInitialNavigation()
841
- * ),
842
- * provideClientHydration(withNoDomReuse())
843
- * ]
844
- * });
845
- * ```
846
- *
847
- * This would ensure that the application is rerendered after all async
848
- * operations in the Router (such as lazy-loading of components,
849
- * waiting for async guards and resolvers) are completed to avoid
850
- * clearing the DOM on the client too soon, thus causing content flicker.
851
- *
852
- * @see {@link provideRouter}
853
- * @see {@link withEnabledBlockingInitialNavigation}
823
+ * The function accepts a an object, which allows to configure cache parameters,
824
+ * such as which headers should be included (no headers are included by default),
825
+ * wether POST requests should be cached or a callback function to determine if a
826
+ * particular request should be cached.
854
827
  *
855
828
  * @publicApi
856
- * @developerPreview
857
829
  */
858
- export declare function withNoDomReuse(): HydrationFeature<HydrationFeatureKind.NoDomReuseFeature>;
830
+ export declare function withHttpTransferCacheOptions(options: HttpTransferCacheOptions): HydrationFeature<HydrationFeatureKind.HttpTransferCacheOptions>;
859
831
 
860
832
  /**
861
833
  * Disables HTTP transfer cache. Effectively causes HTTP requests to be performed twice: once on the
862
834
  * server and other one on the browser.
863
835
  *
864
836
  * @publicApi
865
- * @developerPreview
866
837
  */
867
838
  export declare function withNoHttpTransferCache(): HydrationFeature<HydrationFeatureKind.NoHttpTransferCache>;
868
839
 
@@ -908,7 +879,7 @@ export declare class ɵDomRendererFactory2 implements RendererFactory2, OnDestro
908
879
  private readonly eventManager;
909
880
  private readonly sharedStylesHost;
910
881
  private readonly appId;
911
- private disableStylesOnCompDestroy;
882
+ private removeStylesOnCompDestroy;
912
883
  private readonly doc;
913
884
  readonly platformId: Object;
914
885
  readonly ngZone: NgZone;
@@ -916,7 +887,7 @@ export declare class ɵDomRendererFactory2 implements RendererFactory2, OnDestro
916
887
  private readonly rendererByCompId;
917
888
  private readonly defaultRenderer;
918
889
  private readonly platformIsServer;
919
- constructor(eventManager: EventManager, sharedStylesHost: ɵSharedStylesHost, appId: string, disableStylesOnCompDestroy: boolean, doc: Document, platformId: Object, ngZone: NgZone, nonce?: string | null);
890
+ constructor(eventManager: EventManager, sharedStylesHost: ɵSharedStylesHost, appId: string, removeStylesOnCompDestroy: boolean, doc: Document, platformId: Object, ngZone: NgZone, nonce?: string | null);
920
891
  createRenderer(element: any, type: RendererType2 | null): Renderer2;
921
892
  private getOrCreateRenderer;
922
893
  ngOnDestroy(): void;
@@ -1021,6 +992,25 @@ export declare class ɵKeyEventsPlugin extends EventManagerPlugin {
1021
992
  static ɵprov: i0.ɵɵInjectableDeclaration<ɵKeyEventsPlugin>;
1022
993
  }
1023
994
 
995
+
996
+ /**
997
+ * The list of error codes used in runtime code of the `platform-browser` package.
998
+ * Reserved error code range: 5000-5500.
999
+ */
1000
+ export declare const enum ɵRuntimeErrorCode {
1001
+ UNSUPPORTED_ZONEJS_INSTANCE = -5000,
1002
+ BROWER_MODULE_ALREADY_LOADED = 5100,
1003
+ NO_PLUGIN_FOR_EVENT = 5101,
1004
+ UNSUPPORTED_EVENT_TARGET = 5102,
1005
+ TESTABILITY_NOT_FOUND = 5103,
1006
+ ROOT_NODE_NOT_FOUND = -5104,
1007
+ UNEXPECTED_SYNTHETIC_PROPERTY = 5105,
1008
+ SANITIZATION_UNSAFE_SCRIPT = 5200,
1009
+ SANITIZATION_UNSAFE_RESOURCE_URL = 5201,
1010
+ SANITIZATION_UNEXPECTED_CTX = 5202,
1011
+ ANIMATION_RENDERER_ASYNC_LOADING_FAILURE = 5300
1012
+ }
1013
+
1024
1014
  export declare class ɵSharedStylesHost implements OnDestroy {
1025
1015
  private readonly doc;
1026
1016
  private readonly appId;
@@ -1032,13 +1022,13 @@ export declare class ɵSharedStylesHost implements OnDestroy {
1032
1022
  private readonly platformIsServer;
1033
1023
  constructor(doc: Document, appId: string, nonce?: string | null | undefined, platformId?: object);
1034
1024
  addStyles(styles: string[]): void;
1035
- disableStyles(styles: string[]): void;
1036
- visitStyleElement(style: string, callback: (node: HTMLStyleElement) => void): void;
1025
+ removeStyles(styles: string[]): void;
1037
1026
  ngOnDestroy(): void;
1038
1027
  addHost(hostNode: Node): void;
1039
1028
  removeHost(hostNode: Node): void;
1040
1029
  private getAllStyles;
1041
1030
  private onStyleAdded;
1031
+ private onStyleRemoved;
1042
1032
  private collectServerRenderedStyles;
1043
1033
  private changeUsageCount;
1044
1034
  private getStyleElement;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/platform-browser",
3
- "version": "17.0.0-next.7",
3
+ "version": "17.0.0-rc.0",
4
4
  "description": "Angular - library for using Angular in a web browser",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -11,9 +11,9 @@
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "peerDependencies": {
14
- "@angular/animations": "17.0.0-next.7",
15
- "@angular/core": "17.0.0-next.7",
16
- "@angular/common": "17.0.0-next.7"
14
+ "@angular/animations": "17.0.0-rc.0",
15
+ "@angular/core": "17.0.0-rc.0",
16
+ "@angular/common": "17.0.0-rc.0"
17
17
  },
18
18
  "peerDependenciesMeta": {
19
19
  "@angular/animations": {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v17.0.0-next.7
2
+ * @license Angular v17.0.0-rc.0
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -1,106 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { AnimationBuilder, AnimationFactory, sequence } from '@angular/animations';
9
- import { DOCUMENT } from '@angular/common';
10
- import { Inject, Injectable, RendererFactory2, ViewEncapsulation } from '@angular/core';
11
- import * as i0 from "@angular/core";
12
- export class BrowserAnimationBuilder extends AnimationBuilder {
13
- constructor(rootRenderer, doc) {
14
- super();
15
- this._nextAnimationId = 0;
16
- const typeData = { id: '0', encapsulation: ViewEncapsulation.None, styles: [], data: { animation: [] } };
17
- this._renderer = rootRenderer.createRenderer(doc.body, typeData);
18
- }
19
- build(animation) {
20
- const id = this._nextAnimationId.toString();
21
- this._nextAnimationId++;
22
- const entry = Array.isArray(animation) ? sequence(animation) : animation;
23
- issueAnimationCommand(this._renderer, null, id, 'register', [entry]);
24
- return new BrowserAnimationFactory(id, this._renderer);
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: BrowserAnimationBuilder, deps: [{ token: i0.RendererFactory2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
27
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: BrowserAnimationBuilder }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: BrowserAnimationBuilder, decorators: [{
30
- type: Injectable
31
- }], ctorParameters: () => [{ type: i0.RendererFactory2 }, { type: Document, decorators: [{
32
- type: Inject,
33
- args: [DOCUMENT]
34
- }] }] });
35
- class BrowserAnimationFactory extends AnimationFactory {
36
- constructor(_id, _renderer) {
37
- super();
38
- this._id = _id;
39
- this._renderer = _renderer;
40
- }
41
- create(element, options) {
42
- return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);
43
- }
44
- }
45
- export class RendererAnimationPlayer {
46
- constructor(id, element, options, _renderer) {
47
- this.id = id;
48
- this.element = element;
49
- this._renderer = _renderer;
50
- this.parentPlayer = null;
51
- this._started = false;
52
- this.totalTime = 0;
53
- this._command('create', options);
54
- }
55
- _listen(eventName, callback) {
56
- return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);
57
- }
58
- _command(command, ...args) {
59
- return issueAnimationCommand(this._renderer, this.element, this.id, command, args);
60
- }
61
- onDone(fn) {
62
- this._listen('done', fn);
63
- }
64
- onStart(fn) {
65
- this._listen('start', fn);
66
- }
67
- onDestroy(fn) {
68
- this._listen('destroy', fn);
69
- }
70
- init() {
71
- this._command('init');
72
- }
73
- hasStarted() {
74
- return this._started;
75
- }
76
- play() {
77
- this._command('play');
78
- this._started = true;
79
- }
80
- pause() {
81
- this._command('pause');
82
- }
83
- restart() {
84
- this._command('restart');
85
- }
86
- finish() {
87
- this._command('finish');
88
- }
89
- destroy() {
90
- this._command('destroy');
91
- }
92
- reset() {
93
- this._command('reset');
94
- this._started = false;
95
- }
96
- setPosition(p) {
97
- this._command('setPosition', p);
98
- }
99
- getPosition() {
100
- return this._renderer.engine.players[+this.id]?.getPosition() ?? 0;
101
- }
102
- }
103
- function issueAnimationCommand(renderer, element, id, command, args) {
104
- return renderer.setProperty(element, `@@${id}:${command}`, args);
105
- }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uX2J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMvc3JjL2FuaW1hdGlvbl9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBd0QsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFdkksT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFpQixpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFHckcsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGdCQUFnQjtJQUkzRCxZQUFZLFlBQThCLEVBQW9CLEdBQWE7UUFDekUsS0FBSyxFQUFFLENBQUM7UUFKRixxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFLM0IsTUFBTSxRQUFRLEdBQ1YsRUFBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsRUFBRSxFQUFDLEVBQ3JFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFzQixDQUFDO0lBQ3hGLENBQUM7SUFFUSxLQUFLLENBQUMsU0FBZ0Q7UUFDN0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FB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LElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVyxDQUFDLENBQVM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztDQUdGO0FBRUQsU0FBUyxxQkFBcUIsQ0FDMUIsUUFBMkIsRUFBRSxPQUFZLEVBQUUsRUFBVSxFQUFFLE9BQWUsRUFBRSxJQUFXO0lBQ3JGLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtBbmltYXRpb25CdWlsZGVyLCBBbmltYXRpb25GYWN0b3J5LCBBbmltYXRpb25NZXRhZGF0YSwgQW5pbWF0aW9uT3B0aW9ucywgQW5pbWF0aW9uUGxheWVyLCBzZXF1ZW5jZX0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgdHlwZSB7ybVBbmltYXRpb25SZW5kZXJlciBhcyBBbmltYXRpb25SZW5kZXJlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucy9icm93c2VyJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXJGYWN0b3J5MiwgUmVuZGVyZXJUeXBlMiwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQnJvd3NlckFuaW1hdGlvbkJ1aWxkZXIgZXh0ZW5kcyBBbmltYXRpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBfbmV4dEFuaW1hdGlvbklkID0gMDtcbiAgcHJpdmF0ZSBfcmVuZGVyZXI6IEFuaW1hdGlvblJlbmRlcmVyO1xuXG4gIGNvbnN0cnVjdG9yKHJvb3RSZW5kZXJlcjogUmVuZGVyZXJGYWN0b3J5MiwgQEluamVjdChET0NVTUVOVCkgZG9jOiBEb2N1bWVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgdHlwZURhdGEgPVxuICAgICAgICB7aWQ6ICcwJywgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSwgc3R5bGVzOiBbXSwgZGF0YToge2FuaW1hdGlvbjogW119fSBhc1xuICAgICAgICBSZW5kZXJlclR5cGUyO1xuICAgIHRoaXMuX3JlbmRlcmVyID0gcm9vdFJlbmRlcmVyLmNyZWF0ZVJlbmRlcmVyKGRvYy5ib2R5LCB0eXBlRGF0YSkgYXMgQW5pbWF0aW9uUmVuZGVyZXI7XG4gIH1cblxuICBvdmVycmlkZSBidWlsZChhbmltYXRpb246IEFuaW1hdGlvbk1ldGFkYXRhfEFuaW1hdGlvbk1ldGFkYXRhW10pOiBBbmltYXRpb25GYWN0b3J5IHtcbiAgICBjb25zdCBpZCA9IHRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO1xuICAgIHRoaXMuX25leHRBbmltYXRpb25JZCsrO1xuICAgIGNvbnN0IGVudHJ5ID0gQXJyYXkuaXNBcnJheShhbmltYXRpb24pID8gc2VxdWVuY2UoYW5pbWF0aW9uKSA6IGFuaW1hdGlvbjtcbiAgICBpc3N1ZUFuaW1hdGlvbkNvbW1hbmQodGhpcy5fcmVuZGVyZXIsIG51bGwsIGlkLCAncmVnaXN0ZXInLCBbZW50cnldKTtcbiAgICByZXR1cm4gbmV3IEJyb3dzZXJBbmltYXRpb25GYWN0b3J5KGlkLCB0aGlzLl9yZW5kZXJlcik7XG4gIH1cbn1cblxuY2xhc3MgQnJvd3NlckFuaW1hdGlvbkZhY3RvcnkgZXh0ZW5kcyBBbmltYXRpb25GYWN0b3J5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfaWQ6IHN0cmluZywgcHJpdmF0ZSBfcmVuZGVyZXI6IEFuaW1hdGlvblJlbmRlcmVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNyZWF0ZShlbGVtZW50OiBhbnksIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zKTogQW5pbWF0aW9uUGxheWVyIHtcbiAgICByZXR1cm4gbmV3IFJlbmRlcmVyQW5pbWF0aW9uUGxheWVyKHRoaXMuX2lkLCBlbGVtZW50LCBvcHRpb25zIHx8IHt9LCB0aGlzLl9yZW5kZXJlcik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbmRlcmVyQW5pbWF0aW9uUGxheWVyIGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVyIHtcbiAgcHVibGljIHBhcmVudFBsYXllcjogQW5pbWF0aW9uUGxheWVyfG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9zdGFydGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwdWJsaWMgaWQ6IHN0cmluZywgcHVibGljIGVsZW1lbnQ6IGFueSwgb3B0aW9uczogQW5pbWF0aW9uT3B0aW9ucyxcbiAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBBbmltYXRpb25SZW5kZXJlcikge1xuICAgIHRoaXMuX2NvbW1hbmQoJ2NyZWF0ZScsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuKGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IGFueSk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LCBgQEAke3RoaXMuaWR9OiR7ZXZlbnROYW1lfWAsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbW1hbmQoY29tbWFuZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBpc3N1ZUFuaW1hdGlvbkNvbW1hbmQodGhpcy5fcmVuZGVyZXIsIHRoaXMuZWxlbWVudCwgdGhpcy5pZCwgY29tbWFuZCwgYXJncyk7XG4gIH1cblxuICBvbkRvbmUoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW4oJ2RvbmUnLCBmbik7XG4gIH1cblxuICBvblN0YXJ0KGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuKCdzdGFydCcsIGZuKTtcbiAgfVxuXG4gIG9uRGVzdHJveShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbignZGVzdHJveScsIGZuKTtcbiAgfVxuXG4gIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbWFuZCgnaW5pdCcpO1xuICB9XG5cbiAgaGFzU3RhcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRlZDtcbiAgfVxuXG4gIHBsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbWFuZCgncGxheScpO1xuICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlO1xuICB9XG5cbiAgcGF1c2UoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbWFuZCgncGF1c2UnKTtcbiAgfVxuXG4gIHJlc3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tbWFuZCgncmVzdGFydCcpO1xuICB9XG5cbiAgZmluaXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbW1hbmQoJ2ZpbmlzaCcpO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jb21tYW5kKCdkZXN0cm95Jyk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jb21tYW5kKCdyZXNldCcpO1xuICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHNldFBvc2l0aW9uKHA6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2NvbW1hbmQoJ3NldFBvc2l0aW9uJywgcCk7XG4gIH1cblxuICBnZXRQb3NpdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0/LmdldFBvc2l0aW9uKCkgPz8gMDtcbiAgfVxuXG4gIHB1YmxpYyB0b3RhbFRpbWUgPSAwO1xufVxuXG5mdW5jdGlvbiBpc3N1ZUFuaW1hdGlvbkNvbW1hbmQoXG4gICAgcmVuZGVyZXI6IEFuaW1hdGlvblJlbmRlcmVyLCBlbGVtZW50OiBhbnksIGlkOiBzdHJpbmcsIGNvbW1hbmQ6IHN0cmluZywgYXJnczogYW55W10pOiBhbnkge1xuICByZXR1cm4gcmVuZGVyZXIuc2V0UHJvcGVydHkoZWxlbWVudCwgYEBAJHtpZH06JHtjb21tYW5kfWAsIGFyZ3MpO1xufVxuIl19