1
1
import { createLiteralElement , isLiteralElement , MessageFormatElement } from '@formatjs/icu-messageformat-parser'
2
+
2
3
import { Transformer } from './Transformer'
4
+ import { Handler } from './types'
3
5
4
6
export const ACCENTED_MAP = new Transformer (
5
7
'\u0226\u0181\u0187\u1e12\u1e16\u0191\u0193\u0126\u012a\u0134\u0136\u013f\u1e3e\u0220\u01fe\u01a4\u024a\u0158\u015e\u0166\u016c\u1e7c\u1e86\u1e8a\u1e8e\u1e90' ,
@@ -13,32 +15,32 @@ export const FLIPPED_MAP = new Transformer(
13
15
false
14
16
)
15
17
16
- export function createEnglishTransformer ( brackets : string , transformer : Transformer ) {
18
+ export function createEnglishTransformer ( brackets : string , transformer : Transformer ) : Handler {
17
19
const [ leftBracket , rightBracket ] = brackets
20
+ const handler = transformLiteralElement ( transformer . stringify )
18
21
return function * ( elements : Iterable < MessageFormatElement > ) {
19
22
yield createLiteralElement ( leftBracket )
20
- yield * modifyLiteralElement ( elements , transformer . stringify )
23
+ yield * handler ( elements )
21
24
yield createLiteralElement ( rightBracket )
22
25
}
23
26
}
24
27
25
- export function * modifyLiteralElement (
26
- elements : Iterable < MessageFormatElement > ,
27
- modifier : ( input : string ) => string
28
- ) : Iterable < MessageFormatElement > {
29
- for ( const element of elements ) {
30
- if ( isLiteralElement ( element ) ) {
31
- yield { ...element , value : modifier ( element . value ) }
32
- } else if ( 'options' in element ) {
33
- const entries = Object . entries ( element . options ) . map ( ( [ key , option ] ) => [
34
- key ,
35
- { value : Array . from ( modifyLiteralElement ( option . value , modifier ) ) } ,
36
- ] )
37
- yield { ...element , options : Object . fromEntries ( entries ) }
38
- } else if ( 'children' in element ) {
39
- yield { ...element , children : Array . from ( modifyLiteralElement ( element . children , modifier ) ) }
40
- } else {
41
- yield element
28
+ export function transformLiteralElement ( modifier : ( input : string ) => string ) : Handler {
29
+ return function * handler ( elements ) : Iterable < MessageFormatElement > {
30
+ for ( const element of elements ) {
31
+ if ( isLiteralElement ( element ) ) {
32
+ yield { ...element , value : modifier ( element . value ) }
33
+ } else if ( 'options' in element ) {
34
+ const entries = Object . entries ( element . options ) . map ( ( [ key , option ] ) => [
35
+ key ,
36
+ { value : Array . from ( handler ( option . value ) ) } ,
37
+ ] )
38
+ yield { ...element , options : Object . fromEntries ( entries ) }
39
+ } else if ( 'children' in element ) {
40
+ yield { ...element , children : Array . from ( handler ( element . children ) ) }
41
+ } else {
42
+ yield element
43
+ }
42
44
}
43
45
}
44
46
}
0 commit comments