Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions commands/__tests__/secret.test.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import yargs, { Argv } from 'yargs';
import * as addSecret from '../secret/addSecret';
import * as deleteSecret from '../secret/deleteSecret';
import * as listSecret from '../secret/listSecret';
import * as updateSecret from '../secret/updateSecret';
import * as secretCommands from '../secret';
import addSecret from '../secret/addSecret';
import deleteSecret from '../secret/deleteSecret';
import listSecret from '../secret/listSecret';
import updateSecret from '../secret/updateSecret';
import secretCommands from '../secret';

jest.mock('yargs');
jest.mock('../secret/addSecret');
Expand Down
33 changes: 23 additions & 10 deletions commands/secret.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import { Argv } from 'yargs';
import { addGlobalOptions } from '../lib/commonOpts';
import * as addSecretCommand from './secret/addSecret';
import * as listSecretCommand from './secret/listSecret';
import * as deleteSecretCommand from './secret/deleteSecret';
import * as updateSecretCommand from './secret/updateSecret';
import addSecretCommand from './secret/addSecret';
import listSecretCommand from './secret/listSecret';
import deleteSecretCommand from './secret/deleteSecret';
import updateSecretCommand from './secret/updateSecret';
import { i18n } from '../lib/lang';
import { YargsCommandModuleBucket } from '../types/Yargs';
import { makeYargsBuilder } from '../lib/yargsUtils';

export const command = ['secret', 'secrets'];
export const describe = i18n(`commands.secret.describe`);

export function builder(yargs: Argv): Argv {
addGlobalOptions(yargs);
const command = ['secret', 'secrets'];
const describe = i18n(`commands.secret.describe`);

function secretBuilder(yargs: Argv): Argv {
yargs
.command(listSecretCommand)
.command(addSecretCommand)
Expand All @@ -20,3 +19,17 @@ export function builder(yargs: Argv): Argv {
.demandCommand(1, '');
return yargs;
}

const builder = makeYargsBuilder(secretBuilder, command, describe);

const secretCommand: YargsCommandModuleBucket = {
command,
describe,
builder,
handler: () => {},
};

export default secretCommand;

// TODO Remove this legacy export once we've migrated all commands to TS
module.exports = secretCommand;
2 changes: 1 addition & 1 deletion commands/secret/__tests__/addSecret.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
addAccountOptions,
addUseEnvironmentOptions,
} from '../../../lib/commonOpts';
import * as addSecretCommand from '../addSecret';
import addSecretCommand from '../addSecret';

jest.mock('yargs');
jest.mock('../../../lib/commonOpts');
Expand Down
2 changes: 1 addition & 1 deletion commands/secret/__tests__/deleteSecret.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
addAccountOptions,
addUseEnvironmentOptions,
} from '../../../lib/commonOpts';
import * as deleteSecretCommand from '../deleteSecret';
import deleteSecretCommand from '../deleteSecret';

jest.mock('yargs');
jest.mock('../../../lib/commonOpts');
Expand Down
2 changes: 1 addition & 1 deletion commands/secret/__tests__/listSecret.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
addAccountOptions,
addUseEnvironmentOptions,
} from '../../../lib/commonOpts';
import * as listSecretCommand from '../listSecret';
import listSecretCommand from '../listSecret';

jest.mock('yargs');
jest.mock('../../../lib/commonOpts');
Expand Down
2 changes: 1 addition & 1 deletion commands/secret/__tests__/updateSecret.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
addAccountOptions,
addUseEnvironmentOptions,
} from '../../../lib/commonOpts';
import * as updateSecretCommand from '../updateSecret';
import updateSecretCommand from '../updateSecret';

jest.mock('yargs');
jest.mock('../../../lib/commonOpts');
Expand Down
49 changes: 31 additions & 18 deletions commands/secret/addSecret.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
import { Argv, ArgumentsCamelCase } from 'yargs';
import { logger } from '@hubspot/local-dev-lib/logger';
import { addSecret, fetchSecrets } from '@hubspot/local-dev-lib/api/secrets';

