@angular/core 14.1.0-next.4 → 14.1.1
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/esm2020/src/application_ref.mjs +10 -6
- package/esm2020/src/change_detection/change_detector_ref.mjs +1 -1
- package/esm2020/src/core.mjs +3 -2
- package/esm2020/src/debug/debug_node.mjs +2 -2
- package/esm2020/src/di/injector_compatibility.mjs +2 -2
- package/esm2020/src/di/injector_token.mjs +2 -2
- package/esm2020/src/di/r3_injector.mjs +7 -1
- package/esm2020/src/errors.mjs +1 -1
- package/esm2020/src/linker/component_factory_resolver.mjs +1 -1
- package/esm2020/src/linker/ng_module_factory.mjs +2 -2
- package/esm2020/src/linker/view_container_ref.mjs +2 -2
- package/esm2020/src/render3/component.mjs +120 -127
- package/esm2020/src/render3/component_ref.mjs +144 -9
- package/esm2020/src/render3/errors.mjs +9 -5
- package/esm2020/src/render3/features/standalone_feature.mjs +2 -2
- package/esm2020/src/render3/index.mjs +3 -3
- package/esm2020/src/render3/instructions/change_detection.mjs +2 -20
- package/esm2020/src/render3/instructions/element_validation.mjs +9 -5
- package/esm2020/src/render3/instructions/property_interpolation.mjs +2 -2
- package/esm2020/src/render3/interfaces/i18n.mjs +2 -2
- package/esm2020/src/render3/interfaces/styling.mjs +1 -1
- package/esm2020/src/render3/interfaces/view.mjs +1 -1
- package/esm2020/src/render3/ng_module_ref.mjs +15 -15
- package/esm2020/src/version.mjs +1 -1
- package/esm2020/src/zone/ng_zone.mjs +5 -1
- package/esm2020/testing/src/logger.mjs +3 -3
- package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
- package/esm2020/testing/src/test_bed_common.mjs +1 -1
- package/fesm2015/core.mjs +13117 -12980
- package/fesm2015/core.mjs.map +1 -1
- package/fesm2015/testing.mjs +12933 -12941
- package/fesm2015/testing.mjs.map +1 -1
- package/fesm2020/core.mjs +13117 -12980
- package/fesm2020/core.mjs.map +1 -1
- package/fesm2020/testing.mjs +12922 -12930
- package/fesm2020/testing.mjs.map +1 -1
- package/index.d.ts +177 -16
- package/package.json +1 -1
- package/schematics/migrations/typed-forms/util.js +2 -2
- package/schematics/utils/typescript/symbol.js +2 -2
- package/testing/index.d.ts +2 -2
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v14.1.
|
|
2
|
+
* @license Angular v14.1.1
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -426,6 +426,10 @@ export declare class ApplicationRef {
|
|
|
426
426
|
* @see [Usage notes](#is-stable-examples) for examples and caveats when using this API.
|
|
427
427
|
*/
|
|
428
428
|
readonly isStable: Observable<boolean>;
|
|
429
|
+
/**
|
|
430
|
+
* The `EnvironmentInjector` used to create this application.
|
|
431
|
+
*/
|
|
432
|
+
get injector(): EnvironmentInjector;
|
|
429
433
|
/**
|
|
430
434
|
* Bootstrap a component onto the element identified by its selector or, optionally, to a
|
|
431
435
|
* specified element.
|
|
@@ -529,7 +533,7 @@ export declare class ApplicationRef {
|
|
|
529
533
|
private _loadComponent;
|
|
530
534
|
/**
|
|
531
535
|
* Destroys an Angular application represented by this `ApplicationRef`. Calling this function
|
|
532
|
-
* will destroy the associated
|
|
536
|
+
* will destroy the associated environment injectors as well as all the bootstrapped components
|
|
533
537
|
* with their views.
|
|
534
538
|
*/
|
|
535
539
|
destroy(): void;
|
|
@@ -607,7 +611,7 @@ export declare interface AttributeDecorator {
|
|
|
607
611
|
}
|
|
608
612
|
|
|
609
613
|
/**
|
|
610
|
-
* Provides additional options to the
|
|
614
|
+
* Provides additional options to the bootstrapping process.
|
|
611
615
|
*
|
|
612
616
|
* @publicApi
|
|
613
617
|
*/
|
|
@@ -630,7 +634,7 @@ export declare interface BootstrapOptions {
|
|
|
630
634
|
*
|
|
631
635
|
* When button is clicked, because of the event bubbling, both
|
|
632
636
|
* event handlers will be called and 2 change detections will be
|
|
633
|
-
* triggered. We can
|
|
637
|
+
* triggered. We can coalesce such kind of events to only trigger
|
|
634
638
|
* change detection only once.
|
|
635
639
|
*
|
|
636
640
|
* By default, this option will be false. So the events will not be
|
|
@@ -739,7 +743,7 @@ export declare abstract class ChangeDetectorRef {
|
|
|
739
743
|
*
|
|
740
744
|
* Components are normally marked as dirty (in need of rerendering) when inputs
|
|
741
745
|
* have changed or events have fired in the view. Call this method to ensure that
|
|
742
|
-
* a component is checked even if these triggers have not
|
|
746
|
+
* a component is checked even if these triggers have not occurred.
|
|
743
747
|
*
|
|
744
748
|
* <!-- TODO: Add a link to a chapter on OnPush components -->
|
|
745
749
|
*
|
|
@@ -1314,6 +1318,46 @@ declare class ComponentFactoryResolver_2 extends ComponentFactoryResolver {
|
|
|
1314
1318
|
|
|
1315
1319
|
declare type ComponentInstance = {};
|
|
1316
1320
|
|
|
1321
|
+
/**
|
|
1322
|
+
* An interface that describes the subset of component metadata
|
|
1323
|
+
* that can be retrieved using the `reflectComponentType` function.
|
|
1324
|
+
*
|
|
1325
|
+
* @publicApi
|
|
1326
|
+
*/
|
|
1327
|
+
export declare interface ComponentMirror<C> {
|
|
1328
|
+
/**
|
|
1329
|
+
* The component's HTML selector.
|
|
1330
|
+
*/
|
|
1331
|
+
get selector(): string;
|
|
1332
|
+
/**
|
|
1333
|
+
* The type of component the factory will create.
|
|
1334
|
+
*/
|
|
1335
|
+
get type(): Type<C>;
|
|
1336
|
+
/**
|
|
1337
|
+
* The inputs of the component.
|
|
1338
|
+
*/
|
|
1339
|
+
get inputs(): ReadonlyArray<{
|
|
1340
|
+
readonly propName: string;
|
|
1341
|
+
readonly templateName: string;
|
|
1342
|
+
}>;
|
|
1343
|
+
/**
|
|
1344
|
+
* The outputs of the component.
|
|
1345
|
+
*/
|
|
1346
|
+
get outputs(): ReadonlyArray<{
|
|
1347
|
+
readonly propName: string;
|
|
1348
|
+
readonly templateName: string;
|
|
1349
|
+
}>;
|
|
1350
|
+
/**
|
|
1351
|
+
* Selector for all <ng-content> elements in the component.
|
|
1352
|
+
*/
|
|
1353
|
+
get ngContentSelectors(): ReadonlyArray<string>;
|
|
1354
|
+
/**
|
|
1355
|
+
* Whether this component is marked as standalone.
|
|
1356
|
+
* Note: an extra flag, not present in `ComponentFactory`.
|
|
1357
|
+
*/
|
|
1358
|
+
get isStandalone(): boolean;
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1317
1361
|
/**
|
|
1318
1362
|
* Represents a component created by a `ComponentFactory`.
|
|
1319
1363
|
* Provides access to the component instance and related objects,
|
|
@@ -1614,6 +1658,72 @@ declare type ContentQueriesFunction<T> = <U extends T>(rf: ɵRenderFlags, ctx: U
|
|
|
1614
1658
|
|
|
1615
1659
|
declare const CONTEXT = 8;
|
|
1616
1660
|
|
|
1661
|
+
/**
|
|
1662
|
+
* Creates a `ComponentRef` instance based on provided component type and a set of options.
|
|
1663
|
+
*
|
|
1664
|
+
* @usageNotes
|
|
1665
|
+
*
|
|
1666
|
+
* The example below demonstrates how the `createComponent` function can be used
|
|
1667
|
+
* to create an instance of a ComponentRef dynamically and attach it to an ApplicationRef,
|
|
1668
|
+
* so that it gets included into change detection cycles.
|
|
1669
|
+
*
|
|
1670
|
+
* Note: the example uses standalone components, but the function can also be used for
|
|
1671
|
+
* non-standalone components (declared in an NgModule) as well.
|
|
1672
|
+
*
|
|
1673
|
+
* ```typescript
|
|
1674
|
+
* @Component({
|
|
1675
|
+
* standalone: true,
|
|
1676
|
+
* template: `Hello {{ name }}!`
|
|
1677
|
+
* })
|
|
1678
|
+
* class HelloComponent {
|
|
1679
|
+
* name = 'Angular';
|
|
1680
|
+
* }
|
|
1681
|
+
*
|
|
1682
|
+
* @Component({
|
|
1683
|
+
* standalone: true,
|
|
1684
|
+
* template: `<div id="hello-component-host"></div>`
|
|
1685
|
+
* })
|
|
1686
|
+
* class RootComponent {}
|
|
1687
|
+
*
|
|
1688
|
+
* // Bootstrap an application.
|
|
1689
|
+
* const applicationRef = await bootstrapApplication(RootComponent);
|
|
1690
|
+
*
|
|
1691
|
+
* // Locate a DOM node that would be used as a host.
|
|
1692
|
+
* const host = document.getElementById('hello-component-host');
|
|
1693
|
+
*
|
|
1694
|
+
* // Get an `EnvironmentInjector` instance from the `ApplicationRef`.
|
|
1695
|
+
* const environmentInjector = applicationRef.injector;
|
|
1696
|
+
*
|
|
1697
|
+
* // We can now create a `ComponentRef` instance.
|
|
1698
|
+
* const componentRef = createComponent(HelloComponent, {host, environmentInjector});
|
|
1699
|
+
*
|
|
1700
|
+
* // Last step is to register the newly created ref using the `ApplicationRef` instance
|
|
1701
|
+
* // to include the component view into change detection cycles.
|
|
1702
|
+
* applicationRef.attachView(componentRef.hostView);
|
|
1703
|
+
* ```
|
|
1704
|
+
*
|
|
1705
|
+
* @param component Component class reference.
|
|
1706
|
+
* @param options Set of options to use:
|
|
1707
|
+
* * `environmentInjector`: An `EnvironmentInjector` instance to be used for the component, see
|
|
1708
|
+
* additional info about it at https://angular.io/guide/standalone-components#environment-injectors.
|
|
1709
|
+
* * `hostElement` (optional): A DOM node that should act as a host node for the component. If not
|
|
1710
|
+
* provided, Angular creates one based on the tag name used in the component selector (and falls
|
|
1711
|
+
* back to using `div` if selector doesn't have tag name info).
|
|
1712
|
+
* * `elementInjector` (optional): An `ElementInjector` instance, see additional info about it at
|
|
1713
|
+
* https://angular.io/guide/hierarchical-dependency-injection#elementinjector.
|
|
1714
|
+
* * `projectableNodes` (optional): A list of DOM nodes that should be projected through
|
|
1715
|
+
* [`<ng-content>`](api/core/ng-content) of the new component instance.
|
|
1716
|
+
* @returns ComponentRef instance that represents a given Component.
|
|
1717
|
+
*
|
|
1718
|
+
* @publicApi
|
|
1719
|
+
*/
|
|
1720
|
+
export declare function createComponent<C>(component: Type<C>, options: {
|
|
1721
|
+
environmentInjector: EnvironmentInjector;
|
|
1722
|
+
hostElement?: Element;
|
|
1723
|
+
elementInjector?: Injector;
|
|
1724
|
+
projectableNodes?: Node[][];
|
|
1725
|
+
}): ComponentRef<C>;
|
|
1726
|
+
|
|
1617
1727
|
/**
|
|
1618
1728
|
* Create a new environment injector.
|
|
1619
1729
|
*
|
|
@@ -1632,12 +1742,23 @@ export declare function createEnvironmentInjector(providers: Array<Provider | Im
|
|
|
1632
1742
|
|
|
1633
1743
|
/**
|
|
1634
1744
|
* Returns a new NgModuleRef instance based on the NgModule class and parent injector provided.
|
|
1745
|
+
*
|
|
1635
1746
|
* @param ngModule NgModule class.
|
|
1636
1747
|
* @param parentInjector Optional injector instance to use as a parent for the module injector. If
|
|
1637
1748
|
* not provided, `NullInjector` will be used instead.
|
|
1749
|
+
* @returns NgModuleRef that represents an NgModule instance.
|
|
1750
|
+
*
|
|
1638
1751
|
* @publicApi
|
|
1639
1752
|
*/
|
|
1640
|
-
export declare function
|
|
1753
|
+
export declare function createNgModule<T>(ngModule: Type<T>, parentInjector?: Injector): NgModuleRef<T>;
|
|
1754
|
+
|
|
1755
|
+
/**
|
|
1756
|
+
* The `createNgModule` function alias for backwards-compatibility.
|
|
1757
|
+
* Please avoid using it directly and use `createNgModule` instead.
|
|
1758
|
+
*
|
|
1759
|
+
* @deprecated Use `createNgModule` instead.
|
|
1760
|
+
*/
|
|
1761
|
+
export declare const createNgModuleRef: typeof createNgModule;
|
|
1641
1762
|
|
|
1642
1763
|
/**
|
|
1643
1764
|
* Creates a platform.
|
|
@@ -4617,8 +4738,8 @@ declare interface LView<T = unknown> extends Array<any> {
|
|
|
4617
4738
|
* TView.cleanup saves an index to the necessary context in this array.
|
|
4618
4739
|
*
|
|
4619
4740
|
* After `LView` is created it is possible to attach additional instance specific functions at the
|
|
4620
|
-
* end of the `lView[
|
|
4621
|
-
*
|
|
4741
|
+
* end of the `lView[CLEANUP]` because we know that no more `T` level cleanup functions will be
|
|
4742
|
+
* added here.
|
|
4622
4743
|
*/
|
|
4623
4744
|
[CLEANUP]: any[] | null;
|
|
4624
4745
|
/**
|
|
@@ -5234,7 +5355,7 @@ export declare interface NgModuleDecorator {
|
|
|
5234
5355
|
* JIT mode. See [JIT API changes due to ViewEngine deprecation](guide/deprecations#jit-api-changes)
|
|
5235
5356
|
* for additional context. Angular provides APIs that accept NgModule classes directly (such as
|
|
5236
5357
|
* [PlatformRef.bootstrapModule](api/core/PlatformRef#bootstrapModule) and
|
|
5237
|
-
* [
|
|
5358
|
+
* [createNgModule](api/core/createNgModule)), consider switching to those APIs instead of
|
|
5238
5359
|
* using factory-based ones.
|
|
5239
5360
|
*/
|
|
5240
5361
|
export declare abstract class NgModuleFactory<T> {
|
|
@@ -6327,6 +6448,47 @@ declare interface RDomTokenList {
|
|
|
6327
6448
|
remove(token: string): void;
|
|
6328
6449
|
}
|
|
6329
6450
|
|
|
6451
|
+
/**
|
|
6452
|
+
* Creates an object that allows to retrieve component metadata.
|
|
6453
|
+
*
|
|
6454
|
+
* @usageNotes
|
|
6455
|
+
*
|
|
6456
|
+
* The example below demonstrates how to use the function and how the fields
|
|
6457
|
+
* of the returned object map to the component metadata.
|
|
6458
|
+
*
|
|
6459
|
+
* ```typescript
|
|
6460
|
+
* @Component({
|
|
6461
|
+
* standalone: true,
|
|
6462
|
+
* selector: 'foo-component',
|
|
6463
|
+
* template: `
|
|
6464
|
+
* <ng-content></ng-content>
|
|
6465
|
+
* <ng-content select="content-selector-a"></ng-content>
|
|
6466
|
+
* `,
|
|
6467
|
+
* })
|
|
6468
|
+
* class FooComponent {
|
|
6469
|
+
* @Input('inputName') inputPropName: string;
|
|
6470
|
+
* @Output('outputName') outputPropName = new EventEmitter<void>();
|
|
6471
|
+
* }
|
|
6472
|
+
*
|
|
6473
|
+
* const mirror = reflectComponentType(FooComponent);
|
|
6474
|
+
* expect(mirror.type).toBe(FooComponent);
|
|
6475
|
+
* expect(mirror.selector).toBe('foo-component');
|
|
6476
|
+
* expect(mirror.isStandalone).toBe(true);
|
|
6477
|
+
* expect(mirror.inputs).toEqual([{propName: 'inputName', templateName: 'inputPropName'}]);
|
|
6478
|
+
* expect(mirror.outputs).toEqual([{propName: 'outputName', templateName: 'outputPropName'}]);
|
|
6479
|
+
* expect(mirror.ngContentSelectors).toEqual([
|
|
6480
|
+
* '*', // first `<ng-content>` in a template, the selector defaults to `*`
|
|
6481
|
+
* 'content-selector-a' // second `<ng-content>` in a template
|
|
6482
|
+
* ]);
|
|
6483
|
+
* ```
|
|
6484
|
+
*
|
|
6485
|
+
* @param component Component class reference.
|
|
6486
|
+
* @returns An object that allows to retrieve component metadata.
|
|
6487
|
+
*
|
|
6488
|
+
* @publicApi
|
|
6489
|
+
*/
|
|
6490
|
+
export declare function reflectComponentType<C>(component: Type<C>): ComponentMirror<C> | null;
|
|
6491
|
+
|
|
6330
6492
|
/**
|
|
6331
6493
|
* `Dependency` is used by the framework to extend DI.
|
|
6332
6494
|
* This is internal to Angular and should not be used directly.
|
|
@@ -7068,6 +7230,7 @@ declare const enum RuntimeErrorCode {
|
|
|
7068
7230
|
INJECTOR_ALREADY_DESTROYED = 205,
|
|
7069
7231
|
PROVIDER_IN_WRONG_CONTEXT = 207,
|
|
7070
7232
|
MISSING_INJECTION_TOKEN = 208,
|
|
7233
|
+
INVALID_MULTI_PROVIDER = 209,
|
|
7071
7234
|
MULTIPLE_COMPONENTS_MATCH = -300,
|
|
7072
7235
|
EXPORT_NOT_FOUND = -301,
|
|
7073
7236
|
PIPE_NOT_FOUND = -302,
|
|
@@ -8860,7 +9023,7 @@ declare const enum TViewType {
|
|
|
8860
9023
|
Component = 1,
|
|
8861
9024
|
/**
|
|
8862
9025
|
* `TView` associated with a template. Such as `*ngIf`, `<ng-template>` etc... A `Component`
|
|
8863
|
-
* can have zero or more `
|
|
9026
|
+
* can have zero or more `Embedded` `TView`s.
|
|
8864
9027
|
*/
|
|
8865
9028
|
Embedded = 2
|
|
8866
9029
|
}
|
|
@@ -10707,17 +10870,15 @@ export declare class ɵRender3ComponentRef<T> extends ComponentRef<T> {
|
|
|
10707
10870
|
onDestroy(callback: () => void): void;
|
|
10708
10871
|
}
|
|
10709
10872
|
|
|
10710
|
-
export declare class ɵRender3NgModuleRef<T> extends NgModuleRef<T> implements InternalNgModuleRef<T
|
|
10873
|
+
export declare class ɵRender3NgModuleRef<T> extends NgModuleRef<T> implements InternalNgModuleRef<T> {
|
|
10711
10874
|
_parent: Injector | null;
|
|
10712
10875
|
_bootstrapComponents: Type<any>[];
|
|
10713
10876
|
_r3Injector: R3Injector;
|
|
10714
|
-
injector: EnvironmentInjector;
|
|
10715
10877
|
instance: T;
|
|
10716
10878
|
destroyCbs: (() => void)[] | null;
|
|
10717
10879
|
readonly componentFactoryResolver: ComponentFactoryResolver_2;
|
|
10718
10880
|
constructor(ngModuleType: Type<T>, _parent: Injector | null);
|
|
10719
|
-
get(
|
|
10720
|
-
runInContext<ReturnT>(fn: () => ReturnT): ReturnT;
|
|
10881
|
+
get injector(): EnvironmentInjector;
|
|
10721
10882
|
destroy(): void;
|
|
10722
10883
|
onDestroy(callback: () => void): void;
|
|
10723
10884
|
}
|
|
@@ -13438,7 +13599,7 @@ export declare function ɵɵpropertyInterpolate8(propName: string, prefix: strin
|
|
|
13438
13599
|
* be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
|
|
13439
13600
|
*
|
|
13440
13601
|
* @param propName The name of the property to update.
|
|
13441
|
-
* @param values The collection of values and the strings
|
|
13602
|
+
* @param values The collection of values and the strings in between those values, beginning with a
|
|
13442
13603
|
* string prefix and ending with a string suffix.
|
|
13443
13604
|
* (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
|
|
13444
13605
|
* @param sanitizer An optional sanitizer function
|
|
@@ -13877,7 +14038,7 @@ export declare function ɵɵsetNgModuleScope(type: any, scope: {
|
|
|
13877
14038
|
/**
|
|
13878
14039
|
* A feature that acts as a setup code for the {@link StandaloneService}.
|
|
13879
14040
|
*
|
|
13880
|
-
* The most important
|
|
14041
|
+
* The most important responsibility of this feature is to expose the "getStandaloneInjector"
|
|
13881
14042
|
* function (an entry points to a standalone injector creation) on a component definition object. We
|
|
13882
14043
|
* go through the features infrastructure to make sure that the standalone injector creation logic
|
|
13883
14044
|
* is tree-shakable and not included in applications that don't use standalone components.
|
package/package.json
CHANGED
|
@@ -104,7 +104,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
104
104
|
var _a, _b;
|
|
105
105
|
const symbol = typeChecker.getSymbolAtLocation(node);
|
|
106
106
|
// We check symbol.declarations because we actually care about the name at the declaration site,
|
|
107
|
-
// not the usage site. These could be different in the case of
|
|
107
|
+
// not the usage site. These could be different in the case of overridden constructors.
|
|
108
108
|
if (!symbol || symbol.declarations === undefined || !symbol.declarations.length)
|
|
109
109
|
return false;
|
|
110
110
|
const decl = symbol.declarations[0];
|
|
@@ -131,4 +131,4 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
131
131
|
return false;
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3R5cGVkLWZvcm1zL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsNERBQTRCO0lBRTVCLCtFQUFrRTtJQUVyRCxRQUFBLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUUsUUFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDO0lBQzVCLFFBQUEsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUMxQixRQUFBLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztJQVN0QyxTQUFnQixXQUFXLENBQ3ZCLFVBQXlCLEVBQUUsV0FBMkIsRUFBRSxPQUFrQjtRQUM1RSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkMsMERBQTBEO1FBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVqQyxtREFBbUQ7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZCLHNGQUFzRjtnQkFDdEYsOENBQThDO2dCQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0QjtZQUNELEtB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UUFDaEcsMkJBQTJCO1FBQzNCLElBQUksUUFBUSxLQUFLLG1CQUFXLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUzRSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldEltcG9ydFNwZWNpZmllcn0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9pbXBvcnRzJztcblxuZXhwb3J0IGNvbnN0IGNsYXNzZXMgPSBuZXcgU2V0KFsnRm9ybUFycmF5JywgJ0Zvcm1CdWlsZGVyJywgJ0Zvcm1Db250cm9sJywgJ0Zvcm1Hcm91cCddKTtcbmV4cG9ydCBjb25zdCBmb3JtQ29udHJvbCA9ICdGb3JtQ29udHJvbCc7XG5leHBvcnQgY29uc3QgdW50eXBlZFByZWZpeCA9ICdVbnR5cGVkJztcbmV4cG9ydCBjb25zdCBmb3JtcyA9ICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0YWJsZU5vZGUge1xuICBub2RlOiB0cy5Ob2RlO1xuICBpbXBvcnROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIHJld3JpdGVGbiA9IChzdGFydFBvczogbnVtYmVyLCBvcmlnTGVuZ3RoOiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGVGaWxlKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgcmV3cml0ZTogcmV3cml0ZUZuKSB7XG4gIGNvbnN0IGltcG9ydHMgPSBnZXRJbXBvcnRzKHNvdXJjZUZpbGUpO1xuXG4gIC8vIElmIG5vIHJlbGV2YW50IGNsYXNzZXMgYXJlIGltcG9ydGVkLCB3ZSBjYW4gZXhpdCBlYXJseS5cbiAgaWYgKGltcG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgLy8gRm9yIGVhY2ggY29udHJvbCBjbGFzcywgbWlncmF0ZSBhbGwgb2YgaXRzIHVzZXMuXG4gIGZvciAobGV0IGkgPSBpbXBvcnRzLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBpbXAgPSBpbXBvcnRzW2ldO1xuICAgIGNvbnN0IHVzYWdlcyA9IGdldFVzYWdlcyhzb3VyY2VGaWxlLCB0eXBlQ2hlY2tlciwgaW1wKTtcbiAgICBpZiAodXNhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2luY2UgdGhlcmUgYXJlIG5vIHVzYWdlcyBvZiB0aGlzIGNsYXNzIHdlIG5lZWQgdG8gbWlncmF0ZSBpdCwgd2Ugc2hvdWxkIGNvbXBsZXRlbHlcbiAgICAgIC8vIHNraXAgaXQgZm9yIHRoZSBzdWJzZXF1ZW50IG1pZ3JhdGlvbiBzdGVwcy5cbiAgICAgIGltcG9ydHMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuICAgICAgY29uc3QgbmV3TmFtZSA9IGdldFVudHlwZWRWZXJzaW9uT2ZJbXBvcnRPck5hbWUodXNhZ2UuaW1wb3J0TmFtZSk7XG4gICAgICBpZiAobmV3TmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgVHlwZWQgZm9ybXMgbWlncmF0aW9uIGVycm9yOiB1bmtub3duIHJlcGxhY2VtZW50IGZvciB1c2FnZSAke3VzYWdlLm5vZGUuZ2V0VGV4dCgpfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJld3JpdGUodXNhZ2Uubm9kZS5nZXRTdGFydCgpLCB1c2FnZS5ub2RlLmdldFdpZHRoKCksIG5ld05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBlYWNoIGltcG9ydGVkIGNvbnRyb2wgY2xhc3MsIG1pZ3JhdGUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdXB0eXBlZCBpbXBvcnQuXG4gIGZvciAoY29uc3QgaW1wIG9mIGltcG9ydHMpIHtcbiAgICBjb25zdCB1bnR5cGVkQ2xhc3MgPSBnZXRVbnR5cGVkVmVyc2lvbk9mSW1wb3J0T3JOYW1lKGltcC5nZXRUZXh0KCkpO1xuICAgIGlmICh1bnR5cGVkQ2xhc3MgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFR5cGVkIGZvcm1zIG1pZ3JhdGlvbiBlcnJvcjogdW5rbm93biB1bnR5cGVkIHZlcnNpb24gb2YgaW1wb3J0ICR7aW1wLmdldFRleHQoKX1gKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZ2V0SW1wb3J0U3BlY2lmaWVyKHNvdXJjZUZpbGUsIGZvcm1zLCB1bnR5cGVkQ2xhc3MpKSB7XG4gICAgICAvLyBJbiBvcmRlciB0byBtYWtlIHRoZSBtaWdyYXRpb24gaWRlbXBvdGVudCwgd2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSB1bnR5cGVkIHZlcnNpb24gb2YgdGhlXG4gICAgICAvLyBjbGFzcyBpcyBhbHJlYWR5IHByZXNlbnQuIElmIHByZXNlbnQsIGltbWVkaWF0ZWx5IGNvbnRpbnVlLlxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJld3JpdGUoaW1wLmdldFN0YXJ0KCksIGltcC5nZXRXaWR0aCgpLCB1bnR5cGVkQ2xhc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydHMoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLkltcG9ydFNwZWNpZmllcltdIHtcbiAgbGV0IGltcG9ydHM6IHRzLkltcG9ydFNwZWNpZmllcltdID0gW107XG4gIGZvciAoY29uc3QgY2Mgb2YgY2xhc3Nlcykge1xuICAgIGNvbnN0IHNwZWNpZmllciA9IGdldEltcG9ydFNwZWNpZmllcihzb3VyY2VGaWxlLCBmb3JtcywgY2MpO1xuICAgIGlmICghc3BlY2lmaWVyKSBjb250aW51ZTtcbiAgICBpbXBvcnRzLnB1c2goc3BlY2lmaWVyKTtcbiAgfVxuICByZXR1cm4gaW1wb3J0cztcbn1cblxuZnVuY3Rpb24gZ2V0VW50eXBlZFZlcnNpb25PZkltcG9ydE9yTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gIGZvciAoY29uc3QgY2Mgb2YgY2xhc3Nlcykge1xuICAgIGlmIChuYW1lLmluY2x1ZGVzKGNjKSkge1xuICAgICAgcmV0dXJuIGAke3VudHlwZWRQcmVmaXh9JHtjY31gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VXNhZ2VzKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgICBpbXBvcnRTcGVjaWZpZXI6IHRzLkltcG9ydFNwZWNpZmllcik6IE1pZ3JhdGFibGVOb2RlW10ge1xuICBjb25zdCB1c2FnZXM6IE1pZ3JhdGFibGVOb2RlW10gPSBbXTtcbiAgY29uc3QgdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICBpZiAodHMuaXNJbXBvcnRTcGVjaWZpZXIobm9kZSkpIHtcbiAgICAgIC8vIFNraXAgdGhpcyBub2RlIGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuOyBpbXBvcnRzIGFyZSBhIHNwZWNpYWwgY2FzZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRzLmlzSWRlbnRpZmllcihub2RlKSAmJiBpc1VzYWdlT2ZGb3Jtc0ltcG9ydCh0eXBlQ2hlY2tlciwgbm9kZSwgaW1wb3J0U3BlY2lmaWVyKSkge1xuICAgICAgdXNhZ2VzLnB1c2goe25vZGUsIGltcG9ydE5hbWU6IGltcG9ydFNwZWNpZmllci5nZXRUZXh0KCl9KTtcbiAgICB9XG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gIH07XG4gIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCB2aXNpdE5vZGUpO1xuICByZXR1cm4gdXNhZ2VzO1xufVxuXG5mdW5jdGlvbiBpc1VzYWdlT2ZGb3Jtc0ltcG9ydChcbiAgICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG5vZGU6IHRzLklkZW50aWZpZXIsXG4gICAgaW1wb3J0U3BlY2lmaWVyOiB0cy5JbXBvcnRTcGVjaWZpZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcblxuICAvLyBXZSBjaGVjayBzeW1ib2wuZGVjbGFyYXRpb25zIGJlY2F1c2Ugd2UgYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgbmFtZSBhdCB0aGUgZGVjbGFyYXRpb24gc2l0ZSxcbiAgLy8gbm90IHRoZSB1c2FnZSBzaXRlLiBUaGVzZSBjb3VsZCBiZSBkaWZmZXJlbnQgaW4gdGhlIGNhc2Ugb2Ygb3ZlcnJpZGVuIGNvbnN0cnVjdG9ycy5cbiAgaWYgKCFzeW1ib2wgfHwgc3ltYm9sLmRlY2xhcmF0aW9ucyA9PT0gdW5kZWZpbmVkIHx8ICFzeW1ib2wuZGVjbGFyYXRpb25zLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGRlY2wgPSBzeW1ib2wuZGVjbGFyYXRpb25zWzBdO1xuICBpZiAoIXRzLmlzSW1wb3J0U3BlY2lmaWVyKGRlY2wpKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gQXMgcGVyIGB0eXBlc2NyaXB0L2ltcG9ydHMudHNgLCB3ZSBtdXN0IHdhbGsgdXAgdGhlIHRyZWUgdG8gZmluZCB0aGUgZW5jbG9zaW5nIGltcG9ydFxuICAvLyBkZWNsYXJhdGlvbi4gRm9yIHJlYXNvbnMgc3BlY2lmaWMgdG8gdGhlIFRTIEFTVCwgdGhpcyBpcyBhbHdheXMgMyBsZXZlbHMgdXAgZnJvbSBhbiBpbXBvcnRcbiAgLy8gc3BlY2lmaWVyIG5vZGUuXG4gIGNvbnN0IGltcG9ydERlY2wgPSBkZWNsLnBhcmVudC5wYXJlbnQucGFyZW50O1xuICBpZiAoIXRzLmlzU3RyaW5nTGl0ZXJhbChpbXBvcnREZWNsLm1vZHVsZVNwZWNpZmllcikpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBpbXBvcnROYW1lID0gdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24oaW1wb3J0U3BlY2lmaWVyKT8uZ2V0U3ltYm9sKCk/LmdldE5hbWUoKTtcbiAgaWYgKCFpbXBvcnROYW1lKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSGFuZGxlcyBhbGlhc2VkIGltcG9ydHM6IGUuZy4gXCJpbXBvcnQge0NvbXBvbmVudCBhcyBteUNvbXB9IGZyb20gLi4uXCI7XG4gIGNvbnN0IGRlY2xOYW1lID0gZGVjbC5wcm9wZXJ0eU5hbWUgPyBkZWNsLnByb3BlcnR5TmFtZS50ZXh0IDogZGVjbC5uYW1lLnRleHQ7XG5cbiAgaWYgKGltcG9ydE5hbWUgPT09IGRlY2xOYW1lKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBJbiB0aGUgY2FzZSBvZiBGb3JtQ29udHJvbCdzIG92ZXJyaWRkZW4gZXhwb3J0ZWQgY29uc3RydWN0b3IsIHRoZSB2YWx1ZSBuYW1lIGFuZCBkZWNsYXJhdGlvblxuICAvLyBuYW1lIGFyZSBub3QgZXhhY3RseSB0aGUgc2FtZS4gRm9yIG91ciBwdXJwb3NlcywgaXQncyBlbm91Z2ggdG8gY2hlY2sgd2hldGhlciB0aGUgbGF0dGVyIGlzIGFcbiAgLy8gc3Vic3RyaW5nIG9mIHRoZSBmb3JtZXIuXG4gIGlmIChkZWNsTmFtZSA9PT0gZm9ybUNvbnRyb2wgJiYgaW1wb3J0TmFtZS5pbmNsdWRlcyhkZWNsTmFtZSkpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3R5cGVkLWZvcm1zL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsNERBQTRCO0lBRTVCLCtFQUFrRTtJQUVyRCxRQUFBLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUUsUUFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDO0lBQzVCLFFBQUEsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUMxQixRQUFBLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztJQVN0QyxTQUFnQixXQUFXLENBQ3ZCLFVBQXlCLEVBQUUsV0FBMkIsRUFBRSxPQUFrQjtRQUM1RSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkMsMERBQTBEO1FBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVqQyxtREFBbUQ7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZCLHNGQUFzRjtnQkFDdEYsOENBQThDO2dCQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0QjtZQUNELEtB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UUFDaEcsMkJBQTJCO1FBQzNCLElBQUksUUFBUSxLQUFLLG1CQUFXLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUzRSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldEltcG9ydFNwZWNpZmllcn0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9pbXBvcnRzJztcblxuZXhwb3J0IGNvbnN0IGNsYXNzZXMgPSBuZXcgU2V0KFsnRm9ybUFycmF5JywgJ0Zvcm1CdWlsZGVyJywgJ0Zvcm1Db250cm9sJywgJ0Zvcm1Hcm91cCddKTtcbmV4cG9ydCBjb25zdCBmb3JtQ29udHJvbCA9ICdGb3JtQ29udHJvbCc7XG5leHBvcnQgY29uc3QgdW50eXBlZFByZWZpeCA9ICdVbnR5cGVkJztcbmV4cG9ydCBjb25zdCBmb3JtcyA9ICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0YWJsZU5vZGUge1xuICBub2RlOiB0cy5Ob2RlO1xuICBpbXBvcnROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIHJld3JpdGVGbiA9IChzdGFydFBvczogbnVtYmVyLCBvcmlnTGVuZ3RoOiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGVGaWxlKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgcmV3cml0ZTogcmV3cml0ZUZuKSB7XG4gIGNvbnN0IGltcG9ydHMgPSBnZXRJbXBvcnRzKHNvdXJjZUZpbGUpO1xuXG4gIC8vIElmIG5vIHJlbGV2YW50IGNsYXNzZXMgYXJlIGltcG9ydGVkLCB3ZSBjYW4gZXhpdCBlYXJseS5cbiAgaWYgKGltcG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgLy8gRm9yIGVhY2ggY29udHJvbCBjbGFzcywgbWlncmF0ZSBhbGwgb2YgaXRzIHVzZXMuXG4gIGZvciAobGV0IGkgPSBpbXBvcnRzLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBpbXAgPSBpbXBvcnRzW2ldO1xuICAgIGNvbnN0IHVzYWdlcyA9IGdldFVzYWdlcyhzb3VyY2VGaWxlLCB0eXBlQ2hlY2tlciwgaW1wKTtcbiAgICBpZiAodXNhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2luY2UgdGhlcmUgYXJlIG5vIHVzYWdlcyBvZiB0aGlzIGNsYXNzIHdlIG5lZWQgdG8gbWlncmF0ZSBpdCwgd2Ugc2hvdWxkIGNvbXBsZXRlbHlcbiAgICAgIC8vIHNraXAgaXQgZm9yIHRoZSBzdWJzZXF1ZW50IG1pZ3JhdGlvbiBzdGVwcy5cbiAgICAgIGltcG9ydHMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuICAgICAgY29uc3QgbmV3TmFtZSA9IGdldFVudHlwZWRWZXJzaW9uT2ZJbXBvcnRPck5hbWUodXNhZ2UuaW1wb3J0TmFtZSk7XG4gICAgICBpZiAobmV3TmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgVHlwZWQgZm9ybXMgbWlncmF0aW9uIGVycm9yOiB1bmtub3duIHJlcGxhY2VtZW50IGZvciB1c2FnZSAke3VzYWdlLm5vZGUuZ2V0VGV4dCgpfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJld3JpdGUodXNhZ2Uubm9kZS5nZXRTdGFydCgpLCB1c2FnZS5ub2RlLmdldFdpZHRoKCksIG5ld05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBlYWNoIGltcG9ydGVkIGNvbnRyb2wgY2xhc3MsIG1pZ3JhdGUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdXB0eXBlZCBpbXBvcnQuXG4gIGZvciAoY29uc3QgaW1wIG9mIGltcG9ydHMpIHtcbiAgICBjb25zdCB1bnR5cGVkQ2xhc3MgPSBnZXRVbnR5cGVkVmVyc2lvbk9mSW1wb3J0T3JOYW1lKGltcC5nZXRUZXh0KCkpO1xuICAgIGlmICh1bnR5cGVkQ2xhc3MgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFR5cGVkIGZvcm1zIG1pZ3JhdGlvbiBlcnJvcjogdW5rbm93biB1bnR5cGVkIHZlcnNpb24gb2YgaW1wb3J0ICR7aW1wLmdldFRleHQoKX1gKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZ2V0SW1wb3J0U3BlY2lmaWVyKHNvdXJjZUZpbGUsIGZvcm1zLCB1bnR5cGVkQ2xhc3MpKSB7XG4gICAgICAvLyBJbiBvcmRlciB0byBtYWtlIHRoZSBtaWdyYXRpb24gaWRlbXBvdGVudCwgd2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSB1bnR5cGVkIHZlcnNpb24gb2YgdGhlXG4gICAgICAvLyBjbGFzcyBpcyBhbHJlYWR5IHByZXNlbnQuIElmIHByZXNlbnQsIGltbWVkaWF0ZWx5IGNvbnRpbnVlLlxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJld3JpdGUoaW1wLmdldFN0YXJ0KCksIGltcC5nZXRXaWR0aCgpLCB1bnR5cGVkQ2xhc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydHMoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLkltcG9ydFNwZWNpZmllcltdIHtcbiAgbGV0IGltcG9ydHM6IHRzLkltcG9ydFNwZWNpZmllcltdID0gW107XG4gIGZvciAoY29uc3QgY2Mgb2YgY2xhc3Nlcykge1xuICAgIGNvbnN0IHNwZWNpZmllciA9IGdldEltcG9ydFNwZWNpZmllcihzb3VyY2VGaWxlLCBmb3JtcywgY2MpO1xuICAgIGlmICghc3BlY2lmaWVyKSBjb250aW51ZTtcbiAgICBpbXBvcnRzLnB1c2goc3BlY2lmaWVyKTtcbiAgfVxuICByZXR1cm4gaW1wb3J0cztcbn1cblxuZnVuY3Rpb24gZ2V0VW50eXBlZFZlcnNpb25PZkltcG9ydE9yTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gIGZvciAoY29uc3QgY2Mgb2YgY2xhc3Nlcykge1xuICAgIGlmIChuYW1lLmluY2x1ZGVzKGNjKSkge1xuICAgICAgcmV0dXJuIGAke3VudHlwZWRQcmVmaXh9JHtjY31gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VXNhZ2VzKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgICBpbXBvcnRTcGVjaWZpZXI6IHRzLkltcG9ydFNwZWNpZmllcik6IE1pZ3JhdGFibGVOb2RlW10ge1xuICBjb25zdCB1c2FnZXM6IE1pZ3JhdGFibGVOb2RlW10gPSBbXTtcbiAgY29uc3QgdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICBpZiAodHMuaXNJbXBvcnRTcGVjaWZpZXIobm9kZSkpIHtcbiAgICAgIC8vIFNraXAgdGhpcyBub2RlIGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuOyBpbXBvcnRzIGFyZSBhIHNwZWNpYWwgY2FzZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRzLmlzSWRlbnRpZmllcihub2RlKSAmJiBpc1VzYWdlT2ZGb3Jtc0ltcG9ydCh0eXBlQ2hlY2tlciwgbm9kZSwgaW1wb3J0U3BlY2lmaWVyKSkge1xuICAgICAgdXNhZ2VzLnB1c2goe25vZGUsIGltcG9ydE5hbWU6IGltcG9ydFNwZWNpZmllci5nZXRUZXh0KCl9KTtcbiAgICB9XG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gIH07XG4gIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCB2aXNpdE5vZGUpO1xuICByZXR1cm4gdXNhZ2VzO1xufVxuXG5mdW5jdGlvbiBpc1VzYWdlT2ZGb3Jtc0ltcG9ydChcbiAgICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG5vZGU6IHRzLklkZW50aWZpZXIsXG4gICAgaW1wb3J0U3BlY2lmaWVyOiB0cy5JbXBvcnRTcGVjaWZpZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcblxuICAvLyBXZSBjaGVjayBzeW1ib2wuZGVjbGFyYXRpb25zIGJlY2F1c2Ugd2UgYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgbmFtZSBhdCB0aGUgZGVjbGFyYXRpb24gc2l0ZSxcbiAgLy8gbm90IHRoZSB1c2FnZSBzaXRlLiBUaGVzZSBjb3VsZCBiZSBkaWZmZXJlbnQgaW4gdGhlIGNhc2Ugb2Ygb3ZlcnJpZGRlbiBjb25zdHJ1Y3RvcnMuXG4gIGlmICghc3ltYm9sIHx8IHN5bWJvbC5kZWNsYXJhdGlvbnMgPT09IHVuZGVmaW5lZCB8fCAhc3ltYm9sLmRlY2xhcmF0aW9ucy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBkZWNsID0gc3ltYm9sLmRlY2xhcmF0aW9uc1swXTtcbiAgaWYgKCF0cy5pc0ltcG9ydFNwZWNpZmllcihkZWNsKSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIEFzIHBlciBgdHlwZXNjcmlwdC9pbXBvcnRzLnRzYCwgd2UgbXVzdCB3YWxrIHVwIHRoZSB0cmVlIHRvIGZpbmQgdGhlIGVuY2xvc2luZyBpbXBvcnRcbiAgLy8gZGVjbGFyYXRpb24uIEZvciByZWFzb25zIHNwZWNpZmljIHRvIHRoZSBUUyBBU1QsIHRoaXMgaXMgYWx3YXlzIDMgbGV2ZWxzIHVwIGZyb20gYW4gaW1wb3J0XG4gIC8vIHNwZWNpZmllciBub2RlLlxuICBjb25zdCBpbXBvcnREZWNsID0gZGVjbC5wYXJlbnQucGFyZW50LnBhcmVudDtcbiAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwoaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIpKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgaW1wb3J0TmFtZSA9IHR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKGltcG9ydFNwZWNpZmllcik/LmdldFN5bWJvbCgpPy5nZXROYW1lKCk7XG4gIGlmICghaW1wb3J0TmFtZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIEhhbmRsZXMgYWxpYXNlZCBpbXBvcnRzOiBlLmcuIFwiaW1wb3J0IHtDb21wb25lbnQgYXMgbXlDb21wfSBmcm9tIC4uLlwiO1xuICBjb25zdCBkZWNsTmFtZSA9IGRlY2wucHJvcGVydHlOYW1lID8gZGVjbC5wcm9wZXJ0eU5hbWUudGV4dCA6IGRlY2wubmFtZS50ZXh0O1xuXG4gIGlmIChpbXBvcnROYW1lID09PSBkZWNsTmFtZSkgcmV0dXJuIHRydWU7XG5cbiAgLy8gSW4gdGhlIGNhc2Ugb2YgRm9ybUNvbnRyb2wncyBvdmVycmlkZGVuIGV4cG9ydGVkIGNvbnN0cnVjdG9yLCB0aGUgdmFsdWUgbmFtZSBhbmQgZGVjbGFyYXRpb25cbiAgLy8gbmFtZSBhcmUgbm90IGV4YWN0bHkgdGhlIHNhbWUuIEZvciBvdXIgcHVycG9zZXMsIGl0J3MgZW5vdWdoIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGxhdHRlciBpcyBhXG4gIC8vIHN1YnN0cmluZyBvZiB0aGUgZm9ybWVyLlxuICBpZiAoZGVjbE5hbWUgPT09IGZvcm1Db250cm9sICYmIGltcG9ydE5hbWUuaW5jbHVkZXMoZGVjbE5hbWUpKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=
|
|
@@ -49,7 +49,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
49
49
|
const typeNode = typeChecker.typeToTypeNode(type, undefined, typescript_1.default.NodeBuilderFlags.None);
|
|
50
50
|
let hasSeenNullableType = false;
|
|
51
51
|
// Trace the type of the node back to a type node, walk
|
|
52
|
-
// through all of its sub-nodes and look for nullable
|
|
52
|
+
// through all of its sub-nodes and look for nullable types.
|
|
53
53
|
if (typeNode) {
|
|
54
54
|
(function walk(current) {
|
|
55
55
|
if (current.kind === typescript_1.default.SyntaxKind.NullKeyword ||
|
|
@@ -90,4 +90,4 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
90
90
|
}
|
|
91
91
|
exports.hasOneOfTypes = hasOneOfTypes;
|
|
92
92
|
});
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL3V0aWxzL3R5cGVzY3JpcHQvc3ltYm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDREQUE0QjtJQUU1QixTQUFnQiwyQkFBMkIsQ0FBQyxJQUFhLEVBQUUsV0FBMkI7UUFFcEYsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5ELE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsb0JBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ3BELE1BQU0sR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0M7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBVEQsa0VBU0M7SUFFRCx5RUFBeUU7SUFDekUsU0FBZ0IsbUJBQW1CLENBQy9CLFdBQTJCLEVBQUUsSUFBYSxFQUFFLGVBQW1DOztRQUNqRixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hGLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQSxNQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxZQUFZLDBDQUFHLENBQUMsQ0FBQyxNQUFJLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLFlBQVksMENBQUcsQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUN2RSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQU5ELGtEQU1DO0lBRUQsZ0ZBQWdGO0lBQ2hGLFNBQWdCLGNBQWMsQ0FBQyxXQUEyQixFQUFFLElBQWE7UUFDdkUsK0VBQStFO1FBQy9FLDZFQUE2RTtRQUM3RSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdEQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RixJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUVoQyx1REFBdUQ7UUFDdkQsNERBQTREO1FBQzVELElBQUksUUFBUSxFQUFFO1lBQ1osQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFnQjtnQkFDN0IsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLG9CQUFFLENBQUMsVUFBVSxDQUFDLFdBQVc7b0JBQzFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssb0JBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO29CQUMvQyxPQUFPLENBQUMsSUFBSSxLQUFLLG9CQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRTtvQkFDOUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO29CQUMzQixzRUFBc0U7b0JBQ3RFLDBFQUEwRTtvQkFDMUUsNENBQTRDO2lCQUM3QztxQkFBTSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxvQkFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNqRSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM1QjtZQUNILENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUE3QkQsd0NBNkJDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBZ0IsYUFBYSxDQUN6QixXQUEyQixFQUFFLElBQWEsRUFBRSxLQUFlO1FBQzdELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLFFBQVEsR0FDVixJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDN0YsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksUUFBUSxFQUFFO1lBQ1osQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFnQjtnQkFDN0IsSUFBSSxvQkFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDNUQsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7cUJBQU0sSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLG9CQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3RELE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVCO1lBQ0gsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDZDtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFoQkQsc0NBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlU3ltYm9sT2ZEZWNsYXJhdGlvbihub2RlOiB0cy5Ob2RlLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpOiB0cy5TeW1ib2x8XG4gICAgdW5kZWZpbmVkIHtcbiAgbGV0IHN5bWJvbCA9IHR5cGVDaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG5cbiAgd2hpbGUgKHN5bWJvbCAmJiBzeW1ib2wuZmxhZ3MgJiB0cy5TeW1ib2xGbGFncy5BbGlhcykge1xuICAgIHN5bWJvbCA9IHR5cGVDaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIHJldHVybiBzeW1ib2w7XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgaXMgcmVmZXJyaW5nIHRvIGEgc3BlY2lmaWMgaW1wb3J0IHNwZWNpZmllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZVRvSW1wb3J0KFxuICAgIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgbm9kZTogdHMuTm9kZSwgaW1wb3J0U3BlY2lmaWVyOiB0cy5JbXBvcnRTcGVjaWZpZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9kZVN5bWJvbCA9IHR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG5vZGUpLmdldFN5bWJvbCgpO1xuICBjb25zdCBpbXBvcnRTeW1ib2wgPSB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihpbXBvcnRTcGVjaWZpZXIpLmdldFN5bWJvbCgpO1xuICByZXR1cm4gISEobm9kZVN5bWJvbD8uZGVjbGFyYXRpb25zPy5bMF0gJiYgaW1wb3J0U3ltYm9sPy5kZWNsYXJhdGlvbnM/LlswXSkgJiZcbiAgICAgIG5vZGVTeW1ib2wuZGVjbGFyYXRpb25zWzBdID09PSBpbXBvcnRTeW1ib2wuZGVjbGFyYXRpb25zWzBdO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgYSBub2RlJ3MgdHlwZSBpcyBudWxsYWJsZSAoYG51bGxgLCBgdW5kZWZpbmVkYCBvciBgdm9pZGApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbGFibGVUeXBlKHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgbm9kZTogdHMuTm9kZSkge1xuICAvLyBTa2lwIGV4cHJlc3Npb25zIGluIHRoZSBmb3JtIG9mIGBmb28uYmFyIS5iYXpgIHNpbmNlIHRoZSBgVHlwZUNoZWNrZXJgIHNlZW1zXG4gIC8vIHRvIGlkZW50aWZ5IHRoZW0gYXMgbnVsbCwgZXZlbiB0aG91Z2ggdGhlIHVzZXIgaW5kaWNhdGVkIHRoYXQgaXQgd29uJ3QgYmUuXG4gIGlmIChub2RlLnBhcmVudCAmJiB0cy5pc05vbk51bGxFeHByZXNzaW9uKG5vZGUucGFyZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihub2RlKTtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQ2hlY2tlci50eXBlVG9UeXBlTm9kZSh0eXBlLCB1bmRlZmluZWQsIHRzLk5vZGVCdWlsZGVyRmxhZ3MuTm9uZSk7XG4gIGxldCBoYXNTZWVuTnVsbGFibGVUeXBlID0gZmFsc2U7XG5cbiAgLy8gVHJhY2UgdGhlIHR5cGUgb2YgdGhlIG5vZGUgYmFjayB0byBhIHR5cGUgbm9kZSwgd2Fsa1xuICAvLyB0aHJvdWdoIGFsbCBvZiBpdHMgc3ViLW5vZGVzIGFuZCBsb29rIGZvciBudWxsYWJsZSB0eXBlcy5cbiAgaWYgKHR5cGVOb2RlKSB7XG4gICAgKGZ1bmN0aW9uIHdhbGsoY3VycmVudDogdHMuTm9kZSkge1xuICAgICAgaWYgKGN1cnJlbnQua2luZCA9PT0gdHMuU3ludGF4S2luZC5OdWxsS2V5d29yZCB8fFxuICAgICAgICAgIGN1cnJlbnQua2luZCA9PT0gdHMuU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkIHx8XG4gICAgICAgICAgY3VycmVudC5raW5kID09PSB0cy5TeW50YXhLaW5kLlZvaWRLZXl3b3JkKSB7XG4gICAgICAgIGhhc1NlZW5OdWxsYWJsZVR5cGUgPSB0cnVlO1xuICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgZGVzY2VuZCBpbnRvIHR5cGUgbGl0ZXJhbHMsIGJlY2F1c2UgaXQgbWF5IGNhdXNlXG4gICAgICAgIC8vIHVzIHRvIG1pcy1pZGVudGlmeSB0aGUgcm9vdCB0eXBlIGFzIG51bGxhYmxlLCBiZWNhdXNlIGl0IGhhcyBhIG51bGxhYmxlXG4gICAgICAgIC8vIHByb3BlcnR5IChlLmcuIGB7IGZvbzogc3RyaW5nIHwgbnVsbCB9YCkuXG4gICAgICB9IGVsc2UgaWYgKCFoYXNTZWVuTnVsbGFibGVUeXBlICYmICF0cy5pc1R5cGVMaXRlcmFsTm9kZShjdXJyZW50KSkge1xuICAgICAgICBjdXJyZW50LmZvckVhY2hDaGlsZCh3YWxrKTtcbiAgICAgIH1cbiAgICB9KSh0eXBlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gaGFzU2Vlbk51bGxhYmxlVHlwZTtcbn1cblxuLyoqXG4gKiBXYWxrcyB0aHJvdWdoIHRoZSB0eXBlcyBhbmQgc3ViLXR5cGVzIG9mIGEgbm9kZSwgbG9va2luZyBmb3IgYVxuICogdHlwZSB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIG9uZSBvZiB0aGUgcGFzc2VkLWluIG9uZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPbmVPZlR5cGVzKFxuICAgIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgbm9kZTogdHMuTm9kZSwgdHlwZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihub2RlKTtcbiAgY29uc3QgdHlwZU5vZGUgPVxuICAgICAgdHlwZSA/IHR5cGVDaGVja2VyLnR5cGVUb1R5cGVOb2RlKHR5cGUsIHVuZGVmaW5lZCwgdHMuTm9kZUJ1aWxkZXJGbGFncy5Ob25lKSA6IHVuZGVmaW5lZDtcbiAgbGV0IGhhc01hdGNoID0gZmFsc2U7XG4gIGlmICh0eXBlTm9kZSkge1xuICAgIChmdW5jdGlvbiB3YWxrKGN1cnJlbnQ6IHRzLk5vZGUpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIoY3VycmVudCkgJiYgdHlwZXMuaW5jbHVkZXMoY3VycmVudC50ZXh0KSkge1xuICAgICAgICBoYXNNYXRjaCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNNYXRjaCAmJiAhdHMuaXNUeXBlTGl0ZXJhbE5vZGUoY3VycmVudCkpIHtcbiAgICAgICAgY3VycmVudC5mb3JFYWNoQ2hpbGQod2Fsayk7XG4gICAgICB9XG4gICAgfSkodHlwZU5vZGUpO1xuICB9XG4gIHJldHVybiBoYXNNYXRjaDtcbn1cbiJdfQ==
|
package/testing/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v14.1.
|
|
2
|
+
* @license Angular v14.1.1
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -237,7 +237,7 @@ export declare type MetadataOverride<T> = {
|
|
|
237
237
|
* @publicApi
|
|
238
238
|
*/
|
|
239
239
|
export declare interface ModuleTeardownOptions {
|
|
240
|
-
/** Whether the test module should be destroyed after every test. */
|
|
240
|
+
/** Whether the test module should be destroyed after every test. Defaults to `true`. */
|
|
241
241
|
destroyAfterEach: boolean;
|
|
242
242
|
/** Whether errors during test module destruction should be re-thrown. Defaults to `true`. */
|
|
243
243
|
rethrowErrors?: boolean;
|