@angular/core 14.1.0-next.2 → 14.1.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 (58) hide show
  1. package/esm2020/src/application_ref.mjs +29 -15
  2. package/esm2020/src/change_detection/change_detector_ref.mjs +1 -1
  3. package/esm2020/src/core.mjs +2 -2
  4. package/esm2020/src/core_render3_private_export.mjs +2 -2
  5. package/esm2020/src/debug/debug_node.mjs +3 -4
  6. package/esm2020/src/di/index.mjs +1 -1
  7. package/esm2020/src/di/injector_compatibility.mjs +13 -8
  8. package/esm2020/src/di/injector_token.mjs +2 -2
  9. package/esm2020/src/di/interface/injector.mjs +2 -1
  10. package/esm2020/src/di/jit/util.mjs +3 -2
  11. package/esm2020/src/di/r3_injector.mjs +13 -1
  12. package/esm2020/src/di/reflective_key.mjs +3 -2
  13. package/esm2020/src/errors.mjs +1 -1
  14. package/esm2020/src/i18n/locale_data_api.mjs +3 -2
  15. package/esm2020/src/linker/component_factory.mjs +1 -1
  16. package/esm2020/src/linker/ng_module_factory.mjs +2 -2
  17. package/esm2020/src/linker/view_container_ref.mjs +2 -2
  18. package/esm2020/src/metadata/di.mjs +1 -1
  19. package/esm2020/src/render/api.mjs +2 -11
  20. package/esm2020/src/render3/component.mjs +3 -57
  21. package/esm2020/src/render3/component_ref.mjs +30 -5
  22. package/esm2020/src/render3/features/standalone_feature.mjs +2 -2
  23. package/esm2020/src/render3/index.mjs +4 -4
  24. package/esm2020/src/render3/instructions/change_detection.mjs +2 -20
  25. package/esm2020/src/render3/instructions/element_validation.mjs +4 -1
  26. package/esm2020/src/render3/instructions/listener.mjs +34 -44
  27. package/esm2020/src/render3/instructions/lview_debug.mjs +1 -1
  28. package/esm2020/src/render3/instructions/property_interpolation.mjs +2 -2
  29. package/esm2020/src/render3/instructions/shared.mjs +22 -59
  30. package/esm2020/src/render3/instructions/styling.mjs +2 -2
  31. package/esm2020/src/render3/interfaces/i18n.mjs +2 -2
  32. package/esm2020/src/render3/interfaces/renderer.mjs +1 -17
  33. package/esm2020/src/render3/interfaces/styling.mjs +1 -1
  34. package/esm2020/src/render3/interfaces/view.mjs +1 -1
  35. package/esm2020/src/render3/ng_module_ref.mjs +15 -2
  36. package/esm2020/src/render3/node_manipulation.mjs +24 -87
  37. package/esm2020/src/render3/node_manipulation_i18n.mjs +1 -1
  38. package/esm2020/src/render3/util/attrs_utils.mjs +4 -12
  39. package/esm2020/src/render3/util/view_utils.mjs +3 -6
  40. package/esm2020/src/version.mjs +1 -1
  41. package/esm2020/src/zone/ng_zone.mjs +9 -4
  42. package/esm2020/testing/src/logger.mjs +3 -3
  43. package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
  44. package/fesm2015/core.mjs +1697 -1830
  45. package/fesm2015/core.mjs.map +1 -1
  46. package/fesm2015/testing.mjs +1037 -1279
  47. package/fesm2015/testing.mjs.map +1 -1
  48. package/fesm2020/core.mjs +1697 -1830
  49. package/fesm2020/core.mjs.map +1 -1
  50. package/fesm2020/testing.mjs +1037 -1279
  51. package/fesm2020/testing.mjs.map +1 -1
  52. package/index.d.ts +169 -144
  53. package/package.json +1 -1
  54. package/schematics/migrations/typed-forms/util.js +2 -2
  55. package/schematics/utils/typescript/symbol.js +2 -2
  56. package/testing/index.d.ts +1 -1
  57. package/schematics/utils/schematics_prompt.d.ts +0 -17
  58. package/schematics/utils/schematics_prompt.js +0 -45
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v14.1.0-next.2
2
+ * @license Angular v14.1.0-rc.0
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -401,7 +401,6 @@ export declare class ApplicationRef {
401
401
  private _zone;
402
402
  private _injector;
403
403
  private _exceptionHandler;
404
- private _initStatus;
405
404
  private _views;
406
405
  private _runningTick;
407
406
  private _stable;
@@ -427,6 +426,10 @@ export declare class ApplicationRef {
427
426
  * @see [Usage notes](#is-stable-examples) for examples and caveats when using this API.
428
427
  */
429
428
  readonly isStable: Observable<boolean>;
429
+ /**
430
+ * The `EnvironmentInjector` used to create this application.
431
+ */
432
+ get injector(): EnvironmentInjector;
430
433
  /**
431
434
  * Bootstrap a component onto the element identified by its selector or, optionally, to a
432
435
  * specified element.
@@ -530,7 +533,7 @@ export declare class ApplicationRef {
530
533
  private _loadComponent;
531
534
  /**
532
535
  * Destroys an Angular application represented by this `ApplicationRef`. Calling this function
533
- * will destroy the associated environnement injectors as well as all the bootstrapped components
536
+ * will destroy the associated environment injectors as well as all the bootstrapped components
534
537
  * with their views.
535
538
  */
536
539
  destroy(): void;
@@ -608,9 +611,11 @@ export declare interface AttributeDecorator {
608
611
  }
609
612
 
610
613
  /**
611
- * Provides additional options to the bootstraping process.
614
+ * Provides additional options to the bootstrapping process.
615
+ *
616
+ * @publicApi
612
617
  */
613
- declare interface BootstrapOptions {
618
+ export declare interface BootstrapOptions {
614
619
  /**
615
620
  * Optionally specify which `NgZone` should be used.
616
621
  *
@@ -629,7 +634,7 @@ declare interface BootstrapOptions {
629
634
  *
630
635
  * When button is clicked, because of the event bubbling, both
631
636
  * event handlers will be called and 2 change detections will be
632
- * triggered. We can colesce such kind of events to only trigger
637
+ * triggered. We can coalesce such kind of events to only trigger
633
638
  * change detection only once.
634
639
  *
635
640
  * By default, this option will be false. So the events will not be
@@ -738,7 +743,7 @@ export declare abstract class ChangeDetectorRef {
738
743
  *
739
744
  * Components are normally marked as dirty (in need of rerendering) when inputs
740
745
  * have changed or events have fired in the view. Call this method to ensure that
741
- * a component is checked even if these triggers have not occured.
746
+ * a component is checked even if these triggers have not occurred.
742
747
  *
743
748
  * <!-- TODO: Add a link to a chapter on OnPush components -->
744
749
  *
@@ -1321,6 +1326,15 @@ declare type ComponentInstance = {};
1321
1326
  * @publicApi
1322
1327
  */
1323
1328
  export declare abstract class ComponentRef<C> {
1329
+ /**
1330
+ * Updates a specified input name to a new value. Using this method will properly mark for check
1331
+ * component using the `OnPush` change detection strategy. It will also assure that the
1332
+ * `OnChanges` lifecycle hook runs when a dynamically created component is change-detected.
1333
+ *
1334
+ * @param name The name of an input.
1335
+ * @param value The new value of an input.
1336
+ */
1337
+ abstract setInput(name: string, value: unknown): void;
1324
1338
  /**
1325
1339
  * The host or anchor [element](guide/glossary#element) for this component instance.
1326
1340
  */
@@ -1453,6 +1467,8 @@ export declare interface ContentChildDecorator {
1453
1467
  * **Metadata Properties**:
1454
1468
  *
1455
1469
  * * **selector** - The directive type or the name used for querying.
1470
+ * * **descendants** - If `true` (default) include all descendants of the element. If `false` then
1471
+ * only query direct children of the element.
1456
1472
  * * **read** - Used to read a different token from the queried element.
1457
1473
  * * **static** - True to resolve query results before change detection runs,
1458
1474
  * false to resolve after change detection. Defaults to false.
@@ -1486,10 +1502,12 @@ export declare interface ContentChildDecorator {
1486
1502
  * @Annotation
1487
1503
  */
1488
1504
  (selector: ProviderToken<unknown> | Function | string, opts?: {
1505
+ descendants?: boolean;
1489
1506
  read?: any;
1490
1507
  static?: boolean;
1491
1508
  }): any;
1492
1509
  new (selector: ProviderToken<unknown> | Function | string, opts?: {
1510
+ descendants?: boolean;
1493
1511
  read?: any;
1494
1512
  static?: boolean;
1495
1513
  }): ContentChild;
@@ -1600,49 +1618,6 @@ declare type ContentQueriesFunction<T> = <U extends T>(rf: ɵRenderFlags, ctx: U
1600
1618
 
1601
1619
  declare const CONTEXT = 8;
1602
1620
 
1603
- /** Options that control how the component should be bootstrapped. */
1604
- declare interface CreateComponentOptions {
1605
- /** Which renderer factory to use. */
1606
- rendererFactory?: RendererFactory3;
1607
- /** A custom sanitizer instance */
1608
- sanitizer?: Sanitizer;
1609
- /** A custom animation player handler */
1610
- playerHandler?: ɵPlayerHandler;
1611
- /**
1612
- * Host element on which the component will be bootstrapped. If not specified,
1613
- * the component definition's `tag` is used to query the existing DOM for the
1614
- * element to bootstrap.
1615
- */
1616
- host?: RElement | string;
1617
- /** Module injector for the component. If unspecified, the injector will be NULL_INJECTOR. */
1618
- injector?: Injector;
1619
- /**
1620
- * List of features to be applied to the created component. Features are simply
1621
- * functions that decorate a component with a certain behavior.
1622
- *
1623
- * Typically, the features in this list are features that cannot be added to the
1624
- * other features list in the component definition because they rely on other factors.
1625
- *
1626
- * Example: `LifecycleHooksFeature` is a function that adds lifecycle hook capabilities
1627
- * to root components in a tree-shakable way. It cannot be added to the component
1628
- * features list because there's no way of knowing when the component will be used as
1629
- * a root component.
1630
- */
1631
- hostFeatures?: HostFeature[];
1632
- /**
1633
- * A function which is used to schedule change detection work in the future.
1634
- *
1635
- * When marking components as dirty, it is necessary to schedule the work of
1636
- * change detection in the future. This is done to coalesce multiple
1637
- * {@link markDirty} calls into a single changed detection processing.
1638
- *
1639
- * The default value of the scheduler is the `requestAnimationFrame` function.
1640
- *
1641
- * It is also useful to override this function for testing purposes.
1642
- */
1643
- scheduler?: (work: () => void) => void;
1644
- }
1645
-
1646
1621
  /**
1647
1622
  * Create a new environment injector.
1648
1623
  *
@@ -1661,12 +1636,23 @@ export declare function createEnvironmentInjector(providers: Array<Provider | Im
1661
1636
 
1662
1637
  /**
1663
1638
  * Returns a new NgModuleRef instance based on the NgModule class and parent injector provided.
1639
+ *
1664
1640
  * @param ngModule NgModule class.
1665
1641
  * @param parentInjector Optional injector instance to use as a parent for the module injector. If
1666
1642
  * not provided, `NullInjector` will be used instead.
1643
+ * @returns NgModuleRef that represents an NgModule instance.
1644
+ *
1667
1645
  * @publicApi
1668
1646
  */
1669
- export declare function createNgModuleRef<T>(ngModule: Type<T>, parentInjector?: Injector): NgModuleRef<T>;
1647
+ export declare function createNgModule<T>(ngModule: Type<T>, parentInjector?: Injector): NgModuleRef<T>;
1648
+
1649
+ /**
1650
+ * The `createNgModule` function alias for backwards-compatibility.
1651
+ * Please avoid using it directly and use `createNgModule` instead.
1652
+ *
1653
+ * @deprecated Use `createNgModule` instead.
1654
+ */
1655
+ export declare const createNgModuleRef: typeof createNgModule;
1670
1656
 
1671
1657
  /**
1672
1658
  * Creates a platform.
@@ -2640,6 +2626,17 @@ export declare abstract class EnvironmentInjector implements Injector {
2640
2626
  * @suppress {duplicate}
2641
2627
  */
2642
2628
  abstract get(token: any, notFoundValue?: any): any;
2629
+ /**
2630
+ * Runs the given function in the context of this `EnvironmentInjector`.
2631
+ *
2632
+ * Within the function's stack frame, `inject` can be used to inject dependencies from this
2633
+ * injector. Note that `inject` is only usable synchronously, and cannot be used in any
2634
+ * asynchronous callbacks or after any `await` points.
2635
+ *
2636
+ * @param fn the closure to be run in the context of this injector
2637
+ * @returns the return value of the function, if any
2638
+ */
2639
+ abstract runInContext<ReturnT>(fn: () => ReturnT): ReturnT;
2643
2640
  abstract destroy(): void;
2644
2641
  }
2645
2642
 
@@ -2945,6 +2942,14 @@ export declare interface GetTestability {
2945
2942
  findTestabilityInTree(registry: TestabilityRegistry, elem: any, findInAncestors: boolean): Testability | null;
2946
2943
  }
2947
2944
 
2945
+ /**
2946
+ * The goal here is to make sure that the browser DOM API is the Renderer.
2947
+ * We do this by defining a subset of DOM API to be the renderer and then
2948
+ * use that at runtime for rendering.
2949
+ *
2950
+ * At runtime we can then use the DOM api directly, in server or web-worker
2951
+ * it will be easy to implement such API.
2952
+ */
2948
2953
  declare type GlobalTargetName = 'document' | 'window' | 'body';
2949
2954
 
2950
2955
  declare type GlobalTargetResolver = (element: any) => EventTarget;
@@ -3149,9 +3154,6 @@ export declare interface HostDecorator {
3149
3154
  new (): Host;
3150
3155
  }
3151
3156
 
3152
- /** See CreateComponentOptions.hostFeatures */
3153
- declare type HostFeature = (<T>(component: T, componentDef: ɵComponentDef<T>) => void);
3154
-
3155
3157
  /**
3156
3158
  * Type of the HostListener metadata.
3157
3159
  *
@@ -3615,9 +3617,38 @@ export declare function inject<T>(token: ProviderToken<T>): T;
3615
3617
  * @throws if called outside of a supported context.
3616
3618
  *
3617
3619
  * @publicApi
3620
+ * @deprecated prefer an options object instead of `InjectFlags`
3618
3621
  */
3619
3622
  export declare function inject<T>(token: ProviderToken<T>, flags?: InjectFlags): T | null;
3620
3623
 
3624
+ /**
3625
+ * @param token A token that represents a dependency that should be injected.
3626
+ * @param options Control how injection is executed. Options correspond to injection strategies
3627
+ * that can be specified with parameter decorators `@Host`, `@Self`, `@SkipSelf`, and
3628
+ * `@Optional`.
3629
+ * @returns the injected value if operation is successful.
3630
+ * @throws if called outside of a supported context, or if the token is not found.
3631
+ *
3632
+ * @publicApi
3633
+ */
3634
+ export declare function inject<T>(token: ProviderToken<T>, options: InjectOptions & {
3635
+ optional?: false;
3636
+ }): T;
3637
+
3638
+ /**
3639
+ * @param token A token that represents a dependency that should be injected.
3640
+ * @param options Control how injection is executed. Options correspond to injection strategies
3641
+ * that can be specified with parameter decorators `@Host`, `@Self`, `@SkipSelf`, and
3642
+ * `@Optional`.
3643
+ * @returns the injected value if operation is successful, `null` if the token is not
3644
+ * found and optional injection has been requested.
3645
+ * @throws if called outside of a supported context, or if the token is not found and optional
3646
+ * injection was not requested.
3647
+ *
3648
+ * @publicApi
3649
+ */
3650
+ export declare function inject<T>(token: ProviderToken<T>, options: InjectOptions): T | null;
3651
+
3621
3652
  /**
3622
3653
  * Type of the Injectable metadata.
3623
3654
  *
@@ -3741,6 +3772,7 @@ export declare interface InjectDecorator {
3741
3772
  * Injection flags for DI.
3742
3773
  *
3743
3774
  * @publicApi
3775
+ * @deprecated use an options object for `inject` instead.
3744
3776
  */
3745
3777
  export declare enum InjectFlags {
3746
3778
  /** Check self and check parent injector if needed */
@@ -3815,6 +3847,32 @@ export declare class InjectionToken<T> {
3815
3847
  toString(): string;
3816
3848
  }
3817
3849
 
3850
+ /**
3851
+ * Type of the options argument to `inject`.
3852
+ *
3853
+ * @publicApi
3854
+ */
3855
+ export declare interface InjectOptions {
3856
+ /**
3857
+ * Use optional injection, and return `null` if the requested token is not found.
3858
+ */
3859
+ optional?: boolean;
3860
+ /**
3861
+ * Start injection at the parent of the current injector.
3862
+ */
3863
+ skipSelf?: boolean;
3864
+ /**
3865
+ * Only query the current injector for the token, and don't fall back to the parent injector if
3866
+ * it's not found.
3867
+ */
3868
+ self?: boolean;
3869
+ /**
3870
+ * Stop injection at the host component's injector. Only relevant when injecting from an element
3871
+ * injector, and a no-op for environment injectors.
3872
+ */
3873
+ host?: boolean;
3874
+ }
3875
+
3818
3876
  /**
3819
3877
  * An InjectionToken that gets the current `Injector` for `createInjector()`-style injectors.
3820
3878
  *
@@ -4574,8 +4632,8 @@ declare interface LView<T = unknown> extends Array<any> {
4574
4632
  * TView.cleanup saves an index to the necessary context in this array.
4575
4633
  *
4576
4634
  * After `LView` is created it is possible to attach additional instance specific functions at the
4577
- * end of the `lView[CLENUP]` because we know that no more `T` level cleanup functions will be
4578
- * addeded here.
4635
+ * end of the `lView[CLEANUP]` because we know that no more `T` level cleanup functions will be
4636
+ * added here.
4579
4637
  */
4580
4638
  [CLEANUP]: any[] | null;
4581
4639
  /**
@@ -4589,9 +4647,9 @@ declare interface LView<T = unknown> extends Array<any> {
4589
4647
  /** An optional Module Injector to be used as fall back after Element Injectors are consulted. */
4590
4648
  readonly [INJECTOR_2]: Injector | null;
4591
4649
  /** Factory to be used for creating Renderer. */
4592
- [RENDERER_FACTORY]: RendererFactory3;
4650
+ [RENDERER_FACTORY]: RendererFactory;
4593
4651
  /** Renderer to be used for this view. */
4594
- [RENDERER]: Renderer3;
4652
+ [RENDERER]: Renderer;
4595
4653
  /** An optional custom sanitizer. */
4596
4654
  [SANITIZER]: Sanitizer | null;
4597
4655
  /**
@@ -5191,7 +5249,7 @@ export declare interface NgModuleDecorator {
5191
5249
  * JIT mode. See [JIT API changes due to ViewEngine deprecation](guide/deprecations#jit-api-changes)
5192
5250
  * for additional context. Angular provides APIs that accept NgModule classes directly (such as
5193
5251
  * [PlatformRef.bootstrapModule](api/core/PlatformRef#bootstrapModule) and
5194
- * [createNgModuleRef](api/core/createNgModuleRef)), consider switching to those APIs instead of
5252
+ * [createNgModule](api/core/createNgModule)), consider switching to those APIs instead of
5195
5253
  * using factory-based ones.
5196
5254
  */
5197
5255
  export declare abstract class NgModuleFactory<T> {
@@ -5436,21 +5494,6 @@ declare interface NodeInjectorDebug {
5436
5494
  parentInjectorIndex: number;
5437
5495
  }
5438
5496
 
5439
- /**
5440
- * Object Oriented style of API needed to create elements and text nodes.
5441
- *
5442
- * This is the native browser API style, e.g. operations are methods on individual objects
5443
- * like HTMLElement. With this style, no additional code is needed as a facade
5444
- * (reducing payload size).
5445
- * */
5446
- declare interface ObjectOrientedRenderer3 {
5447
- createComment(data: string): RComment;
5448
- createElement(tagName: string): RElement;
5449
- createElementNS(namespace: string, tagName: string): RElement;
5450
- createTextNode(data: string): RText;
5451
- querySelector(selectors: string): RElement | null;
5452
- }
5453
-
5454
5497
  /**
5455
5498
  * @description
5456
5499
  * A lifecycle hook that is called when any data-bound property of a directive changes.
@@ -5875,41 +5918,6 @@ declare const enum PreOrderHookFlags {
5875
5918
  NumberOfInitHooksCalledMask = 4294901760
5876
5919
  }
5877
5920
 
5878
- /**
5879
- * Procedural style of API needed to create elements and text nodes.
5880
- *
5881
- * In non-native browser environments (e.g. platforms such as web-workers), this is the
5882
- * facade that enables element manipulation. This also facilitates backwards compatibility
5883
- * with Renderer2.
5884
- */
5885
- declare interface ProceduralRenderer3 {
5886
- destroy(): void;
5887
- createComment(value: string): RComment;
5888
- createElement(name: string, namespace?: string | null): RElement;
5889
- createText(value: string): RText;
5890
- /**
5891
- * This property is allowed to be null / undefined,
5892
- * in which case the view engine won't call it.
5893
- * This is used as a performance optimization for production mode.
5894
- */
5895
- destroyNode?: ((node: RNode) => void) | null;
5896
- appendChild(parent: RElement, newChild: RNode): void;
5897
- insertBefore(parent: RNode, newChild: RNode, refChild: RNode | null, isMove?: boolean): void;
5898
- removeChild(parent: RElement, oldChild: RNode, isHostElement?: boolean): void;
5899
- selectRootElement(selectorOrNode: string | any, preserveContent?: boolean): RElement;
5900
- parentNode(node: RNode): RElement | null;
5901
- nextSibling(node: RNode): RNode | null;
5902
- setAttribute(el: RElement, name: string, value: string | TrustedHTML | TrustedScript | TrustedScriptURL, namespace?: string | null): void;
5903
- removeAttribute(el: RElement, name: string, namespace?: string | null): void;
5904
- addClass(el: RElement, name: string): void;
5905
- removeClass(el: RElement, name: string): void;
5906
- setStyle(el: RElement, style: string, value: any, flags?: RendererStyleFlags2 | RendererStyleFlags3): void;
5907
- removeStyle(el: RElement, style: string, flags?: RendererStyleFlags2 | RendererStyleFlags3): void;
5908
- setProperty(el: RElement, name: string, value: any): void;
5909
- setValue(node: RText | RComment, value: string): void;
5910
- listen(target: GlobalTargetName | RNode, eventName: string, callback: (event: any) => boolean | void): () => void;
5911
- }
5912
-
5913
5921
  /**
5914
5922
  * Describes a function that is used to process provider lists (such as provider
5915
5923
  * overrides).
@@ -6308,6 +6316,7 @@ declare class R3Injector extends EnvironmentInjector {
6308
6316
  */
6309
6317
  destroy(): void;
6310
6318
  onDestroy(callback: () => void): void;
6319
+ runInContext<ReturnT>(fn: () => ReturnT): ReturnT;
6311
6320
  get<T>(token: ProviderToken<T>, notFoundValue?: any, flags?: InjectFlags): T;
6312
6321
  toString(): string;
6313
6322
  private assertNotDestroyed;
@@ -6638,6 +6647,40 @@ declare interface RElement extends RNode {
6638
6647
 
6639
6648
  declare const RENDERER = 11;
6640
6649
 
6650
+ /**
6651
+ * Procedural style of API needed to create elements and text nodes.
6652
+ *
6653
+ * In non-native browser environments (e.g. platforms such as web-workers), this is the
6654
+ * facade that enables element manipulation. In practice, this is implemented by `Renderer2`.
6655
+ */
6656
+ declare interface Renderer {
6657
+ destroy(): void;
6658
+ createComment(value: string): RComment;
6659
+ createElement(name: string, namespace?: string | null): RElement;
6660
+ createText(value: string): RText;
6661
+ /**
6662
+ * This property is allowed to be null / undefined,
6663
+ * in which case the view engine won't call it.
6664
+ * This is used as a performance optimization for production mode.
6665
+ */
6666
+ destroyNode?: ((node: RNode) => void) | null;
6667
+ appendChild(parent: RElement, newChild: RNode): void;
6668
+ insertBefore(parent: RNode, newChild: RNode, refChild: RNode | null, isMove?: boolean): void;
6669
+ removeChild(parent: RElement, oldChild: RNode, isHostElement?: boolean): void;
6670
+ selectRootElement(selectorOrNode: string | any, preserveContent?: boolean): RElement;
6671
+ parentNode(node: RNode): RElement | null;
6672
+ nextSibling(node: RNode): RNode | null;
6673
+ setAttribute(el: RElement, name: string, value: string | TrustedHTML | TrustedScript | TrustedScriptURL, namespace?: string | null): void;
6674
+ removeAttribute(el: RElement, name: string, namespace?: string | null): void;
6675
+ addClass(el: RElement, name: string): void;
6676
+ removeClass(el: RElement, name: string): void;
6677
+ setStyle(el: RElement, style: string, value: any, flags?: RendererStyleFlags2): void;
6678
+ removeStyle(el: RElement, style: string, flags?: RendererStyleFlags2): void;
6679
+ setProperty(el: RElement, name: string, value: any): void;
6680
+ setValue(node: RText | RComment, value: string): void;
6681
+ listen(target: GlobalTargetName | RNode, eventName: string, callback: (event: any) => boolean | void): () => void;
6682
+ }
6683
+
6641
6684
  /**
6642
6685
  * Extend this base class to implement custom rendering. By default, Angular
6643
6686
  * renders a template into DOM. You can use custom rendering to intercept
@@ -6814,10 +6857,14 @@ export declare abstract class Renderer2 {
6814
6857
  abstract listen(target: 'window' | 'document' | 'body' | any, eventName: string, callback: (event: any) => boolean | void): () => void;
6815
6858
  }
6816
6859
 
6817
- declare type Renderer3 = ObjectOrientedRenderer3 | ProceduralRenderer3;
6818
-
6819
6860
  declare const RENDERER_FACTORY = 10;
6820
6861
 
6862
+ declare interface RendererFactory {
6863
+ createRenderer(hostElement: RElement | null, rendererType: RendererType2 | null): Renderer;
6864
+ begin?(): void;
6865
+ end?(): void;
6866
+ }
6867
+
6821
6868
  /**
6822
6869
  * Creates and initializes a custom renderer that implements the `Renderer2` base class.
6823
6870
  *
@@ -6846,12 +6893,6 @@ export declare abstract class RendererFactory2 {
6846
6893
  abstract whenRenderingDone?(): Promise<any>;
6847
6894
  }
6848
6895
 
6849
- declare interface RendererFactory3 {
6850
- createRenderer(hostElement: RElement | null, rendererType: RendererType2 | null): Renderer3;
6851
- begin?(): void;
6852
- end?(): void;
6853
- }
6854
-
6855
6896
  /**
6856
6897
  * Flags for renderer-specific style modifiers.
6857
6898
  * @publicApi
@@ -6867,11 +6908,6 @@ export declare enum RendererStyleFlags2 {
6867
6908
  DashCase = 2
6868
6909
  }
6869
6910
 
6870
- declare enum RendererStyleFlags3 {
6871
- Important = 1,
6872
- DashCase = 2
6873
- }
6874
-
6875
6911
  /**
6876
6912
  * Used by `RendererFactory2` to associate custom rendering data and styles
6877
6913
  * with a rendering implementation.
@@ -7046,6 +7082,7 @@ declare const enum RuntimeErrorCode {
7046
7082
  INVALID_INJECTION_TOKEN = 204,
7047
7083
  INJECTOR_ALREADY_DESTROYED = 205,
7048
7084
  PROVIDER_IN_WRONG_CONTEXT = 207,
7085
+ MISSING_INJECTION_TOKEN = 208,
7049
7086
  MULTIPLE_COMPONENTS_MATCH = -300,
7050
7087
  EXPORT_NOT_FOUND = -301,
7051
7088
  PIPE_NOT_FOUND = -302,
@@ -7060,7 +7097,9 @@ declare const enum RuntimeErrorCode {
7060
7097
  PLATFORM_ALREADY_DESTROYED = 404,
7061
7098
  ASYNC_INITIALIZERS_STILL_RUNNING = 405,
7062
7099
  APPLICATION_REF_ALREADY_DESTROYED = 406,
7100
+ RENDERER_NOT_FOUND = 407,
7063
7101
  INVALID_I18N_STRUCTURE = 700,
7102
+ MISSING_LOCALE_DATA = 701,
7064
7103
  IMPORT_PROVIDERS_FROM_STANDALONE = 800,
7065
7104
  INVALID_DIFFER_INPUT = 900,
7066
7105
  NO_SUPPORTING_DIFFER_FACTORY = 901,
@@ -7069,7 +7108,9 @@ declare const enum RuntimeErrorCode {
7069
7108
  UNSAFE_VALUE_IN_RESOURCE_URL = 904,
7070
7109
  UNSAFE_VALUE_IN_SCRIPT = 905,
7071
7110
  MISSING_GENERATED_DEF = 906,
7072
- TYPE_IS_NOT_STANDALONE = 907
7111
+ TYPE_IS_NOT_STANDALONE = 907,
7112
+ MISSING_ZONEJS = 908,
7113
+ UNEXPECTED_ZONE_STATE = 909
7073
7114
  }
7074
7115
 
7075
7116
  declare const SANITIZER = 12;
@@ -8834,7 +8875,7 @@ declare const enum TViewType {
8834
8875
  Component = 1,
8835
8876
  /**
8836
8877
  * `TView` associated with a template. Such as `*ngIf`, `<ng-template>` etc... A `Component`
8837
- * can have zero or more `Embedede` `TView`s.
8878
+ * can have zero or more `Embedded` `TView`s.
8838
8879
  */
8839
8880
  Embedded = 2
8840
8881
  }
@@ -10675,6 +10716,7 @@ export declare class ɵRender3ComponentRef<T> extends ComponentRef<T> {
10675
10716
  changeDetectorRef: ChangeDetectorRef;
10676
10717
  componentType: Type<T>;
10677
10718
  constructor(componentType: Type<T>, instance: T, location: ElementRef, _rootLView: LView, _tNode: TElementNode | TContainerNode | TElementContainerNode);
10719
+ setInput(name: string, value: unknown): void;
10678
10720
  get injector(): Injector;
10679
10721
  destroy(): void;
10680
10722
  onDestroy(callback: () => void): void;
@@ -10690,25 +10732,11 @@ export declare class ɵRender3NgModuleRef<T> extends NgModuleRef<T> implements I
10690
10732
  readonly componentFactoryResolver: ComponentFactoryResolver_2;
10691
10733
  constructor(ngModuleType: Type<T>, _parent: Injector | null);
10692
10734
  get(token: any, notFoundValue?: any, injectFlags?: InjectFlags): any;
10735
+ runInContext<ReturnT>(fn: () => ReturnT): ReturnT;
10693
10736
  destroy(): void;
10694
10737
  onDestroy(callback: () => void): void;
10695
10738
  }
10696
10739
 
10697
- /**
10698
- * Bootstraps a Component into an existing host element and returns an instance
10699
- * of the component.
10700
- *
10701
- * Use this function to bootstrap a component into the DOM tree. Each invocation
10702
- * of this function will create a separate tree of components, injectors and
10703
- * change detection cycles and lifetimes. To dynamically insert a new component
10704
- * into an existing tree such that it shares the same injection, change detection
10705
- * and object lifetime, use {@link ViewContainer#createComponent}.
10706
- *
10707
- * @param componentType Component to bootstrap
10708
- * @param options Optional parameters which control bootstrapping
10709
- */
10710
- export declare function ɵrenderComponent<T>(componentType: ɵComponentType<T> | Type<T>, opts?: CreateComponentOptions): T;
10711
-
10712
10740
  /**
10713
10741
  * Flags passed into template functions to determine which blocks (i.e. creation, update)
10714
10742
  * should be executed.
@@ -12758,9 +12786,6 @@ export declare function ɵɵinvalidFactory(): never;
12758
12786
  * Throws an error indicating that a factory function could not be generated by the compiler for a
12759
12787
  * particular class.
12760
12788
  *
12761
- * This instruction allows the actual error message to be optimized away when ngDevMode is turned
12762
- * off, saving bytes of generated code while still providing a good experience in dev mode.
12763
- *
12764
12789
  * The name of the class is not mentioned here, but will be in the generated factory function name
12765
12790
  * and thus in the stack trace.
12766
12791
  *
@@ -13428,7 +13453,7 @@ export declare function ɵɵpropertyInterpolate8(propName: string, prefix: strin
13428
13453
  * be conducted at runtime so child components that add new `@Inputs` don't have to be re-compiled.
13429
13454
  *
13430
13455
  * @param propName The name of the property to update.
13431
- * @param values The collection of values and the strings inbetween those values, beginning with a
13456
+ * @param values The collection of values and the strings in between those values, beginning with a
13432
13457
  * string prefix and ending with a string suffix.
13433
13458
  * (e.g. `['prefix', value0, '-', value1, '-', value2, ..., value99, 'suffix']`)
13434
13459
  * @param sanitizer An optional sanitizer function
@@ -13867,7 +13892,7 @@ export declare function ɵɵsetNgModuleScope(type: any, scope: {
13867
13892
  /**
13868
13893
  * A feature that acts as a setup code for the {@link StandaloneService}.
13869
13894
  *
13870
- * The most important responsaibility of this feature is to expose the "getStandaloneInjector"
13895
+ * The most important responsibility of this feature is to expose the "getStandaloneInjector"
13871
13896
  * function (an entry points to a standalone injector creation) on a component definition object. We
13872
13897
  * go through the features infrastructure to make sure that the standalone injector creation logic
13873
13898
  * is tree-shakable and not included in applications that don't use standalone components.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/core",
3
- "version": "14.1.0-next.2",
3
+ "version": "14.1.0-rc.0",
4
4
  "description": "Angular - the core framework",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -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 overriden constructors.
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3R5cGVkLWZvcm1zL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsNERBQTRCO0lBRTVCLCtFQUFrRTtJQUVyRCxRQUFBLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUUsUUFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDO0lBQzVCLFFBQUEsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUMxQixRQUFBLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztJQVN0QyxTQUFnQixXQUFXLENBQ3ZCLFVBQXlCLEVBQUUsV0FBMkIsRUFBRSxPQUFrQjtRQUM1RSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkMsMERBQTBEO1FBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVqQyxtREFBbUQ7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZCLHNGQUFzRjtnQkFDdEYsOENBQThDO2dCQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0QjtZQUNELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO2dCQUMxQixNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtvQkFDcEIsNEJBQTRCO29CQUM1QixPQUFPLENBQUMsS0FBSyxDQUNULDhEQUE4RCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDMUYsU0FBUztpQkFDVjtnQkFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ2hFO1NBQ0Y7UUFFRCxnRkFBZ0Y7UUFDaEYsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7WUFDekIsTUFBTSxZQUFZLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO2dCQUN6Qiw0QkFBNEI7Z0JBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQ1Qsa0VBQWtFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZGLFNBQVM7YUFDVjtZQUNELElBQUksSUFBQSw0QkFBa0IsRUFBQyxVQUFVLEVBQUUsYUFBSyxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUN2RCw4RkFBOEY7Z0JBQzlGLDhEQUE4RDtnQkFDOUQsU0FBUzthQUNWO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBNUNELGtDQTRDQztJQUVELFNBQVMsVUFBVSxDQUFDLFVBQXlCO1FBQzNDLElBQUksT0FBTyxHQUF5QixFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLEVBQUUsSUFBSSxlQUFPLEVBQUU7WUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBQSw0QkFBa0IsRUFBQyxVQUFVLEVBQUUsYUFBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxTQUFTO2dCQUFFLFNBQVM7WUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLCtCQUErQixDQUFDLElBQVk7UUFDbkQsS0FBSyxNQUFNLEVBQUUsSUFBSSxlQUFPLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixPQUFPLEdBQUcscUJBQWEsR0FBRyxFQUFFLEVBQUUsQ0FBQzthQUNoQztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxTQUFTLENBQ2QsVUFBeUIsRUFBRSxXQUEyQixFQUN0RCxlQUFtQztRQUNyQyxNQUFNLE1BQU0sR0FBcUIsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxvQkFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM5QixzRUFBc0U7Z0JBQ3RFLE9BQU87YUFDUjtZQUNELElBQUksb0JBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsRUFBRTtnQkFDckYsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFDLENBQUMsQ0FBQzthQUM1RDtZQUNELG9CQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7UUFDRixvQkFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFNBQVMsb0JBQW9CLENBQ3pCLFdBQTJCLEVBQUUsSUFBbUIsRUFDaEQsZUFBbUM7O1FBQ3JDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRCxnR0FBZ0c7UUFDaEcsdUZBQXVGO1FBQ3ZGLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUU5RixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxvQkFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTlDLHdGQUF3RjtRQUN4Riw2RkFBNkY7UUFDN0Ysa0JBQWtCO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3QyxJQUFJLENBQUMsb0JBQUUsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWxFLE1BQU0sVUFBVSxHQUFHLE1BQUEsTUFBQSxXQUFXLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLDBDQUFFLFNBQVMsRUFBRSwwQ0FBRSxPQUFPLEVBQUUsQ0FBQztRQUMxRixJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTlCLHlFQUF5RTtRQUN6RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFFN0UsSUFBSSxVQUFVLEtBQUssUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXpDLCtGQUErRjtRQUMvRixnR0FBZ0c7UUFDaEcsMkJBQTJCO1FBQzNCLElBQUksUUFBUSxLQUFLLG1CQUFXLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUzRSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldEltcG9ydFNwZWNpZmllcn0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9pbXBvcnRzJztcblxuZXhwb3J0IGNvbnN0IGNsYXNzZXMgPSBuZXcgU2V0KFsnRm9ybUFycmF5JywgJ0Zvcm1CdWlsZGVyJywgJ0Zvcm1Db250cm9sJywgJ0Zvcm1Hcm91cCddKTtcbmV4cG9ydCBjb25zdCBmb3JtQ29udHJvbCA9ICdGb3JtQ29udHJvbCc7XG5leHBvcnQgY29uc3QgdW50eXBlZFByZWZpeCA9ICdVbnR5cGVkJztcbmV4cG9ydCBjb25zdCBmb3JtcyA9ICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0YWJsZU5vZGUge1xuICBub2RlOiB0cy5Ob2RlO1xuICBpbXBvcnROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIHJld3JpdGVGbiA9IChzdGFydFBvczogbnVtYmVyLCBvcmlnTGVuZ3RoOiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGVGaWxlKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgcmV3cml0ZTogcmV3cml0ZUZuKSB7XG4gIGNvbnN0IGltcG9ydHMgPSBnZXRJbXBvcnRzKHNvdXJjZUZpbGUpO1xuXG4gIC8vIElmIG5vIHJlbGV2YW50IGNsYXNzZXMgYXJlIGltcG9ydGVkLCB3ZSBjYW4gZXhpdCBlYXJseS5cbiAgaWYgKGltcG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgLy8gRm9yIGVhY2ggY29udHJvbCBjbGFzcywgbWlncmF0ZSBhbGwgb2YgaXRzIHVzZXMuXG4gIGZvciAobGV0IGkgPSBpbXBvcnRzLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBpbXAgPSBpbXBvcnRzW2ldO1xuICAgIGNvbnN0IHVzYWdlcyA9IGdldFVzYWdlcyhzb3VyY2VGaWxlLCB0eXBlQ2hlY2tlciwgaW1wKTtcbiAgICBpZiAodXNhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2luY2UgdGhlcmUgYXJlIG5vIHVzYWdlcyBvZiB0aGlzIGNsYXNzIHdlIG5lZWQgdG8gbWlncmF0ZSBpdCwgd2Ugc2hvdWxkIGNvbXBsZXRlbHlcbiAgICAgIC8vIHNraXAgaXQgZm9yIHRoZSBzdWJzZXF1ZW50IG1pZ3JhdGlvbiBzdGVwcy5cbiAgICAgIGltcG9ydHMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuICAgICAgY29uc3QgbmV3TmFtZSA9IGdldFVudHlwZWRWZXJzaW9uT2ZJbXBvcnRPck5hbWUodXNhZ2UuaW1wb3J0TmFtZSk7XG4gICAgICBpZiAobmV3TmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgVHlwZWQgZm9ybXMgbWlncmF0aW9uIGVycm9yOiB1bmtub3duIHJlcGxhY2VtZW50IGZvciB1c2FnZSAke3VzYWdlLm5vZGUuZ2V0VGV4dCgpfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJld3JpdGUodXNhZ2Uubm9kZS5nZXRTdGFydCgpLCB1c2FnZS5ub2RlLmdldFdpZHRoKCksIG5ld05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBlYWNoIGltcG9ydGVkIGNvbnRyb2wgY2xhc3MsIG1pZ3JhdGUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdXB0eXBlZCBpbXBvcnQuXG4gIGZvciAoY29uc3QgaW1wIG9mIGltcG9ydHMpIHtcbiAgICBjb25zdCB1bnR5cGVkQ2xhc3MgPSBnZXRVbnR5cGVkVmVyc2lvbk9mSW1wb3J0T3JOYW1lKGltcC5nZXRUZXh0KCkpO1xuICAgIGlmICh1bnR5cGVkQ2xhc3MgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFR5cGVkIGZvcm1zIG1pZ3JhdGlvbiBlcnJvcjogdW5rbm93biB1bnR5cGVkIHZlcnNpb24gb2YgaW1wb3J0ICR7aW1wLmdldFRleHQoKX1gKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZ2V0SW1wb3J0U3BlY2lmaWVyKHNvdXJjZUZpbGUsIGZvcm1zLCB1bnR5cGVkQ2xhc3MpKSB7XG4gICAgICAvLyBJbiBvcmRlciB0byBtYWtlIHRoZSBtaWdyYXRpb24gaWRlbXBvdGVudCwgd2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSB1bnR5cGVkIHZlcnNpb24gb2YgdGhlXG4gICAgICAvLyBjbGFzcyBpcyBhbHJlYWR5IHByZXNlbnQuIElmIHByZXNlbnQsIGltbWVkaWF0ZWx5IGNvbnRpbnVlLlxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJld3JpdGUoaW1wLmdldFN0YXJ0KCksIGltcC5nZXRXaWR0aCgpLCB1bnR5cGVkQ2xhc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydHMoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLkltcG9ydFNwZWNpZmllcltdIHtcbiAgbGV0IGltcG9ydHM6IHRzLkltcG9ydFNwZWNpZmllcltdID0gW107XG4gIGZvciAoY29uc3QgY2Mgb2YgY2xhc3Nlcykge1xuICAgIGNvbnN0IHNwZWNpZmllciA9IGdldEltcG9ydFNwZWNpZmllcihzb3VyY2VGaWxlLCBmb3JtcywgY2MpO1xuICAgIGlmICghc3BlY2lmaWVyKSBjb250aW51ZTtcbiAgICBpbXBvcnRzLnB1c2goc3BlY2lmaWVyKTtcbiAgfVxuICByZXR1cm4gaW1wb3J0cztcbn1cblxuZnVuY3Rpb24gZ2V0VW50eXBlZFZlcnNpb25PZkltcG9ydE9yTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gIGZvciAoY29uc3QgY2Mgb2YgY2xhc3Nlcykge1xuICAgIGlmIChuYW1lLmluY2x1ZGVzKGNjKSkge1xuICAgICAgcmV0dXJuIGAke3VudHlwZWRQcmVmaXh9JHtjY31gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VXNhZ2VzKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgICBpbXBvcnRTcGVjaWZpZXI6IHRzLkltcG9ydFNwZWNpZmllcik6IE1pZ3JhdGFibGVOb2RlW10ge1xuICBjb25zdCB1c2FnZXM6IE1pZ3JhdGFibGVOb2RlW10gPSBbXTtcbiAgY29uc3QgdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICBpZiAodHMuaXNJbXBvcnRTcGVjaWZpZXIobm9kZSkpIHtcbiAgICAgIC8vIFNraXAgdGhpcyBub2RlIGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuOyBpbXBvcnRzIGFyZSBhIHNwZWNpYWwgY2FzZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRzLmlzSWRlbnRpZmllcihub2RlKSAmJiBpc1VzYWdlT2ZGb3Jtc0ltcG9ydCh0eXBlQ2hlY2tlciwgbm9kZSwgaW1wb3J0U3BlY2lmaWVyKSkge1xuICAgICAgdXNhZ2VzLnB1c2goe25vZGUsIGltcG9ydE5hbWU6IGltcG9ydFNwZWNpZmllci5nZXRUZXh0KCl9KTtcbiAgICB9XG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gIH07XG4gIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCB2aXNpdE5vZGUpO1xuICByZXR1cm4gdXNhZ2VzO1xufVxuXG5mdW5jdGlvbiBpc1VzYWdlT2ZGb3Jtc0ltcG9ydChcbiAgICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG5vZGU6IHRzLklkZW50aWZpZXIsXG4gICAgaW1wb3J0U3BlY2lmaWVyOiB0cy5JbXBvcnRTcGVjaWZpZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcblxuICAvLyBXZSBjaGVjayBzeW1ib2wuZGVjbGFyYXRpb25zIGJlY2F1c2Ugd2UgYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgbmFtZSBhdCB0aGUgZGVjbGFyYXRpb24gc2l0ZSxcbiAgLy8gbm90IHRoZSB1c2FnZSBzaXRlLiBUaGVzZSBjb3VsZCBiZSBkaWZmZXJlbnQgaW4gdGhlIGNhc2Ugb2Ygb3ZlcnJpZGRlbiBjb25zdHJ1Y3RvcnMuXG4gIGlmICghc3ltYm9sIHx8IHN5bWJvbC5kZWNsYXJhdGlvbnMgPT09IHVuZGVmaW5lZCB8fCAhc3ltYm9sLmRlY2xhcmF0aW9ucy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBkZWNsID0gc3ltYm9sLmRlY2xhcmF0aW9uc1swXTtcbiAgaWYgKCF0cy5pc0ltcG9ydFNwZWNpZmllcihkZWNsKSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIEFzIHBlciBgdHlwZXNjcmlwdC9pbXBvcnRzLnRzYCwgd2UgbXVzdCB3YWxrIHVwIHRoZSB0cmVlIHRvIGZpbmQgdGhlIGVuY2xvc2luZyBpbXBvcnRcbiAgLy8gZGVjbGFyYXRpb24uIEZvciByZWFzb25zIHNwZWNpZmljIHRvIHRoZSBUUyBBU1QsIHRoaXMgaXMgYWx3YXlzIDMgbGV2ZWxzIHVwIGZyb20gYW4gaW1wb3J0XG4gIC8vIHNwZWNpZmllciBub2RlLlxuICBjb25zdCBpbXBvcnREZWNsID0gZGVjbC5wYXJlbnQucGFyZW50LnBhcmVudDtcbiAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwoaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIpKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgaW1wb3J0TmFtZSA9IHR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKGltcG9ydFNwZWNpZmllcik/LmdldFN5bWJvbCgpPy5nZXROYW1lKCk7XG4gIGlmICghaW1wb3J0TmFtZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIEhhbmRsZXMgYWxpYXNlZCBpbXBvcnRzOiBlLmcuIFwiaW1wb3J0IHtDb21wb25lbnQgYXMgbXlDb21wfSBmcm9tIC4uLlwiO1xuICBjb25zdCBkZWNsTmFtZSA9IGRlY2wucHJvcGVydHlOYW1lID8gZGVjbC5wcm9wZXJ0eU5hbWUudGV4dCA6IGRlY2wubmFtZS50ZXh0O1xuXG4gIGlmIChpbXBvcnROYW1lID09PSBkZWNsTmFtZSkgcmV0dXJuIHRydWU7XG5cbiAgLy8gSW4gdGhlIGNhc2Ugb2YgRm9ybUNvbnRyb2wncyBvdmVycmlkZGVuIGV4cG9ydGVkIGNvbnN0cnVjdG9yLCB0aGUgdmFsdWUgbmFtZSBhbmQgZGVjbGFyYXRpb25cbiAgLy8gbmFtZSBhcmUgbm90IGV4YWN0bHkgdGhlIHNhbWUuIEZvciBvdXIgcHVycG9zZXMsIGl0J3MgZW5vdWdoIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGxhdHRlciBpcyBhXG4gIC8vIHN1YnN0cmluZyBvZiB0aGUgZm9ybWVyLlxuICBpZiAoZGVjbE5hbWUgPT09IGZvcm1Db250cm9sICYmIGltcG9ydE5hbWUuaW5jbHVkZXMoZGVjbE5hbWUpKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=