Skip to content

Commit 1e313df

Browse files
committed
fix(plugin-serverless): add alias support
Previously only one character aliases worked since oclif doesn't support anything else. I ended up adding steps to our normalization to "fake" alias support fix #242
1 parent e8a6eb3 commit 1e313df

File tree

9 files changed

+71
-56
lines changed

9 files changed

+71
-56
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
1-
const { TwilioClientCommand } = require("@twilio/cli-core").baseCommands;
1+
const { TwilioClientCommand } = require('@twilio/cli-core').baseCommands;
22

33
const {
44
handler,
55
cliInfo,
66
describe,
7-
} = require("twilio-run/dist/commands/deploy");
7+
} = require('twilio-run/dist/commands/deploy');
88
const {
99
convertYargsOptionsToOclifFlags,
1010
normalizeFlags,
1111
createExternalCliOptions,
1212
getRegionAndEdge,
13-
} = require("../../utils");
13+
} = require('../../utils');
14+
15+
const { flags, aliasMap } = convertYargsOptionsToOclifFlags(cliInfo.options);
1416

1517
class FunctionsDeploy extends TwilioClientCommand {
1618
async run() {
1719
await super.run();
1820

1921
let { flags, args } = this.parse(FunctionsDeploy);
20-
flags = normalizeFlags(flags);
22+
flags = normalizeFlags(flags, aliasMap);
2123

2224
const externalOptions = createExternalCliOptions(flags, this.twilioClient);
2325

@@ -32,9 +34,8 @@ class FunctionsDeploy extends TwilioClientCommand {
3234

3335
FunctionsDeploy.description = describe;
3436

35-
FunctionsDeploy.flags = Object.assign(
36-
convertYargsOptionsToOclifFlags(cliInfo.options),
37-
{ profile: TwilioClientCommand.flags.profile }
38-
);
37+
FunctionsDeploy.flags = Object.assign(flags, {
38+
profile: TwilioClientCommand.flags.profile,
39+
});
3940

4041
module.exports = FunctionsDeploy;

Diff for: packages/plugin-serverless/src/commands/serverless/init.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ const {
1010
normalizeFlags,
1111
} = require('../../utils');
1212

13+
const { flags, aliasMap } = convertYargsOptionsToOclifFlags(cliInfo.options);
14+
1315
class FunctionsInit extends TwilioClientCommand {
1416
async run() {
1517
await super.run();
1618

1719
let { flags, args } = this.parse(FunctionsInit);
18-
flags = normalizeFlags(flags);
20+
flags = normalizeFlags(flags, aliasMap);
1921

2022
const opts = Object.assign({}, flags, args);
2123
opts.accountSid = flags.accountSid || this.twilioClient.accountSid;
@@ -38,10 +40,8 @@ FunctionsInit.args = [
3840
},
3941
];
4042

41-
FunctionsInit.flags = Object.assign(
42-
{},
43-
convertYargsOptionsToOclifFlags(cliInfo.options),
44-
{ profile: TwilioClientCommand.flags.profile }
45-
);
43+
FunctionsInit.flags = Object.assign({}, flags, {
44+
profile: TwilioClientCommand.flags.profile,
45+
});
4646

4747
module.exports = FunctionsInit;

Diff for: packages/plugin-serverless/src/commands/serverless/list-templates.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ const {
1010
normalizeFlags,
1111
} = require('../../utils');
1212

13+
const { flags, aliasMap } = convertYargsOptionsToOclifFlags(cliInfo.options);
14+
1315
class FunctionsListTemplates extends Command {
1416
async run() {
1517
let { flags, args } = this.parse(FunctionsListTemplates);
16-
flags = normalizeFlags(flags);
18+
flags = normalizeFlags(flags, aliasMap);
1719

1820
const opts = Object.assign({}, flags, args);
1921
return handler(opts, undefined);
@@ -24,8 +26,6 @@ FunctionsListTemplates.description = describe;
2426

2527
FunctionsListTemplates.args = [];
2628

27-
FunctionsListTemplates.flags = Object.assign(
28-
convertYargsOptionsToOclifFlags(cliInfo.options)
29-
);
29+
FunctionsListTemplates.flags = Object.assign(flags);
3030

3131
module.exports = FunctionsListTemplates;
+11-10
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
const { TwilioClientCommand } = require("@twilio/cli-core").baseCommands;
1+
const { TwilioClientCommand } = require('@twilio/cli-core').baseCommands;
22

3-
const { handler, cliInfo, describe } = require("twilio-run/dist/commands/list");
3+
const { handler, cliInfo, describe } = require('twilio-run/dist/commands/list');
44
const {
55
convertYargsOptionsToOclifFlags,
66
normalizeFlags,
77
createExternalCliOptions,
88
getRegionAndEdge,
9-
} = require("../../utils");
9+
} = require('../../utils');
10+
11+
const { flags, aliasMap } = convertYargsOptionsToOclifFlags(cliInfo.options);
1012

1113
class FunctionsList extends TwilioClientCommand {
1214
async run() {
1315
await super.run();
1416

1517
let { flags, args } = this.parse(FunctionsList);
16-
flags = normalizeFlags(flags);
18+
flags = normalizeFlags(flags, aliasMap);
1719

1820
const externalOptions = createExternalCliOptions(flags, this.twilioClient);
1921

@@ -30,17 +32,16 @@ FunctionsList.description = describe;
3032

3133
FunctionsList.args = [
3234
{
33-
name: "types",
35+
name: 'types',
3436
required: false,
3537
default: cliInfo.argsDefaults.types,
3638
description:
37-
"Comma separated list of things to list (services,environments,functions,assets,variables)",
39+
'Comma separated list of things to list (services,environments,functions,assets,variables)',
3840
},
3941
];
4042

41-
FunctionsList.flags = Object.assign(
42-
convertYargsOptionsToOclifFlags(cliInfo.options),
43-
{ profile: TwilioClientCommand.flags.profile }
44-
);
43+
FunctionsList.flags = Object.assign(flags, {
44+
profile: TwilioClientCommand.flags.profile,
45+
});
4546

4647
module.exports = FunctionsList;

Diff for: packages/plugin-serverless/src/commands/serverless/logs.js

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1-
const { TwilioClientCommand } = require("@twilio/cli-core").baseCommands;
1+
const { TwilioClientCommand } = require('@twilio/cli-core').baseCommands;
22

3-
const { handler, cliInfo, describe } = require("twilio-run/dist/commands/logs");
3+
const { handler, cliInfo, describe } = require('twilio-run/dist/commands/logs');
44

55
const {
66
convertYargsOptionsToOclifFlags,
77
normalizeFlags,
88
createExternalCliOptions,
99
getRegionAndEdge,
10-
} = require("../../utils");
10+
} = require('../../utils');
11+
12+
const { flags, aliasMap } = convertYargsOptionsToOclifFlags(cliInfo.options);
1113

1214
class LogsList extends TwilioClientCommand {
1315
async run() {
1416
await super.run();
1517

1618
let { flags, args } = this.parse(LogsList);
17-
flags = normalizeFlags(flags);
19+
flags = normalizeFlags(flags, aliasMap);
1820

1921
const externalOptions = createExternalCliOptions(flags, this.twilioClient);
2022

@@ -31,9 +33,8 @@ LogsList.description = describe;
3133

3234
LogsList.args = [];
3335

34-
LogsList.flags = Object.assign(
35-
convertYargsOptionsToOclifFlags(cliInfo.options),
36-
{ profile: TwilioClientCommand.flags.profile }
37-
);
36+
LogsList.flags = Object.assign(flags, {
37+
profile: TwilioClientCommand.flags.profile,
38+
});
3839

3940
module.exports = LogsList;

Diff for: packages/plugin-serverless/src/commands/serverless/new.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ const {
66
normalizeFlags,
77
} = require('../../utils');
88

9+
const { flags, aliasMap } = convertYargsOptionsToOclifFlags(cliInfo.options);
10+
911
class FunctionsNew extends Command {
1012
async run() {
1113
let { flags, args } = this.parse(FunctionsNew);
12-
flags = normalizeFlags(flags);
14+
flags = normalizeFlags(flags, aliasMap);
1315

1416
const opts = Object.assign({}, flags, args);
1517
return handler(opts, undefined);
@@ -26,8 +28,6 @@ FunctionsNew.args = [
2628
},
2729
];
2830

29-
FunctionsNew.flags = Object.assign(
30-
convertYargsOptionsToOclifFlags(cliInfo.options)
31-
);
31+
FunctionsNew.flags = Object.assign(flags);
3232

3333
module.exports = FunctionsNew;

Diff for: packages/plugin-serverless/src/commands/serverless/promote.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ const {
1212
getRegionAndEdge,
1313
} = require('../../utils');
1414

15+
const { flags, aliasMap } = convertYargsOptionsToOclifFlags(cliInfo.options);
16+
1517
class FunctionsPromote extends TwilioClientCommand {
1618
async run() {
1719
await super.run();
1820

1921
let { flags, args } = this.parse(FunctionsPromote);
20-
flags = normalizeFlags(flags);
22+
flags = normalizeFlags(flags, aliasMap);
2123

2224
const externalOptions = createExternalCliOptions(flags, this.twilioClient);
2325

@@ -32,11 +34,9 @@ class FunctionsPromote extends TwilioClientCommand {
3234

3335
FunctionsPromote.description = describe;
3436

35-
FunctionsPromote.flags = Object.assign(
36-
{},
37-
convertYargsOptionsToOclifFlags(cliInfo.options),
38-
{ profile: TwilioClientCommand.flags.profile }
39-
);
37+
FunctionsPromote.flags = Object.assign({}, flags, {
38+
profile: TwilioClientCommand.flags.profile,
39+
});
4040

4141
FunctionsPromote.aliases = ['serverless:activate'];
4242

Diff for: packages/plugin-serverless/src/commands/serverless/start.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ const {
1010
normalizeFlags,
1111
} = require('../../utils');
1212

13+
const { flags, aliasMap } = convertYargsOptionsToOclifFlags(cliInfo.options);
14+
1315
class FunctionsStart extends Command {
1416
async run() {
1517
let { flags, args } = this.parse(FunctionsStart);
1618

17-
flags = normalizeFlags(flags);
19+
flags = normalizeFlags(flags, aliasMap);
1820

1921
const opts = Object.assign({}, flags, args);
2022
return handler(opts, undefined);
@@ -31,9 +33,7 @@ FunctionsStart.args = [
3133
},
3234
];
3335

34-
FunctionsStart.flags = Object.assign(
35-
convertYargsOptionsToOclifFlags(cliInfo.options)
36-
);
36+
FunctionsStart.flags = Object.assign(flags);
3737

3838
FunctionsStart.aliases = ['serverless:dev', 'serverless:run'];
3939

Diff for: packages/plugin-serverless/src/utils.js

+18-6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const camelCase = require('lodash.camelcase');
33
const { flags } = require('@oclif/command');
44

55
function convertYargsOptionsToOclifFlags(options) {
6+
const aliasMap = new Map();
67
const flagsResult = Object.keys(options).reduce((result, name) => {
78
const opt = options[name];
89
const flag = {
@@ -23,10 +24,10 @@ function convertYargsOptionsToOclifFlags(options) {
2324

2425
if (opt.type === 'number') {
2526
opt.type = 'string';
26-
flag.parse = input => parseFloat(input);
27+
flag.parse = (input) => parseFloat(input);
2728
}
2829

29-
if (opt.alias) {
30+
if (opt.alias && opt.alias.length === 1) {
3031
flag.char = opt.alias;
3132
}
3233

@@ -35,22 +36,33 @@ function convertYargsOptionsToOclifFlags(options) {
3536
}
3637

3738
result[name] = flags[opt.type](flag);
39+
40+
if (opt.alias && opt.alias.length > 1) {
41+
result[opt.alias] = flags[opt.type](flag);
42+
aliasMap.set(opt.alias, name);
43+
}
44+
3845
return result;
3946
}, {});
40-
return flagsResult;
47+
return { flags: flagsResult, aliasMap };
4148
}
4249

43-
function normalizeFlags(flags) {
50+
function normalizeFlags(flags, aliasMap) {
4451
const result = Object.keys(flags).reduce((current, name) => {
45-
if (name.includes('-')) {
46-
const normalizedName = camelCase(name);
52+
const normalizedName = name.includes('-') ? camelCase(name) : name;
53+
54+
if (aliasMap.has(normalizedName)) {
55+
const actualName = camelCase(aliasMap.get(normalizedName));
56+
current[actualName] = flags[name];
57+
} else {
4758
current[normalizedName] = flags[name];
4859
}
4960
return current;
5061
}, flags);
5162
const [, command, ...args] = process.argv;
5263
result.$0 = path.basename(command);
5364
result._ = args;
65+
console.log(result);
5466
return result;
5567
}
5668

0 commit comments

Comments
 (0)