Files
bsky-social-app/data/gen.mjs
T
2025-04-01 12:11:03 -05:00

59 lines
1.4 KiB
JavaScript

import { readdirSync, readFileSync, writeFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { dirname, join, basename } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
function csvToJson(csv, filename) {
const res = {
filename,
data: []
}
const [header, ...rows] = csv.split('\n').filter(Boolean)
const headers = header.split('\t')
for (const row of rows) {
const o = {}
const columns = row.split('\t')
for (let i = 0; i < columns.length; i++) {
const [header, type] = headers[i].split(':')
o[header] = applyColumnType(sanitize(type), sanitize(columns[i]))
}
res.data.push(o)
}
return res
}
function sanitize(value) {
return value.trim().replace(/(\r\n|\n|\r)/gm, "")
}
function applyColumnType(type, value) {
switch (type) {
case 'number':
return Number(value)
case 'boolean':
return value === 'true'
case 'array':
return value.split(',').map(v => v.trim())
default:
return value
}
}
const tsvs = readdirSync(join(__dirname, 'tsvs'))
.filter(f => f.endsWith('.tsv'))
.map(f => join(__dirname, 'tsvs', f));
const jsons = tsvs.map(f => {
return csvToJson(readFileSync(f, 'utf8'), f);
})
jsons.map(json => {
const out = join(__dirname, 'outputs', `${basename(json.filename, '.tsv')}.json`)
const file = JSON.stringify(json.data, null, 2)
writeFileSync(out, file)
})