vtex
Version:
The platform for e-commerce apps
82 lines (81 loc) • 3.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const chalk_1 = tslib_1.__importDefault(require("chalk"));
const ramda_1 = require("ramda");
const errors_1 = require("../../api/error/errors");
const SessionManager_1 = require("../../api/session/SessionManager");
const logger_1 = tslib_1.__importDefault(require("../../api/logger"));
const prompts_1 = require("../../api/modules/prompts");
const create_1 = require("../workspace/create");
const welcome_1 = tslib_1.__importDefault(require("./welcome"));
const checkAndSwitch = async (targetAccount, targetWorkspace) => {
const session = SessionManager_1.SessionManager.getSingleton();
const { account: currAccount } = session;
const isValidAccount = /^\s*[\w-]+\s*$/.test(targetAccount);
if (!isValidAccount) {
throw new errors_1.CommandError('Invalid account format');
}
else if (!currAccount) {
throw new errors_1.CommandError("You're not logged in right now");
}
else if (currAccount === targetAccount) {
throw new errors_1.CommandError(`You're already using the account ${chalk_1.default.blue(targetAccount)}`);
}
await session.login(targetAccount, {
targetWorkspace,
workspaceCreation: {
promptCreation: true,
creator: create_1.workspaceCreator,
onError: create_1.handleErrorCreatingWorkspace,
},
});
const { account, workspace, userLogged } = session;
logger_1.default.info(`Logged into ${chalk_1.default.blue(account)} as ${chalk_1.default.green(userLogged)} at workspace ${chalk_1.default.green(workspace)}`);
};
exports.switchAccount = async (account, options) => {
const { account: currAccount, lastUsedAccount } = SessionManager_1.SessionManager.getSingleton();
if (options.gracefulAccountCheck && currAccount === account) {
return false;
}
if (options.initialPrompt) {
const confirm = await prompts_1.promptConfirm(options.initialPrompt.message);
if (!confirm) {
return false;
}
}
if (account === '-') {
account = lastUsedAccount;
if (account == null) {
throw new errors_1.CommandError('No last used account was found');
}
}
const previousAccount = currAccount;
// Enable users to type `vtex switch {account}/{workspace}` and switch
// directly to a workspace without typing the `-w` option.
const [parsedAccount, parsedWorkspace] = ramda_1.split('/', account);
if (parsedWorkspace) {
options = { ...options, workspace: parsedWorkspace };
}
await checkAndSwitch(parsedAccount, options.workspace || 'master');
logger_1.default.info(`Switched from ${chalk_1.default.blue(previousAccount)} to ${chalk_1.default.blue(parsedAccount)}`);
if (options.showWelcomeMessage) {
await welcome_1.default();
}
return true;
};
function returnToPreviousAccount({ previousAccount, previousWorkspace, promptConfirmation = true, }) {
return exports.switchAccount(previousAccount, {
workspace: previousWorkspace,
gracefulAccountCheck: true,
showWelcomeMessage: false,
...(promptConfirmation
? {
initialPrompt: {
message: `Now you are logged in ${chalk_1.default.blue(SessionManager_1.SessionManager.getSingleton().account)}. Do you want to return to ${chalk_1.default.blue(previousAccount)} account?`,
},
}
: null),
});
}
exports.returnToPreviousAccount = returnToPreviousAccount;