1
- import { Message , Parameter , Part , Phrase , Selector , StringLiteral , Variant } from "./model.js" ;
1
+ import {
2
+ Message ,
3
+ Parameter ,
4
+ PatternElement ,
5
+ Phrase ,
6
+ Selector ,
7
+ StringLiteral ,
8
+ Variant ,
9
+ } from "./model.js" ;
2
10
import { REGISTRY } from "./registry.js" ;
3
11
4
12
// A value passed in as a variable to format() or to which literals are resolved
@@ -51,7 +59,7 @@ export class FormattingContext {
51
59
locale : string ;
52
60
message : Message ;
53
61
vars : Record < string , RuntimeValue < unknown > > ;
54
- visited : WeakSet < Array < Part > > ;
62
+ visited : WeakSet < Array < PatternElement > > ;
55
63
// TODO(stasm): expose cached formatters, etc.
56
64
57
65
constructor ( locale : string , message : Message , vars : Record < string , RuntimeValue < unknown > > ) {
@@ -66,33 +74,33 @@ export class FormattingContext {
66
74
return this . formatPattern ( variant . value ) ;
67
75
}
68
76
69
- formatPattern ( parts : Array < Part > ) : string {
70
- if ( this . visited . has ( parts ) ) {
77
+ formatPattern ( pattern : Array < PatternElement > ) : string {
78
+ if ( this . visited . has ( pattern ) ) {
71
79
throw new RangeError ( "Recursive reference to a variant value." ) ;
72
80
}
73
81
74
- this . visited . add ( parts ) ;
82
+ this . visited . add ( pattern ) ;
75
83
let result = "" ;
76
- for ( let part of parts ) {
77
- switch ( part . type ) {
84
+ for ( let element of pattern ) {
85
+ switch ( element . type ) {
78
86
case "StringLiteral" :
79
- result += part . value ;
87
+ result += element . value ;
80
88
continue ;
81
89
case "VariableReference" : {
82
- let value = this . vars [ part . name ] ;
90
+ let value = this . vars [ element . name ] ;
83
91
result += value . format ( this ) ;
84
92
continue ;
85
93
}
86
94
case "FunctionCall" : {
87
- let callable = REGISTRY [ part . name ] ;
88
- let value = callable ( this , part . args , part . opts ) ;
95
+ let callable = REGISTRY [ element . name ] ;
96
+ let value = callable ( this , element . args , element . opts ) ;
89
97
result += value . format ( this ) ;
90
98
continue ;
91
99
}
92
100
}
93
101
}
94
102
95
- this . visited . delete ( parts ) ;
103
+ this . visited . delete ( pattern ) ;
96
104
return result ;
97
105
}
98
106
0 commit comments