60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
const fs = require("fs-extra")
|
|
const { join } = require("./centralPath")
|
|
const os = require("os")
|
|
const fetch = require("node-fetch")
|
|
const stream = require("stream")
|
|
const tar = require("tar-fs")
|
|
const zlib = require("zlib")
|
|
const { promisify } = require("util")
|
|
const streamPipeline = promisify(stream.pipeline)
|
|
const { budibaseAppsDir } = require("./budibaseDir")
|
|
const CouchDB = require("../db")
|
|
|
|
const DEFAULT_TEMPLATES_BUCKET =
|
|
"prod-budi-templates.s3-eu-west-1.amazonaws.com"
|
|
|
|
exports.downloadTemplate = async function(type, name) {
|
|
const templateUrl = `https://${DEFAULT_TEMPLATES_BUCKET}/templates/${type}/${name}.tar.gz`
|
|
const response = await fetch(templateUrl)
|
|
|
|
if (!response.ok) {
|
|
throw new Error(
|
|
`Error downloading template ${type}:${name}: ${response.statusText}`
|
|
)
|
|
}
|
|
|
|
// stream the response, unzip and extract
|
|
await streamPipeline(
|
|
response.body,
|
|
zlib.Unzip(),
|
|
tar.extract(join(budibaseAppsDir(), "templates", type))
|
|
)
|
|
|
|
return join(budibaseAppsDir(), "templates", type, name)
|
|
}
|
|
|
|
exports.exportTemplateFromApp = async function({
|
|
appId,
|
|
templateName,
|
|
instanceId,
|
|
}) {
|
|
// Copy frontend files
|
|
const appToExport = join(os.homedir(), ".budibase", appId, "pages")
|
|
const templatesDir = join(os.homedir(), ".budibase", "templates")
|
|
fs.ensureDirSync(templatesDir)
|
|
|
|
const templateOutputPath = join(templatesDir, templateName)
|
|
fs.copySync(appToExport, join(templateOutputPath, "pages"))
|
|
|
|
fs.ensureDirSync(join(templateOutputPath, "db"))
|
|
const writeStream = fs.createWriteStream(
|
|
join(templateOutputPath, "db", "dump.txt")
|
|
)
|
|
|
|
// perform couch dump
|
|
const instanceDb = new CouchDB(instanceId)
|
|
|
|
await instanceDb.dump(writeStream)
|
|
return templateOutputPath
|
|
}
|