source-from-vercel-deployment
Version:
A simple package made for downloading the source code from your Vercel Deployment.
100 lines (88 loc) • 3.51 kB
JavaScript
;
var _axios = _interopRequireDefault(require("axios"));
var _colors = _interopRequireDefault(require("colors"));
var _mkdirp = _interopRequireDefault(require("mkdirp"));
var _prompts = require("./prompts");
var _utils = require("./utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const getTeamId = async token => {
try {
const {
data: {
teams = []
}
} = await _axios.default.get('https://vercel.com/api/v2/teams', {
headers: {
Authorization: token
}
});
return await (0, _prompts.promptForTeam)([{
name: 'Personal project (NO TEAM)',
id: false
}, ...teams]);
} catch (err) {
console.log(_colors.default.red('Cannot download teams list. Please check your authorization token !'));
process.exit(0);
}
};
const getDeployment = async env => {
try {
const {
data: {
deployments = []
}
} = await _axios.default.get((0, _utils.appendTeamId)(`https://vercel.com/api/v6/deployments`, env.TEAM_ID), {
headers: {
Authorization: env.AUTHORIZATION_TOKEN
}
});
if (!deployments.length > 0) {
console.log(_colors.default.red('No deployments found for your choices. Exiting...'));
process.exit();
}
const projectName = await (0, _prompts.promptForProjectName)([...new Set(deployments.map(project => project.name))]);
console.log(`Getting list of deployments for ${projectName}`);
return await (0, _prompts.promptForProjectUrl)(deployments.filter(deployment => deployment.name === projectName));
} catch (err) {
console.log(_colors.default.red('Cannot get deployment UID. Please raise an issue here: https://github.com/CalinaCristian/source-from-vercel-deployment/issues !'));
process.exit(0);
}
};
(async () => {
let env = {
DEPLOYMENT_URL: '',
DEPLOYMENT_FILE_URL: '',
AUTHORIZATION_TOKEN: '',
OUTPUT_DIRECTORY: './deployment_source',
TEAM_ID: false
};
env.AUTHORIZATION_TOKEN = (0, _utils.getAuthToken)(process.env.VERCEL_AUTH_TOKEN ?? (await (0, _prompts.promptForAuthorizationToken)()));
console.log(_colors.default.yellow('Getting list of teams...'));
env.TEAM_ID = await getTeamId(env.AUTHORIZATION_TOKEN);
console.log(_colors.default.yellow('Getting list of deployments...This might take a while...'));
const {
deploymentUid,
deploymentUrl
} = await getDeployment(env);
env.DEPLOYMENT_URL = `https://vercel.com/api/file-tree/${deploymentUrl}?base=out`;
env.DEPLOYMENT_FILE_URL = `https://vercel.com/api/v6/deployments/${deploymentUid}/files/outputs?file=`;
env.OUTPUT_DIRECTORY = (await (0, _prompts.promptForOutputDirectory)()) || env.OUTPUT_DIRECTORY;
console.log(_colors.default.yellow('Starting the process of recreating the structure...'));
const getDeploymentStructureURL = (0, _utils.appendTeamId)(env.DEPLOYMENT_URL, env.TEAM_ID, '&');
try {
const {
data
} = await _axios.default.get(getDeploymentStructureURL, {
headers: {
Authorization: env.AUTHORIZATION_TOKEN
}
});
(0, _mkdirp.default)(env.OUTPUT_DIRECTORY);
(0, _utils.parseStructure)(data, env.OUTPUT_DIRECTORY, env);
} catch (err) {
console.log(err.message);
console.log(_colors.default.red('Cannot recreate the file tree. Please raise an issue here: https://github.com/CalinaCristian/source-from-vercel-deployment/issues !'));
process.exit(0);
}
})();