11import { createLiteralElement , isLiteralElement , MessageFormatElement } from '@formatjs/icu-messageformat-parser'
2+
23import { Transformer } from './Transformer'
4+ import { Handler } from './types'
35
46export const ACCENTED_MAP = new Transformer (
57 '\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(
1315 false
1416)
1517
16- export function createEnglishTransformer ( brackets : string , transformer : Transformer ) {
18+ export function createEnglishTransformer ( brackets : string , transformer : Transformer ) : Handler {
1719 const [ leftBracket , rightBracket ] = brackets
20+ const handler = transformLiteralElement ( transformer . stringify )
1821 return function * ( elements : Iterable < MessageFormatElement > ) {
1922 yield createLiteralElement ( leftBracket )
20- yield * modifyLiteralElement ( elements , transformer . stringify )
23+ yield * handler ( elements )
2124 yield createLiteralElement ( rightBracket )
2225 }
2326}
2427
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+ }
4244 }
4345 }
4446}
0 commit comments