import { logError, ApiErrorContext } from '../../lib/errorHandlers/index';
import { trackCommandUsage } from '../../lib/usageTracking';
import {
addConfigOptions,
addAccountOptions,
addUseEnvironmentOptions,
} from '../../lib/commonOpts';
import { uiAccountDescription } from '../../lib/ui';
import {
secretValuePrompt,
Expand All @@ -22,17 +16,19 @@ import {
ConfigArgs,
AccountArgs,
EnvironmentArgs,
YargsCommandModule,
} from '../../types/Yargs';
import { makeYargsBuilder } from '../../lib/yargsUtils';

export const command = 'add [name]';
export const describe = i18n(`commands.secret.subcommands.add.describe`);
const command = 'add [name]';
const describe = i18n(`commands.secret.subcommands.add.describe`);

type CombinedArgs = ConfigArgs & AccountArgs & EnvironmentArgs;
type AddSecretArgs = CommonArgs & CombinedArgs & { name?: string };
type AddSecretArgs = CommonArgs &
ConfigArgs &
AccountArgs &
EnvironmentArgs & { name?: string };

export async function handler(
args: ArgumentsCamelCase<AddSecretArgs>
): Promise<void> {
async function handler(args: ArgumentsCamelCase<AddSecretArgs>): Promise<void> {
const { name, derivedAccountId } = args;
let secretName = name;

Expand Down Expand Up @@ -83,15 +79,32 @@ export async function handler(
}
}

export function builder(yargs: Argv): Argv<AddSecretArgs> {
addConfigOptions(yargs);
addAccountOptions(yargs);
addUseEnvironmentOptions(yargs);

function addSecretBuilder(yargs: Argv): Argv<AddSecretArgs> {
yargs.positional('name', {
describe: i18n(`commands.secret.subcommands.add.positionals.name.describe`),
type: 'string',
});

return yargs as Argv<AddSecretArgs>;
}

const builder = makeYargsBuilder<AddSecretArgs>(
addSecretBuilder,
command,
describe,
{
useGlobalOptions: true,
useConfigOptions: true,
useAccountOptions: true,
useEnvironmentOptions: true,
}
);

const addSecretCommand: YargsCommandModule<unknown, AddSecretArgs> = {
command,
describe,
handler,
builder,
};

export default addSecretCommand;
46 changes: 30 additions & 16 deletions commands/secret/deleteSecret.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,31 @@
import { Argv, ArgumentsCamelCase } from 'yargs';
import { logger } from '@hubspot/local-dev-lib/logger';
import { deleteSecret, fetchSecrets } from '@hubspot/local-dev-lib/api/secrets';

import { secretListPrompt } from '../../lib/prompts/secretPrompt';
import { confirmPrompt } from '../../lib/prompts/promptUtils';
import { EXIT_CODES } from '../../lib/enums/exitCodes';
import { ApiErrorContext, logError } from '../../lib/errorHandlers/index';
import { trackCommandUsage } from '../../lib/usageTracking';
import { uiAccountDescription } from '../../lib/ui';
import {
addConfigOptions,
addAccountOptions,
addUseEnvironmentOptions,
} from '../../lib/commonOpts';
import { i18n } from '../../lib/lang';
import {
CommonArgs,
ConfigArgs,
AccountArgs,
EnvironmentArgs,
YargsCommandModule,
} from '../../types/Yargs';
import { makeYargsBuilder } from '../../lib/yargsUtils';

export const command = 'delete [name]';
export const describe = i18n(`commands.secret.subcommands.delete.describe`);
const command = 'delete [name]';
const describe = i18n(`commands.secret.subcommands.delete.describe`);

type CombinedArgs = ConfigArgs & AccountArgs & EnvironmentArgs;
type DeleteSecretArgs = CommonArgs &
CombinedArgs & { name?: string; force?: boolean };
ConfigArgs &
AccountArgs &
EnvironmentArgs & { name?: string; force?: boolean };

export async function handler(
async function handler(
args: ArgumentsCamelCase<DeleteSecretArgs>
): Promise<void> {
const { name, derivedAccountId, force } = args;
Expand Down Expand Up @@ -99,11 +96,7 @@ export async function handler(
}
}

export function builder(yargs: Argv): Argv<DeleteSecretArgs> {
addConfigOptions(yargs);
addAccountOptions(yargs);
addUseEnvironmentOptions(yargs);

function deleteSecretBuilder(yargs: Argv): Argv<DeleteSecretArgs> {
yargs
.positional('name', {
describe: i18n(
Expand All @@ -118,3 +111,24 @@ export function builder(yargs: Argv): Argv<DeleteSecretArgs> {

return yargs as Argv<DeleteSecretArgs>;
}

const builder = makeYargsBuilder<DeleteSecretArgs>(
deleteSecretBuilder,
command,
describe,
{
useGlobalOptions: true,
useConfigOptions: true,
useAccountOptions: true,
useEnvironmentOptions: true,
}
);

const deleteSecretCommand: YargsCommandModule<unknown, DeleteSecretArgs> = {
command,
describe,
handler,
builder,
};

export default deleteSecretCommand;
44 changes: 28 additions & 16 deletions commands/secret/listSecret.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,25 @@
import { Argv, ArgumentsCamelCase } from 'yargs';
import { logger } from '@hubspot/local-dev-lib/logger';
import { fetchSecrets } from '@hubspot/local-dev-lib/api/secrets';

import { logError, ApiErrorContext } from '../../lib/errorHandlers/index';
import { trackCommandUsage } from '../../lib/usageTracking';
import { uiAccountDescription } from '../../lib/ui';
import {
addConfigOptions,
addAccountOptions,
addUseEnvironmentOptions,
} from '../../lib/commonOpts';
import { i18n } from '../../lib/lang';
import {
CommonArgs,
ConfigArgs,
AccountArgs,
EnvironmentArgs,
YargsCommandModule,
} from '../../types/Yargs';
import { makeYargsBuilder } from '../../lib/yargsUtils';

export const command = 'list';
export const describe = i18n(`commands.secret.subcommands.list.describe`);
const command = 'list';
const describe = i18n(`commands.secret.subcommands.list.describe`);

type CombinedArgs = ConfigArgs & AccountArgs & EnvironmentArgs;
type ListSecretArgs = CommonArgs & CombinedArgs;
type ListSecretArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs;

export async function handler(
async function handler(
args: ArgumentsCamelCase<ListSecretArgs>
): Promise<void> {
const { derivedAccountId } = args;
Expand Down Expand Up @@ -52,10 +47,27 @@ export async function handler(
}
}

export function builder(yargs: Argv): Argv<ListSecretArgs> {
addConfigOptions(yargs);
addAccountOptions(yargs);
addUseEnvironmentOptions(yargs);

function listSecretBuilder(yargs: Argv): Argv<ListSecretArgs> {
return yargs as Argv<ListSecretArgs>;
}

const builder = makeYargsBuilder<ListSecretArgs>(
listSecretBuilder,
command,
describe,
{
useGlobalOptions: true,
useConfigOptions: true,
useAccountOptions: true,
useEnvironmentOptions: true,
}
);

const listSecretCommand: YargsCommandModule<unknown, ListSecretArgs> = {
command,
describe,
handler,
builder,
};

export default listSecretCommand;
Loading