@angular/compiler 17.0.0-rc.1 → 17.0.0-rc.3
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/render3/partial/class_metadata.mjs +1 -1
- 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 +55 -61
- package/esm2022/src/render3/r3_control_flow.mjs +17 -13
- package/esm2022/src/render3/r3_deferred_blocks.mjs +7 -8
- package/esm2022/src/render3/r3_deferred_triggers.mjs +46 -27
- package/esm2022/src/render3/view/compiler.mjs +2 -2
- package/esm2022/src/render3/view/i18n/util.mjs +1 -1
- package/esm2022/src/render3/view/t2_api.mjs +1 -1
- package/esm2022/src/render3/view/t2_binder.mjs +22 -10
- package/esm2022/src/render3/view/template.mjs +56 -5
- package/esm2022/src/template/pipeline/ir/index.mjs +2 -1
- package/esm2022/src/template/pipeline/ir/src/enums.mjs +69 -6
- package/esm2022/src/template/pipeline/ir/src/expression.mjs +85 -71
- package/esm2022/src/template/pipeline/ir/src/handle.mjs +13 -0
- package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +68 -50
- package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +23 -11
- package/esm2022/src/template/pipeline/ir/src/traits.mjs +1 -32
- package/esm2022/src/template/pipeline/src/compilation.mjs +3 -2
- package/esm2022/src/template/pipeline/src/conversion.mjs +2 -2
- package/esm2022/src/template/pipeline/src/emit.mjs +121 -107
- package/esm2022/src/template/pipeline/src/ingest.mjs +183 -54
- package/esm2022/src/template/pipeline/src/instruction.mjs +55 -20
- package/esm2022/src/template/pipeline/src/phases/any_cast.mjs +4 -3
- package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +5 -5
- package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +18 -6
- package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/chaining.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/collapse_singleton_interpolations.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +6 -6
- package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/create_defer_deps_fns.mjs +43 -0
- package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +57 -0
- package/esm2022/src/template/pipeline/src/phases/create_i18n_icu_expressions.mjs +52 -0
- package/esm2022/src/template/pipeline/src/phases/defer_configs.mjs +30 -0
- package/esm2022/src/template/pipeline/src/phases/defer_resolve_targets.mjs +113 -0
- package/esm2022/src/template/pipeline/src/phases/empty_elements.mjs +4 -4
- package/esm2022/src/template/pipeline/src/phases/expand_safe_reads.mjs +7 -4
- package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +157 -0
- package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +4 -4
- package/esm2022/src/template/pipeline/src/phases/generate_projection_def.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +4 -3
- package/esm2022/src/template/pipeline/src/phases/has_const_expression_collection.mjs +28 -0
- package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +8 -2
- package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +147 -8
- package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +16 -14
- package/esm2022/src/template/pipeline/src/phases/local_refs.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/merge_i18n_contexts.mjs +59 -0
- package/esm2022/src/template/pipeline/src/phases/namespace.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/naming.mjs +11 -13
- package/esm2022/src/template/pipeline/src/phases/next_context_merging.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/ng_container.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/nonbindable.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/nullish_coalescing.mjs +8 -2
- package/esm2022/src/template/pipeline/src/phases/ordering.mjs +7 -2
- package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/pipe_creation.mjs +16 -11
- package/esm2022/src/template/pipeline/src/phases/pipe_variadic.mjs +7 -3
- package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +5 -3
- package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/pure_literal_structures.mjs +4 -4
- package/esm2022/src/template/pipeline/src/phases/reify.mjs +55 -29
- package/esm2022/src/template/pipeline/src/phases/remove_empty_bindings.mjs +5 -2
- package/esm2022/src/template/pipeline/src/phases/remove_i18n_contexts.mjs +27 -0
- package/esm2022/src/template/pipeline/src/phases/repeater_derived_vars.mjs +7 -2
- package/esm2022/src/template/pipeline/src/phases/resolve_contexts.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/resolve_dollar_event.mjs +5 -5
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +109 -0
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +48 -0
- package/esm2022/src/template/pipeline/src/phases/resolve_names.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/save_restore_view.mjs +14 -9
- package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +4 -29
- package/esm2022/src/template/pipeline/src/phases/style_binding_specialization.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/temporary_variables.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +8 -2
- package/esm2022/src/template/pipeline/src/phases/track_variables.mjs +7 -2
- package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +5 -5
- package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +2 -2
- package/esm2022/src/version.mjs +1 -1
- package/fesm2022/compiler.mjs +1806 -1097
- package/fesm2022/compiler.mjs.map +1 -1
- package/index.d.ts +41 -58
- package/package.json +3 -3
- package/esm2022/src/template/pipeline/src/phases/has_const_trait_collection.mjs +0 -34
- package/esm2022/src/template/pipeline/src/phases/i18n_message_extraction.mjs +0 -122
- package/esm2022/src/template/pipeline/src/phases/icu_extraction.mjs +0 -53
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_placeholders.mjs +0 -288
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v17.0.0-rc.
|
|
2
|
+
* @license Angular v17.0.0-rc.3
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -449,6 +449,14 @@ export declare class Block implements BaseNode {
|
|
|
449
449
|
visit(visitor: Visitor, context: any): any;
|
|
450
450
|
}
|
|
451
451
|
|
|
452
|
+
declare class BlockNode {
|
|
453
|
+
nameSpan: ParseSourceSpan;
|
|
454
|
+
sourceSpan: ParseSourceSpan;
|
|
455
|
+
startSourceSpan: ParseSourceSpan;
|
|
456
|
+
endSourceSpan: ParseSourceSpan | null;
|
|
457
|
+
constructor(nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
458
|
+
}
|
|
459
|
+
|
|
452
460
|
export declare class BlockParameter implements BaseNode {
|
|
453
461
|
expression: string;
|
|
454
462
|
sourceSpan: ParseSourceSpan;
|
|
@@ -557,7 +565,7 @@ export declare interface BoundTarget<DirectiveT extends DirectiveMeta> {
|
|
|
557
565
|
* @param block Block that the trigger belongs to.
|
|
558
566
|
* @param trigger Trigger whose target is being looked up.
|
|
559
567
|
*/
|
|
560
|
-
getDeferredTriggerTarget(block:
|
|
568
|
+
getDeferredTriggerTarget(block: TmplAstDeferredBlock, trigger: TmplAstDeferredTrigger): TmplAstElement | null;
|
|
561
569
|
}
|
|
562
570
|
|
|
563
571
|
export declare class BuiltinType extends Type {
|
|
@@ -4616,6 +4624,7 @@ declare namespace t {
|
|
|
4616
4624
|
TmplAstTimerDeferredTrigger as TimerDeferredTrigger,
|
|
4617
4625
|
TmplAstInteractionDeferredTrigger as InteractionDeferredTrigger,
|
|
4618
4626
|
TmplAstViewportDeferredTrigger as ViewportDeferredTrigger,
|
|
4627
|
+
BlockNode,
|
|
4619
4628
|
TmplAstDeferredBlockPlaceholder as DeferredBlockPlaceholder,
|
|
4620
4629
|
TmplAstDeferredBlockLoading as DeferredBlockLoading,
|
|
4621
4630
|
TmplAstDeferredBlockError as DeferredBlockError,
|
|
@@ -4801,7 +4810,7 @@ export declare class TmplAstBoundAttribute implements TmplAstNode {
|
|
|
4801
4810
|
|
|
4802
4811
|
export declare class TmplAstBoundDeferredTrigger extends TmplAstDeferredTrigger {
|
|
4803
4812
|
value: AST;
|
|
4804
|
-
constructor(value: AST, sourceSpan: ParseSourceSpan);
|
|
4813
|
+
constructor(value: AST, sourceSpan: ParseSourceSpan, prefetchSpan: ParseSourceSpan | null, whenSourceSpan: ParseSourceSpan);
|
|
4805
4814
|
}
|
|
4806
4815
|
|
|
4807
4816
|
export declare class TmplAstBoundEvent implements TmplAstNode {
|
|
@@ -4836,52 +4845,40 @@ export declare class TmplAstContent implements TmplAstNode {
|
|
|
4836
4845
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4837
4846
|
}
|
|
4838
4847
|
|
|
4839
|
-
export declare class TmplAstDeferredBlock implements TmplAstNode {
|
|
4848
|
+
export declare class TmplAstDeferredBlock extends BlockNode implements TmplAstNode {
|
|
4840
4849
|
children: TmplAstNode[];
|
|
4841
4850
|
placeholder: TmplAstDeferredBlockPlaceholder | null;
|
|
4842
4851
|
loading: TmplAstDeferredBlockLoading | null;
|
|
4843
4852
|
error: TmplAstDeferredBlockError | null;
|
|
4844
|
-
sourceSpan: ParseSourceSpan;
|
|
4845
4853
|
mainBlockSpan: ParseSourceSpan;
|
|
4846
|
-
startSourceSpan: ParseSourceSpan;
|
|
4847
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
4848
4854
|
readonly triggers: Readonly<TmplAstDeferredBlockTriggers>;
|
|
4849
4855
|
readonly prefetchTriggers: Readonly<TmplAstDeferredBlockTriggers>;
|
|
4850
4856
|
private readonly definedTriggers;
|
|
4851
4857
|
private readonly definedPrefetchTriggers;
|
|
4852
|
-
constructor(children: TmplAstNode[], triggers: TmplAstDeferredBlockTriggers, prefetchTriggers: TmplAstDeferredBlockTriggers, placeholder: TmplAstDeferredBlockPlaceholder | null, loading: TmplAstDeferredBlockLoading | null, error: TmplAstDeferredBlockError | null, sourceSpan: ParseSourceSpan, mainBlockSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
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);
|
|
4853
4859
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4854
4860
|
visitAll(visitor: Visitor_3<unknown>): void;
|
|
4855
4861
|
private visitTriggers;
|
|
4856
4862
|
}
|
|
4857
4863
|
|
|
4858
|
-
export declare class TmplAstDeferredBlockError implements TmplAstNode {
|
|
4864
|
+
export declare class TmplAstDeferredBlockError extends BlockNode implements TmplAstNode {
|
|
4859
4865
|
children: TmplAstNode[];
|
|
4860
|
-
sourceSpan: ParseSourceSpan;
|
|
4861
|
-
startSourceSpan: ParseSourceSpan;
|
|
4862
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
4863
|
-
constructor(children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4866
|
+
constructor(children: TmplAstNode[], nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4864
4867
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4865
4868
|
}
|
|
4866
4869
|
|
|
4867
|
-
export declare class TmplAstDeferredBlockLoading implements TmplAstNode {
|
|
4870
|
+
export declare class TmplAstDeferredBlockLoading extends BlockNode implements TmplAstNode {
|
|
4868
4871
|
children: TmplAstNode[];
|
|
4869
4872
|
afterTime: number | null;
|
|
4870
4873
|
minimumTime: number | null;
|
|
4871
|
-
sourceSpan: ParseSourceSpan;
|
|
4872
|
-
startSourceSpan: ParseSourceSpan;
|
|
4873
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
4874
|
-
constructor(children: TmplAstNode[], afterTime: number | null, minimumTime: number | null, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4874
|
+
constructor(children: TmplAstNode[], afterTime: number | null, minimumTime: number | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4875
4875
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4876
4876
|
}
|
|
4877
4877
|
|
|
4878
|
-
export declare class TmplAstDeferredBlockPlaceholder implements TmplAstNode {
|
|
4878
|
+
export declare class TmplAstDeferredBlockPlaceholder extends BlockNode implements TmplAstNode {
|
|
4879
4879
|
children: TmplAstNode[];
|
|
4880
4880
|
minimumTime: number | null;
|
|
4881
|
-
sourceSpan: ParseSourceSpan;
|
|
4882
|
-
startSourceSpan: ParseSourceSpan;
|
|
4883
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
4884
|
-
constructor(children: TmplAstNode[], minimumTime: number | null, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4881
|
+
constructor(children: TmplAstNode[], minimumTime: number | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4885
4882
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4886
4883
|
}
|
|
4887
4884
|
|
|
@@ -4896,8 +4893,11 @@ export declare interface TmplAstDeferredBlockTriggers {
|
|
|
4896
4893
|
}
|
|
4897
4894
|
|
|
4898
4895
|
export declare abstract class TmplAstDeferredTrigger implements TmplAstNode {
|
|
4896
|
+
nameSpan: ParseSourceSpan | null;
|
|
4899
4897
|
sourceSpan: ParseSourceSpan;
|
|
4900
|
-
|
|
4898
|
+
prefetchSpan: ParseSourceSpan | null;
|
|
4899
|
+
whenOrOnSourceSpan: ParseSourceSpan | null;
|
|
4900
|
+
constructor(nameSpan: ParseSourceSpan | null, sourceSpan: ParseSourceSpan, prefetchSpan: ParseSourceSpan | null, whenOrOnSourceSpan: ParseSourceSpan | null);
|
|
4901
4901
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4902
4902
|
}
|
|
4903
4903
|
|
|
@@ -4916,33 +4916,28 @@ export declare class TmplAstElement implements TmplAstNode {
|
|
|
4916
4916
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4917
4917
|
}
|
|
4918
4918
|
|
|
4919
|
-
export declare class TmplAstForLoopBlock implements TmplAstNode {
|
|
4919
|
+
export declare class TmplAstForLoopBlock extends BlockNode implements TmplAstNode {
|
|
4920
4920
|
item: TmplAstVariable;
|
|
4921
4921
|
expression: ASTWithSource;
|
|
4922
4922
|
trackBy: ASTWithSource;
|
|
4923
|
+
trackKeywordSpan: ParseSourceSpan;
|
|
4923
4924
|
contextVariables: ForLoopBlockContext;
|
|
4924
4925
|
children: TmplAstNode[];
|
|
4925
4926
|
empty: TmplAstForLoopBlockEmpty | null;
|
|
4926
|
-
sourceSpan: ParseSourceSpan;
|
|
4927
4927
|
mainBlockSpan: ParseSourceSpan;
|
|
4928
|
-
startSourceSpan: ParseSourceSpan;
|
|
4929
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
4930
|
-
constructor(item: TmplAstVariable, expression: ASTWithSource, trackBy: ASTWithSource, contextVariables: ForLoopBlockContext, children: TmplAstNode[], empty: TmplAstForLoopBlockEmpty | null, sourceSpan: ParseSourceSpan, mainBlockSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
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);
|
|
4931
4929
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4932
4930
|
}
|
|
4933
4931
|
|
|
4934
|
-
export declare class TmplAstForLoopBlockEmpty implements TmplAstNode {
|
|
4932
|
+
export declare class TmplAstForLoopBlockEmpty extends BlockNode implements TmplAstNode {
|
|
4935
4933
|
children: TmplAstNode[];
|
|
4936
|
-
sourceSpan: ParseSourceSpan;
|
|
4937
|
-
startSourceSpan: ParseSourceSpan;
|
|
4938
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
4939
|
-
constructor(children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4934
|
+
constructor(children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan);
|
|
4940
4935
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4941
4936
|
}
|
|
4942
4937
|
|
|
4943
4938
|
export declare class TmplAstHoverDeferredTrigger extends TmplAstDeferredTrigger {
|
|
4944
4939
|
reference: string | null;
|
|
4945
|
-
constructor(reference: string | null, sourceSpan: ParseSourceSpan);
|
|
4940
|
+
constructor(reference: string | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, prefetchSpan: ParseSourceSpan | null, onSourceSpan: ParseSourceSpan | null);
|
|
4946
4941
|
}
|
|
4947
4942
|
|
|
4948
4943
|
export declare class TmplAstIcu implements TmplAstNode {
|
|
@@ -4965,23 +4960,17 @@ export declare class TmplAstIcu implements TmplAstNode {
|
|
|
4965
4960
|
export declare class TmplAstIdleDeferredTrigger extends TmplAstDeferredTrigger {
|
|
4966
4961
|
}
|
|
4967
4962
|
|
|
4968
|
-
export declare class TmplAstIfBlock implements TmplAstNode {
|
|
4963
|
+
export declare class TmplAstIfBlock extends BlockNode implements TmplAstNode {
|
|
4969
4964
|
branches: TmplAstIfBlockBranch[];
|
|
4970
|
-
sourceSpan: ParseSourceSpan;
|
|
4971
|
-
startSourceSpan: ParseSourceSpan;
|
|
4972
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
4973
|
-
constructor(branches: TmplAstIfBlockBranch[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4965
|
+
constructor(branches: TmplAstIfBlockBranch[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan);
|
|
4974
4966
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4975
4967
|
}
|
|
4976
4968
|
|
|
4977
|
-
export declare class TmplAstIfBlockBranch implements TmplAstNode {
|
|
4969
|
+
export declare class TmplAstIfBlockBranch extends BlockNode implements TmplAstNode {
|
|
4978
4970
|
expression: AST | null;
|
|
4979
4971
|
children: TmplAstNode[];
|
|
4980
4972
|
expressionAlias: TmplAstVariable | null;
|
|
4981
|
-
sourceSpan: ParseSourceSpan;
|
|
4982
|
-
startSourceSpan: ParseSourceSpan;
|
|
4983
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
4984
|
-
constructor(expression: AST | null, children: TmplAstNode[], expressionAlias: TmplAstVariable | null, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
4973
|
+
constructor(expression: AST | null, children: TmplAstNode[], expressionAlias: TmplAstVariable | null, sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan);
|
|
4985
4974
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
4986
4975
|
}
|
|
4987
4976
|
|
|
@@ -4990,7 +4979,7 @@ export declare class TmplAstImmediateDeferredTrigger extends TmplAstDeferredTrig
|
|
|
4990
4979
|
|
|
4991
4980
|
export declare class TmplAstInteractionDeferredTrigger extends TmplAstDeferredTrigger {
|
|
4992
4981
|
reference: string | null;
|
|
4993
|
-
constructor(reference: string | null, sourceSpan: ParseSourceSpan);
|
|
4982
|
+
constructor(reference: string | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, prefetchSpan: ParseSourceSpan | null, onSourceSpan: ParseSourceSpan | null);
|
|
4994
4983
|
}
|
|
4995
4984
|
|
|
4996
4985
|
export declare interface TmplAstNode {
|
|
@@ -5034,7 +5023,7 @@ export declare class TmplAstReference implements TmplAstNode {
|
|
|
5034
5023
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
5035
5024
|
}
|
|
5036
5025
|
|
|
5037
|
-
export declare class TmplAstSwitchBlock implements TmplAstNode {
|
|
5026
|
+
export declare class TmplAstSwitchBlock extends BlockNode implements TmplAstNode {
|
|
5038
5027
|
expression: AST;
|
|
5039
5028
|
cases: TmplAstSwitchBlockCase[];
|
|
5040
5029
|
/**
|
|
@@ -5042,25 +5031,19 @@ export declare class TmplAstSwitchBlock implements TmplAstNode {
|
|
|
5042
5031
|
* aren't meant to be processed in any other way.
|
|
5043
5032
|
*/
|
|
5044
5033
|
unknownBlocks: TmplAstUnknownBlock[];
|
|
5045
|
-
sourceSpan: ParseSourceSpan;
|
|
5046
|
-
startSourceSpan: ParseSourceSpan;
|
|
5047
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
5048
5034
|
constructor(expression: AST, cases: TmplAstSwitchBlockCase[],
|
|
5049
5035
|
/**
|
|
5050
5036
|
* These blocks are only captured to allow for autocompletion in the language service. They
|
|
5051
5037
|
* aren't meant to be processed in any other way.
|
|
5052
5038
|
*/
|
|
5053
|
-
unknownBlocks: TmplAstUnknownBlock[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
5039
|
+
unknownBlocks: TmplAstUnknownBlock[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan);
|
|
5054
5040
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
5055
5041
|
}
|
|
5056
5042
|
|
|
5057
|
-
export declare class TmplAstSwitchBlockCase implements TmplAstNode {
|
|
5043
|
+
export declare class TmplAstSwitchBlockCase extends BlockNode implements TmplAstNode {
|
|
5058
5044
|
expression: AST | null;
|
|
5059
5045
|
children: TmplAstNode[];
|
|
5060
|
-
sourceSpan: ParseSourceSpan;
|
|
5061
|
-
startSourceSpan: ParseSourceSpan;
|
|
5062
|
-
endSourceSpan: ParseSourceSpan | null;
|
|
5063
|
-
constructor(expression: AST | null, children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null);
|
|
5046
|
+
constructor(expression: AST | null, children: TmplAstNode[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan: ParseSourceSpan | null, nameSpan: ParseSourceSpan);
|
|
5064
5047
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
5065
5048
|
}
|
|
5066
5049
|
|
|
@@ -5107,7 +5090,7 @@ export declare class TmplAstTextAttribute implements TmplAstNode {
|
|
|
5107
5090
|
|
|
5108
5091
|
export declare class TmplAstTimerDeferredTrigger extends TmplAstDeferredTrigger {
|
|
5109
5092
|
delay: number;
|
|
5110
|
-
constructor(delay: number, sourceSpan: ParseSourceSpan);
|
|
5093
|
+
constructor(delay: number, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, prefetchSpan: ParseSourceSpan | null, onSourceSpan: ParseSourceSpan | null);
|
|
5111
5094
|
}
|
|
5112
5095
|
|
|
5113
5096
|
export declare class TmplAstUnknownBlock implements TmplAstNode {
|
|
@@ -5130,7 +5113,7 @@ export declare class TmplAstVariable implements TmplAstNode {
|
|
|
5130
5113
|
|
|
5131
5114
|
export declare class TmplAstViewportDeferredTrigger extends TmplAstDeferredTrigger {
|
|
5132
5115
|
reference: string | null;
|
|
5133
|
-
constructor(reference: string | null, sourceSpan: ParseSourceSpan);
|
|
5116
|
+
constructor(reference: string | null, nameSpan: ParseSourceSpan, sourceSpan: ParseSourceSpan, prefetchSpan: ParseSourceSpan | null, onSourceSpan: ParseSourceSpan | null);
|
|
5134
5117
|
}
|
|
5135
5118
|
|
|
5136
5119
|
export declare class Token {
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/compiler",
|
|
3
|
-
"version": "17.0.0-rc.
|
|
3
|
+
"version": "17.0.0-rc.3",
|
|
4
4
|
"description": "Angular - the compiler library",
|
|
5
5
|
"author": "angular",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|
|
8
|
-
"node": "
|
|
8
|
+
"node": "^18.13.0 || >=20.9.0"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"tslib": "^2.3.0"
|
|
12
12
|
},
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"@angular/core": "17.0.0-rc.
|
|
14
|
+
"@angular/core": "17.0.0-rc.3"
|
|
15
15
|
},
|
|
16
16
|
"peerDependenciesMeta": {
|
|
17
17
|
"@angular/core": {
|
|
@@ -1,34 +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
|
-
* Looks for the HasConst trait, indicating that an op or expression has some data which
|
|
11
|
-
* should be collected into the constant array. Capable of collecting either a single literal value,
|
|
12
|
-
* or an array literal.
|
|
13
|
-
*/
|
|
14
|
-
export function phaseConstTraitCollection(job) {
|
|
15
|
-
const collectGlobalConsts = (e) => {
|
|
16
|
-
if (e instanceof ir.ExpressionBase && ir.hasConstTrait(e)) {
|
|
17
|
-
// TODO: Figure out how to make this type narrowing work.
|
|
18
|
-
const ea = e;
|
|
19
|
-
if (ea.constValue !== null) {
|
|
20
|
-
ea.constIndex = job.addConst(ea.constValue);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return e;
|
|
24
|
-
};
|
|
25
|
-
for (const unit of job.units) {
|
|
26
|
-
for (const op of unit.ops()) {
|
|
27
|
-
if (ir.hasConstTrait(op) && op.constValue !== null) {
|
|
28
|
-
op.constIndex = job.addConst(op.makeExpression(op.constValue));
|
|
29
|
-
}
|
|
30
|
-
ir.transformExpressionsInOp(op, collectGlobalConsts, ir.VisitorContextFlag.None);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzX2NvbnN0X3RyYWl0X2NvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvdGVtcGxhdGUvcGlwZWxpbmUvc3JjL3BoYXNlcy9oYXNfY29uc3RfdHJhaXRfY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFHSCxPQUFPLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUcvQjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEdBQTRCO0lBQ3BFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFlLEVBQWdCLEVBQUU7UUFDNUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQWtCLENBQUMsRUFBRTtZQUMxRSx5REFBeUQ7WUFDekQsTUFBTSxFQUFFLEdBQUcsQ0FBb0QsQ0FBQztZQUNoRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUMxQixFQUFFLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQXFDLENBQUMsQ0FBQzthQUN4RTtTQUNGO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRixLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7UUFDNUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUNsRCxFQUFFLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzthQUNoRTtZQUNELEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vb3V0cHV0L291dHB1dF9hc3QnO1xuaW1wb3J0ICogYXMgaXIgZnJvbSAnLi4vLi4vaXInO1xuaW1wb3J0IHR5cGUge0NvbXBvbmVudENvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cbi8qKlxuICogTG9va3MgZm9yIHRoZSBIYXNDb25zdCB0cmFpdCwgaW5kaWNhdGluZyB0aGF0IGFuIG9wIG9yIGV4cHJlc3Npb24gaGFzIHNvbWUgZGF0YSB3aGljaFxuICogc2hvdWxkIGJlIGNvbGxlY3RlZCBpbnRvIHRoZSBjb25zdGFudCBhcnJheS4gQ2FwYWJsZSBvZiBjb2xsZWN0aW5nIGVpdGhlciBhIHNpbmdsZSBsaXRlcmFsIHZhbHVlLFxuICogb3IgYW4gYXJyYXkgbGl0ZXJhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBoYXNlQ29uc3RUcmFpdENvbGxlY3Rpb24oam9iOiBDb21wb25lbnRDb21waWxhdGlvbkpvYik6IHZvaWQge1xuICBjb25zdCBjb2xsZWN0R2xvYmFsQ29uc3RzID0gKGU6IG8uRXhwcmVzc2lvbik6IG8uRXhwcmVzc2lvbiA9PiB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBpci5FeHByZXNzaW9uQmFzZSAmJiBpci5oYXNDb25zdFRyYWl0KGUgYXMgaXIuRXhwcmVzc2lvbikpIHtcbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgdGhpcyB0eXBlIG5hcnJvd2luZyB3b3JrLlxuICAgICAgY29uc3QgZWEgPSBlIGFzIHVua25vd24gYXMgaXIuRXhwcmVzc2lvbkJhc2UgJiBpci5IYXNDb25zdFRyYWl0O1xuICAgICAgaWYgKGVhLmNvbnN0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZWEuY29uc3RJbmRleCA9IGpvYi5hZGRDb25zdChlYS5jb25zdFZhbHVlIGFzIHVua25vd24gYXMgby5FeHByZXNzaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH07XG5cbiAgZm9yIChjb25zdCB1bml0IG9mIGpvYi51bml0cykge1xuICAgIGZvciAoY29uc3Qgb3Agb2YgdW5pdC5vcHMoKSkge1xuICAgICAgaWYgKGlyLmhhc0NvbnN0VHJhaXQob3ApICYmIG9wLmNvbnN0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgb3AuY29uc3RJbmRleCA9IGpvYi5hZGRDb25zdChvcC5tYWtlRXhwcmVzc2lvbihvcC5jb25zdFZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpci50cmFuc2Zvcm1FeHByZXNzaW9uc0luT3Aob3AsIGNvbGxlY3RHbG9iYWxDb25zdHMsIGlyLlZpc2l0b3JDb250ZXh0RmxhZy5Ob25lKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,122 +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 o from '../../../../output/output_ast';
|
|
9
|
-
import { sanitizeIdentifier } from '../../../../parse_util';
|
|
10
|
-
import { Identifiers } from '../../../../render3/r3_identifiers';
|
|
11
|
-
import { createGoogleGetMsgStatements } from '../../../../render3/view/i18n/get_msg_utils';
|
|
12
|
-
import { createLocalizeStatements } from '../../../../render3/view/i18n/localize_utils';
|
|
13
|
-
import { declareI18nVariable, formatI18nPlaceholderNamesInMap, getTranslationConstPrefix } from '../../../../render3/view/i18n/util';
|
|
14
|
-
import * as ir from '../../ir';
|
|
15
|
-
/** Name of the global variable that is used to determine if we use Closure translations or not */
|
|
16
|
-
const NG_I18N_CLOSURE_MODE = 'ngI18nClosureMode';
|
|
17
|
-
/**
|
|
18
|
-
* Prefix for non-`goog.getMsg` i18n-related vars.
|
|
19
|
-
* Note: the prefix uses lowercase characters intentionally due to a Closure behavior that
|
|
20
|
-
* considers variables like `I18N_0` as constants and throws an error when their value changes.
|
|
21
|
-
*/
|
|
22
|
-
export const TRANSLATION_VAR_PREFIX = 'i18n_';
|
|
23
|
-
/** Extracts i18n messages into the consts array. */
|
|
24
|
-
export function phaseI18nMessageExtraction(job) {
|
|
25
|
-
const fileBasedI18nSuffix = job.relativeContextFilePath.replace(/[^A-Za-z0-9]/g, '_').toUpperCase() + '_';
|
|
26
|
-
for (const unit of job.units) {
|
|
27
|
-
for (const op of unit.create) {
|
|
28
|
-
if (op.kind === ir.OpKind.I18nStart) {
|
|
29
|
-
// Only extract messages from root i18n ops, not sub-template ones.
|
|
30
|
-
if (op.xref === op.root) {
|
|
31
|
-
// Sort the params map to match the ordering in TemplateDefinitionBuilder.
|
|
32
|
-
const params = new Map([...op.params.entries()].sort());
|
|
33
|
-
const mainVar = o.variable(job.pool.uniqueName(TRANSLATION_VAR_PREFIX));
|
|
34
|
-
// Closure Compiler requires const names to start with `MSG_` but disallows any other
|
|
35
|
-
// const to start with `MSG_`. We define a variable starting with `MSG_` just for the
|
|
36
|
-
// `goog.getMsg` call
|
|
37
|
-
const closureVar = i18nGenerateClosureVar(job.pool, op.message.id, fileBasedI18nSuffix, job.i18nUseExternalIds);
|
|
38
|
-
let transformFn = undefined;
|
|
39
|
-
// If nescessary, add a post-processing step and resolve any placeholder params that are
|
|
40
|
-
// set in post-processing.
|
|
41
|
-
if (op.needsPostprocessing) {
|
|
42
|
-
const extraTransformFnParams = [];
|
|
43
|
-
if (op.postprocessingParams.size > 0) {
|
|
44
|
-
extraTransformFnParams.push(o.literalMap([...op.postprocessingParams.entries()].map(([key, value]) => ({ key, value, quoted: true }))));
|
|
45
|
-
}
|
|
46
|
-
transformFn = (expr) => o.importExpr(Identifiers.i18nPostprocess).callFn([expr, ...extraTransformFnParams]);
|
|
47
|
-
}
|
|
48
|
-
const statements = getTranslationDeclStmts(op.message, mainVar, closureVar, params, transformFn);
|
|
49
|
-
unit.create.push(ir.createExtractedMessageOp(op.xref, mainVar, statements));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Generate statements that define a given translation message.
|
|
57
|
-
*
|
|
58
|
-
* ```
|
|
59
|
-
* var I18N_1;
|
|
60
|
-
* if (typeof ngI18nClosureMode !== undefined && ngI18nClosureMode) {
|
|
61
|
-
* var MSG_EXTERNAL_XXX = goog.getMsg(
|
|
62
|
-
* "Some message with {$interpolation}!",
|
|
63
|
-
* { "interpolation": "\uFFFD0\uFFFD" }
|
|
64
|
-
* );
|
|
65
|
-
* I18N_1 = MSG_EXTERNAL_XXX;
|
|
66
|
-
* }
|
|
67
|
-
* else {
|
|
68
|
-
* I18N_1 = $localize`Some message with ${'\uFFFD0\uFFFD'}!`;
|
|
69
|
-
* }
|
|
70
|
-
* ```
|
|
71
|
-
*
|
|
72
|
-
* @param message The original i18n AST message node
|
|
73
|
-
* @param variable The variable that will be assigned the translation, e.g. `I18N_1`.
|
|
74
|
-
* @param closureVar The variable for Closure `goog.getMsg` calls, e.g. `MSG_EXTERNAL_XXX`.
|
|
75
|
-
* @param params Object mapping placeholder names to their values (e.g.
|
|
76
|
-
* `{ "interpolation": "\uFFFD0\uFFFD" }`).
|
|
77
|
-
* @param transformFn Optional transformation function that will be applied to the translation (e.g.
|
|
78
|
-
* post-processing).
|
|
79
|
-
* @returns An array of statements that defined a given translation.
|
|
80
|
-
*/
|
|
81
|
-
function getTranslationDeclStmts(message, variable, closureVar, params, transformFn) {
|
|
82
|
-
const paramsObject = Object.fromEntries(params);
|
|
83
|
-
const statements = [
|
|
84
|
-
declareI18nVariable(variable),
|
|
85
|
-
o.ifStmt(createClosureModeGuard(), createGoogleGetMsgStatements(variable, message, closureVar, paramsObject), createLocalizeStatements(variable, message, formatI18nPlaceholderNamesInMap(paramsObject, /* useCamelCase */ false))),
|
|
86
|
-
];
|
|
87
|
-
if (transformFn) {
|
|
88
|
-
statements.push(new o.ExpressionStatement(variable.set(transformFn(variable))));
|
|
89
|
-
}
|
|
90
|
-
return statements;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Create the expression that will be used to guard the closure mode block
|
|
94
|
-
* It is equivalent to:
|
|
95
|
-
*
|
|
96
|
-
* ```
|
|
97
|
-
* typeof ngI18nClosureMode !== undefined && ngI18nClosureMode
|
|
98
|
-
* ```
|
|
99
|
-
*/
|
|
100
|
-
function createClosureModeGuard() {
|
|
101
|
-
return o.typeofExpr(o.variable(NG_I18N_CLOSURE_MODE))
|
|
102
|
-
.notIdentical(o.literal('undefined', o.STRING_TYPE))
|
|
103
|
-
.and(o.variable(NG_I18N_CLOSURE_MODE));
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Generates vars with Closure-specific names for i18n blocks (i.e. `MSG_XXX`).
|
|
107
|
-
*/
|
|
108
|
-
function i18nGenerateClosureVar(pool, messageId, fileBasedI18nSuffix, useExternalIds) {
|
|
109
|
-
let name;
|
|
110
|
-
const suffix = fileBasedI18nSuffix;
|
|
111
|
-
if (useExternalIds) {
|
|
112
|
-
const prefix = getTranslationConstPrefix(`EXTERNAL_`);
|
|
113
|
-
const uniqueSuffix = pool.uniqueName(suffix);
|
|
114
|
-
name = `${prefix}${sanitizeIdentifier(messageId)}$$${uniqueSuffix}`;
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
const prefix = getTranslationConstPrefix(suffix);
|
|
118
|
-
name = pool.uniqueName(prefix);
|
|
119
|
-
}
|
|
120
|
-
return o.variable(name);
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bl9tZXNzYWdlX2V4dHJhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvdGVtcGxhdGUvcGlwZWxpbmUvc3JjL3BoYXNlcy9pMThuX21lc3NhZ2VfZXh0cmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCxPQUFPLEtBQUssQ0FBQyxNQUFNLCtCQUErQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RixPQUFPLEVBQUMsbUJBQW1CLEVBQUUsK0JBQStCLEVBQUUseUJBQXlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuSSxPQUFPLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUkvQixrR0FBa0c7QUFDbEcsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBRTlDLG9EQUFvRDtBQUNwRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsR0FBNEI7SUFDckUsTUFBTSxtQkFBbUIsR0FDckIsR0FBRyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xGLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtRQUM1QixLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDNUIs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IFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7dHlwZSBDb25zdGFudFBvb2x9IGZyb20gJy4uLy4uLy4uLy4uL2NvbnN0YW50X3Bvb2wnO1xuaW1wb3J0ICogYXMgaTE4biBmcm9tICcuLi8uLi8uLi8uLi9pMThuL2kxOG5fYXN0JztcbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vb3V0cHV0L291dHB1dF9hc3QnO1xuaW1wb3J0IHtzYW5pdGl6ZUlkZW50aWZpZXJ9IGZyb20gJy4uLy4uLy4uLy4uL3BhcnNlX3V0aWwnO1xuaW1wb3J0IHtJZGVudGlmaWVyc30gZnJvbSAnLi4vLi4vLi4vLi4vcmVuZGVyMy9yM19pZGVudGlmaWVycyc7XG5pbXBvcnQge2NyZWF0ZUdvb2dsZUdldE1zZ1N0YXRlbWVudHN9IGZyb20gJy4uLy4uLy4uLy4uL3JlbmRlcjMvdmlldy9pMThuL2dldF9tc2dfdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVMb2NhbGl6ZVN0YXRlbWVudHN9IGZyb20gJy4uLy4uLy4uLy4uL3JlbmRlcjMvdmlldy9pMThuL2xvY2FsaXplX3V0aWxzJztcbmltcG9ydCB7ZGVjbGFyZUkxOG5WYXJpYWJsZSwgZm9ybWF0STE4blBsYWNlaG9sZGVyTmFtZXNJbk1hcCwgZ2V0VHJhbnNsYXRpb25Db25zdFByZWZpeH0gZnJvbSAnLi4vLi4vLi4vLi4vcmVuZGVyMy92aWV3L2kxOG4vdXRpbCc7XG5pbXBvcnQgKiBhcyBpciBmcm9tICcuLi8uLi9pcic7XG5pbXBvcnQge0NvbXBvbmVudENvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cblxuLyoqIE5hbWUgb2YgdGhlIGdsb2JhbCB2YXJpYWJsZSB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIHVzZSBDbG9zdXJlIHRyYW5zbGF0aW9ucyBvciBub3QgKi9cbmNvbnN0IE5HX0kxOE5fQ0xPU1VSRV9NT0RFID0gJ25nSTE4bkNsb3N1cmVNb2RlJztcblxuLyoqXG4gKiBQcmVmaXggZm9yIG5vbi1gZ29vZy5nZXRNc2dgIGkxOG4tcmVsYXRlZCB2YXJzLlxuICogTm90ZTogdGhlIHByZWZpeCB1c2VzIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIGludGVudGlvbmFsbHkgZHVlIHRvIGEgQ2xvc3VyZSBiZWhhdmlvciB0aGF0XG4gKiBjb25zaWRlcnMgdmFyaWFibGVzIGxpa2UgYEkxOE5fMGAgYXMgY29uc3RhbnRzIGFuZCB0aHJvd3MgYW4gZXJyb3Igd2hlbiB0aGVpciB2YWx1ZSBjaGFuZ2VzLlxuICovXG5leHBvcnQgY29uc3QgVFJBTlNMQVRJT05fVkFSX1BSRUZJWCA9ICdpMThuXyc7XG5cbi8qKiBFeHRyYWN0cyBpMThuIG1lc3NhZ2VzIGludG8gdGhlIGNvbnN0cyBhcnJheS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaGFzZUkxOG5NZXNzYWdlRXh0cmFjdGlvbihqb2I6IENvbXBvbmVudENvbXBpbGF0aW9uSm9iKTogdm9pZCB7XG4gIGNvbnN0IGZpbGVCYXNlZEkxOG5TdWZmaXggPVxuICAgICAgam9iLnJlbGF0aXZlQ29udGV4dEZpbGVQYXRoLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCAnXycpLnRvVXBwZXJDYXNlKCkgKyAnXyc7XG4gIGZvciAoY29uc3QgdW5pdCBvZiBqb2IudW5pdHMpIHtcbiAgICBmb3IgKGNvbnN0IG9wIG9mIHVuaXQuY3JlYXRlKSB7XG4gICAgICBpZiAob3Aua2luZCA9PT0gaXIuT3BLaW5kLkkxOG5TdGFydCkge1xuICAgICAgICAvLyBPbmx5IGV4dHJhY3QgbWVzc2FnZXMgZnJvbSByb290IGkxOG4gb3BzLCBub3Qgc3ViLXRlbXBsYXRlIG9uZXMuXG4gICAgICAgIGlmIChvcC54cmVmID09PSBvcC5yb290KSB7XG4gICAgICAgICAgLy8gU29ydCB0aGUgcGFyYW1zIG1hcCB0byBtYXRjaCB0aGUgb3JkZXJpbmcgaW4gVGVtcGxhdGVEZWZpbml0aW9uQnVpbGRlci5cbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgTWFwKFsuLi5vcC5wYXJhbXMuZW50cmllcygpXS5zb3J0KCkpO1xuXG4gICAgICAgICAgY29uc3QgbWFpblZhciA9IG8udmFyaWFibGUoam9iLnBvb2wudW5pcXVlTmFtZShUUkFOU0xBVElPTl9WQVJfUFJFRklYKSk7XG4gICAgICAgICAgLy8gQ2xvc3VyZSBDb21waWxlciByZXF1aXJlcyBjb25zdCBuYW1lcyB0byBzdGFydCB3aXRoIGBNU0dfYCBidXQgZGlzYWxsb3dzIGFueSBvdGhlclxuICAgICAgICAgIC8vIGNvbnN0IHRvIHN0YXJ0IHdpdGggYE1TR19gLiBXZSBkZWZpbmUgYSB2YXJpYWJsZSBzdGFydGluZyB3aXRoIGBNU0dfYCBqdXN0IGZvciB0aGVcbiAgICAgICAgICAvLyBgZ29vZy5nZXRNc2dgIGNhbGxcbiAgICAgICAgICBjb25zdCBjbG9zdXJlVmFyID0gaTE4bkdlbmVyYXRlQ2xvc3VyZVZhcihcbiAgICAgICAgICAgICAgam9iLnBvb2wsIG9wLm1lc3NhZ2UuaWQsIGZpbGVCYXNlZEkxOG5TdWZmaXgsIGpvYi5pMThuVXNlRXh0ZXJuYWxJZHMpO1xuICAgICAgICAgIGxldCB0cmFuc2Zvcm1GbiA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIC8vIElmIG5lc2Nlc3NhcnksIGFkZCBhIHBvc3QtcHJvY2Vzc2luZyBzdGVwIGFuZCByZXNvbHZlIGFueSBwbGFjZWhvbGRlciBwYXJhbXMgdGhhdCBhcmVcbiAgICAgICAgICAvLyBzZXQgaW4gcG9zdC1wcm9jZXNzaW5nLlxuICAgICAgICAgIGlmIChvcC5uZWVkc1Bvc3Rwcm9jZXNzaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBleHRyYVRyYW5zZm9ybUZuUGFyYW1zOiBvLkV4cHJlc3Npb25bXSA9IFtdO1xuICAgICAgICAgICAgaWYgKG9wLnBvc3Rwcm9jZXNzaW5nUGFyYW1zLnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIGV4dHJhVHJhbnNmb3JtRm5QYXJhbXMucHVzaChvLmxpdGVyYWxNYXAoWy4uLm9wLnBvc3Rwcm9jZXNzaW5nUGFyYW1zLmVudHJpZXMoKV0ubWFwKFxuICAgICAgICAgICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gKHtrZXksIHZhbHVlLCBxdW90ZWQ6IHRydWV9KSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zZm9ybUZuID0gKGV4cHI6IG8uUmVhZFZhckV4cHIpID0+XG4gICAgICAgICAgICAgICAgby5pbXBvcnRFeHByKElkZW50aWZpZXJzLmkxOG5Qb3N0cHJvY2VzcykuY2FsbEZuKFtleHByLCAuLi5leHRyYVRyYW5zZm9ybUZuUGFyYW1zXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50cyA9XG4gICAgICAgICAgICAgIGdldFRyYW5zbGF0aW9uRGVjbFN0bXRzKG9wLm1lc3NhZ2UsIG1haW5WYXIsIGNsb3N1cmVWYXIsIHBhcmFtcywgdHJhbnNmb3JtRm4pO1xuICAgICAgICAgIHVuaXQuY3JlYXRlLnB1c2goaXIuY3JlYXRlRXh0cmFjdGVkTWVzc2FnZU9wKG9wLnhyZWYsIG1haW5WYXIsIHN0YXRlbWVudHMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHN0YXRlbWVudHMgdGhhdCBkZWZpbmUgYSBnaXZlbiB0cmFuc2xhdGlvbiBtZXNzYWdlLlxuICpcbiAqIGBgYFxuICogdmFyIEkxOE5fMTtcbiAqIGlmICh0eXBlb2YgbmdJMThuQ2xvc3VyZU1vZGUgIT09IHVuZGVmaW5lZCAmJiBuZ0kxOG5DbG9zdXJlTW9kZSkge1xuICogICAgIHZhciBNU0dfRVhURVJOQUxfWFhYID0gZ29vZy5nZXRNc2coXG4gKiAgICAgICAgICBcIlNvbWUgbWVzc2FnZSB3aXRoIHskaW50ZXJwb2xhdGlvbn0hXCIsXG4gKiAgICAgICAgICB7IFwiaW50ZXJwb2xhdGlvblwiOiBcIlxcdUZGRkQwXFx1RkZGRFwiIH1cbiAqICAgICApO1xuICogICAgIEkxOE5fMSA9IE1TR19FWFRFUk5BTF9YWFg7XG4gKiB9XG4gKiBlbHNlIHtcbiAqICAgICBJMThOXzEgPSAkbG9jYWxpemVgU29tZSBtZXNzYWdlIHdpdGggJHsnXFx1RkZGRDBcXHVGRkZEJ30hYDtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIFRoZSBvcmlnaW5hbCBpMThuIEFTVCBtZXNzYWdlIG5vZGVcbiAqIEBwYXJhbSB2YXJpYWJsZSBUaGUgdmFyaWFibGUgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRoZSB0cmFuc2xhdGlvbiwgZS5nLiBgSTE4Tl8xYC5cbiAqIEBwYXJhbSBjbG9zdXJlVmFyIFRoZSB2YXJpYWJsZSBmb3IgQ2xvc3VyZSBgZ29vZy5nZXRNc2dgIGNhbGxzLCBlLmcuIGBNU0dfRVhURVJOQUxfWFhYYC5cbiAqIEBwYXJhbSBwYXJhbXMgT2JqZWN0IG1hcHBpbmcgcGxhY2Vob2xkZXIgbmFtZXMgdG8gdGhlaXIgdmFsdWVzIChlLmcuXG4gKiBgeyBcImludGVycG9sYXRpb25cIjogXCJcXHVGRkZEMFxcdUZGRkRcIiB9YCkuXG4gKiBAcGFyYW0gdHJhbnNmb3JtRm4gT3B0aW9uYWwgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHRyYW5zbGF0aW9uIChlLmcuXG4gKiBwb3N0LXByb2Nlc3NpbmcpLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RhdGVtZW50cyB0aGF0IGRlZmluZWQgYSBnaXZlbiB0cmFuc2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb25EZWNsU3RtdHMoXG4gICAgbWVzc2FnZTogaTE4bi5NZXNzYWdlLCB2YXJpYWJsZTogby5SZWFkVmFyRXhwciwgY2xvc3VyZVZhcjogby5SZWFkVmFyRXhwcixcbiAgICBwYXJhbXM6IE1hcDxzdHJpbmcsIG8uRXhwcmVzc2lvbj4sXG4gICAgdHJhbnNmb3JtRm4/OiAocmF3OiBvLlJlYWRWYXJFeHByKSA9PiBvLkV4cHJlc3Npb24pOiBvLlN0YXRlbWVudFtdIHtcbiAgY29uc3QgcGFyYW1zT2JqZWN0ID0gT2JqZWN0LmZyb21FbnRyaWVzKHBhcmFtcyk7XG4gIGNvbnN0IHN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10gPSBbXG4gICAgZGVjbGFyZUkxOG5WYXJpYWJsZSh2YXJpYWJsZSksXG4gICAgby5pZlN0bXQoXG4gICAgICAgIGNyZWF0ZUNsb3N1cmVNb2RlR3VhcmQoKSxcbiAgICAgICAgY3JlYXRlR29vZ2xlR2V0TXNnU3RhdGVtZW50cyh2YXJpYWJsZSwgbWVzc2FnZSwgY2xvc3VyZVZhciwgcGFyYW1zT2JqZWN0KSxcbiAgICAgICAgY3JlYXRlTG9jYWxpemVTdGF0ZW1lbnRzKFxuICAgICAgICAgICAgdmFyaWFibGUsIG1lc3NhZ2UsXG4gICAgICAgICAgICBmb3JtYXRJMThuUGxhY2Vob2xkZXJOYW1lc0luTWFwKHBhcmFtc09iamVjdCwgLyogdXNlQ2FtZWxDYXNlICovIGZhbHNlKSkpLFxuICBdO1xuXG4gIGlmICh0cmFuc2Zvcm1Gbikge1xuICAgIHN0YXRlbWVudHMucHVzaChuZXcgby5FeHByZXNzaW9uU3RhdGVtZW50KHZhcmlhYmxlLnNldCh0cmFuc2Zvcm1Gbih2YXJpYWJsZSkpKSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ3VhcmQgdGhlIGNsb3N1cmUgbW9kZSBibG9ja1xuICogSXQgaXMgZXF1aXZhbGVudCB0bzpcbiAqXG4gKiBgYGBcbiAqIHR5cGVvZiBuZ0kxOG5DbG9zdXJlTW9kZSAhPT0gdW5kZWZpbmVkICYmIG5nSTE4bkNsb3N1cmVNb2RlXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xvc3VyZU1vZGVHdWFyZCgpOiBvLkJpbmFyeU9wZXJhdG9yRXhwciB7XG4gIHJldHVybiBvLnR5cGVvZkV4cHIoby52YXJpYWJsZShOR19JMThOX0NMT1NVUkVfTU9ERSkpXG4gICAgICAubm90SWRlbnRpY2FsKG8ubGl0ZXJhbCgndW5kZWZpbmVkJywgby5TVFJJTkdfVFlQRSkpXG4gICAgICAuYW5kKG8udmFyaWFibGUoTkdfSTE4Tl9DTE9TVVJFX01PREUpKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdmFycyB3aXRoIENsb3N1cmUtc3BlY2lmaWMgbmFtZXMgZm9yIGkxOG4gYmxvY2tzIChpLmUuIGBNU0dfWFhYYCkuXG4gKi9cbmZ1bmN0aW9uIGkxOG5HZW5lcmF0ZUNsb3N1cmVWYXIoXG4gICAgcG9vbDogQ29uc3RhbnRQb29sLCBtZXNzYWdlSWQ6IHN0cmluZywgZmlsZUJhc2VkSTE4blN1ZmZpeDogc3RyaW5nLFxuICAgIHVzZUV4dGVybmFsSWRzOiBib29sZWFuKTogby5SZWFkVmFyRXhwciB7XG4gIGxldCBuYW1lOiBzdHJpbmc7XG4gIGNvbnN0IHN1ZmZpeCA9IGZpbGVCYXNlZEkxOG5TdWZmaXg7XG4gIGlmICh1c2VFeHRlcm5hbElkcykge1xuICAgIGNvbnN0IHByZWZpeCA9IGdldFRyYW5zbGF0aW9uQ29uc3RQcmVmaXgoYEVYVEVSTkFMX2ApO1xuICAgIGNvbnN0IHVuaXF1ZVN1ZmZpeCA9IHBvb2wudW5pcXVlTmFtZShzdWZmaXgpO1xuICAgIG5hbWUgPSBgJHtwcmVmaXh9JHtzYW5pdGl6ZUlkZW50aWZpZXIobWVzc2FnZUlkKX0kJCR7dW5pcXVlU3VmZml4fWA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJlZml4ID0gZ2V0VHJhbnNsYXRpb25Db25zdFByZWZpeChzdWZmaXgpO1xuICAgIG5hbWUgPSBwb29sLnVuaXF1ZU5hbWUocHJlZml4KTtcbiAgfVxuICByZXR1cm4gby52YXJpYWJsZShuYW1lKTtcbn1cbiJdfQ==
|
|
@@ -1,53 +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
|
-
/**
|
|
11
|
-
* Extracts ICUs into i18n expressions.
|
|
12
|
-
*/
|
|
13
|
-
export function phaseIcuExtraction(job) {
|
|
14
|
-
for (const unit of job.units) {
|
|
15
|
-
// Build a map of ICU to the i18n block they belong to, then remove the `Icu` ops.
|
|
16
|
-
const icus = new Map();
|
|
17
|
-
let currentI18nId = null;
|
|
18
|
-
for (const op of unit.create) {
|
|
19
|
-
switch (op.kind) {
|
|
20
|
-
case ir.OpKind.I18nStart:
|
|
21
|
-
currentI18nId = op.xref;
|
|
22
|
-
break;
|
|
23
|
-
case ir.OpKind.I18nEnd:
|
|
24
|
-
currentI18nId = null;
|
|
25
|
-
break;
|
|
26
|
-
case ir.OpKind.Icu:
|
|
27
|
-
if (currentI18nId === null) {
|
|
28
|
-
throw Error('Unexpected ICU outside of an i18n block.');
|
|
29
|
-
}
|
|
30
|
-
icus.set(op.xref, { message: op.message, i18nBlockId: currentI18nId });
|
|
31
|
-
ir.OpList.remove(op);
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// Replace the `IcuUpdate` ops with `i18nExpr` ops.
|
|
36
|
-
for (const op of unit.update) {
|
|
37
|
-
switch (op.kind) {
|
|
38
|
-
case ir.OpKind.IcuUpdate:
|
|
39
|
-
const { message, i18nBlockId } = icus.get(op.xref);
|
|
40
|
-
const icuNode = message.nodes.find((n) => n instanceof i18n.Icu);
|
|
41
|
-
if (icuNode === undefined) {
|
|
42
|
-
throw Error('Could not find ICU in i18n AST');
|
|
43
|
-
}
|
|
44
|
-
if (icuNode.expressionPlaceholder === undefined) {
|
|
45
|
-
throw Error('ICU is missing an i18n placeholder');
|
|
46
|
-
}
|
|
47
|
-
ir.OpList.replace(op, ir.createI18nExpressionOp(i18nBlockId, new ir.LexicalReadExpr(icuNode.expression), icuNode.expressionPlaceholder, ir.I18nParamResolutionTime.Postproccessing, null));
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWN1X2V4dHJhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvdGVtcGxhdGUvcGlwZWxpbmUvc3JjL3BoYXNlcy9pY3VfZXh0cmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRy9COztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQW1CO0lBQ3BELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtRQUM1QixrRkFBa0Y7UUFDbEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQThELENBQUM7UUFDbkYsSUFBSSxhQUFhLEdBQW1CLElBQUksQ0FBQztRQUN6QyxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDNUIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO2dCQUNmLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTO29CQUN0QixhQUFhLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztvQkFDeEIsTUFBTTtnQkFDUixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTztvQkFDcEIsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDckIsTUFBTTtnQkFDUixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRztvQkFDaEIsSUFBSSxhQUFhLEtBQUssSUFBSSxFQUFFO3dCQUMxQixNQUFNLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO3FCQUN6RDtvQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQztvQkFDckUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWMsRUFBRSxDQUFDLENBQUM7b0JBQ2xDLE1BQU07YUFDVDtTQUNGO1FBRUQsbURBQW1EO1FBQ25ELEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM1QixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2YsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7b0JBQ3RCLE1BQU0sRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFFLENBQUM7b0JBQ2xELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFpQixFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO3dCQUN6QixNQUFNLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO3FCQUMvQztvQkFDRCxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLEVBQUU7d0JBQy9DLE1BQU0sS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7cUJBQ25EO29CQUNELEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNiLEVBQUUsRUFDRixFQUFFLENBQUMsc0JBQXNCLENBQ3JCLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUN2RCxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsRUFDekUsSUFBSyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsTUFBTTthQUNUO1NBQ0Y7S0FDRjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgaTE4biBmcm9tICcuLi8uLi8uLi8uLi9pMThuL2kxOG5fYXN0JztcbmltcG9ydCAqIGFzIGlyIGZyb20gJy4uLy4uL2lyJztcbmltcG9ydCB7Q29tcGlsYXRpb25Kb2J9IGZyb20gJy4uL2NvbXBpbGF0aW9uJztcblxuLyoqXG4gKiBFeHRyYWN0cyBJQ1VzIGludG8gaTE4biBleHByZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBoYXNlSWN1RXh0cmFjdGlvbihqb2I6IENvbXBpbGF0aW9uSm9iKTogdm9pZCB7XG4gIGZvciAoY29uc3QgdW5pdCBvZiBqb2IudW5pdHMpIHtcbiAgICAvLyBCdWlsZCBhIG1hcCBvZiBJQ1UgdG8gdGhlIGkxOG4gYmxvY2sgdGhleSBiZWxvbmcgdG8sIHRoZW4gcmVtb3ZlIHRoZSBgSWN1YCBvcHMuXG4gICAgY29uc3QgaWN1cyA9IG5ldyBNYXA8aXIuWHJlZklkLCB7bWVzc2FnZTogaTE4bi5NZXNzYWdlLCBpMThuQmxvY2tJZDogaXIuWHJlZklkfT4oKTtcbiAgICBsZXQgY3VycmVudEkxOG5JZDogaXIuWHJlZklkfG51bGwgPSBudWxsO1xuICAgIGZvciAoY29uc3Qgb3Agb2YgdW5pdC5jcmVhdGUpIHtcbiAgICAgIHN3aXRjaCAob3Aua2luZCkge1xuICAgICAgICBjYXNlIGlyLk9wS2luZC5JMThuU3RhcnQ6XG4gICAgICAgICAgY3VycmVudEkxOG5JZCA9IG9wLnhyZWY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLkkxOG5FbmQ6XG4gICAgICAgICAgY3VycmVudEkxOG5JZCA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgaXIuT3BLaW5kLkljdTpcbiAgICAgICAgICBpZiAoY3VycmVudEkxOG5JZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZXhwZWN0ZWQgSUNVIG91dHNpZGUgb2YgYW4gaTE4biBibG9jay4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWN1cy5zZXQob3AueHJlZiwge21lc3NhZ2U6IG9wLm1lc3NhZ2UsIGkxOG5CbG9ja0lkOiBjdXJyZW50STE4bklkfSk7XG4gICAgICAgICAgaXIuT3BMaXN0LnJlbW92ZTxpci5DcmVhdGVPcD4ob3ApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlcGxhY2UgdGhlIGBJY3VVcGRhdGVgIG9wcyB3aXRoIGBpMThuRXhwcmAgb3BzLlxuICAgIGZvciAoY29uc3Qgb3Agb2YgdW5pdC51cGRhdGUpIHtcbiAgICAgIHN3aXRjaCAob3Aua2luZCkge1xuICAgICAgICBjYXNlIGlyLk9wS2luZC5JY3VVcGRhdGU6XG4gICAgICAgICAgY29uc3Qge21lc3NhZ2UsIGkxOG5CbG9ja0lkfSA9IGljdXMuZ2V0KG9wLnhyZWYpITtcbiAgICAgICAgICBjb25zdCBpY3VOb2RlID0gbWVzc2FnZS5ub2Rlcy5maW5kKChuKTogbiBpcyBpMThuLkljdSA9PiBuIGluc3RhbmNlb2YgaTE4bi5JY3UpO1xuICAgICAgICAgIGlmIChpY3VOb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdDb3VsZCBub3QgZmluZCBJQ1UgaW4gaTE4biBBU1QnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGljdU5vZGUuZXhwcmVzc2lvblBsYWNlaG9sZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdJQ1UgaXMgbWlzc2luZyBhbiBpMThuIHBsYWNlaG9sZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlyLk9wTGlzdC5yZXBsYWNlPGlyLlVwZGF0ZU9wPihcbiAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgIGlyLmNyZWF0ZUkxOG5FeHByZXNzaW9uT3AoXG4gICAgICAgICAgICAgICAgICBpMThuQmxvY2tJZCwgbmV3IGlyLkxleGljYWxSZWFkRXhwcihpY3VOb2RlLmV4cHJlc3Npb24pLFxuICAgICAgICAgICAgICAgICAgaWN1Tm9kZS5leHByZXNzaW9uUGxhY2Vob2xkZXIsIGlyLkkxOG5QYXJhbVJlc29sdXRpb25UaW1lLlBvc3Rwcm9jY2Vzc2luZyxcbiAgICAgICAgICAgICAgICAgIG51bGwhKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|