diff options
Diffstat (limited to 'generate_json.js')
-rw-r--r-- | generate_json.js | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/generate_json.js b/generate_json.js new file mode 100644 index 0000000..be51cf0 --- /dev/null +++ b/generate_json.js @@ -0,0 +1,106 @@ +const sqlite3 = require('sqlite3').verbose(); +const dbFile = process.argv[2]; +const db = new sqlite3.Database(dbFile); +const fs = require('fs'); + +/** + * Parses the string of properties and returns an object containing the key-value pairs. + * If the key is 'FILE', the corresponding value is processed to extract the filename. + * @param {string} s - The string of properties. + * @returns {Object} - The object containing the parsed properties. + */ +function parseProperties(s) { + const properties = {}; + s.match(/\"(.*?)\" \. \"(.*?)\"/g).forEach(match => { + const [key, value] = match.match(/\"(.*?)\"/g).map(v => v.replace(/"/g, '')); + properties[key] = key === 'FILE' ? getFilename(value) : value; + }); + return removeQuotesFromObject(properties); +} + +/** + * Removes the double quotes from the object. + * @param {Object} obj - The object to be processed. + * @returns {Object} - The object without double quotes. + */ +function removeQuotesFromObject(obj) { + for (let key in obj) { + if (typeof obj[key] === 'string') { + obj[key] = obj[key].replace(/^"|"$/g, ''); + } else if (typeof obj[key] === 'object') { + obj[key] = removeQuotesFromObject(obj[key]); + } + } + return obj; +} + +/** + * Extracts the filename from the path. + * @param {string} path - The path to be processed. + * @returns {string} - The filename. + */ +function getFilename(path) { + return path.split('/').pop(); +} + +const queryNodes = ` +SELECT + tags.tag as tags, + nodes.properties, + nodes.olp, + nodes.pos, + nodes.level, + nodes.title, + nodes.file, + nodes.id +FROM + nodes +LEFT JOIN + tags +ON + nodes.id = tags.node_id +GROUP BY + nodes.id +`; + +const queryLinks = ` +SELECT + type, dest as target, source +FROM + links +WHERE + type = '"id"' +`; + +const queryTags = ` +SELECT + * +FROM + tags +`; + +const graphdata = { + type: "graphdata", + data: {}, +}; +db.all(queryNodes, (_, nodes) => + db.all(queryLinks, (_, links) => + db.all(queryTags, (_, tags) => { + graphdata.data.nodes = nodes.map(node => ({ + ...node, + tags: node.tags ?? [null], + file: getFilename(node.file), + properties: parseProperties(node.properties), + })); + graphdata.data.links = links; + graphdata.data.tags = tags.length ? tags : null; + + fs.writeFile('graphdata.json', JSON.stringify(removeQuotesFromObject(graphdata)), (err) => { + if (err) throw err; + console.log('The file has been saved!'); + }); + }), + ), +); + +db.close(); |