@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.
Files changed (61) hide show
  1. package/esm2022/src/compiler.mjs +3 -3
  2. package/esm2022/src/expression_parser/parser.mjs +2 -2
  3. package/esm2022/src/i18n/digest.mjs +4 -1
  4. package/esm2022/src/i18n/extractor_merger.mjs +4 -2
  5. package/esm2022/src/i18n/i18n_ast.mjs +27 -1
  6. package/esm2022/src/i18n/i18n_html_parser.mjs +2 -2
  7. package/esm2022/src/i18n/i18n_parser.mjs +23 -6
  8. package/esm2022/src/i18n/message_bundle.mjs +7 -1
  9. package/esm2022/src/i18n/serializers/placeholder.mjs +29 -1
  10. package/esm2022/src/i18n/serializers/serializer.mjs +6 -1
  11. package/esm2022/src/i18n/serializers/xliff.mjs +7 -1
  12. package/esm2022/src/i18n/serializers/xliff2.mjs +19 -1
  13. package/esm2022/src/i18n/serializers/xmb.mjs +12 -1
  14. package/esm2022/src/i18n/translation_bundle.mjs +6 -1
  15. package/esm2022/src/jit_compiler_facade.mjs +2 -2
  16. package/esm2022/src/ml_parser/ast.mjs +4 -4
  17. package/esm2022/src/ml_parser/defaults.mjs +24 -0
  18. package/esm2022/src/ml_parser/lexer.mjs +2 -2
  19. package/esm2022/src/render3/partial/class_metadata.mjs +1 -1
  20. package/esm2022/src/render3/partial/component.mjs +2 -2
  21. package/esm2022/src/render3/partial/directive.mjs +1 -1
  22. package/esm2022/src/render3/partial/factory.mjs +1 -1
  23. package/esm2022/src/render3/partial/injectable.mjs +1 -1
  24. package/esm2022/src/render3/partial/injector.mjs +1 -1
  25. package/esm2022/src/render3/partial/ng_module.mjs +1 -1
  26. package/esm2022/src/render3/partial/pipe.mjs +1 -1
  27. package/esm2022/src/render3/r3_ast.mjs +17 -9
  28. package/esm2022/src/render3/r3_control_flow.mjs +7 -7
  29. package/esm2022/src/render3/r3_deferred_blocks.mjs +5 -5
  30. package/esm2022/src/render3/view/api.mjs +1 -1
  31. package/esm2022/src/render3/view/compiler.mjs +6 -4
  32. package/esm2022/src/render3/view/i18n/context.mjs +13 -1
  33. package/esm2022/src/render3/view/i18n/get_msg_utils.mjs +4 -1
  34. package/esm2022/src/render3/view/i18n/icu_serializer.mjs +4 -1
  35. package/esm2022/src/render3/view/i18n/localize_utils.mjs +6 -1
  36. package/esm2022/src/render3/view/i18n/meta.mjs +5 -4
  37. package/esm2022/src/render3/view/t2_api.mjs +1 -1
  38. package/esm2022/src/render3/view/t2_binder.mjs +6 -7
  39. package/esm2022/src/render3/view/template.mjs +79 -52
  40. package/esm2022/src/render3/view/util.mjs +24 -2
  41. package/esm2022/src/template/pipeline/ir/src/enums.mjs +9 -1
  42. package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +3 -2
  43. package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +2 -1
  44. package/esm2022/src/template/pipeline/src/emit.mjs +1 -3
  45. package/esm2022/src/template/pipeline/src/instruction.mjs +3 -3
  46. package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +2 -7
  47. package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +20 -6
  48. package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +94 -23
  49. package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +3 -2
  50. package/esm2022/src/template/pipeline/src/phases/reify.mjs +2 -2
  51. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +70 -57
  52. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +4 -4
  53. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_icu_placeholders.mjs +16 -25
  54. package/esm2022/src/template_parser/binding_parser.mjs +1 -1
  55. package/esm2022/src/version.mjs +1 -1
  56. package/fesm2022/compiler.mjs +554 -303
  57. package/fesm2022/compiler.mjs.map +1 -1
  58. package/index.d.ts +56 -12
  59. package/package.json +2 -2
  60. package/esm2022/src/ml_parser/interpolation_config.mjs +0 -23
  61. 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.0
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 implements BaseNode {
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
- constructor(children: TmplAstNode[], nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
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
- constructor(children: TmplAstNode[], afterTime: number | null, minimumTime: number | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
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
- constructor(children: TmplAstNode[], minimumTime: number | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
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
- 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);
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
- constructor(children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan);
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
- constructor(expression: AST | null, children: TmplAstNode[], expressionAlias: TmplAstVariable | null, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan);
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
- constructor(expression: AST | null, children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan);
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.0",
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.0"
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