@angular/compiler 17.0.0-next.5 → 17.0.0-next.7
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/esm2022/src/compiler.mjs +1 -1
- package/esm2022/src/i18n/extractor_merger.mjs +1 -4
- package/esm2022/src/i18n/i18n_parser.mjs +1 -6
- package/esm2022/src/i18n/serializers/xliff.mjs +1 -3
- package/esm2022/src/i18n/serializers/xliff2.mjs +1 -3
- package/esm2022/src/i18n/serializers/xtb.mjs +1 -3
- package/esm2022/src/injectable_compiler_2.mjs +3 -6
- package/esm2022/src/jit_compiler_facade.mjs +34 -13
- package/esm2022/src/ml_parser/ast.mjs +1 -17
- package/esm2022/src/ml_parser/html_whitespaces.mjs +2 -5
- package/esm2022/src/ml_parser/icu_ast_expander.mjs +2 -5
- package/esm2022/src/ml_parser/lexer.mjs +60 -50
- package/esm2022/src/ml_parser/parser.mjs +26 -71
- package/esm2022/src/ml_parser/tokens.mjs +1 -1
- package/esm2022/src/output/abstract_emitter.mjs +8 -1
- package/esm2022/src/render3/partial/class_metadata.mjs +1 -1
- package/esm2022/src/render3/partial/component.mjs +49 -2
- package/esm2022/src/render3/partial/directive.mjs +1 -1
- package/esm2022/src/render3/partial/factory.mjs +1 -1
- package/esm2022/src/render3/partial/injectable.mjs +1 -1
- package/esm2022/src/render3/partial/injector.mjs +1 -1
- package/esm2022/src/render3/partial/ng_module.mjs +1 -1
- package/esm2022/src/render3/partial/pipe.mjs +1 -1
- package/esm2022/src/render3/r3_ast.mjs +1 -1
- package/esm2022/src/render3/r3_class_metadata_compiler.mjs +14 -16
- package/esm2022/src/render3/r3_control_flow.mjs +101 -88
- package/esm2022/src/render3/r3_deferred_blocks.mjs +37 -39
- package/esm2022/src/render3/r3_deferred_triggers.mjs +30 -22
- package/esm2022/src/render3/r3_factory.mjs +2 -2
- package/esm2022/src/render3/r3_template_transform.mjs +70 -35
- package/esm2022/src/render3/util.mjs +3 -3
- package/esm2022/src/render3/view/api.mjs +1 -1
- package/esm2022/src/render3/view/block_syntax_switch.mjs +13 -0
- package/esm2022/src/render3/view/compiler.mjs +21 -11
- package/esm2022/src/render3/view/i18n/meta.mjs +1 -5
- package/esm2022/src/render3/view/t2_api.mjs +1 -1
- package/esm2022/src/render3/view/t2_binder.mjs +9 -4
- package/esm2022/src/render3/view/template.mjs +65 -43
- package/esm2022/src/render3/view/util.mjs +8 -2
- package/esm2022/src/template/pipeline/ir/src/enums.mjs +42 -9
- package/esm2022/src/template/pipeline/ir/src/expression.mjs +64 -19
- package/esm2022/src/template/pipeline/ir/src/operations.mjs +2 -2
- package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +54 -13
- package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +34 -4
- package/esm2022/src/template/pipeline/ir/src/traits.mjs +17 -2
- package/esm2022/src/template/pipeline/ir/src/variable.mjs +6 -2
- package/esm2022/src/template/pipeline/src/conversion.mjs +3 -2
- package/esm2022/src/template/pipeline/src/emit.mjs +10 -10
- package/esm2022/src/template/pipeline/src/ingest.mjs +229 -54
- package/esm2022/src/template/pipeline/src/instruction.mjs +58 -29
- package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +37 -0
- package/esm2022/src/template/pipeline/src/phases/chaining.mjs +13 -12
- package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +22 -9
- package/esm2022/src/template/pipeline/src/phases/empty_elements.mjs +14 -3
- package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +19 -1
- package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +6 -2
- package/esm2022/src/template/pipeline/src/phases/has_const_trait_collection.mjs +34 -0
- package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +6 -1
- package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +3 -2
- package/esm2022/src/template/pipeline/src/phases/i18n_message_extraction.mjs +9 -8
- package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +31 -5
- package/esm2022/src/template/pipeline/src/phases/naming.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/ng_container.mjs +6 -1
- package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +4 -4
- package/esm2022/src/template/pipeline/src/phases/reify.mjs +36 -21
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_placeholders.mjs +79 -37
- package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +5 -5
- package/esm2022/src/template/pipeline/src/phases/temporary_variables.mjs +53 -38
- package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +10 -1
- package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +9 -1
- package/esm2022/src/version.mjs +1 -1
- package/fesm2022/compiler.mjs +4144 -3494
- package/fesm2022/compiler.mjs.map +1 -1
- package/fesm2022/testing.mjs +1 -1
- package/index.d.ts +111 -115
- package/package.json +2 -2
- package/testing/index.d.ts +1 -1
- package/esm2022/src/template/pipeline/src/phases/generate_i18n_blocks.mjs +0 -38
- package/esm2022/src/template/pipeline/src/phases/no_listeners_on_templates.mjs +0 -36
package/fesm2022/testing.mjs
CHANGED
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v17.0.0-next.
|
|
2
|
+
* @license Angular v17.0.0-next.7
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -297,7 +297,7 @@ declare const enum AttributeMarker {
|
|
|
297
297
|
}
|
|
298
298
|
|
|
299
299
|
declare interface AttributeValueInterpolationToken extends TokenBase {
|
|
300
|
-
type:
|
|
300
|
+
type: LexerTokenType.ATTR_VALUE_INTERPOLATION;
|
|
301
301
|
parts: [startMarker: string, expression: string, endMarker: string] | [
|
|
302
302
|
startMarker: string,
|
|
303
303
|
expression: string
|
|
@@ -305,7 +305,7 @@ declare interface AttributeValueInterpolationToken extends TokenBase {
|
|
|
305
305
|
}
|
|
306
306
|
|
|
307
307
|
declare interface AttributeValueTextToken extends TokenBase {
|
|
308
|
-
type:
|
|
308
|
+
type: LexerTokenType.ATTR_VALUE_TEXT;
|
|
309
309
|
parts: [value: string];
|
|
310
310
|
}
|
|
311
311
|
|
|
@@ -448,15 +448,6 @@ export declare class Block implements BaseNode {
|
|
|
448
448
|
visit(visitor: Visitor, context: any): any;
|
|
449
449
|
}
|
|
450
450
|
|
|
451
|
-
export declare class BlockGroup implements BaseNode {
|
|
452
|
-
blocks: Block[];
|
|
453
|
-
sourceSpan: ParseSourceSpan;
|
|
454
|
-
startSourceSpan: ParseSourceSpan;
|
|
455
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
456
|
-
constructor(blocks: Block[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan?: ParseSourceSpan | null);
|
|
457
|
-
visit(visitor: Visitor, context: any): any;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
451
|
export declare class BlockParameter implements BaseNode {
|
|
461
452
|
expression: string;
|
|
462
453
|
sourceSpan: ParseSourceSpan;
|
|
@@ -538,26 +529,26 @@ export declare interface BoundTarget<DirectiveT extends DirectiveMeta> {
|
|
|
538
529
|
getEntitiesInScope(node: ScopedNode | null): ReadonlySet<TmplAstReference | TmplAstVariable>;
|
|
539
530
|
/**
|
|
540
531
|
* Get a list of all the directives used by the target,
|
|
541
|
-
* including directives from
|
|
532
|
+
* including directives from `@defer` blocks.
|
|
542
533
|
*/
|
|
543
534
|
getUsedDirectives(): DirectiveT[];
|
|
544
535
|
/**
|
|
545
536
|
* Get a list of eagerly used directives from the target.
|
|
546
|
-
* Note: this list *excludes* directives from
|
|
537
|
+
* Note: this list *excludes* directives from `@defer` blocks.
|
|
547
538
|
*/
|
|
548
539
|
getEagerlyUsedDirectives(): DirectiveT[];
|
|
549
540
|
/**
|
|
550
541
|
* Get a list of all the pipes used by the target,
|
|
551
|
-
* including pipes from
|
|
542
|
+
* including pipes from `@defer` blocks.
|
|
552
543
|
*/
|
|
553
544
|
getUsedPipes(): string[];
|
|
554
545
|
/**
|
|
555
546
|
* Get a list of eagerly used pipes from the target.
|
|
556
|
-
* Note: this list *excludes* pipes from
|
|
547
|
+
* Note: this list *excludes* pipes from `@defer` blocks.
|
|
557
548
|
*/
|
|
558
549
|
getEagerlyUsedPipes(): string[];
|
|
559
550
|
/**
|
|
560
|
-
* Get a list of all
|
|
551
|
+
* Get a list of all `@defer` blocks used by the target.
|
|
561
552
|
*/
|
|
562
553
|
getDeferBlocks(): TmplAstDeferredBlock[];
|
|
563
554
|
/**
|
|
@@ -652,16 +643,14 @@ export declare type CompileClassMetadataFn = (metadata: R3ClassMetadata) => outp
|
|
|
652
643
|
|
|
653
644
|
/**
|
|
654
645
|
* Wraps the `setClassMetadata` function with extra logic that dynamically
|
|
655
|
-
* loads dependencies from
|
|
646
|
+
* loads dependencies from `@defer` blocks.
|
|
656
647
|
*
|
|
657
648
|
* Generates a call like this:
|
|
658
649
|
* ```
|
|
659
|
-
* setClassMetadataAsync(type, () =>
|
|
660
|
-
*
|
|
661
|
-
*
|
|
662
|
-
*
|
|
663
|
-
* ];
|
|
664
|
-
* }, (CmpA, CmpB) => {
|
|
650
|
+
* setClassMetadataAsync(type, () => [
|
|
651
|
+
* import('./cmp-a').then(m => m.CmpA);
|
|
652
|
+
* import('./cmp-b').then(m => m.CmpB);
|
|
653
|
+
* ], (CmpA, CmpB) => {
|
|
665
654
|
* setClassMetadata(type, decorators, ctorParameters, propParameters);
|
|
666
655
|
* });
|
|
667
656
|
* ```
|
|
@@ -995,38 +984,6 @@ export declare class DeclareVarStmt extends Statement {
|
|
|
995
984
|
|
|
996
985
|
export declare const DEFAULT_INTERPOLATION_CONFIG: InterpolationConfig;
|
|
997
986
|
|
|
998
|
-
/**
|
|
999
|
-
* Describes a dependency used within a `{#defer}` block.
|
|
1000
|
-
*/
|
|
1001
|
-
export declare interface DeferBlockTemplateDependency {
|
|
1002
|
-
/**
|
|
1003
|
-
* Reference to a dependency.
|
|
1004
|
-
*/
|
|
1005
|
-
type: outputAst.WrappedNodeExpr<unknown>;
|
|
1006
|
-
/**
|
|
1007
|
-
* Dependency class name.
|
|
1008
|
-
*/
|
|
1009
|
-
symbolName: string;
|
|
1010
|
-
/**
|
|
1011
|
-
* Whether this dependency can be defer-loaded.
|
|
1012
|
-
*/
|
|
1013
|
-
isDeferrable: boolean;
|
|
1014
|
-
/**
|
|
1015
|
-
* Import path where this dependency is located.
|
|
1016
|
-
*/
|
|
1017
|
-
importPath: string | null;
|
|
1018
|
-
}
|
|
1019
|
-
|
|
1020
|
-
declare interface DeferredBlockTriggers {
|
|
1021
|
-
when?: TmplAstBoundDeferredTrigger;
|
|
1022
|
-
idle?: TmplAstIdleDeferredTrigger;
|
|
1023
|
-
immediate?: TmplAstImmediateDeferredTrigger;
|
|
1024
|
-
hover?: TmplAstHoverDeferredTrigger;
|
|
1025
|
-
timer?: TmplAstTimerDeferredTrigger;
|
|
1026
|
-
interaction?: TmplAstInteractionDeferredTrigger;
|
|
1027
|
-
viewport?: TmplAstViewportDeferredTrigger;
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
987
|
export declare function devOnlyGuardedExpression(expr: outputAst.Expression): outputAst.Expression;
|
|
1031
988
|
|
|
1032
989
|
/**
|
|
@@ -1180,7 +1137,7 @@ export declare class EmptyExpr extends AST {
|
|
|
1180
1137
|
}
|
|
1181
1138
|
|
|
1182
1139
|
declare interface EncodedEntityToken extends TokenBase {
|
|
1183
|
-
type:
|
|
1140
|
+
type: LexerTokenType.ENCODED_ENTITY;
|
|
1184
1141
|
parts: [decoded: string, encoded: string];
|
|
1185
1142
|
}
|
|
1186
1143
|
|
|
@@ -1422,7 +1379,6 @@ declare namespace html {
|
|
|
1422
1379
|
Attribute,
|
|
1423
1380
|
Element_2 as Element,
|
|
1424
1381
|
Comment_2 as Comment,
|
|
1425
|
-
BlockGroup,
|
|
1426
1382
|
Block,
|
|
1427
1383
|
BlockParameter,
|
|
1428
1384
|
Visitor,
|
|
@@ -1623,7 +1579,7 @@ export declare interface InterpolationPiece {
|
|
|
1623
1579
|
}
|
|
1624
1580
|
|
|
1625
1581
|
declare interface InterpolationToken extends TokenBase {
|
|
1626
|
-
type:
|
|
1582
|
+
type: LexerTokenType.INTERPOLATION;
|
|
1627
1583
|
parts: [startMarker: string, expression: string, endMarker: string] | [
|
|
1628
1584
|
startMarker: string,
|
|
1629
1585
|
expression: string
|
|
@@ -1753,6 +1709,38 @@ export declare interface LexerRange {
|
|
|
1753
1709
|
endPos: number;
|
|
1754
1710
|
}
|
|
1755
1711
|
|
|
1712
|
+
export declare const enum LexerTokenType {
|
|
1713
|
+
TAG_OPEN_START = 0,
|
|
1714
|
+
TAG_OPEN_END = 1,
|
|
1715
|
+
TAG_OPEN_END_VOID = 2,
|
|
1716
|
+
TAG_CLOSE = 3,
|
|
1717
|
+
INCOMPLETE_TAG_OPEN = 4,
|
|
1718
|
+
TEXT = 5,
|
|
1719
|
+
ESCAPABLE_RAW_TEXT = 6,
|
|
1720
|
+
RAW_TEXT = 7,
|
|
1721
|
+
INTERPOLATION = 8,
|
|
1722
|
+
ENCODED_ENTITY = 9,
|
|
1723
|
+
COMMENT_START = 10,
|
|
1724
|
+
COMMENT_END = 11,
|
|
1725
|
+
CDATA_START = 12,
|
|
1726
|
+
CDATA_END = 13,
|
|
1727
|
+
ATTR_NAME = 14,
|
|
1728
|
+
ATTR_QUOTE = 15,
|
|
1729
|
+
ATTR_VALUE_TEXT = 16,
|
|
1730
|
+
ATTR_VALUE_INTERPOLATION = 17,
|
|
1731
|
+
DOC_TYPE = 18,
|
|
1732
|
+
EXPANSION_FORM_START = 19,
|
|
1733
|
+
EXPANSION_CASE_VALUE = 20,
|
|
1734
|
+
EXPANSION_CASE_EXP_START = 21,
|
|
1735
|
+
EXPANSION_CASE_EXP_END = 22,
|
|
1736
|
+
EXPANSION_FORM_END = 23,
|
|
1737
|
+
BLOCK_OPEN_START = 24,
|
|
1738
|
+
BLOCK_OPEN_END = 25,
|
|
1739
|
+
BLOCK_CLOSE = 26,
|
|
1740
|
+
BLOCK_PARAMETER = 27,
|
|
1741
|
+
EOF = 28
|
|
1742
|
+
}
|
|
1743
|
+
|
|
1756
1744
|
declare function literal(value: any, type?: Type | null, sourceSpan?: ParseSourceSpan | null): LiteralExpr;
|
|
1757
1745
|
|
|
1758
1746
|
declare function literalArr(values: Expression[], type?: Type | null, sourceSpan?: ParseSourceSpan | null): LiteralArrayExpr;
|
|
@@ -1990,7 +1978,7 @@ declare enum MissingTranslationStrategy {
|
|
|
1990
1978
|
|
|
1991
1979
|
export declare const NO_ERRORS_SCHEMA: SchemaMetadata;
|
|
1992
1980
|
|
|
1993
|
-
declare type Node_2 = Attribute | Comment_2 | Element_2 | Expansion | ExpansionCase | Text_2 |
|
|
1981
|
+
declare type Node_2 = Attribute | Comment_2 | Element_2 | Expansion | ExpansionCase | Text_2 | Block | BlockParameter;
|
|
1994
1982
|
export { Node_2 as Node }
|
|
1995
1983
|
|
|
1996
1984
|
declare interface Node_3 {
|
|
@@ -2723,11 +2711,8 @@ export declare interface ParseTemplateOptions {
|
|
|
2723
2711
|
* rules on a case by case basis, instead of for their whole project within a configuration file.
|
|
2724
2712
|
*/
|
|
2725
2713
|
collectCommentNodes?: boolean;
|
|
2726
|
-
/**
|
|
2727
|
-
|
|
2728
|
-
* would allow usages of `{#defer}{/defer}` in templates.
|
|
2729
|
-
*/
|
|
2730
|
-
enabledBlockTypes?: Set<string>;
|
|
2714
|
+
/** Whether the @ block syntax is enabled. */
|
|
2715
|
+
enableBlockSyntax?: boolean;
|
|
2731
2716
|
}
|
|
2732
2717
|
|
|
2733
2718
|
export declare class ParseTreeResult {
|
|
@@ -2902,9 +2887,9 @@ export declare interface R3ComponentMetadata<DeclarationT extends R3TemplateDepe
|
|
|
2902
2887
|
*/
|
|
2903
2888
|
deferrableDeclToImportDecl: Map<outputAst.Expression, outputAst.Expression>;
|
|
2904
2889
|
/**
|
|
2905
|
-
* Map of
|
|
2890
|
+
* Map of `@defer` blocks -> their corresponding metadata.
|
|
2906
2891
|
*/
|
|
2907
|
-
deferBlocks: Map<t.DeferredBlock,
|
|
2892
|
+
deferBlocks: Map<t.DeferredBlock, R3DeferBlockMetadata>;
|
|
2908
2893
|
/**
|
|
2909
2894
|
* Specifies how the 'directives' and/or `pipes` array, if generated, need to be emitted.
|
|
2910
2895
|
*/
|
|
@@ -2947,8 +2932,12 @@ export declare interface R3ComponentMetadata<DeclarationT extends R3TemplateDepe
|
|
|
2947
2932
|
interpolation: InterpolationConfig;
|
|
2948
2933
|
/**
|
|
2949
2934
|
* Strategy used for detecting changes in the component.
|
|
2935
|
+
*
|
|
2936
|
+
* In global compilation mode the value is ChangeDetectionStrategy if available as it is
|
|
2937
|
+
* statically resolved during analysis phase. Whereas in local compilation mode the value is the
|
|
2938
|
+
* expression as appears in the decorator.
|
|
2950
2939
|
*/
|
|
2951
|
-
changeDetection
|
|
2940
|
+
changeDetection: ChangeDetectionStrategy | outputAst.Expression | null;
|
|
2952
2941
|
/**
|
|
2953
2942
|
* The imports expression as appears on the component decorate for standalone component. This
|
|
2954
2943
|
* field is currently needed only for local compilation, and so in other compilation modes it may
|
|
@@ -3453,6 +3442,38 @@ export declare interface R3DeclareQueryMetadata {
|
|
|
3453
3442
|
|
|
3454
3443
|
export declare type R3DeclareTemplateDependencyMetadata = R3DeclareDirectiveDependencyMetadata | R3DeclarePipeDependencyMetadata | R3DeclareNgModuleDependencyMetadata;
|
|
3455
3444
|
|
|
3445
|
+
/**
|
|
3446
|
+
* Information necessary to compile a `defer` block.
|
|
3447
|
+
*/
|
|
3448
|
+
export declare interface R3DeferBlockMetadata {
|
|
3449
|
+
/** Dependencies used within the block. */
|
|
3450
|
+
deps: R3DeferBlockTemplateDependency[];
|
|
3451
|
+
/** Mapping between triggers and the DOM nodes they refer to. */
|
|
3452
|
+
triggerElements: Map<t.DeferredTrigger, t.Element | null>;
|
|
3453
|
+
}
|
|
3454
|
+
|
|
3455
|
+
/**
|
|
3456
|
+
* Describes a dependency used within a `@defer` block.
|
|
3457
|
+
*/
|
|
3458
|
+
export declare interface R3DeferBlockTemplateDependency {
|
|
3459
|
+
/**
|
|
3460
|
+
* Reference to a dependency.
|
|
3461
|
+
*/
|
|
3462
|
+
type: outputAst.WrappedNodeExpr<unknown>;
|
|
3463
|
+
/**
|
|
3464
|
+
* Dependency class name.
|
|
3465
|
+
*/
|
|
3466
|
+
symbolName: string;
|
|
3467
|
+
/**
|
|
3468
|
+
* Whether this dependency can be defer-loaded.
|
|
3469
|
+
*/
|
|
3470
|
+
isDeferrable: boolean;
|
|
3471
|
+
/**
|
|
3472
|
+
* Import path where this dependency is located.
|
|
3473
|
+
*/
|
|
3474
|
+
importPath: string | null;
|
|
3475
|
+
}
|
|
3476
|
+
|
|
3456
3477
|
declare interface R3DelegatedFnOrClassMetadata extends R3ConstructorFactoryMetadata {
|
|
3457
3478
|
delegate: outputAst.Expression;
|
|
3458
3479
|
delegateType: R3FactoryDelegateType;
|
|
@@ -4308,7 +4329,6 @@ export declare class RecursiveVisitor implements Visitor {
|
|
|
4308
4329
|
visitComment(ast: Comment_2, context: any): any;
|
|
4309
4330
|
visitExpansion(ast: Expansion, context: any): any;
|
|
4310
4331
|
visitExpansionCase(ast: ExpansionCase, context: any): any;
|
|
4311
|
-
visitBlockGroup(ast: BlockGroup, context: any): any;
|
|
4312
4332
|
visitBlock(block: Block, context: any): any;
|
|
4313
4333
|
visitBlockParameter(ast: BlockParameter, context: any): any;
|
|
4314
4334
|
private visitChildren;
|
|
@@ -4558,7 +4578,7 @@ declare namespace t {
|
|
|
4558
4578
|
TmplAstDeferredBlockPlaceholder as DeferredBlockPlaceholder,
|
|
4559
4579
|
TmplAstDeferredBlockLoading as DeferredBlockLoading,
|
|
4560
4580
|
TmplAstDeferredBlockError as DeferredBlockError,
|
|
4561
|
-
DeferredBlockTriggers,
|
|
4581
|
+
TmplAstDeferredBlockTriggers as DeferredBlockTriggers,
|
|
4562
4582
|
TmplAstDeferredBlock as DeferredBlock,
|
|
4563
4583
|
TmplAstSwitchBlock as SwitchBlock,
|
|
4564
4584
|
TmplAstSwitchBlockCase as SwitchBlockCase,
|
|
@@ -4706,7 +4726,7 @@ declare class Text_3 implements Node_3 {
|
|
|
4706
4726
|
}
|
|
4707
4727
|
|
|
4708
4728
|
declare interface TextToken extends TokenBase {
|
|
4709
|
-
type:
|
|
4729
|
+
type: LexerTokenType.TEXT | LexerTokenType.ESCAPABLE_RAW_TEXT | LexerTokenType.RAW_TEXT;
|
|
4710
4730
|
parts: [text: string];
|
|
4711
4731
|
}
|
|
4712
4732
|
|
|
@@ -4782,11 +4802,11 @@ export declare class TmplAstDeferredBlock implements TmplAstNode {
|
|
|
4782
4802
|
sourceSpan: ParseSourceSpan;
|
|
4783
4803
|
startSourceSpan: ParseSourceSpan;
|
|
4784
4804
|
endSourceSpan: ParseSourceSpan | null;
|
|
4785
|
-
readonly triggers: Readonly<
|
|
4786
|
-
readonly prefetchTriggers: Readonly<
|
|
4805
|
+
readonly triggers: Readonly<TmplAstDeferredBlockTriggers>;
|
|
4806
|
+
readonly prefetchTriggers: Readonly<TmplAstDeferredBlockTriggers>;
|
|
4787
4807
|
private readonly definedTriggers;
|
|
4788
4808
|
private readonly definedPrefetchTriggers;
|
|
4789
|
-
constructor(children: TmplAstNode[], triggers:
|
|
4809
|
+
constructor(children: TmplAstNode[], triggers: TmplAstDeferredBlockTriggers, prefetchTriggers: TmplAstDeferredBlockTriggers, placeholder: TmplAstDeferredBlockPlaceholder | null, loading: TmplAstDeferredBlockLoading | null, error: TmplAstDeferredBlockError | null, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4790
4810
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4791
4811
|
visitAll(visitor: Visitor_3<unknown>): void;
|
|
4792
4812
|
private visitTriggers;
|
|
@@ -4822,6 +4842,16 @@ export declare class TmplAstDeferredBlockPlaceholder implements TmplAstNode {
|
|
|
4822
4842
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4823
4843
|
}
|
|
4824
4844
|
|
|
4845
|
+
export declare interface TmplAstDeferredBlockTriggers {
|
|
4846
|
+
when?: TmplAstBoundDeferredTrigger;
|
|
4847
|
+
idle?: TmplAstIdleDeferredTrigger;
|
|
4848
|
+
immediate?: TmplAstImmediateDeferredTrigger;
|
|
4849
|
+
hover?: TmplAstHoverDeferredTrigger;
|
|
4850
|
+
timer?: TmplAstTimerDeferredTrigger;
|
|
4851
|
+
interaction?: TmplAstInteractionDeferredTrigger;
|
|
4852
|
+
viewport?: TmplAstViewportDeferredTrigger;
|
|
4853
|
+
}
|
|
4854
|
+
|
|
4825
4855
|
export declare abstract class TmplAstDeferredTrigger implements TmplAstNode {
|
|
4826
4856
|
sourceSpan: ParseSourceSpan;
|
|
4827
4857
|
constructor(sourceSpan: ParseSourceSpan);
|
|
@@ -4866,8 +4896,8 @@ export declare class TmplAstForLoopBlockEmpty implements TmplAstNode {
|
|
|
4866
4896
|
}
|
|
4867
4897
|
|
|
4868
4898
|
export declare class TmplAstHoverDeferredTrigger extends TmplAstDeferredTrigger {
|
|
4869
|
-
reference: string;
|
|
4870
|
-
constructor(reference: string, sourceSpan: ParseSourceSpan);
|
|
4899
|
+
reference: string | null;
|
|
4900
|
+
constructor(reference: string | null, sourceSpan: ParseSourceSpan);
|
|
4871
4901
|
}
|
|
4872
4902
|
|
|
4873
4903
|
export declare class TmplAstIcu implements TmplAstNode {
|
|
@@ -4913,8 +4943,8 @@ export declare class TmplAstImmediateDeferredTrigger extends TmplAstDeferredTrig
|
|
|
4913
4943
|
}
|
|
4914
4944
|
|
|
4915
4945
|
export declare class TmplAstInteractionDeferredTrigger extends TmplAstDeferredTrigger {
|
|
4916
|
-
reference: string;
|
|
4917
|
-
constructor(reference: string, sourceSpan: ParseSourceSpan);
|
|
4946
|
+
reference: string | null;
|
|
4947
|
+
constructor(reference: string | null, sourceSpan: ParseSourceSpan);
|
|
4918
4948
|
}
|
|
4919
4949
|
|
|
4920
4950
|
export declare interface TmplAstNode {
|
|
@@ -5064,7 +5094,7 @@ export declare class Token {
|
|
|
5064
5094
|
}
|
|
5065
5095
|
|
|
5066
5096
|
declare interface TokenBase {
|
|
5067
|
-
type:
|
|
5097
|
+
type: LexerTokenType;
|
|
5068
5098
|
parts: string[];
|
|
5069
5099
|
sourceSpan: ParseSourceSpan;
|
|
5070
5100
|
}
|
|
@@ -5126,7 +5156,8 @@ declare interface TokenizeOptions {
|
|
|
5126
5156
|
*/
|
|
5127
5157
|
preserveLineEndings?: boolean;
|
|
5128
5158
|
/**
|
|
5129
|
-
* Whether
|
|
5159
|
+
* Whether to tokenize @ block syntax. Otherwise considered text,
|
|
5160
|
+
* or ICU tokens if `tokenizeExpansionForms` is enabled.
|
|
5130
5161
|
*/
|
|
5131
5162
|
tokenizeBlocks?: boolean;
|
|
5132
5163
|
}
|
|
@@ -5143,40 +5174,6 @@ export declare enum TokenType {
|
|
|
5143
5174
|
Error = 7
|
|
5144
5175
|
}
|
|
5145
5176
|
|
|
5146
|
-
declare const enum TokenType_2 {
|
|
5147
|
-
TAG_OPEN_START = 0,
|
|
5148
|
-
TAG_OPEN_END = 1,
|
|
5149
|
-
TAG_OPEN_END_VOID = 2,
|
|
5150
|
-
TAG_CLOSE = 3,
|
|
5151
|
-
INCOMPLETE_TAG_OPEN = 4,
|
|
5152
|
-
TEXT = 5,
|
|
5153
|
-
ESCAPABLE_RAW_TEXT = 6,
|
|
5154
|
-
RAW_TEXT = 7,
|
|
5155
|
-
INTERPOLATION = 8,
|
|
5156
|
-
ENCODED_ENTITY = 9,
|
|
5157
|
-
COMMENT_START = 10,
|
|
5158
|
-
COMMENT_END = 11,
|
|
5159
|
-
CDATA_START = 12,
|
|
5160
|
-
CDATA_END = 13,
|
|
5161
|
-
ATTR_NAME = 14,
|
|
5162
|
-
ATTR_QUOTE = 15,
|
|
5163
|
-
ATTR_VALUE_TEXT = 16,
|
|
5164
|
-
ATTR_VALUE_INTERPOLATION = 17,
|
|
5165
|
-
DOC_TYPE = 18,
|
|
5166
|
-
EXPANSION_FORM_START = 19,
|
|
5167
|
-
EXPANSION_CASE_VALUE = 20,
|
|
5168
|
-
EXPANSION_CASE_EXP_START = 21,
|
|
5169
|
-
EXPANSION_CASE_EXP_END = 22,
|
|
5170
|
-
EXPANSION_FORM_END = 23,
|
|
5171
|
-
EOF = 24,
|
|
5172
|
-
BLOCK_GROUP_OPEN_START = 25,
|
|
5173
|
-
BLOCK_GROUP_OPEN_END = 26,
|
|
5174
|
-
BLOCK_GROUP_CLOSE = 27,
|
|
5175
|
-
BLOCK_PARAMETER = 28,
|
|
5176
|
-
BLOCK_OPEN_START = 29,
|
|
5177
|
-
BLOCK_OPEN_END = 30
|
|
5178
|
-
}
|
|
5179
|
-
|
|
5180
5177
|
export declare class TransplantedType<T> extends Type {
|
|
5181
5178
|
readonly type: T;
|
|
5182
5179
|
constructor(type: T, modifiers?: TypeModifier);
|
|
@@ -5327,7 +5324,6 @@ export declare interface Visitor {
|
|
|
5327
5324
|
visitComment(comment: Comment_2, context: any): any;
|
|
5328
5325
|
visitExpansion(expansion: Expansion, context: any): any;
|
|
5329
5326
|
visitExpansionCase(expansionCase: ExpansionCase, context: any): any;
|
|
5330
|
-
visitBlockGroup(group: BlockGroup, context: any): any;
|
|
5331
5327
|
visitBlock(block: Block, context: any): any;
|
|
5332
5328
|
visitBlockParameter(parameter: BlockParameter, context: any): any;
|
|
5333
5329
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/compiler",
|
|
3
|
-
"version": "17.0.0-next.
|
|
3
|
+
"version": "17.0.0-next.7",
|
|
4
4
|
"description": "Angular - the compiler library",
|
|
5
5
|
"author": "angular",
|
|
6
6
|
"license": "MIT",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"tslib": "^2.3.0"
|
|
12
12
|
},
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"@angular/core": "17.0.0-next.
|
|
14
|
+
"@angular/core": "17.0.0-next.7"
|
|
15
15
|
},
|
|
16
16
|
"peerDependenciesMeta": {
|
|
17
17
|
"@angular/core": {
|
package/testing/index.d.ts
CHANGED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import * as i18n from '../../../../i18n/i18n_ast';
|
|
9
|
-
import * as ir from '../../ir';
|
|
10
|
-
import { getElementsByXrefId } from '../util/elements';
|
|
11
|
-
/**
|
|
12
|
-
* Generate i18n start and end isntructions to mark i18n blocks.
|
|
13
|
-
*/
|
|
14
|
-
export function phaseGenerateI18nBlocks(job) {
|
|
15
|
-
for (const unit of job.units) {
|
|
16
|
-
const elements = getElementsByXrefId(unit);
|
|
17
|
-
for (const op of unit.create) {
|
|
18
|
-
switch (op.kind) {
|
|
19
|
-
case ir.OpKind.ElementEnd:
|
|
20
|
-
const start = elements.get(op.xref);
|
|
21
|
-
if (start.i18n instanceof i18n.Message) {
|
|
22
|
-
const id = job.allocateXrefId();
|
|
23
|
-
ir.OpList.insertAfter(ir.createI18nStartOp(id, start.i18n), start);
|
|
24
|
-
ir.OpList.insertBefore(ir.createI18nEndOp(id), op);
|
|
25
|
-
}
|
|
26
|
-
break;
|
|
27
|
-
case ir.OpKind.Template:
|
|
28
|
-
if (op.i18n !== undefined) {
|
|
29
|
-
const id = job.allocateXrefId();
|
|
30
|
-
ir.OpList.insertBefore(ir.createI18nStartOp(id, op.i18n), op);
|
|
31
|
-
ir.OpList.insertAfter(ir.createI18nEndOp(id), op);
|
|
32
|
-
}
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVfaTE4bl9ibG9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvdGVtcGxhdGUvcGlwZWxpbmUvc3JjL3BoYXNlcy9nZW5lcmF0ZV9pMThuX2Jsb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9CLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXJEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEdBQW1CO0lBQ3pELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtRQUM1QixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDNUIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO2dCQUNmLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVO29CQUN2QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUUsQ0FBQztvQkFDckMsSUFBSSxLQUFLLENBQUMsSUFBSSxZQUFZLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ3RDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDaEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQWMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ2hGLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ2pFO29CQUNELE1BQU07Z0JBQ1IsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7b0JBQ3JCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7d0JBQ3pCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDaEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQWMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQzNFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ2hFO29CQUNELE1BQU07YUFDVDtTQUNGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIGkxOG4gZnJvbSAnLi4vLi4vLi4vLi4vaTE4bi9pMThuX2FzdCc7XG5pbXBvcnQgKiBhcyBpciBmcm9tICcuLi8uLi9pcic7XG5pbXBvcnQge0NvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5pbXBvcnQge2dldEVsZW1lbnRzQnlYcmVmSWR9IGZyb20gJy4uL3V0aWwvZWxlbWVudHMnO1xuXG4vKipcbiAqIEdlbmVyYXRlIGkxOG4gc3RhcnQgYW5kIGVuZCBpc250cnVjdGlvbnMgdG8gbWFyayBpMThuIGJsb2Nrcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBoYXNlR2VuZXJhdGVJMThuQmxvY2tzKGpvYjogQ29tcGlsYXRpb25Kb2IpOiB2b2lkIHtcbiAgZm9yIChjb25zdCB1bml0IG9mIGpvYi51bml0cykge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0RWxlbWVudHNCeVhyZWZJZCh1bml0KTtcbiAgICBmb3IgKGNvbnN0IG9wIG9mIHVuaXQuY3JlYXRlKSB7XG4gICAgICBzd2l0Y2ggKG9wLmtpbmQpIHtcbiAgICAgICAgY2FzZSBpci5PcEtpbmQuRWxlbWVudEVuZDpcbiAgICAgICAgICBjb25zdCBzdGFydCA9IGVsZW1lbnRzLmdldChvcC54cmVmKSE7XG4gICAgICAgICAgaWYgKHN0YXJ0LmkxOG4gaW5zdGFuY2VvZiBpMThuLk1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gam9iLmFsbG9jYXRlWHJlZklkKCk7XG4gICAgICAgICAgICBpci5PcExpc3QuaW5zZXJ0QWZ0ZXI8aXIuQ3JlYXRlT3A+KGlyLmNyZWF0ZUkxOG5TdGFydE9wKGlkLCBzdGFydC5pMThuKSwgc3RhcnQpO1xuICAgICAgICAgICAgaXIuT3BMaXN0Lmluc2VydEJlZm9yZTxpci5DcmVhdGVPcD4oaXIuY3JlYXRlSTE4bkVuZE9wKGlkKSwgb3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBpci5PcEtpbmQuVGVtcGxhdGU6XG4gICAgICAgICAgaWYgKG9wLmkxOG4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBqb2IuYWxsb2NhdGVYcmVmSWQoKTtcbiAgICAgICAgICAgIGlyLk9wTGlzdC5pbnNlcnRCZWZvcmU8aXIuQ3JlYXRlT3A+KGlyLmNyZWF0ZUkxOG5TdGFydE9wKGlkLCBvcC5pMThuKSwgb3ApO1xuICAgICAgICAgICAgaXIuT3BMaXN0Lmluc2VydEFmdGVyPGlyLkNyZWF0ZU9wPihpci5jcmVhdGVJMThuRW5kT3AoaWQpLCBvcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import * as ir from '../../ir';
|
|
9
|
-
/**
|
|
10
|
-
* Transforms special-case bindings with 'style' or 'class' in their names. Must run before the
|
|
11
|
-
* main binding specialization pass.
|
|
12
|
-
*/
|
|
13
|
-
export function phaseNoListenersOnTemplates(job) {
|
|
14
|
-
for (const unit of job.units) {
|
|
15
|
-
let inTemplate = false;
|
|
16
|
-
for (const op of unit.create) {
|
|
17
|
-
switch (op.kind) {
|
|
18
|
-
case ir.OpKind.Template:
|
|
19
|
-
inTemplate = true;
|
|
20
|
-
break;
|
|
21
|
-
case ir.OpKind.ElementStart:
|
|
22
|
-
case ir.OpKind.Element:
|
|
23
|
-
case ir.OpKind.ContainerStart:
|
|
24
|
-
case ir.OpKind.Container:
|
|
25
|
-
inTemplate = false;
|
|
26
|
-
break;
|
|
27
|
-
case ir.OpKind.Listener:
|
|
28
|
-
if (inTemplate) {
|
|
29
|
-
ir.OpList.remove(op);
|
|
30
|
-
}
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9fbGlzdGVuZXJzX29uX3RlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy90ZW1wbGF0ZS9waXBlbGluZS9zcmMvcGhhc2VzL25vX2xpc3RlbmVyc19vbl90ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBR0gsT0FBTyxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0I7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLEdBQW1CO0lBQzdELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtRQUM1QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzVCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRTtnQkFDZixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUTtvQkFDckIsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDbEIsTUFBTTtnQkFDUixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO2dCQUM1QixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUN2QixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO2dCQUM5QixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUztvQkFDdEIsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDbkIsTUFBTTtnQkFDUixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUTtvQkFDckIsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWMsRUFBRSxDQUFDLENBQUM7cUJBQ25DO29CQUNELE1BQU07YUFDVDtTQUNGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vb3V0cHV0L291dHB1dF9hc3QnO1xuaW1wb3J0ICogYXMgaXIgZnJvbSAnLi4vLi4vaXInO1xuaW1wb3J0IHR5cGUge0NvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBzcGVjaWFsLWNhc2UgYmluZGluZ3Mgd2l0aCAnc3R5bGUnIG9yICdjbGFzcycgaW4gdGhlaXIgbmFtZXMuIE11c3QgcnVuIGJlZm9yZSB0aGVcbiAqIG1haW4gYmluZGluZyBzcGVjaWFsaXphdGlvbiBwYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGhhc2VOb0xpc3RlbmVyc09uVGVtcGxhdGVzKGpvYjogQ29tcGlsYXRpb25Kb2IpOiB2b2lkIHtcbiAgZm9yIChjb25zdCB1bml0IG9mIGpvYi51bml0cykge1xuICAgIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcCBvZiB1bml0LmNyZWF0ZSkge1xuICAgICAgc3dpdGNoIChvcC5raW5kKSB7XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLlRlbXBsYXRlOlxuICAgICAgICAgIGluVGVtcGxhdGUgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGlyLk9wS2luZC5FbGVtZW50U3RhcnQ6XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLkVsZW1lbnQ6XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLkNvbnRhaW5lclN0YXJ0OlxuICAgICAgICBjYXNlIGlyLk9wS2luZC5Db250YWluZXI6XG4gICAgICAgICAgaW5UZW1wbGF0ZSA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGlyLk9wS2luZC5MaXN0ZW5lcjpcbiAgICAgICAgICBpZiAoaW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgaXIuT3BMaXN0LnJlbW92ZTxpci5DcmVhdGVPcD4ob3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|