-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparse-item-files.js
73 lines (58 loc) · 1.9 KB
/
parse-item-files.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
var getFiles = require('./get-files');
function getItemsAsync(path,extension){
return new Promise(
(resolve,reject)=>{
var items = [];
getFiles.getFilesByTypeAsync(path,extension).then((filePaths)=>{
//filePaths is list of files
//get text from files
var fileTextPromises = filePaths.map(getFiles.readFileAsync);
//resolve promises
var fileTexts = Promise.all(fileTextPromises);
var fileNames = filePaths.map((filePath)=>{
return filePath.replace(path,'').replace(extension,'').replace(/[\W]/g,'-').toLowerCase();
});
fileTexts.then((fileText)=>{
//for each file, parse custom
fileText.forEach( function(element, index) {
let temp = customParser(element);
temp.slug=fileNames[index];
items[index] = temp;
});
//finally, resolve
resolve(items);
});
});
});
}
function customParser(text){
var keySignifier = '##';
var arraySignifier = '#*';
var data = text.split(keySignifier);
var obj = {};
data.forEach((item,index)=>{
if(data[index]){
data[index] = data[index].trim();
let firstLine = /^(.*)\n/;
let keyAndValue = data[index].split(firstLine);
//Index [0] is an empty string = ''
let key = keyAndValue[1].toLowerCase();
let value = keyAndValue[2].trim();
if(value.indexOf(arraySignifier)>-1){
//if it's supposed to be an array, convert to array.
//filter for empty array elements
value = value.split(arraySignifier).filter(function(el){
return el.length != 0;
});
//call trim() on each member
value = value.map(Function.prototype.call, String.prototype.trim);
}
//assign key and value to file object
obj[key] = value;
}
});
return obj;
}
module.exports = {
getItemsAsync: getItemsAsync
};