UNPKG

sfdx-hardis

Version:

Swiss-army-knife Toolbox for Salesforce. Allows you to define a complete CD/CD Pipeline. Orchestrate base commands and assist users with interactive wizards

128 lines (121 loc) 6.25 kB
/* jscpd:ignore-start */ import { SfCommand, Flags } from '@salesforce/sf-plugins-core'; import { Messages } from '@salesforce/core'; import c from "chalk"; import { makeSureOrgIsConnected, promptOrg } from '../../../common/utils/orgUtils.js'; import { execSfdxJson, uxLog } from '../../../common/utils/index.js'; import { prompts } from '../../../common/utils/prompts.js'; import { WebSocketClient } from '../../../common/websocketClient.js'; Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); const messages = Messages.loadMessages('sfdx-hardis', 'org'); export default class OrgSelect extends SfCommand { static title = 'Select org'; static description = ` ## Command Behavior **Allows you to select a Salesforce org and set it as your default, optionally filtering by Dev Hub or scratch orgs.** This command simplifies switching between different Salesforce environments. It presents an interactive list of your authenticated orgs, enabling you to quickly set a new default org for subsequent Salesforce CLI commands. Key functionalities: - **Interactive Org Selection:** Displays a list of your authenticated Salesforce orgs, allowing you to choose one. - **Default Org Setting:** Sets the selected org as the default for your Salesforce CLI environment. - **Dev Hub Filtering:** The \`--devhub\` flag filters the list to show only Dev Hub orgs. - **Scratch Org Filtering:** The \`--scratch\` flag filters the list to show only scratch orgs related to your default Dev Hub. - **Connection Verification:** Ensures that the selected org is connected and prompts for re-authentication if necessary. <details markdown="1"> <summary>Technical explanations</summary> The command's technical implementation involves: - **Interactive Org Prompt:** Uses the \`promptOrg\` utility to display a list of available Salesforce orgs and allows the user to select one. It passes the \`devHub\` and \`scratch\` flags to \`promptOrg\` to filter the displayed list. - **Default Org Configuration:** The \`promptOrg\` utility (internally) handles setting the selected org as the default using Salesforce CLI's configuration mechanisms. - **Connection Check:** It calls \`makeSureOrgIsConnected\` to verify the connection status of the selected org and guides the user to re-authenticate if the org is not connected. - **Salesforce CLI Integration:** It leverages Salesforce CLI's underlying commands for org listing and authentication. </details> `; static examples = ['$ sf hardis:org:select']; // public static args = [{name: 'file'}]; static flags = { devhub: Flags.boolean({ char: 'h', default: false, description: messages.getMessage('withDevHub'), }), scratch: Flags.boolean({ char: 's', default: false, description: 'Select scratch org related to default DevHub', }), username: Flags.string({ char: 't', description: "Username of the org you want to authenticate (overrides the interactive prompt)", }), "prompt-default": Flags.boolean({ char: 'e', default: false, description: 'Prompt to set the selected org as default', }), debug: Flags.boolean({ char: 'd', default: false, description: messages.getMessage('debugMode'), }), websocket: Flags.string({ description: messages.getMessage('websocket'), }), skipauth: Flags.boolean({ description: 'Skip authentication check when a default username is required', }), }; // Set this to true if your command requires a project workspace; 'requiresProject' is false by default static requiresProject = false; debugMode = false; /* jscpd:ignore-end */ async run() { const { flags } = await this.parse(OrgSelect); const devHub = flags.devhub || false; const scratch = flags.scratch; const promptDefault = flags["prompt-default"] || false; const username = flags.username; this.debugMode = flags.debug || false; let setDefault = true; if (promptDefault) { const promptDefaultRes = await prompts({ type: 'confirm', name: 'setDefault', message: 'Do you want to set the selected org as your default org?', description: "If you choose 'No', the org will be connected but not set as default.", default: true, }); if (!promptDefaultRes.setDefault) { setDefault = false; } } let org = {}; if (username) { uxLog("action", this, c.cyan(`Getting info about ${username} ...`)); const displayOrgCommand = `sf org display --target-org ${username}`; const displayResult = await execSfdxJson(displayOrgCommand, this, { fail: false, output: false, }); org = displayResult?.result; } else { // Prompt user to select an org org = await promptOrg(this, { devHub: devHub, setDefault: setDefault, scratch: scratch, useCache: false }); } // If the org is not connected, ask the user to authenticate again uxLog("action", this, c.cyan(`Checking that user ${org.username} is connected to org ${org.instanceUrl} ...`)); await makeSureOrgIsConnected(org.username); if (setDefault) { const setDefaultCommand = `sf config set target-org ${org.username}`; await execSfdxJson(setDefaultCommand, this, { output: false }); uxLog("action", this, c.cyan(`Your default org is now ${org.instanceUrl} (${org.username})`)); WebSocketClient.sendRefreshStatusMessage(); return { outputString: `Selected org ${org.username}` }; } else { uxLog("action", this, c.cyan(`Org ${org.instanceUrl} (${org.username}) connected`)); WebSocketClient.sendRefreshStatusMessage(); return { outputString: `Connected org ${org.username}` }; } } } //# sourceMappingURL=select.js.map