Handles conversion of curl dump to app DB.

This commit is contained in:
mike12345567 2024-07-05 14:53:45 +01:00
parent 581721caf7
commit 9daa0aacbb
1 changed files with 62 additions and 0 deletions

62
scripts/dump-to-db.js Normal file
View File

@ -0,0 +1,62 @@
const fs = require("fs")
const dotenv = require("dotenv")
const { join } = require("path")
const serverDir = join(__dirname, "..", "packages", "server")
dotenv.config({ path: join(serverDir, ".env") })
const { db, objectStore } = require("@budibase/backend-core")
const dump = process.argv[2]
let dbName
if (!dump) {
console.error("Unable to operate without a dump file")
process.exit(-1)
}
async function run() {
let rows = []
try {
const dumpContents = fs.readFileSync(dump, "utf8")
const json = JSON.parse(dumpContents)
rows = json.rows.map(row => {
delete row.doc._rev
return row.doc
})
} catch (err) {
console.error("Invalid filepath to dump, or not valid JSON")
process.exit(-1)
}
const metadata = rows.find(row => row._id === "app_metadata")
dbName = metadata.appId
const uuid = dbName.split("_").pop()
dbName = db.APP_DEV_PREFIX + uuid
const prodDbName = db.APP_PREFIX + uuid
metadata.appId = dbName
metadata.instance._id = dbName
db.init()
const database = db.getDB(dbName)
await database.bulkDocs(rows)
// upload object store components
await objectStore.upload({
bucket: objectStore.ObjectStoreBuckets.APPS,
filename: `${prodDbName}/budibase-client.js`,
path: join(serverDir, "client", "budibase-client.js"),
})
await objectStore.upload({
bucket: objectStore.ObjectStoreBuckets.APPS,
filename: `${prodDbName}/manifest.json`,
path: join(serverDir, "client", "manifest.json"),
})
}
run()
.then(() => {
console.log(`Documents written - ${dbName} updated`)
})
.catch(err => {
console.error(`Error occurred: ${err.message}`)
process.exit(-1)
})