Skip to content

Commit

Permalink
feat: add env display command (#52)
Browse files Browse the repository at this point in the history
* feat: add env display command

* chore: command-snapshot

* fix: no env found message

* chore: rebase on main & command-snapshot

* fix: switch to getMessages() for examples
  • Loading branch information
RodEsp authored Jun 9, 2021
1 parent 7b3df80 commit 7b5388b
Show file tree
Hide file tree
Showing 7 changed files with 234 additions and 18 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# plugin-env;
# plugin-env

[![NPM](https://img.shields.io/npm/v/@salesforce/plugin-env.svg?label=@salesforce/plugin-env)](https://www.npmjs.com/package/@salesforce/plugin-env) [![CircleCI](https://circleci.com/gh/salesforcecli/plugin-env/tree/main.svg?style=shield)](https://circleci.com/gh/salesforcecli/plugin-env/tree/main) [![Downloads/week](https://img.shields.io/npm/dw/@salesforce/plugin-env.svg)](https://npmjs.org/package/@salesforce/plugin-env) [![License](https://img.shields.io/badge/License-BSD%203--Clause-brightgreen.svg)](https://raw.githubusercontent.com/salesforcecli/plugin-env/main/LICENSE.txt)

Expand Down
5 changes: 5 additions & 0 deletions command-snapshot.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
[
{
"command": "env:display",
"plugin": "@salesforce/plugin-env",
"flags": ["environment"]
},
{
"command": "env:list",
"plugin": "@salesforce/plugin-env",
Expand Down
28 changes: 28 additions & 0 deletions messages/display.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# description

Display details about a specific environment

# examples

- sf env display -e my-scratch-org
- sf env display -e [email protected]

# flags.environment.summary

Environment name or alias to display.

# error.NoResultsFound

No results found

# error.NoEnvFound

No environment found for %s.

# error.NoDefaultEnv

No default environment found. Use -e or --environment to specify which env to open.

# error.NoAuthsAvailable

There are no authentications available.
20 changes: 20 additions & 0 deletions messages/list.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# description

List the environments you’ve created or logged into.

# examples

- sf env list
- sf env list --all

# flags.all.summary

Show all environments, including inactive orgs.

# error.NoAuthsAvailable

There are no authentications available.

# error.NoResultsFound

No results found
94 changes: 94 additions & 0 deletions schemas/env-display.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$ref": "#/definitions/SfOrgs",
"definitions": {
"SfOrgs": {
"type": "array",
"items": {
"$ref": "#/definitions/SfOrg"
}
},
"SfOrg": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Optional%3CAnyJson%3E"
},
"properties": {
"alias": {
"type": "string"
},
"username": {
"type": "string"
},
"orgId": {
"type": "string"
},
"instanceUrl": {
"type": "string"
},
"accessToken": {
"type": "string"
},
"oauthMethod": {
"type": "string",
"enum": ["jwt", "web", "token", "unknown"]
},
"error": {
"type": "string"
}
}
},
"Optional<AnyJson>": {
"anyOf": [
{
"$ref": "#/definitions/AnyJson"
},
{
"not": {}
}
],
"description": "A union type for either the parameterized type `T` or `undefined` -- the opposite of {@link NonOptional } ."
},
"AnyJson": {
"anyOf": [
{
"$ref": "#/definitions/JsonPrimitive"
},
{
"$ref": "#/definitions/JsonCollection"
}
],
"description": "Any valid JSON value."
},
"JsonPrimitive": {
"type": ["null", "boolean", "number", "string"],
"description": "Any valid JSON primitive value."
},
"JsonCollection": {
"anyOf": [
{
"$ref": "#/definitions/JsonMap"
},
{
"$ref": "#/definitions/JsonArray"
}
],
"description": "Any valid JSON collection value."
},
"JsonMap": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Optional%3CAnyJson%3E"
},
"properties": {},
"description": "Any JSON-compatible object."
},
"JsonArray": {
"type": "array",
"items": {
"$ref": "#/definitions/AnyJson"
},
"description": "Any JSON-compatible array."
}
}
}
77 changes: 77 additions & 0 deletions src/commands/env/display.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* Copyright (c) 2021, salesforce.com, inc.
* All rights reserved.
* Licensed under the BSD 3-Clause license.
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*/

