56 lines
1.2 KiB
JavaScript
56 lines
1.2 KiB
JavaScript
import { readFile, writeFile } from 'fs/promises';
|
|
|
|
import { getArg } from './lib/args.js';
|
|
import { error, log } from './lib/log.js';
|
|
import { userSchema, dbSchema } from './lib/schema.js';
|
|
|
|
const ctx = 'convertDb.js';
|
|
|
|
/**
|
|
* Converts from array (v0) to current schema
|
|
*/
|
|
const fromV0 = (old) => {
|
|
const userList = Object.fromEntries(old.map(e => [e.user, userSchema(e)]));
|
|
|
|
return dbSchema(userList);
|
|
}
|
|
|
|
/**
|
|
* Upgrades db versions
|
|
*/
|
|
const convertDb = async () => {
|
|
log(ctx, 'Grabbing db');
|
|
let directory, db, updated;
|
|
try {
|
|
directory = getArg('path');
|
|
} catch (err) {
|
|
error(ctx, err);
|
|
return;
|
|
}
|
|
try {
|
|
let file = await readFile(`${directory}/db.json`, { encoding: 'utf8' });
|
|
db = JSON.parse(file);
|
|
} catch (err) {
|
|
error(ctx, err);
|
|
return;
|
|
}
|
|
|
|
log(ctx, 'Converting db');
|
|
if (Array.isArray(db)) {
|
|
updated = fromV0(db);
|
|
} else {
|
|
updated = db;
|
|
}
|
|
|
|
log(ctx, 'Saving db');
|
|
try {
|
|
await writeFile(`${directory}/db.json`, JSON.stringify(updated, null, 2));
|
|
await writeFile(`${directory}/db.bak.json`, JSON.stringify(db, null, 2));
|
|
} catch (err) {
|
|
error(ctx, err);
|
|
return;
|
|
}
|
|
log(ctx, 'Done');
|
|
}
|
|
|
|
convertDb();
|