@@ -10,6 +10,7 @@ import type {
10
10
LinkedNode ,
11
11
LinkedKeyNode ,
12
12
LinkedModifierNode ,
13
+ PluralNode ,
13
14
ResourceNode
14
15
} from '@intlify/message-compiler'
15
16
import type {
@@ -24,18 +25,19 @@ export function format<Message = string>(
24
25
) : MessageFunction < Message > {
25
26
const msg = ( ctx : MessageContext < Message > ) : MessageFunctionReturn < Message > =>
26
27
formatParts < Message > ( ctx , ast )
27
- // TODO: add meta data for vue-devtools debugging, such as `key`, `source` and `locale`
28
- // TODO: optimization for static text message
29
28
return msg
30
29
}
31
30
32
31
function formatParts < Message = string > (
33
32
ctx : MessageContext < Message > ,
34
33
ast : ResourceNode
35
34
) : MessageFunctionReturn < Message > {
36
- if ( ast . body . type === NodeTypes . Plural ) {
35
+ const body = ast . b || ast . body
36
+ if ( ( body . t || body . type ) === NodeTypes . Plural ) {
37
+ const plural = body as PluralNode
38
+ const cases = plural . c || plural . cases
37
39
return ctx . plural (
38
- ast . body . cases . reduce (
40
+ cases . reduce (
39
41
( messages , c ) =>
40
42
[
41
43
...messages ,
@@ -45,20 +47,21 @@ function formatParts<Message = string>(
45
47
) as Message [ ]
46
48
) as MessageFunctionReturn < Message >
47
49
} else {
48
- return formatMessageParts ( ctx , ast . body )
50
+ return formatMessageParts ( ctx , body as MessageNode )
49
51
}
50
52
}
51
53
52
54
function formatMessageParts < Message = string > (
53
55
ctx : MessageContext < Message > ,
54
56
node : MessageNode
55
57
) : MessageFunctionReturn < Message > {
56
- if ( node . static ) {
58
+ const _static = node . s || node . static
59
+ if ( _static ) {
57
60
return ctx . type === 'text'
58
- ? ( node . static as MessageFunctionReturn < Message > )
59
- : ctx . normalize ( [ node . static ] as MessageType < Message > [ ] )
61
+ ? ( _static as MessageFunctionReturn < Message > )
62
+ : ctx . normalize ( [ _static ] as MessageType < Message > [ ] )
60
63
} else {
61
- const messages = node . items . reduce (
64
+ const messages = ( node . i || node . items ) . reduce (
62
65
( acm , c ) => [ ...acm , formatMessagePart ( ctx , c ) ] ,
63
66
[ ] as MessageType < Message > [ ]
64
67
)
@@ -70,30 +73,35 @@ function formatMessagePart<Message = string>(
70
73
ctx : MessageContext < Message > ,
71
74
node : Node
72
75
) : MessageType < Message > {
73
- switch ( node . type ) {
76
+ const type = node . t || node . type
77
+ switch ( type ) {
74
78
case NodeTypes . Text :
75
- return ( node as TextNode ) . value as MessageType < Message >
79
+ const text = node as TextNode
80
+ return ( text . v || text . value ) as MessageType < Message >
76
81
case NodeTypes . Literal :
77
- return ( node as LiteralNode ) . value as MessageType < Message >
82
+ const literal = node as LiteralNode
83
+ return ( literal . v || literal . value ) as MessageType < Message >
78
84
case NodeTypes . Named :
79
- return ctx . interpolate ( ctx . named ( ( node as NamedNode ) . key ) )
85
+ const named = node as NamedNode
86
+ return ctx . interpolate ( ctx . named ( named . k || named . key ) )
80
87
case NodeTypes . List :
81
- return ctx . interpolate ( ctx . list ( ( node as ListNode ) . index ) )
88
+ const list = node as ListNode
89
+ return ctx . interpolate ( ctx . list ( list . i || list . index ) )
82
90
case NodeTypes . Linked :
91
+ const linked = node as LinkedNode
92
+ const modifier = linked . m || linked . modifier
83
93
return ctx . linked (
84
- formatMessagePart ( ctx , ( node as LinkedNode ) . key ) as string ,
85
- ( node as LinkedNode ) . modifier
86
- ? ( formatMessagePart ( ctx , ( node as LinkedNode ) . modifier ! ) as string )
87
- : undefined ,
94
+ formatMessagePart ( ctx , linked . k || linked . key ) as string ,
95
+ modifier ? ( formatMessagePart ( ctx , modifier ) as string ) : undefined ,
88
96
ctx . type
89
97
)
90
98
case NodeTypes . LinkedKey :
91
- return ( node as LinkedKeyNode ) . value as MessageType < Message >
99
+ const linkedKey = node as LinkedKeyNode
100
+ return ( linkedKey . v || linkedKey . value ) as MessageType < Message >
92
101
case NodeTypes . LinkedModifier :
93
- return ( node as LinkedModifierNode ) . value as MessageType < Message >
102
+ const linkedModifier = node as LinkedModifierNode
103
+ return ( linkedModifier . v || linkedModifier . value ) as MessageType < Message >
94
104
default :
95
- throw new Error (
96
- `unhandled node type on format message part: ${ node . type } `
97
- )
105
+ throw new Error ( `unhandled node type on format message part: ${ type } ` )
98
106
}
99
107
}
0 commit comments