65 lines
1.8 KiB
JavaScript
Executable File
65 lines
1.8 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
const yargs = require("yargs")
|
|
const fs = require("fs")
|
|
const { join } = require("path")
|
|
require("../src/db").init()
|
|
const { db: dbCore } = require("@budibase/backend-core")
|
|
// load environment
|
|
const env = require("../src/environment")
|
|
const {
|
|
USER_METDATA_PREFIX,
|
|
LINK_USER_METADATA_PREFIX,
|
|
} = require("../src/db/utils")
|
|
|
|
// Script to export a chosen budibase app into a package
|
|
// Usage: ./scripts/exportAppTemplate.js export --name=Funky --appId=appId
|
|
|
|
yargs
|
|
.command(
|
|
"export",
|
|
"Export an existing budibase application to the .budibase/templates directory",
|
|
{
|
|
name: {
|
|
description: "The name of the newly exported template",
|
|
alias: "n",
|
|
type: "string",
|
|
},
|
|
appId: {
|
|
description: "The appId of the application you want to export",
|
|
alias: "app",
|
|
type: "string",
|
|
},
|
|
},
|
|
async args => {
|
|
if (!env.isDev()) {
|
|
throw "Only works in dev"
|
|
}
|
|
const name = args.name,
|
|
appId = args.appId
|
|
console.log("Exporting app..")
|
|
if (name == null || appId == null) {
|
|
console.error(
|
|
"Unable to export without a name and app ID being specified, check help for more info."
|
|
)
|
|
return
|
|
}
|
|
const exportPath = join(process.cwd(), name, "db")
|
|
fs.ensureDirSync(exportPath)
|
|
const writeStream = fs.createWriteStream(join(exportPath, "dump.text"))
|
|
// perform couch dump
|
|
|
|
await dbCore.doWithDB(appId, async db => {
|
|
return db.dump(writeStream, {
|
|
filter: doc =>
|
|
!(
|
|
doc._id.includes(USER_METDATA_PREFIX) ||
|
|
doc.includes(LINK_USER_METADATA_PREFIX)
|
|
),
|
|
})
|
|
})
|
|
console.log(`Template ${name} exported to ${exportPath}`)
|
|
}
|
|
)
|
|
.help()
|
|
.alias("help", "h").argv
|