1
1
import { NodeTypes } from '@intlify/message-compiler'
2
2
import { hasOwn , isNumber } from '@intlify/shared'
3
+ import {
4
+ createUnhandleNodeError ,
5
+ resolveBody ,
6
+ resolveCases ,
7
+ resolveItems ,
8
+ resolveLinkedKey ,
9
+ resolveLinkedModifier ,
10
+ resolveStatic ,
11
+ resolveType ,
12
+ resolveValue
13
+ } from './ast'
3
14
4
15
import type {
5
- LinkedModifierNode ,
6
16
LinkedNode ,
7
17
ListNode ,
8
18
MessageNode ,
@@ -53,22 +63,6 @@ export function formatParts<Message = string>(
53
63
}
54
64
}
55
65
56
- const PROPS_BODY = [ 'b' , 'body' ]
57
-
58
- function resolveBody ( node : ResourceNode ) {
59
- return resolveProps < MessageNode | PluralNode > ( node , PROPS_BODY )
60
- }
61
-
62
- const PROPS_CASES = [ 'c' , 'cases' ]
63
-
64
- function resolveCases ( node : PluralNode ) {
65
- return resolveProps < PluralNode [ 'cases' ] , PluralNode [ 'cases' ] > (
66
- node ,
67
- PROPS_CASES ,
68
- [ ]
69
- )
70
- }
71
-
72
66
export function formatMessageParts < Message = string > (
73
67
ctx : MessageContext < Message > ,
74
68
node : MessageNode
@@ -87,22 +81,6 @@ export function formatMessageParts<Message = string>(
87
81
}
88
82
}
89
83
90
- const PROPS_STATIC = [ 's' , 'static' ]
91
-
92
- function resolveStatic ( node : MessageNode ) {
93
- return resolveProps ( node , PROPS_STATIC )
94
- }
95
-
96
- const PROPS_ITEMS = [ 'i' , 'items' ]
97
-
98
- function resolveItems ( node : MessageNode ) {
99
- return resolveProps < MessageNode [ 'items' ] , MessageNode [ 'items' ] > (
100
- node ,
101
- PROPS_ITEMS ,
102
- [ ]
103
- )
104
- }
105
-
106
84
type NodeValue < Message > = {
107
85
v ?: MessageType < Message >
108
86
value ?: MessageType < Message >
@@ -160,63 +138,3 @@ export function formatMessagePart<Message = string>(
160
138
throw new Error ( `unhandled node on format message part: ${ type } ` )
161
139
}
162
140
}
163
-
164
- const PROPS_TYPE = [ 't' , 'type' ]
165
-
166
- export function resolveType ( node : Node ) {
167
- return resolveProps < NodeTypes > ( node , PROPS_TYPE )
168
- }
169
-
170
- const PROPS_VALUE = [ 'v' , 'value' ]
171
-
172
- function resolveValue < Message = string > (
173
- node : { v ?: MessageType < Message > ; value ?: MessageType < Message > } ,
174
- type : NodeTypes
175
- ) : MessageType < Message > {
176
- const resolved = resolveProps < Message > (
177
- node as Node ,
178
- PROPS_VALUE
179
- ) as MessageType < Message >
180
- if ( resolved ) {
181
- return resolved
182
- } else {
183
- throw createUnhandleNodeError ( type )
184
- }
185
- }
186
-
187
- const PROPS_MODIFIER = [ 'm' , 'modifier' ]
188
-
189
- function resolveLinkedModifier ( node : LinkedNode ) {
190
- return resolveProps < LinkedModifierNode > ( node , PROPS_MODIFIER )
191
- }
192
-
193
- const PROPS_KEY = [ 'k' , 'key' ]
194
-
195
- function resolveLinkedKey ( node : LinkedNode ) {
196
- const resolved = resolveProps < LinkedNode [ 'key' ] > ( node , PROPS_KEY )
197
- if ( resolved ) {
198
- return resolved
199
- } else {
200
- throw createUnhandleNodeError ( NodeTypes . Linked )
201
- }
202
- }
203
-
204
- function resolveProps < T = string , Default = undefined > (
205
- node : Node ,
206
- props : string [ ] ,
207
- defaultValue ?: Default
208
- ) : T | Default {
209
- for ( let i = 0 ; i < props . length ; i ++ ) {
210
- const prop = props [ i ]
211
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
212
- if ( hasOwn ( node , prop ) && ( node as any ) [ prop ] != null ) {
213
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
214
- return ( node as any ) [ prop ] as T
215
- }
216
- }
217
- return defaultValue as Default
218
- }
219
-
220
- function createUnhandleNodeError ( type : NodeTypes ) {
221
- return new Error ( `unhandled node type: ${ type } ` )
222
- }
0 commit comments