6
6
7
7
const glob = require ( 'glob' )
8
8
const { resolve } = require ( 'path' )
9
+ const jsonAstParse = require ( 'json-to-ast' )
9
10
10
11
const UNEXPETECD_ERROR_LOCATION = { line : 1 , column : 0 }
11
12
@@ -25,6 +26,10 @@ function defineTemplateBodyVisitor (context, templateBodyVisitor, scriptVisitor)
25
26
return context . parserServices . defineTemplateBodyVisitor ( templateBodyVisitor , scriptVisitor )
26
27
}
27
28
29
+ function findExistLocaleMessage ( fullpath , localeMessages ) {
30
+ return localeMessages . find ( message => message . fullpath === fullpath )
31
+ }
32
+
28
33
function loadLocaleMessages ( pattern ) {
29
34
const files = glob . sync ( pattern )
30
35
return files . map ( file => {
@@ -35,6 +40,19 @@ function loadLocaleMessages (pattern) {
35
40
} )
36
41
}
37
42
43
+ let localeMessages = null // locale messages
44
+ let localeDir = null // locale dir
45
+
46
+ function getLocaleMessages ( localeDirectory ) {
47
+ if ( localeDir !== localeDirectory ) {
48
+ localeDir = localeDirectory
49
+ localeMessages = loadLocaleMessages ( localeDir )
50
+ } else {
51
+ localeMessages = localeMessages || loadLocaleMessages ( localeDir )
52
+ }
53
+ return localeMessages
54
+ }
55
+
38
56
function findMissingsFromLocaleMessages ( localeMessages , key ) {
39
57
const missings = [ ]
40
58
const paths = key . split ( '.' )
@@ -56,9 +74,44 @@ function findMissingsFromLocaleMessages (localeMessages, key) {
56
74
return missings
57
75
}
58
76
77
+ function extractJsonInfo ( context , node ) {
78
+ try {
79
+ const [ str , filename ] = node . comments
80
+ return [
81
+ Buffer . from ( str . value , 'base64' ) . toString ( ) ,
82
+ Buffer . from ( filename . value , 'base64' ) . toString ( )
83
+ ]
84
+ } catch ( e ) {
85
+ context . report ( {
86
+ loc : UNEXPETECD_ERROR_LOCATION ,
87
+ message : e . message
88
+ } )
89
+ return [ ]
90
+ }
91
+ }
92
+
93
+ function generateJsonAst ( context , json , filename ) {
94
+ let ast = null
95
+
96
+ try {
97
+ ast = jsonAstParse ( json , { loc : true , source : filename } )
98
+ } catch ( e ) {
99
+ const { message, line, column } = e
100
+ context . report ( {
101
+ message,
102
+ loc : { line, column }
103
+ } )
104
+ }
105
+
106
+ return ast
107
+ }
108
+
59
109
module . exports = {
60
110
UNEXPETECD_ERROR_LOCATION ,
61
111
defineTemplateBodyVisitor,
62
- loadLocaleMessages,
63
- findMissingsFromLocaleMessages
112
+ getLocaleMessages,
113
+ findMissingsFromLocaleMessages,
114
+ findExistLocaleMessage,
115
+ extractJsonInfo,
116
+ generateJsonAst
64
117
}
0 commit comments