tutanota/buildSrc/generateMigration.js

47 lines
1.3 KiB
JavaScript
Raw Normal View History

2022-06-07 09:57:44 +02:00
import fs from "fs-extra"
import {Argument, InvalidArgumentError, program} from "commander"
import path from "path"
import {fileExists} from "./buildUtils.js"
await program
.addArgument(
new Argument("app", "Which tutanota application needs a migration")
.choices(["accounting", "base", "gossip", "monitor", "storage", "sys", "tutanota"])
)
.addArgument(
new Argument("version", "Which version of the given app needs a migration")
.argParser(validateNumberArg)
)
.action(run)
.parseAsync(process.argv)
function validateNumberArg(value) {
const parsedValue = parseInt(value, 10);
if (isNaN(parsedValue)) {
throw new InvalidArgumentError('Not a number.');
}
return parsedValue;
}
async function run(app, version) {
const template = `
import {OfflineMigration} from "../OfflineStorageMigrator.js"
import {OfflineStorage} from "../OfflineStorage.js"
export const ${app}${version}: OfflineMigration = {
\tapp: "${app}",
\tversion: ${version},
\tasync migrate(storage: OfflineStorage) {
\t throw new Error("TODO")
\t}
}
`.trimStart()
const outputName = path.resolve(`./src/api/worker/offline/migrations/${app}-v${version}.ts`)
if (await fileExists(outputName)) {
console.error("That migration already exists!")
process.exit(1)
}
await fs.writeFile(outputName, template, "utf-8")
console.log(`Wrote to: ${outputName}`)
}