@angular/core 13.2.0 → 14.0.0-next.2
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.
- package/core.d.ts +78 -80
- package/esm2020/src/application_init.mjs +1 -1
- package/esm2020/src/application_ref.mjs +3 -22
- package/esm2020/src/change_detection/change_detection.mjs +2 -3
- package/esm2020/src/compiler/compiler_facade_interface.mjs +1 -1
- package/esm2020/src/core_private_export.mjs +2 -1
- package/esm2020/src/debug/debug_node.mjs +128 -45
- package/esm2020/src/di/r3_injector.mjs +5 -15
- package/esm2020/src/di/reflective_injector.mjs +1 -1
- package/esm2020/src/errors.mjs +22 -5
- package/esm2020/src/metadata/directives.mjs +14 -5
- package/esm2020/src/reflection/reflector.mjs +1 -1
- package/esm2020/src/render3/context_discovery.mjs +1 -1
- package/esm2020/src/render3/instructions/shared.mjs +2 -2
- package/esm2020/src/render3/jit/directive.mjs +5 -2
- package/esm2020/src/render3/jit/pipe.mjs +5 -2
- package/esm2020/src/util/coercion.mjs +12 -0
- package/esm2020/src/version.mjs +1 -1
- package/esm2020/testing/src/logger.mjs +3 -3
- package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
- package/esm2020/testing/src/r3_test_bed.mjs +6 -1
- package/fesm2015/core.mjs +191 -93
- package/fesm2015/core.mjs.map +1 -1
- package/fesm2015/testing.mjs +6 -1
- package/fesm2015/testing.mjs.map +1 -1
- package/fesm2020/core.mjs +191 -93
- package/fesm2020/core.mjs.map +1 -1
- package/fesm2020/testing.mjs +6 -1
- package/fesm2020/testing.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/migrations/typed-forms/index.js +2 -2
- package/schematics/migrations/typed-forms/util.js +3 -8
- package/schematics/migrations.json +6 -16
- package/testing/testing.d.ts +1 -1
- package/schematics/migrations/router-link-empty-expression/analyze_template.d.ts +0 -11
- package/schematics/migrations/router-link-empty-expression/analyze_template.js +0 -34
- package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.d.ts +0 -20
- package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.js +0 -47
- package/schematics/migrations/router-link-empty-expression/index.d.ts +0 -11
- package/schematics/migrations/router-link-empty-expression/index.js +0 -170
- package/schematics/migrations/testbed-teardown/index.d.ts +0 -11
- package/schematics/migrations/testbed-teardown/index.js +0 -92
- package/schematics/migrations/testbed-teardown/util.d.ts +0 -35
- package/schematics/migrations/testbed-teardown/util.js +0 -188
package/core.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular
|
|
2
|
+
* @license Angular v14.0.0-next.2
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -1702,13 +1702,18 @@ export declare const CUSTOM_ELEMENTS_SCHEMA: SchemaMetadata;
|
|
|
1702
1702
|
* @see [Basics of testing components](guide/testing-components-basics)
|
|
1703
1703
|
* @see [Testing utility APIs](guide/testing-utility-apis)
|
|
1704
1704
|
*/
|
|
1705
|
-
export declare
|
|
1705
|
+
export declare class DebugElement extends DebugNode {
|
|
1706
|
+
constructor(nativeNode: Element);
|
|
1707
|
+
/**
|
|
1708
|
+
* The underlying DOM element at the root of the component.
|
|
1709
|
+
*/
|
|
1710
|
+
get nativeElement(): any;
|
|
1706
1711
|
/**
|
|
1707
1712
|
* The element tag name, if it is an element.
|
|
1708
1713
|
*/
|
|
1709
|
-
|
|
1714
|
+
get name(): string;
|
|
1710
1715
|
/**
|
|
1711
|
-
*
|
|
1716
|
+
* Gets a map of property names to property values for an element.
|
|
1712
1717
|
*
|
|
1713
1718
|
* This map includes:
|
|
1714
1719
|
* - Regular property bindings (e.g. `[id]="id"`)
|
|
@@ -1719,13 +1724,23 @@ export declare interface DebugElement extends DebugNode {
|
|
|
1719
1724
|
* - input property bindings (e.g. `[myCustomInput]="value"`)
|
|
1720
1725
|
* - attribute bindings (e.g. `[attr.role]="menu"`)
|
|
1721
1726
|
*/
|
|
1722
|
-
|
|
1727
|
+
get properties(): {
|
|
1723
1728
|
[key: string]: any;
|
|
1724
1729
|
};
|
|
1725
1730
|
/**
|
|
1726
1731
|
* A map of attribute names to attribute values for an element.
|
|
1727
1732
|
*/
|
|
1728
|
-
|
|
1733
|
+
get attributes(): {
|
|
1734
|
+
[key: string]: string | null;
|
|
1735
|
+
};
|
|
1736
|
+
/**
|
|
1737
|
+
* The inline styles of the DOM element.
|
|
1738
|
+
*
|
|
1739
|
+
* Will be `null` if there is no `style` property on the underlying DOM element.
|
|
1740
|
+
*
|
|
1741
|
+
* @see [ElementCSSInlineStyle](https://developer.mozilla.org/en-US/docs/Web/API/ElementCSSInlineStyle/style)
|
|
1742
|
+
*/
|
|
1743
|
+
get styles(): {
|
|
1729
1744
|
[key: string]: string | null;
|
|
1730
1745
|
};
|
|
1731
1746
|
/**
|
|
@@ -1738,33 +1753,19 @@ export declare interface DebugElement extends DebugNode {
|
|
|
1738
1753
|
*
|
|
1739
1754
|
* @see [Element.className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)
|
|
1740
1755
|
*/
|
|
1741
|
-
|
|
1756
|
+
get classes(): {
|
|
1742
1757
|
[key: string]: boolean;
|
|
1743
1758
|
};
|
|
1744
|
-
/**
|
|
1745
|
-
* The inline styles of the DOM element.
|
|
1746
|
-
*
|
|
1747
|
-
* Will be `null` if there is no `style` property on the underlying DOM element.
|
|
1748
|
-
*
|
|
1749
|
-
* @see [ElementCSSInlineStyle](https://developer.mozilla.org/en-US/docs/Web/API/ElementCSSInlineStyle/style)
|
|
1750
|
-
*/
|
|
1751
|
-
readonly styles: {
|
|
1752
|
-
[key: string]: string | null;
|
|
1753
|
-
};
|
|
1754
1759
|
/**
|
|
1755
1760
|
* The `childNodes` of the DOM element as a `DebugNode` array.
|
|
1756
1761
|
*
|
|
1757
1762
|
* @see [Node.childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes)
|
|
1758
1763
|
*/
|
|
1759
|
-
|
|
1760
|
-
/**
|
|
1761
|
-
* The underlying DOM element at the root of the component.
|
|
1762
|
-
*/
|
|
1763
|
-
readonly nativeElement: any;
|
|
1764
|
+
get childNodes(): DebugNode[];
|
|
1764
1765
|
/**
|
|
1765
1766
|
* The immediate `DebugElement` children. Walk the tree by descending through `children`.
|
|
1766
1767
|
*/
|
|
1767
|
-
|
|
1768
|
+
get children(): DebugElement[];
|
|
1768
1769
|
/**
|
|
1769
1770
|
* @returns the first `DebugElement` that matches the predicate at any depth in the subtree.
|
|
1770
1771
|
*/
|
|
@@ -1792,13 +1793,6 @@ export declare interface DebugElement extends DebugNode {
|
|
|
1792
1793
|
triggerEventHandler(eventName: string, eventObj: any): void;
|
|
1793
1794
|
}
|
|
1794
1795
|
|
|
1795
|
-
/**
|
|
1796
|
-
* @publicApi
|
|
1797
|
-
*/
|
|
1798
|
-
export declare const DebugElement: {
|
|
1799
|
-
new (...args: any[]): DebugElement;
|
|
1800
|
-
};
|
|
1801
|
-
|
|
1802
1796
|
/**
|
|
1803
1797
|
* @publicApi
|
|
1804
1798
|
*/
|
|
@@ -1811,28 +1805,24 @@ export declare class DebugEventListener {
|
|
|
1811
1805
|
/**
|
|
1812
1806
|
* @publicApi
|
|
1813
1807
|
*/
|
|
1814
|
-
export declare
|
|
1808
|
+
export declare class DebugNode {
|
|
1815
1809
|
/**
|
|
1816
|
-
* The
|
|
1817
|
-
* properties.
|
|
1810
|
+
* The underlying DOM node.
|
|
1818
1811
|
*/
|
|
1819
|
-
readonly
|
|
1812
|
+
readonly nativeNode: any;
|
|
1813
|
+
constructor(nativeNode: Node);
|
|
1820
1814
|
/**
|
|
1821
1815
|
* The `DebugElement` parent. Will be `null` if this is the root element.
|
|
1822
1816
|
*/
|
|
1823
|
-
|
|
1824
|
-
/**
|
|
1825
|
-
* The underlying DOM node.
|
|
1826
|
-
*/
|
|
1827
|
-
readonly nativeNode: any;
|
|
1817
|
+
get parent(): DebugElement | null;
|
|
1828
1818
|
/**
|
|
1829
1819
|
* The host dependency injector. For example, the root element's component instance injector.
|
|
1830
1820
|
*/
|
|
1831
|
-
|
|
1821
|
+
get injector(): Injector;
|
|
1832
1822
|
/**
|
|
1833
1823
|
* The element's own component instance, if it has one.
|
|
1834
1824
|
*/
|
|
1835
|
-
|
|
1825
|
+
get componentInstance(): any;
|
|
1836
1826
|
/**
|
|
1837
1827
|
* An object that provides parent context for this element. Often an ancestor component instance
|
|
1838
1828
|
* that governs this element.
|
|
@@ -1841,28 +1831,26 @@ export declare interface DebugNode {
|
|
|
1841
1831
|
* property is the value of the row instance value. For example, the `hero` in `*ngFor="let hero
|
|
1842
1832
|
* of heroes"`.
|
|
1843
1833
|
*/
|
|
1844
|
-
|
|
1834
|
+
get context(): any;
|
|
1835
|
+
/**
|
|
1836
|
+
* The callbacks attached to the component's @Output properties and/or the element's event
|
|
1837
|
+
* properties.
|
|
1838
|
+
*/
|
|
1839
|
+
get listeners(): DebugEventListener[];
|
|
1845
1840
|
/**
|
|
1846
1841
|
* Dictionary of objects associated with template local variables (e.g. #foo), keyed by the local
|
|
1847
1842
|
* variable name.
|
|
1848
1843
|
*/
|
|
1849
|
-
|
|
1844
|
+
get references(): {
|
|
1850
1845
|
[key: string]: any;
|
|
1851
1846
|
};
|
|
1852
1847
|
/**
|
|
1853
1848
|
* This component's injector lookup tokens. Includes the component itself plus the tokens that the
|
|
1854
1849
|
* component lists in its providers metadata.
|
|
1855
1850
|
*/
|
|
1856
|
-
|
|
1851
|
+
get providerTokens(): any[];
|
|
1857
1852
|
}
|
|
1858
1853
|
|
|
1859
|
-
/**
|
|
1860
|
-
* @publicApi
|
|
1861
|
-
*/
|
|
1862
|
-
export declare const DebugNode: {
|
|
1863
|
-
new (...args: any[]): DebugNode;
|
|
1864
|
-
};
|
|
1865
|
-
|
|
1866
1854
|
/**
|
|
1867
1855
|
* A logical node which comprise into `LView`s.
|
|
1868
1856
|
*
|
|
@@ -2779,7 +2767,7 @@ export declare interface ForwardRefFn {
|
|
|
2779
2767
|
/**
|
|
2780
2768
|
* @publicApi
|
|
2781
2769
|
*/
|
|
2782
|
-
declare
|
|
2770
|
+
declare function getDebugNode(nativeNode: any): DebugNode | null;
|
|
2783
2771
|
export { getDebugNode }
|
|
2784
2772
|
export { getDebugNode as ɵgetDebugNode }
|
|
2785
2773
|
|
|
@@ -3072,19 +3060,20 @@ export declare interface HostListener {
|
|
|
3072
3060
|
*
|
|
3073
3061
|
* ```
|
|
3074
3062
|
*
|
|
3075
|
-
* The following example registers another DOM event handler that listens for key-press
|
|
3063
|
+
* The following example registers another DOM event handler that listens for `Enter` key-press
|
|
3064
|
+
* events on the global `window`.
|
|
3076
3065
|
* ``` ts
|
|
3077
3066
|
* import { HostListener, Component } from "@angular/core";
|
|
3078
3067
|
*
|
|
3079
3068
|
* @Component({
|
|
3080
3069
|
* selector: 'app',
|
|
3081
|
-
* template: `<h1>Hello, you have pressed
|
|
3082
|
-
* increment the counter.
|
|
3070
|
+
* template: `<h1>Hello, you have pressed enter {{counter}} number of times!</h1> Press enter key
|
|
3071
|
+
* to increment the counter.
|
|
3083
3072
|
* <button (click)="resetCounter()">Reset Counter</button>`
|
|
3084
3073
|
* })
|
|
3085
3074
|
* class AppComponent {
|
|
3086
3075
|
* counter = 0;
|
|
3087
|
-
* @HostListener('window:keydown', ['$event'])
|
|
3076
|
+
* @HostListener('window:keydown.enter', ['$event'])
|
|
3088
3077
|
* handleKeyDown(event: KeyboardEvent) {
|
|
3089
3078
|
* this.counter++;
|
|
3090
3079
|
* }
|
|
@@ -3093,6 +3082,14 @@ export declare interface HostListener {
|
|
|
3093
3082
|
* }
|
|
3094
3083
|
* }
|
|
3095
3084
|
* ```
|
|
3085
|
+
* The list of valid key names for `keydown` and `keyup` events
|
|
3086
|
+
* can be found here:
|
|
3087
|
+
* https://www.w3.org/TR/DOM-Level-3-Events-key/#named-key-attribute-values
|
|
3088
|
+
*
|
|
3089
|
+
* Note that keys can also be combined, e.g. `@HostListener('keydown.shift.a')`.
|
|
3090
|
+
*
|
|
3091
|
+
* The global target names that can be used to prefix an event name are
|
|
3092
|
+
* `document:`, `window:` and `body:`.
|
|
3096
3093
|
*
|
|
3097
3094
|
* @Annotation
|
|
3098
3095
|
* @publicApi
|
|
@@ -5583,33 +5580,14 @@ export declare class PlatformRef {
|
|
|
5583
5580
|
private _destroyListeners;
|
|
5584
5581
|
private _destroyed;
|
|
5585
5582
|
/**
|
|
5586
|
-
* Creates an instance of an `@NgModule` for the given platform
|
|
5587
|
-
*
|
|
5588
|
-
* @usageNotes
|
|
5589
|
-
*
|
|
5590
|
-
* The following example creates the NgModule for a browser platform.
|
|
5591
|
-
*
|
|
5592
|
-
* ```typescript
|
|
5593
|
-
* my_module.ts:
|
|
5594
|
-
*
|
|
5595
|
-
* @NgModule({
|
|
5596
|
-
* imports: [BrowserModule]
|
|
5597
|
-
* })
|
|
5598
|
-
* class MyModule {}
|
|
5599
|
-
*
|
|
5600
|
-
* main.ts:
|
|
5601
|
-
* import {MyModuleNgFactory} from './my_module.ngfactory';
|
|
5602
|
-
* import {platformBrowser} from '@angular/platform-browser';
|
|
5603
|
-
*
|
|
5604
|
-
* let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);
|
|
5605
|
-
* ```
|
|
5583
|
+
* Creates an instance of an `@NgModule` for the given platform.
|
|
5606
5584
|
*
|
|
5607
5585
|
* @deprecated Passing NgModule factories as the `PlatformRef.bootstrapModuleFactory` function
|
|
5608
5586
|
* argument is deprecated. Use the `PlatformRef.bootstrapModule` API instead.
|
|
5609
5587
|
*/
|
|
5610
5588
|
bootstrapModuleFactory<M>(moduleFactory: NgModuleFactory<M>, options?: BootstrapOptions): Promise<NgModuleRef<M>>;
|
|
5611
5589
|
/**
|
|
5612
|
-
* Creates an instance of an `@NgModule` for a given platform
|
|
5590
|
+
* Creates an instance of an `@NgModule` for a given platform.
|
|
5613
5591
|
*
|
|
5614
5592
|
* @usageNotes
|
|
5615
5593
|
* ### Simple Example
|
|
@@ -6028,6 +6006,7 @@ declare interface R3DeclareDirectiveFacade {
|
|
|
6028
6006
|
exportAs?: string[];
|
|
6029
6007
|
usesInheritance?: boolean;
|
|
6030
6008
|
usesOnChanges?: boolean;
|
|
6009
|
+
isStandalone?: boolean;
|
|
6031
6010
|
}
|
|
6032
6011
|
|
|
6033
6012
|
declare interface R3DeclareFactoryFacade {
|
|
@@ -9455,6 +9434,10 @@ export declare enum ɵChangeDetectorStatus {
|
|
|
9455
9434
|
|
|
9456
9435
|
export declare function ɵclearResolutionOfComponentResourcesQueue(): Map<Type<any>, Component>;
|
|
9457
9436
|
|
|
9437
|
+
|
|
9438
|
+
/** Coerces a value (typically a string) to a boolean. */
|
|
9439
|
+
export declare function ɵcoerceToBoolean(value: unknown): boolean;
|
|
9440
|
+
|
|
9458
9441
|
/**
|
|
9459
9442
|
* Compile an Angular component according to its decorator metadata, and patch the resulting
|
|
9460
9443
|
* component def (ɵcmp) onto the component type.
|
|
@@ -9802,7 +9785,7 @@ export declare function ɵfindLocaleData(locale: string): any;
|
|
|
9802
9785
|
*/
|
|
9803
9786
|
export declare function ɵflushModuleScopingQueueAsMuchAsPossible(): void;
|
|
9804
9787
|
|
|
9805
|
-
export declare
|
|
9788
|
+
export declare function ɵgetDebugNodeR2(_nativeNode: any): DebugNode | null;
|
|
9806
9789
|
|
|
9807
9790
|
/**
|
|
9808
9791
|
* Retrieves directive instances associated with a given DOM node. Does not include
|
|
@@ -10525,9 +10508,24 @@ export declare function ɵresolveComponentResources(resourceResolver: (url: stri
|
|
|
10525
10508
|
text(): Promise<string>;
|
|
10526
10509
|
}>)): Promise<void>;
|
|
10527
10510
|
|
|
10528
|
-
|
|
10511
|
+
/**
|
|
10512
|
+
* Class that represents a runtime error.
|
|
10513
|
+
* Formats and outputs the error message in a consistent way.
|
|
10514
|
+
*
|
|
10515
|
+
* Example:
|
|
10516
|
+
* ```
|
|
10517
|
+
* throw new RuntimeError(
|
|
10518
|
+
* RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED,
|
|
10519
|
+
* ngDevMode && 'Injector has already been destroyed.');
|
|
10520
|
+
* ```
|
|
10521
|
+
*
|
|
10522
|
+
* Note: the `message` argument contains a descriptive error message as a string in development
|
|
10523
|
+
* mode (when the `ngDevMode` is defined). In production mode (after tree-shaking pass), the
|
|
10524
|
+
* `message` argument becomes `false`, thus we account for it in the typings and the runtime logic.
|
|
10525
|
+
*/
|
|
10526
|
+
export declare class ɵRuntimeError<T extends number = RuntimeErrorCode> extends Error {
|
|
10529
10527
|
code: T;
|
|
10530
|
-
constructor(code: T, message: string);
|
|
10528
|
+
constructor(code: T, message: null | false | string);
|
|
10531
10529
|
}
|
|
10532
10530
|
|
|
10533
10531
|
/**
|
|
@@ -137,4 +137,4 @@ ApplicationInitStatus.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: Ap
|
|
|
137
137
|
}, {
|
|
138
138
|
type: Optional
|
|
139
139
|
}] }]; }, null); })();
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb25faW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2FwcGxpY2F0aW9uX2luaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNwRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sYUFBYSxDQUFDOztBQUdqQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUN4QixJQUFJLGNBQWMsQ0FDZCx5QkFBeUIsQ0FBQyxDQUFDO0FBRW5DOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBT2hDLFlBQWtFLFFBQ2M7UUFEZCxhQUFRLEdBQVIsUUFBUSxDQUNNO1FBUHhFLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFWixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBSTNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsT0FBTztTQUNSO1FBRUQsTUFBTSxpQkFBaUIsR0FBbUIsRUFBRSxDQUFDO1FBRTdDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUF3QixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ3pCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDcEM7cUJBQU0sSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ25DLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7d0JBQ2hFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO29CQUMzRCxDQUFDLENBQUMsQ0FBQztvQkFDSCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztpQkFDN0M7YUFDRjtTQUNGO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQzthQUN6QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLFFBQVEsRUFBRSxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDOzswRkF0RFUscUJBQXFCLGNBT1osZUFBZTsyRUFQeEIscUJBQXFCLFdBQXJCLHFCQUFxQjtzRkFBckIscUJBQXFCO2NBRGpDLFVBQVU7O3NCQVFJLE1BQU07dUJBQUMsZUFBZTs7c0JBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsfSBmcm9tICcuL2RpJztcbmltcG9ydCB7aXNPYnNlcnZhYmxlLCBpc1Byb21pc2V9IGZyb20gJy4vdXRpbC9sYW5nJztcbmltcG9ydCB7bm9vcH0gZnJvbSAnLi91dGlsL25vb3AnO1xuXG5cbi8qKlxuICogQSBbREkgdG9rZW5dKGd1aWRlL2dsb3NzYXJ5I2RpLXRva2VuIFwiREkgdG9rZW4gZGVmaW5pdGlvblwiKSB0aGF0IHlvdSBjYW4gdXNlIHRvIHByb3ZpZGVcbiAqIG9uZSBvciBtb3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy5cbiAqXG4gKiBUaGUgcHJvdmlkZWQgZnVuY3Rpb25zIGFyZSBpbmplY3RlZCBhdCBhcHBsaWNhdGlvbiBzdGFydHVwIGFuZCBleGVjdXRlZCBkdXJpbmdcbiAqIGFwcCBpbml0aWFsaXphdGlvbi4gSWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm5zIGEgUHJvbWlzZSBvciBhbiBPYnNlcnZhYmxlLCBpbml0aWFsaXphdGlvblxuICogZG9lcyBub3QgY29tcGxldGUgdW50aWwgdGhlIFByb21pc2UgaXMgcmVzb2x2ZWQgb3IgdGhlIE9ic2VydmFibGUgaXMgY29tcGxldGVkLlxuICpcbiAqIFlvdSBjYW4sIGZvciBleGFtcGxlLCBjcmVhdGUgYSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgbG9hZHMgbGFuZ3VhZ2UgZGF0YVxuICogb3IgYW4gZXh0ZXJuYWwgY29uZmlndXJhdGlvbiwgYW5kIHByb3ZpZGUgdGhhdCBmdW5jdGlvbiB0byB0aGUgYEFQUF9JTklUSUFMSVpFUmAgdG9rZW4uXG4gKiBUaGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZHVyaW5nIHRoZSBhcHBsaWNhdGlvbiBib290c3RyYXAgcHJvY2VzcyxcbiAqIGFuZCB0aGUgbmVlZGVkIGRhdGEgaXMgYXZhaWxhYmxlIG9uIHN0YXJ0dXAuXG4gKlxuICogQHNlZSBgQXBwbGljYXRpb25Jbml0U3RhdHVzYFxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGlsbHVzdHJhdGVzIGhvdyB0byBjb25maWd1cmUgYSBtdWx0aS1wcm92aWRlciB1c2luZyBgQVBQX0lOSVRJQUxJWkVSYCB0b2tlblxuICogYW5kIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvbWlzZS5cbiAqXG4gKiBgYGBcbiAqICBmdW5jdGlvbiBpbml0aWFsaXplQXBwKCk6IFByb21pc2U8YW55PiB7XG4gKiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICogICAgICAvLyBEbyBzb21lIGFzeW5jaHJvbm91cyBzdHVmZlxuICogICAgICByZXNvbHZlKCk7XG4gKiAgICB9KTtcbiAqICB9XG4gKlxuICogIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtCcm93c2VyTW9kdWxlXSxcbiAqICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSxcbiAqICAgYm9vdHN0cmFwOiBbQXBwQ29tcG9uZW50XSxcbiAqICAgcHJvdmlkZXJzOiBbe1xuICogICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAqICAgICB1c2VGYWN0b3J5OiAoKSA9PiBpbml0aWFsaXplQXBwLFxuICogICAgIG11bHRpOiB0cnVlXG4gKiAgICB9XVxuICogICB9KVxuICogIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqIGBgYFxuICpcbiAqIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBjb25maWd1cmUgYSBtdWx0aS1wcm92aWRlciB1c2luZyBgQVBQX0lOSVRJQUxJWkVSYCB0b2tlbiBhbmQgYSBmdW5jdGlvblxuICogcmV0dXJuaW5nIGFuIG9ic2VydmFibGUsIHNlZSBhbiBleGFtcGxlIGJlbG93LiBOb3RlOiB0aGUgYEh0dHBDbGllbnRgIGluIHRoaXMgZXhhbXBsZSBpcyB1c2VkIGZvclxuICogZGVtbyBwdXJwb3NlcyB0byBpbGx1c3RyYXRlIGhvdyB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjYW4gd29yayB3aXRoIG90aGVyIHByb3ZpZGVycyBhdmFpbGFibGVcbiAqIHRocm91Z2ggREkuXG4gKlxuICogYGBgXG4gKiAgZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcEZhY3RvcnkoaHR0cENsaWVudDogSHR0cENsaWVudCk6ICgpID0+IE9ic2VydmFibGU8YW55PiB7XG4gKiAgIHJldHVybiAoKSA9PiBodHRwQ2xpZW50LmdldChcImh0dHBzOi8vc29tZVVybC5jb20vYXBpL3VzZXJcIilcbiAqICAgICAucGlwZShcbiAqICAgICAgICB0YXAodXNlciA9PiB7IC4uLiB9KVxuICogICAgICk7XG4gKiAgfVxuICpcbiAqICBATmdNb2R1bGUoe1xuICogICAgaW1wb3J0czogW0Jyb3dzZXJNb2R1bGUsIEh0dHBDbGllbnRNb2R1bGVdLFxuICogICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSxcbiAqICAgIGJvb3RzdHJhcDogW0FwcENvbXBvbmVudF0sXG4gKiAgICBwcm92aWRlcnM6IFt7XG4gKiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAqICAgICAgdXNlRmFjdG9yeTogaW5pdGlhbGl6ZUFwcEZhY3RvcnksXG4gKiAgICAgIGRlcHM6IFtIdHRwQ2xpZW50XSxcbiAqICAgICAgbXVsdGk6IHRydWVcbiAqICAgIH1dXG4gKiAgfSlcbiAqICBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKiBgYGBcbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfSU5JVElBTElaRVIgPVxuICAgIG5ldyBJbmplY3Rpb25Ub2tlbjxSZWFkb25seUFycmF5PCgpID0+IE9ic2VydmFibGU8dW5rbm93bj58IFByb21pc2U8dW5rbm93bj58IHZvaWQ+PihcbiAgICAgICAgJ0FwcGxpY2F0aW9uIEluaXRpYWxpemVyJyk7XG5cbi8qKlxuICogQSBjbGFzcyB0aGF0IHJlZmxlY3RzIHRoZSBzdGF0ZSBvZiBydW5uaW5nIHtAbGluayBBUFBfSU5JVElBTElaRVJ9IGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkluaXRTdGF0dXMge1xuICBwcml2YXRlIHJlc29sdmUgPSBub29wO1xuICBwcml2YXRlIHJlamVjdCA9IG5vb3A7XG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHVibGljIHJlYWRvbmx5IGRvbmVQcm9taXNlOiBQcm9taXNlPGFueT47XG4gIHB1YmxpYyByZWFkb25seSBkb25lID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChBUFBfSU5JVElBTElaRVIpIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgYXBwSW5pdHM6XG4gICAgICAgICAgICAgICAgICBSZWFkb25seUFycmF5PCgpID0+IE9ic2VydmFibGU8dW5rbm93bj58IFByb21pc2U8dW5rbm93bj58IHZvaWQ+KSB7XG4gICAgdGhpcy5kb25lUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlID0gcmVzO1xuICAgICAgdGhpcy5yZWplY3QgPSByZWo7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHJ1bkluaXRpYWxpemVycygpIHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFzeW5jSW5pdFByb21pc2VzOiBQcm9taXNlPGFueT5bXSA9IFtdO1xuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAodGhpcyBhcyB7ZG9uZTogYm9vbGVhbn0pLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNvbHZlKCk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmFwcEluaXRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXBwSW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IHRoaXMuYXBwSW5pdHNbaV0oKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbml0UmVzdWx0KSkge1xuICAgICAgICAgIGFzeW5jSW5pdFByb21pc2VzLnB1c2goaW5pdFJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGluaXRSZXN1bHQpKSB7XG4gICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZUFzUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGluaXRSZXN1bHQuc3Vic2NyaWJlKHtjb21wbGV0ZTogcmVzb2x2ZSwgZXJyb3I6IHJlamVjdH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFzeW5jSW5pdFByb21pc2VzLnB1c2gob2JzZXJ2YWJsZUFzUHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChhc3luY0luaXRQcm9taXNlcylcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLnJlamVjdChlKTtcbiAgICAgICAgfSk7XG5cbiAgICBpZiAoYXN5bmNJbml0UHJvbWlzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb21wbGV0ZSgpO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxufVxuIl19
|