66
77const glob = require ( 'glob' )
88const { resolve } = require ( 'path' )
9+ const jsonAstParse = require ( 'json-to-ast' )
910
1011const UNEXPETECD_ERROR_LOCATION = { line : 1 , column : 0 }
1112
@@ -25,6 +26,10 @@ function defineTemplateBodyVisitor (context, templateBodyVisitor, scriptVisitor)
2526 return context . parserServices . defineTemplateBodyVisitor ( templateBodyVisitor , scriptVisitor )
2627}
2728
29+ function findExistLocaleMessage ( fullpath , localeMessages ) {
30+ return localeMessages . find ( message => message . fullpath === fullpath )
31+ }
32+
2833function loadLocaleMessages ( pattern ) {
2934 const files = glob . sync ( pattern )
3035 return files . map ( file => {
@@ -35,6 +40,19 @@ function loadLocaleMessages (pattern) {
3540 } )
3641}
3742
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+
3856function findMissingsFromLocaleMessages ( localeMessages , key ) {
3957 const missings = [ ]
4058 const paths = key . split ( '.' )
@@ -56,9 +74,44 @@ function findMissingsFromLocaleMessages (localeMessages, key) {
5674 return missings
5775}
5876
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+
59109module . exports = {
60110 UNEXPETECD_ERROR_LOCATION ,
61111 defineTemplateBodyVisitor,
62- loadLocaleMessages,
63- findMissingsFromLocaleMessages
112+ getLocaleMessages,
113+ findMissingsFromLocaleMessages,
114+ findExistLocaleMessage,
115+ extractJsonInfo,
116+ generateJsonAst
64117}
0 commit comments