import { Command, flags } from '@oclif/command';
import { cli } from 'cli-ux';
import { AuthInfo, SfOrg, Messages, SfdxError } from '@salesforce/core';

Messages.importMessagesDirectory(__dirname);
const messages = Messages.loadMessages('@salesforce/plugin-env', 'display');

export type SfOrgs = SfOrg[];

export default class EnvDisplay extends Command {
public static readonly description = messages.getMessage('description');
public static readonly examples = messages.getMessages('examples');
public static flags = {
environment: flags.string({
char: 'e',
description: messages.getMessage('flags.environment.summary'),
}),
};

public flags: {
environment: string;
};

// TODO: Change SfOrg type to a more generalized auth type once we have Functions envs integrated.

public async run(): Promise<SfOrgs> {
this.flags = this.parse(EnvDisplay).flags;

let authorizations: SfOrg[];
let foundAuthorization: SfOrg;

try {
if (await AuthInfo.hasAuthentications()) {
authorizations = await AuthInfo.listAllAuthorizations();

if (!this.flags.environment) {
// TODO this should be retrieved from sf config once we have those commands. If not found, still throw.
throw messages.createError('error.NoDefaultEnv');
}

foundAuthorization = authorizations.filter((auth) => auth.username === this.flags.environment)[0];
if (!foundAuthorization) {
foundAuthorization = authorizations.filter((auth) => auth.alias === this.flags.environment)[0];
}

if (foundAuthorization) {
const columns = {
key: {},
value: {},
};

cli.table(
Object.keys(foundAuthorization).map((key, i) => ({ key, value: Object.values(foundAuthorization)[i] })),
columns
);
} else {
throw new SfdxError(messages.getMessage('error.NoEnvFound', [this.flags.environment]));
}
} else {
throw messages.createError('error.NoAuthsAvailable');
}
} catch (error) {
const err = error as SfdxError;
cli.log(messages.getMessage('error.NoResultsFound'));
cli.error(err);
}

return authorizations;
}
}
26 changes: 9 additions & 17 deletions src/commands/env/list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,22 @@
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*/

import { EOL } from 'os';

import { Command, flags } from '@oclif/command';
import { cli, Table } from 'cli-ux';
import { AuthInfo, SfOrg, SfdxError } from '@salesforce/core';
import { AuthInfo, SfOrg, Messages, SfdxError } from '@salesforce/core';

// TODO: add back once md messages are supported
// Messages.importMessagesDirectory(__dirname);
// const messages = Messages.loadMessages('@salesforce/plugin-env', 'list');
Messages.importMessagesDirectory(__dirname);
const messages = Messages.loadMessages('@salesforce/plugin-env', 'list');

export type SfOrgs = SfOrg[];

export default class EnvList extends Command {
// TODO: add back once md messages are supported
// public static readonly description = messages.getMessage('description');
// public static readonly examples = messages.getMessage('examples').split(EOL);
public static readonly description = 'list environments';
public static readonly examples = 'sf env list\nsf env list --all'.split(EOL);
public static readonly description = messages.getMessage('description');
public static readonly examples = messages.getMessages('examples');
public static flags = {
all: flags.boolean({
char: 'a',
description: "show all environments regardless of whether they're connected or not",
description: messages.getMessage('flags.all.summary'),
}),
...cli.table.flags(),
};
Expand Down Expand Up @@ -65,15 +59,13 @@ export default class EnvList extends Command {
get: (row) => row.error ?? '',
} as Table.table.Columns<Partial<SfOrg>>;
}
cli.styledHeader('Authenticated Envs');
cli.table(authorizations, columns, this.flags);
cli.table(authorizations, columns, { title: 'Authenticated Envs', ...this.flags });
} else {
throw new SfdxError('There are no authorizations available.');
throw messages.createError('error.NoAuthsAvailable');
}
} catch (error) {
const err = error as SfdxError;
// TODO: add back once md messages are supported
// cli.log(messages.getMessage('noResultsFound'));
cli.log(messages.getMessage('error.NoResultsFound'));
cli.error(err);
}

Expand Down

0 comments on commit 7b5388b

Please sign in to comment.