@sap/cds-dk
Version:
Command line client and development toolkit for the SAP Cloud Application Programming Model
43 lines (31 loc) • 1.62 kB
JavaScript
const fs = require('fs');
const { join } = require('path');
const axios = require('axios');
const { login } = require('./auth_manager');
require('../util/axios').pruneErrors();
const { handleHttpError } = require('./util/errors');
const DOWNLOAD_FILE_NAME = 'migrated_projects.tgz'; // TODO try to add tenant later, if possible
module.exports = class Download {
static async run(paramValues) {
const params = await login(paramValues);
const projectFolder = params.get('projectFolder');
const downloadPath = join(projectFolder, DOWNLOAD_FILE_NAME);
if (fs.existsSync(downloadPath) && !(await require('./util/question').askBooleanQuestion(`File ${DOWNLOAD_FILE_NAME} already exists. Continue (yN)? `, false, false))) {
console.log('Download cancelled');
return;
}
console.log(`Downloading migrated @sap/mtx extension project(s)`);
const downloadedTgz = await this.pullTgz(params);
await fs.promises.writeFile(downloadPath, downloadedTgz);
console.log(`Finished.`);
}
static async pullTgz(params) {
const tagRule = params.get('tagRule');
const defaultTag = params.get('defaultTag');
const downloadUrl = `${(params.get('appUrl'))}/-/cds/extensibility/getMigratedProjects`;
const options = { ...params.get('reqAuth'), responseType: 'arraybuffer' };
return axios.post(downloadUrl, { tagRule, defaultTag }, options)
.then(response => Buffer.from(response.data))
.catch(error => handleHttpError(error, params, { url: downloadUrl }));
}
}