11import { NodeTypes } from '@intlify/message-compiler'
22import { 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'
314
415import type {
5- LinkedModifierNode ,
616 LinkedNode ,
717 ListNode ,
818 MessageNode ,
@@ -53,22 +63,6 @@ export function formatParts<Message = string>(
5363 }
5464}
5565
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-
7266export function formatMessageParts < Message = string > (
7367 ctx : MessageContext < Message > ,
7468 node : MessageNode
@@ -87,22 +81,6 @@ export function formatMessageParts<Message = string>(
8781 }
8882}
8983
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-
10684type NodeValue < Message > = {
10785 v ?: MessageType < Message >
10886 value ?: MessageType < Message >
@@ -160,63 +138,3 @@ export function formatMessagePart<Message = string>(
160138 throw new Error ( `unhandled node on format message part: ${ type } ` )
161139 }
162140}
163-
164- const PROPS_TYPE = [ 't' , 'type' ]
165-
166- export function resolveType ( node : Node ) : ReturnType < typeof resolveProps > {
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 != null ) {
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