@angular/compiler 17.1.0-next.0 → 17.1.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/src/compiler.mjs +3 -3
- package/esm2022/src/expression_parser/parser.mjs +2 -2
- package/esm2022/src/i18n/digest.mjs +4 -1
- package/esm2022/src/i18n/extractor_merger.mjs +4 -2
- package/esm2022/src/i18n/i18n_ast.mjs +27 -1
- package/esm2022/src/i18n/i18n_html_parser.mjs +2 -2
- package/esm2022/src/i18n/i18n_parser.mjs +23 -6
- package/esm2022/src/i18n/message_bundle.mjs +7 -1
- package/esm2022/src/i18n/serializers/placeholder.mjs +29 -1
- package/esm2022/src/i18n/serializers/serializer.mjs +6 -1
- package/esm2022/src/i18n/serializers/xliff.mjs +7 -1
- package/esm2022/src/i18n/serializers/xliff2.mjs +19 -1
- package/esm2022/src/i18n/serializers/xmb.mjs +12 -1
- package/esm2022/src/i18n/translation_bundle.mjs +6 -1
- package/esm2022/src/jit_compiler_facade.mjs +2 -2
- package/esm2022/src/ml_parser/ast.mjs +4 -4
- package/esm2022/src/ml_parser/defaults.mjs +24 -0
- package/esm2022/src/ml_parser/lexer.mjs +2 -2
- package/esm2022/src/render3/partial/class_metadata.mjs +1 -1
- package/esm2022/src/render3/partial/component.mjs +2 -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 +17 -9
- package/esm2022/src/render3/r3_control_flow.mjs +7 -7
- package/esm2022/src/render3/r3_deferred_blocks.mjs +5 -5
- package/esm2022/src/render3/view/api.mjs +1 -1
- package/esm2022/src/render3/view/compiler.mjs +6 -4
- package/esm2022/src/render3/view/i18n/context.mjs +13 -1
- package/esm2022/src/render3/view/i18n/get_msg_utils.mjs +4 -1
- package/esm2022/src/render3/view/i18n/icu_serializer.mjs +4 -1
- package/esm2022/src/render3/view/i18n/localize_utils.mjs +6 -1
- package/esm2022/src/render3/view/i18n/meta.mjs +5 -4
- package/esm2022/src/render3/view/t2_api.mjs +1 -1
- package/esm2022/src/render3/view/t2_binder.mjs +6 -7
- package/esm2022/src/render3/view/template.mjs +79 -52
- package/esm2022/src/render3/view/util.mjs +24 -2
- package/esm2022/src/template/pipeline/ir/src/enums.mjs +9 -1
- package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +3 -2
- package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +2 -1
- package/esm2022/src/template/pipeline/src/emit.mjs +1 -3
- package/esm2022/src/template/pipeline/src/instruction.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +2 -7
- package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +20 -6
- package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +94 -23
- package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +3 -2
- package/esm2022/src/template/pipeline/src/phases/reify.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +70 -57
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +4 -4
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_icu_placeholders.mjs +16 -25
- package/esm2022/src/template_parser/binding_parser.mjs +1 -1
- package/esm2022/src/version.mjs +1 -1
- package/fesm2022/compiler.mjs +554 -303
- package/fesm2022/compiler.mjs.map +1 -1
- package/index.d.ts +56 -12
- package/package.json +2 -2
- package/esm2022/src/ml_parser/interpolation_config.mjs +0 -23
- package/esm2022/src/template/pipeline/src/phases/merge_i18n_contexts.mjs +0 -59
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v17.1.0-next.
|
|
2
|
+
* @license Angular v17.1.0-next.2
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -437,15 +437,14 @@ export declare const enum BindingType {
|
|
|
437
437
|
Animation = 4
|
|
438
438
|
}
|
|
439
439
|
|
|
440
|
-
export declare class Block
|
|
440
|
+
export declare class Block extends NodeWithI18n {
|
|
441
441
|
name: string;
|
|
442
442
|
parameters: BlockParameter[];
|
|
443
443
|
children: Node_2[];
|
|
444
|
-
sourceSpan: ParseSourceSpan;
|
|
445
444
|
nameSpan: ParseSourceSpan;
|
|
446
445
|
startSourceSpan: ParseSourceSpan;
|
|
447
446
|
endSourceSpan: ParseSourceSpan | null;
|
|
448
|
-
constructor(name: string, parameters: BlockParameter[], children: Node_2[], sourceSpan: ParseSourceSpan, nameSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan?: ParseSourceSpan | null);
|
|
447
|
+
constructor(name: string, parameters: BlockParameter[], children: Node_2[], sourceSpan: ParseSourceSpan, nameSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan?: ParseSourceSpan | null, i18n?: I18nMeta_2);
|
|
449
448
|
visit(visitor: Visitor, context: any): any;
|
|
450
449
|
}
|
|
451
450
|
|
|
@@ -464,6 +463,19 @@ export declare class BlockParameter implements BaseNode {
|
|
|
464
463
|
visit(visitor: Visitor, context: any): any;
|
|
465
464
|
}
|
|
466
465
|
|
|
466
|
+
declare class BlockPlaceholder implements Node_3 {
|
|
467
|
+
name: string;
|
|
468
|
+
parameters: string[];
|
|
469
|
+
startName: string;
|
|
470
|
+
closeName: string;
|
|
471
|
+
children: Node_3[];
|
|
472
|
+
sourceSpan: ParseSourceSpan;
|
|
473
|
+
startSourceSpan: ParseSourceSpan | null;
|
|
474
|
+
endSourceSpan: ParseSourceSpan | null;
|
|
475
|
+
constructor(name: string, parameters: string[], startName: string, closeName: string, children: Node_3[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan | null, endSourceSpan: ParseSourceSpan | null);
|
|
476
|
+
visit(visitor: Visitor_2, context?: any): any;
|
|
477
|
+
}
|
|
478
|
+
|
|
467
479
|
declare const BOOL_TYPE: BuiltinType;
|
|
468
480
|
|
|
469
481
|
export declare class BoundElementProperty {
|
|
@@ -614,6 +626,7 @@ declare class CloneVisitor implements Visitor_2 {
|
|
|
614
626
|
visitTagPlaceholder(ph: TagPlaceholder, context?: any): TagPlaceholder;
|
|
615
627
|
visitPlaceholder(ph: Placeholder, context?: any): Placeholder;
|
|
616
628
|
visitIcuPlaceholder(ph: IcuPlaceholder, context?: any): IcuPlaceholder;
|
|
629
|
+
visitBlockPlaceholder(ph: BlockPlaceholder, context?: any): BlockPlaceholder;
|
|
617
630
|
}
|
|
618
631
|
|
|
619
632
|
export declare class CommaExpr extends Expression {
|
|
@@ -847,6 +860,11 @@ declare namespace core {
|
|
|
847
860
|
}
|
|
848
861
|
export { core }
|
|
849
862
|
|
|
863
|
+
/**
|
|
864
|
+
* Creates a `CssSelector` from an AST node.
|
|
865
|
+
*/
|
|
866
|
+
export declare function createCssSelectorFromNode(node: t.Element | t.Template): CssSelector;
|
|
867
|
+
|
|
850
868
|
export declare function createInjectableType(meta: R3InjectableMetadata): outputAst.ExpressionType;
|
|
851
869
|
|
|
852
870
|
export declare function createMayBeForwardRefExpression<T extends outputAst.Expression>(expression: T, forwardRef: ForwardRefHandling): MaybeForwardRefExpression<T>;
|
|
@@ -1032,7 +1050,18 @@ export declare interface DirectiveMeta {
|
|
|
1032
1050
|
* Null otherwise
|
|
1033
1051
|
*/
|
|
1034
1052
|
exportAs: string[] | null;
|
|
1053
|
+
/**
|
|
1054
|
+
* Whether the directive is a structural directive (e.g. `<div *ngIf></div>`).
|
|
1055
|
+
*/
|
|
1035
1056
|
isStructural: boolean;
|
|
1057
|
+
/**
|
|
1058
|
+
* If the directive is a component, includes the selectors of its `ng-content` elements.
|
|
1059
|
+
*/
|
|
1060
|
+
ngContentSelectors: string[] | null;
|
|
1061
|
+
/**
|
|
1062
|
+
* Whether the template of the component preserves whitespaces.
|
|
1063
|
+
*/
|
|
1064
|
+
preserveWhitespaces: boolean;
|
|
1036
1065
|
/**
|
|
1037
1066
|
* The name of animations that the user defines in the component.
|
|
1038
1067
|
* Only includes the animation names.
|
|
@@ -1442,6 +1471,7 @@ declare namespace i18n {
|
|
|
1442
1471
|
TagPlaceholder,
|
|
1443
1472
|
Placeholder,
|
|
1444
1473
|
IcuPlaceholder,
|
|
1474
|
+
BlockPlaceholder,
|
|
1445
1475
|
I18nMeta_2 as I18nMeta,
|
|
1446
1476
|
Visitor_2 as Visitor,
|
|
1447
1477
|
CloneVisitor,
|
|
@@ -2925,6 +2955,10 @@ export declare interface R3ComponentMetadata<DeclarationT extends R3TemplateDepe
|
|
|
2925
2955
|
* element without selector is present.
|
|
2926
2956
|
*/
|
|
2927
2957
|
ngContentSelectors: string[];
|
|
2958
|
+
/**
|
|
2959
|
+
* Whether the template preserves whitespaces from the user's code.
|
|
2960
|
+
*/
|
|
2961
|
+
preserveWhitespaces?: boolean;
|
|
2928
2962
|
};
|
|
2929
2963
|
declarations: DeclarationT[];
|
|
2930
2964
|
/**
|
|
@@ -4301,6 +4335,7 @@ declare class RecurseVisitor implements Visitor_2 {
|
|
|
4301
4335
|
visitTagPlaceholder(ph: TagPlaceholder, context?: any): any;
|
|
4302
4336
|
visitPlaceholder(ph: Placeholder, context?: any): any;
|
|
4303
4337
|
visitIcuPlaceholder(ph: IcuPlaceholder, context?: any): any;
|
|
4338
|
+
visitBlockPlaceholder(ph: BlockPlaceholder, context?: any): any;
|
|
4304
4339
|
}
|
|
4305
4340
|
|
|
4306
4341
|
export declare class RecursiveAstVisitor implements AstVisitor {
|
|
@@ -4851,11 +4886,12 @@ export declare class TmplAstDeferredBlock extends BlockNode implements TmplAstNo
|
|
|
4851
4886
|
loading: TmplAstDeferredBlockLoading | null;
|
|
4852
4887
|
error: TmplAstDeferredBlockError | null;
|
|
4853
4888
|
mainBlockSpan: ParseSourceSpan;
|
|
4889
|
+
i18n?: I18nMeta_2 | undefined;
|
|
4854
4890
|
readonly triggers: Readonly<TmplAstDeferredBlockTriggers>;
|
|
4855
4891
|
readonly prefetchTriggers: Readonly<TmplAstDeferredBlockTriggers>;
|
|
4856
4892
|
private readonly definedTriggers;
|
|
4857
4893
|
private readonly definedPrefetchTriggers;
|
|
4858
|
-
constructor(children: TmplAstNode[], triggers: TmplAstDeferredBlockTriggers, prefetchTriggers: TmplAstDeferredBlockTriggers, placeholder: TmplAstDeferredBlockPlaceholder | null, loading: TmplAstDeferredBlockLoading | null, error: TmplAstDeferredBlockError | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, mainBlockSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4894
|
+
constructor(children: TmplAstNode[], triggers: TmplAstDeferredBlockTriggers, prefetchTriggers: TmplAstDeferredBlockTriggers, placeholder: TmplAstDeferredBlockPlaceholder | null, loading: TmplAstDeferredBlockLoading | null, error: TmplAstDeferredBlockError | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, mainBlockSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, i18n?: I18nMeta_2 | undefined);
|
|
4859
4895
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4860
4896
|
visitAll(visitor: Visitor_3<unknown>): void;
|
|
4861
4897
|
private visitTriggers;
|
|
@@ -4863,7 +4899,8 @@ export declare class TmplAstDeferredBlock extends BlockNode implements TmplAstNo
|
|
|
4863
4899
|
|
|
4864
4900
|
export declare class TmplAstDeferredBlockError extends BlockNode implements TmplAstNode {
|
|
4865
4901
|
children: TmplAstNode[];
|
|
4866
|
-
|
|
4902
|
+
i18n?: I18nMeta_2 | undefined;
|
|
4903
|
+
constructor(children: TmplAstNode[], nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, i18n?: I18nMeta_2 | undefined);
|
|
4867
4904
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4868
4905
|
}
|
|
4869
4906
|
|
|
@@ -4871,14 +4908,16 @@ export declare class TmplAstDeferredBlockLoading extends BlockNode implements Tm
|
|
|
4871
4908
|
children: TmplAstNode[];
|
|
4872
4909
|
afterTime: number | null;
|
|
4873
4910
|
minimumTime: number | null;
|
|
4874
|
-
|
|
4911
|
+
i18n?: I18nMeta_2 | undefined;
|
|
4912
|
+
constructor(children: TmplAstNode[], afterTime: number | null, minimumTime: number | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, i18n?: I18nMeta_2 | undefined);
|
|
4875
4913
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4876
4914
|
}
|
|
4877
4915
|
|
|
4878
4916
|
export declare class TmplAstDeferredBlockPlaceholder extends BlockNode implements TmplAstNode {
|
|
4879
4917
|
children: TmplAstNode[];
|
|
4880
4918
|
minimumTime: number | null;
|
|
4881
|
-
|
|
4919
|
+
i18n?: I18nMeta_2 | undefined;
|
|
4920
|
+
constructor(children: TmplAstNode[], minimumTime: number | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, i18n?: I18nMeta_2 | undefined);
|
|
4882
4921
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4883
4922
|
}
|
|
4884
4923
|
|
|
@@ -4925,13 +4964,15 @@ export declare class TmplAstForLoopBlock extends BlockNode implements TmplAstNod
|
|
|
4925
4964
|
children: TmplAstNode[];
|
|
4926
4965
|
empty: TmplAstForLoopBlockEmpty | null;
|
|
4927
4966
|
mainBlockSpan: ParseSourceSpan;
|
|
4928
|
-
|
|
4967
|
+
i18n?: I18nMeta_2 | undefined;
|
|
4968
|
+
constructor(item: TmplAstVariable, expression: ASTWithSource, trackBy: ASTWithSource, trackKeywordSpan: ParseSourceSpan, contextVariables: ForLoopBlockContext, children: TmplAstNode[], empty: TmplAstForLoopBlockEmpty | null, sourceSpan: ParseSourceSpan, mainBlockSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan, i18n?: I18nMeta_2 | undefined);
|
|
4929
4969
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4930
4970
|
}
|
|
4931
4971
|
|
|
4932
4972
|
export declare class TmplAstForLoopBlockEmpty extends BlockNode implements TmplAstNode {
|
|
4933
4973
|
children: TmplAstNode[];
|
|
4934
|
-
|
|
4974
|
+
i18n?: I18nMeta_2 | undefined;
|
|
4975
|
+
constructor(children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan, i18n?: I18nMeta_2 | undefined);
|
|
4935
4976
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4936
4977
|
}
|
|
4937
4978
|
|
|
@@ -4970,7 +5011,8 @@ export declare class TmplAstIfBlockBranch extends BlockNode implements TmplAstNo
|
|
|
4970
5011
|
expression: AST | null;
|
|
4971
5012
|
children: TmplAstNode[];
|
|
4972
5013
|
expressionAlias: TmplAstVariable | null;
|
|
4973
|
-
|
|
5014
|
+
i18n?: I18nMeta_2 | undefined;
|
|
5015
|
+
constructor(expression: AST | null, children: TmplAstNode[], expressionAlias: TmplAstVariable | null, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan, i18n?: I18nMeta_2 | undefined);
|
|
4974
5016
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4975
5017
|
}
|
|
4976
5018
|
|
|
@@ -5043,7 +5085,8 @@ export declare class TmplAstSwitchBlock extends BlockNode implements TmplAstNode
|
|
|
5043
5085
|
export declare class TmplAstSwitchBlockCase extends BlockNode implements TmplAstNode {
|
|
5044
5086
|
expression: AST | null;
|
|
5045
5087
|
children: TmplAstNode[];
|
|
5046
|
-
|
|
5088
|
+
i18n?: I18nMeta_2 | undefined;
|
|
5089
|
+
constructor(expression: AST | null, children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan, i18n?: I18nMeta_2 | undefined);
|
|
5047
5090
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
5048
5091
|
}
|
|
5049
5092
|
|
|
@@ -5384,6 +5427,7 @@ declare interface Visitor_2 {
|
|
|
5384
5427
|
visitTagPlaceholder(ph: TagPlaceholder, context?: any): any;
|
|
5385
5428
|
visitPlaceholder(ph: Placeholder, context?: any): any;
|
|
5386
5429
|
visitIcuPlaceholder(ph: IcuPlaceholder, context?: any): any;
|
|
5430
|
+
visitBlockPlaceholder(ph: BlockPlaceholder, context?: any): any;
|
|
5387
5431
|
}
|
|
5388
5432
|
|
|
5389
5433
|
declare interface Visitor_3<Result = any> {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/compiler",
|
|
3
|
-
"version": "17.1.0-next.
|
|
3
|
+
"version": "17.1.0-next.2",
|
|
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.1.0-next.
|
|
14
|
+
"@angular/core": "17.1.0-next.2"
|
|
15
15
|
},
|
|
16
16
|
"peerDependenciesMeta": {
|
|
17
17
|
"@angular/core": {
|
|
@@ -1,23 +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 { assertInterpolationSymbols } from '../assertions';
|
|
9
|
-
export class InterpolationConfig {
|
|
10
|
-
static fromArray(markers) {
|
|
11
|
-
if (!markers) {
|
|
12
|
-
return DEFAULT_INTERPOLATION_CONFIG;
|
|
13
|
-
}
|
|
14
|
-
assertInterpolationSymbols('interpolation', markers);
|
|
15
|
-
return new InterpolationConfig(markers[0], markers[1]);
|
|
16
|
-
}
|
|
17
|
-
constructor(start, end) {
|
|
18
|
-
this.start = start;
|
|
19
|
-
this.end = end;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export const DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}');
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJwb2xhdGlvbl9jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvbWxfcGFyc2VyL2ludGVycG9sYXRpb25fY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBOEI7UUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyw0QkFBNEIsQ0FBQztRQUN0QyxDQUFDO1FBRUQsMEJBQTBCLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELFlBQW1CLEtBQWEsRUFBUyxHQUFXO1FBQWpDLFVBQUssR0FBTCxLQUFLLENBQVE7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFRO0lBQUcsQ0FBQztDQUN6RDtBQUVELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUNyQyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2Fzc2VydEludGVycG9sYXRpb25TeW1ib2xzfSBmcm9tICcuLi9hc3NlcnRpb25zJztcblxuZXhwb3J0IGNsYXNzIEludGVycG9sYXRpb25Db25maWcge1xuICBzdGF0aWMgZnJvbUFycmF5KG1hcmtlcnM6IFtzdHJpbmcsIHN0cmluZ118bnVsbCk6IEludGVycG9sYXRpb25Db25maWcge1xuICAgIGlmICghbWFya2Vycykge1xuICAgICAgcmV0dXJuIERFRkFVTFRfSU5URVJQT0xBVElPTl9DT05GSUc7XG4gICAgfVxuXG4gICAgYXNzZXJ0SW50ZXJwb2xhdGlvblN5bWJvbHMoJ2ludGVycG9sYXRpb24nLCBtYXJrZXJzKTtcbiAgICByZXR1cm4gbmV3IEludGVycG9sYXRpb25Db25maWcobWFya2Vyc1swXSwgbWFya2Vyc1sxXSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhcnQ6IHN0cmluZywgcHVibGljIGVuZDogc3RyaW5nKSB7fVxufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlRFUlBPTEFUSU9OX0NPTkZJRzogSW50ZXJwb2xhdGlvbkNvbmZpZyA9XG4gICAgbmV3IEludGVycG9sYXRpb25Db25maWcoJ3t7JywgJ319Jyk7XG4iXX0=
|
|
@@ -1,59 +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
|
-
* Merge i18n contexts for child i18n blocks into their ancestor root contexts.
|
|
11
|
-
*/
|
|
12
|
-
export function mergeI18nContexts(job) {
|
|
13
|
-
// Record all of the i18n and extracted message ops for use later.
|
|
14
|
-
const i18nOps = new Map();
|
|
15
|
-
const i18nContexts = new Map();
|
|
16
|
-
for (const unit of job.units) {
|
|
17
|
-
for (const op of unit.create) {
|
|
18
|
-
switch (op.kind) {
|
|
19
|
-
case ir.OpKind.I18nStart:
|
|
20
|
-
if (!op.context) {
|
|
21
|
-
throw Error('I18n op should have its context set.');
|
|
22
|
-
}
|
|
23
|
-
i18nOps.set(op.xref, op);
|
|
24
|
-
break;
|
|
25
|
-
case ir.OpKind.I18nContext:
|
|
26
|
-
i18nContexts.set(op.xref, op);
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// For each non-root i18n op, merge its context into the root i18n op's context.
|
|
32
|
-
for (const childI18nOp of i18nOps.values()) {
|
|
33
|
-
if (childI18nOp.xref !== childI18nOp.root) {
|
|
34
|
-
const childContext = i18nContexts.get(childI18nOp.context);
|
|
35
|
-
const rootI18nOp = i18nOps.get(childI18nOp.root);
|
|
36
|
-
const rootContext = i18nContexts.get(rootI18nOp.context);
|
|
37
|
-
mergeParams(rootContext.params, childContext.params);
|
|
38
|
-
mergeParams(rootContext.postprocessingParams, childContext.postprocessingParams);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Merges the params in the `from` map to into the `to` map.
|
|
44
|
-
*/
|
|
45
|
-
function mergeParams(to, from) {
|
|
46
|
-
for (const [placeholder, fromValues] of from) {
|
|
47
|
-
const toValues = to.get(placeholder) || [];
|
|
48
|
-
// TODO(mmalerba): Child element close tag params should be prepended to maintain the same order
|
|
49
|
-
// as TemplateDefinitionBuilder. Can be cleaned up when compatibility is no longer required.
|
|
50
|
-
const flags = fromValues[0].flags;
|
|
51
|
-
if ((flags & ir.I18nParamValueFlags.CloseTag) && !(flags & ir.I18nParamValueFlags.OpenTag)) {
|
|
52
|
-
to.set(placeholder, [...fromValues, ...toValues]);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
to.set(placeholder, [...toValues, ...fromValues]);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2VfaTE4bl9jb250ZXh0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy90ZW1wbGF0ZS9waXBlbGluZS9zcmMvcGhhc2VzL21lcmdlX2kxOG5fY29udGV4dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0I7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBNEI7SUFDNUQsa0VBQWtFO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO0lBQ3JELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBQzVELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUztvQkFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDaEIsTUFBTSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztvQkFDdEQsQ0FBQztvQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVc7b0JBQ3hCLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDOUIsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixLQUFLLE1BQU0sV0FBVyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQzNDLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBUSxDQUFFLENBQUM7WUFDN0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFFLENBQUM7WUFDbEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBUSxDQUFFLENBQUM7WUFDM0QsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELFdBQVcsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbkYsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxFQUFvQyxFQUFFLElBQXNDO0lBQy9GLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxnR0FBZ0c7UUFDaEcsNEZBQTRGO1FBQzVGLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUUsQ0FBQyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzRixFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNOLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBpciBmcm9tICcuLi8uLi9pcic7XG5pbXBvcnQge0NvbXBvbmVudENvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cbi8qKlxuICogTWVyZ2UgaTE4biBjb250ZXh0cyBmb3IgY2hpbGQgaTE4biBibG9ja3MgaW50byB0aGVpciBhbmNlc3RvciByb290IGNvbnRleHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJMThuQ29udGV4dHMoam9iOiBDb21wb25lbnRDb21waWxhdGlvbkpvYikge1xuICAvLyBSZWNvcmQgYWxsIG9mIHRoZSBpMThuIGFuZCBleHRyYWN0ZWQgbWVzc2FnZSBvcHMgZm9yIHVzZSBsYXRlci5cbiAgY29uc3QgaTE4bk9wcyA9IG5ldyBNYXA8aXIuWHJlZklkLCBpci5JMThuU3RhcnRPcD4oKTtcbiAgY29uc3QgaTE4bkNvbnRleHRzID0gbmV3IE1hcDxpci5YcmVmSWQsIGlyLkkxOG5Db250ZXh0T3A+KCk7XG4gIGZvciAoY29uc3QgdW5pdCBvZiBqb2IudW5pdHMpIHtcbiAgICBmb3IgKGNvbnN0IG9wIG9mIHVuaXQuY3JlYXRlKSB7XG4gICAgICBzd2l0Y2ggKG9wLmtpbmQpIHtcbiAgICAgICAgY2FzZSBpci5PcEtpbmQuSTE4blN0YXJ0OlxuICAgICAgICAgIGlmICghb3AuY29udGV4dCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0kxOG4gb3Agc2hvdWxkIGhhdmUgaXRzIGNvbnRleHQgc2V0LicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpMThuT3BzLnNldChvcC54cmVmLCBvcCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLkkxOG5Db250ZXh0OlxuICAgICAgICAgIGkxOG5Db250ZXh0cy5zZXQob3AueHJlZiwgb3ApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBlYWNoIG5vbi1yb290IGkxOG4gb3AsIG1lcmdlIGl0cyBjb250ZXh0IGludG8gdGhlIHJvb3QgaTE4biBvcCdzIGNvbnRleHQuXG4gIGZvciAoY29uc3QgY2hpbGRJMThuT3Agb2YgaTE4bk9wcy52YWx1ZXMoKSkge1xuICAgIGlmIChjaGlsZEkxOG5PcC54cmVmICE9PSBjaGlsZEkxOG5PcC5yb290KSB7XG4gICAgICBjb25zdCBjaGlsZENvbnRleHQgPSBpMThuQ29udGV4dHMuZ2V0KGNoaWxkSTE4bk9wLmNvbnRleHQhKSE7XG4gICAgICBjb25zdCByb290STE4bk9wID0gaTE4bk9wcy5nZXQoY2hpbGRJMThuT3Aucm9vdCkhO1xuICAgICAgY29uc3Qgcm9vdENvbnRleHQgPSBpMThuQ29udGV4dHMuZ2V0KHJvb3RJMThuT3AuY29udGV4dCEpITtcbiAgICAgIG1lcmdlUGFyYW1zKHJvb3RDb250ZXh0LnBhcmFtcywgY2hpbGRDb250ZXh0LnBhcmFtcyk7XG4gICAgICBtZXJnZVBhcmFtcyhyb290Q29udGV4dC5wb3N0cHJvY2Vzc2luZ1BhcmFtcywgY2hpbGRDb250ZXh0LnBvc3Rwcm9jZXNzaW5nUGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZXMgdGhlIHBhcmFtcyBpbiB0aGUgYGZyb21gIG1hcCB0byBpbnRvIHRoZSBgdG9gIG1hcC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VQYXJhbXModG86IE1hcDxzdHJpbmcsIGlyLkkxOG5QYXJhbVZhbHVlW10+LCBmcm9tOiBNYXA8c3RyaW5nLCBpci5JMThuUGFyYW1WYWx1ZVtdPikge1xuICBmb3IgKGNvbnN0IFtwbGFjZWhvbGRlciwgZnJvbVZhbHVlc10gb2YgZnJvbSkge1xuICAgIGNvbnN0IHRvVmFsdWVzID0gdG8uZ2V0KHBsYWNlaG9sZGVyKSB8fCBbXTtcbiAgICAvLyBUT0RPKG1tYWxlcmJhKTogQ2hpbGQgZWxlbWVudCBjbG9zZSB0YWcgcGFyYW1zIHNob3VsZCBiZSBwcmVwZW5kZWQgdG8gbWFpbnRhaW4gdGhlIHNhbWUgb3JkZXJcbiAgICAvLyBhcyBUZW1wbGF0ZURlZmluaXRpb25CdWlsZGVyLiBDYW4gYmUgY2xlYW5lZCB1cCB3aGVuIGNvbXBhdGliaWxpdHkgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLlxuICAgIGNvbnN0IGZsYWdzID0gZnJvbVZhbHVlc1swXSEuZmxhZ3M7XG4gICAgaWYgKChmbGFncyAmIGlyLkkxOG5QYXJhbVZhbHVlRmxhZ3MuQ2xvc2VUYWcpICYmICEoZmxhZ3MgJiBpci5JMThuUGFyYW1WYWx1ZUZsYWdzLk9wZW5UYWcpKSB7XG4gICAgICB0by5zZXQocGxhY2Vob2xkZXIsIFsuLi5mcm9tVmFsdWVzLCAuLi50b1ZhbHVlc10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0by5zZXQocGxhY2Vob2xkZXIsIFsuLi50b1ZhbHVlcywgLi4uZnJvbVZhbHVlc10pO1xuICAgIH1cbiAgfVxufVxuIl19
|