Skip to content

Commit edc6e00

Browse files
committed
Allow parse queries to array
1 parent 62f3e77 commit edc6e00

4 files changed

Lines changed: 43 additions & 16 deletions

File tree

index.js

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

5571
module.exports = {
56-
parseText
72+
parseTextToArray,
73+
parseTextToObject,
74+
parseText: parseTextToObject
5775
}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"unit": "node test/*.js"
2828
},
2929
"devDependencies": {
30-
"standard": "^10.0.3",
31-
"tape": "^4.8.0"
30+
"standard": "^12.0.1",
31+
"tape": "^4.9.1"
3232
}
3333
}

test/parse-text-fixtures.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
"name": "simple",
33
"text": "-- name: selectAll\nSELECT * FROM table_name; -- comment",
44
"queries": {
5-
"selectAll": "SELECT * FROM table_name;"
5+
"obj": {
6+
"selectAll": "SELECT * FROM table_name;"
7+
},
8+
"array": [{
9+
"name": "selectAll",
10+
"query": "SELECT * FROM table_name;"
11+
}]
612
}
713
}]

test/parse-text.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ const fixtures = require('./parse-text-fixtures.json')
44

55
for (const fixture of fixtures) {
66
test(`fixture#${fixture.name}`, (t) => {
7-
const queries = jsyesql.parseText(fixture.text)
8-
t.same(queries, fixture.queries)
7+
const arr = jsyesql.parseTextToArray(fixture.text)
8+
t.same(arr, fixture.queries.array)
9+
10+
const obj = jsyesql.parseTextToObject(fixture.text)
11+
t.same(obj, fixture.queries.obj)
912

1013
t.end()
1114
})

0 commit comments

Comments
 (0)