Add feature to set named args in the payload
This commit is contained in:
+18
-3
@@ -3,6 +3,7 @@ var fs = require("fs");
|
||||
const core = require("@actions/core");
|
||||
|
||||
const MAX_ARGS = 50;
|
||||
const namedArgPattern = /^(?<name>[a-zA-Z0-9_]+)=(?<value>[^\s]+)$/;
|
||||
|
||||
const commandDefaults = Object.freeze({
|
||||
permission: "write",
|
||||
@@ -155,7 +156,7 @@ async function addReaction(octokit, repo, commentId, reaction) {
|
||||
}
|
||||
}
|
||||
|
||||
function getSlashCommandPayload(commentWords) {
|
||||
function getSlashCommandPayload(commentWords, namedArgs) {
|
||||
var payload = {
|
||||
command: commentWords[0],
|
||||
args: ""
|
||||
@@ -163,8 +164,22 @@ function getSlashCommandPayload(commentWords) {
|
||||
if (commentWords.length > 1) {
|
||||
const argWords = commentWords.slice(1, MAX_ARGS + 1);
|
||||
payload.args = argWords.join(" ");
|
||||
for (var i = 0; i < argWords.length; i++) {
|
||||
payload[`arg${i + 1}`] = argWords[i];
|
||||
// Parse named and unnamed args
|
||||
var unnamedCount = 1;
|
||||
var unnamedArgs = [];
|
||||
for (var argWord of argWords) {
|
||||
if (namedArgs && namedArgPattern.test(argWord)) {
|
||||
const { groups: { name, value } } = namedArgPattern.exec(argWord);
|
||||
payload[`${name}`] = value;
|
||||
} else {
|
||||
unnamedArgs.push(argWord)
|
||||
payload[`arg${unnamedCount}`] = argWord;
|
||||
unnamedCount += 1;
|
||||
}
|
||||
}
|
||||
// Add a string of only the unnamed args
|
||||
if (namedArgs && unnamedArgs.length > 0) {
|
||||
payload["unnamed_args"] = unnamedArgs.join(" ");
|
||||
}
|
||||
}
|
||||
return payload;
|
||||
|
||||
@@ -164,3 +164,33 @@ test("slash command payload", async () => {
|
||||
};
|
||||
expect(getSlashCommandPayload(commandWords)).toEqual(payload);
|
||||
});
|
||||
|
||||
test("slash command payload with named args", async () => {
|
||||
commandWords = ["test", "branch=master", "arg1", "env=prod", "arg2"];
|
||||
namedArgs = true;
|
||||
payload = {
|
||||
command: "test",
|
||||
args: "branch=master arg1 env=prod arg2",
|
||||
unnamed_args: "arg1 arg2",
|
||||
branch: "master",
|
||||
env: "prod",
|
||||
arg1: "arg1",
|
||||
arg2: "arg2"
|
||||
};
|
||||
expect(getSlashCommandPayload(commandWords, namedArgs)).toEqual(payload);
|
||||
});
|
||||
|
||||
test("slash command payload with malformed named args", async () => {
|
||||
commandWords = ["test", "branch=", "arg1", "e-nv=prod", "arg2"];
|
||||
namedArgs = true;
|
||||
payload = {
|
||||
command: "test",
|
||||
args: "branch= arg1 e-nv=prod arg2",
|
||||
unnamed_args: "branch= arg1 e-nv=prod arg2",
|
||||
arg1: "branch=",
|
||||
arg2: "arg1",
|
||||
arg3: "e-nv=prod",
|
||||
arg4: "arg2"
|
||||
};
|
||||
expect(getSlashCommandPayload(commandWords, namedArgs)).toEqual(payload);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user