aboutsummaryrefslogtreecommitdiff
path: root/generate_json.js
diff options
context:
space:
mode:
authorikoamu <ikoamu@gmail.com>2024-01-24 21:27:40 +0900
committerikoamu <ikoamu@gmail.com>2024-01-24 21:27:40 +0900
commitaef1376d811faebdef4969e38f7330e176091f57 (patch)
tree938d810cde0747f43d2d9116ce26a9491610e4ec /generate_json.js
parentdc83e40efe39932b17ccf7ef74fdca5ed127c1e3 (diff)
Add graphdata generation and note creation scripts
Diffstat (limited to 'generate_json.js')
-rw-r--r--generate_json.js106
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();