@@ -20,23 +20,34 @@ function parseLine (line) {
2020 return { type : 'query' , value : line }
2121}
2222
23- function parseText ( text ) {
24- let lastTag = null
23+ function arrayToObject ( queries ) {
24+ return queries . reduce ( ( obj , item ) => {
25+ obj [ item . name ] = item . query
26+ return obj
27+ } , { } )
28+ }
29+
30+ function parseTextToArray ( text ) {
2531 let lastLine = null
32+ let lastTag = null
33+
34+ const queries = [ ]
35+ function pushQuery ( name , query ) {
36+ const obj = queries . find ( ( query ) => query . name === name )
37+ if ( obj ) obj . query += ' ' + query
38+ else queries . push ( { name, query } )
39+ }
2640
27- return text . split ( '\n' ) . reduce ( ( queries , line ) => {
28- line = parseLine ( line )
41+ for ( const lineRaw of text . split ( '\n' ) ) {
42+ const line = parseLine ( lineRaw )
2943 switch ( line . type ) {
3044 case 'blank' :
3145 case 'comment' :
3246 break
3347
3448 case 'query' :
3549 if ( lastTag === null ) throw new Error ( 'Query without tag' )
36-
37- let query = line . value
38- if ( queries [ lastTag ] !== undefined ) query = queries [ lastTag ] + ' ' + query
39- queries [ lastTag ] = query
50+ pushQuery ( lastTag , line . value )
4051
4152 break
4253
@@ -48,10 +59,17 @@ function parseText (text) {
4859 }
4960
5061 lastLine = line
51- return queries
52- } , { } )
62+ }
63+
64+ return queries
65+ }
66+
67+ function parseTextToObject ( text ) {
68+ return arrayToObject ( parseTextToArray ( text ) )
5369}
5470
5571module . exports = {
56- parseText
72+ parseTextToArray,
73+ parseTextToObject,
74+ parseText : parseTextToObject
5775}
0 commit comments