@shortcut-cli/shortcut-cli 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +102 -73
- package/build/_virtual/rolldown_runtime.js +25 -0
- package/build/bin/short-api.js +78 -0
- package/build/bin/short-create.js +52 -147
- package/build/bin/short-epics.js +32 -111
- package/build/bin/short-find.js +6 -5
- package/build/bin/short-install.js +38 -128
- package/build/bin/short-members.js +29 -81
- package/build/bin/short-projects.js +29 -84
- package/build/bin/short-search.js +49 -134
- package/build/bin/short-story.js +200 -363
- package/build/bin/short-workflows.js +26 -74
- package/build/bin/short-workspace.js +62 -127
- package/build/bin/short.js +9 -30
- package/build/lib/client.js +12 -8
- package/build/lib/configure.js +95 -105
- package/build/lib/spinner.js +16 -13
- package/build/lib/stories.js +302 -496
- package/build/package.js +18 -0
- package/package.json +30 -28
- package/build/tsconfig.tsbuildinfo +0 -1
package/build/bin/short-story.js
CHANGED
|
@@ -1,369 +1,206 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
3
|
+
const require_lib_spinner = require('../lib/spinner.js');
|
|
4
|
+
const require_lib_configure = require('../lib/configure.js');
|
|
5
|
+
const require_lib_client = require('../lib/client.js');
|
|
6
|
+
const require_lib_stories = require('../lib/stories.js');
|
|
7
|
+
const commander = require_rolldown_runtime.__toESM(require("commander"));
|
|
8
|
+
const debug = require_rolldown_runtime.__toESM(require("debug"));
|
|
9
|
+
const path = require_rolldown_runtime.__toESM(require("path"));
|
|
10
|
+
const fs = require_rolldown_runtime.__toESM(require("fs"));
|
|
11
|
+
const os = require_rolldown_runtime.__toESM(require("os"));
|
|
12
|
+
const child_process = require_rolldown_runtime.__toESM(require("child_process"));
|
|
13
|
+
const chalk = require_rolldown_runtime.__toESM(require("chalk"));
|
|
14
|
+
const https = require_rolldown_runtime.__toESM(require("https"));
|
|
15
|
+
|
|
16
|
+
//#region src/bin/short-story.ts
|
|
17
|
+
const config = require_lib_configure.loadConfig();
|
|
18
|
+
const spin = require_lib_spinner.default();
|
|
19
|
+
const log = console.log;
|
|
20
|
+
const logError = console.error;
|
|
21
|
+
const debug$1 = (0, debug.default)("short");
|
|
22
|
+
const program = commander.default.usage("[options] <id>").description("Update and/or display story details").option("-a, --archived", "Update story as archived").option("-c, --comment [text]", "Add comment to story", "").option("-d, --description [text]", "Update description of story", "").option("-D, --download", "Download all attached files", "").option("--download-dir [path]", "Directory to download files to", ".").option("-e, --estimate [number]", "Update estimate of story", "").option("--epic [id|name]", "Set epic of story").option("-i, --iteration [id|name]", "Set iteration of story").option("-f, --format [template]", "Format the story output by template", "").option("--from-git", "Fetch story parsed by ID from current git branch").option("--git-branch", "Checkout git branch from story slug <mention-name>/ch<id>/<type>-<title>\n as required by the Git integration: https://bit.ly/2RKO1FF").option("--git-branch-short", "Checkout git branch from story slug <mention-name>/ch<id>/<title>").option("-I, --idonly", "Print only ID of story results", "").option("-l, --label [id|name]", "Stories with label id/name, by regex", "").option("--move-after [id]", "Move story to position below story ID").option("--move-before [id]", "Move story to position above story ID").option("--move-down [n]", "Move story position downward by n stories").option("--move-up [n]", "Move story position upward by n stories").option("-o, --owners [id|name]", "Update owners of story, comma-separated", "").option("-O, --open", "Open story in browser").option("--oe, --open-epic", "Open story's epic in browser").option("--oi, --open-iteration", "Open story's iteration in browser").option("--op, --open-project", "Open story's project in browser").option("-q, --quiet", "Print only story output, no loading dialog", "").option("-s, --state [id|name]", "Update workflow state of story", "").option("-t, --title [text]", "Update title/name of story", "").option("--task [text]", "Create new task on story").option("--task-complete [text]", "Toggle completion of task on story matching text").option("-y, --type [name]", "Update type of story", "").parse(process.argv);
|
|
23
|
+
const main = async () => {
|
|
24
|
+
const entities = await require_lib_stories.default.fetchEntities();
|
|
25
|
+
if (!(program.idonly || program.quiet)) spin.start();
|
|
26
|
+
debug$1("constructing story update");
|
|
27
|
+
const update = {};
|
|
28
|
+
if (program.archived) update.archived = true;
|
|
29
|
+
if (program.state) update.workflow_state_id = (require_lib_stories.default.findState(entities, program.state) || {}).id;
|
|
30
|
+
if (program.estimate) update.estimate = parseInt(program.estimate, 10);
|
|
31
|
+
if (program.title) update.name = program.title;
|
|
32
|
+
if (program.description) update.description = `${program.description}`;
|
|
33
|
+
if (program.type) {
|
|
34
|
+
const typeMatch = new RegExp(program.type, "i");
|
|
35
|
+
update.story_type = [
|
|
36
|
+
"feature",
|
|
37
|
+
"bug",
|
|
38
|
+
"chore"
|
|
39
|
+
].filter((t) => !!t.match(typeMatch))[0];
|
|
40
|
+
}
|
|
41
|
+
if (program.owners) update.owner_ids = require_lib_stories.default.findOwnerIds(entities, program.owners);
|
|
42
|
+
if (program.epic) update.epic_id = (require_lib_stories.default.findEpic(entities, program.epic) || {}).id;
|
|
43
|
+
if (program.iteration) update.iteration_id = (require_lib_stories.default.findIteration(entities, program.iteration) || {}).id;
|
|
44
|
+
if (program.label) update.labels = require_lib_stories.default.findLabelNames(entities, program.label);
|
|
45
|
+
const hasPositionUpdate = program.moveAfter !== void 0 || program.moveBefore !== void 0 || program.moveDown !== void 0 || program.moveUp !== void 0;
|
|
46
|
+
const hasUpdate = Object.keys(update).length > 0 || hasPositionUpdate;
|
|
47
|
+
debug$1("constructed story update", update);
|
|
48
|
+
const gitID = [];
|
|
49
|
+
if (program.fromGit || !program.args.length) {
|
|
50
|
+
debug$1("fetching story ID from git");
|
|
51
|
+
let branch = "";
|
|
52
|
+
try {
|
|
53
|
+
branch = (0, child_process.execSync)("git branch").toString("utf-8");
|
|
54
|
+
} catch (e) {
|
|
55
|
+
debug$1(e);
|
|
56
|
+
}
|
|
57
|
+
if (branch.match(/\*.*[0-9]+/)) {
|
|
58
|
+
debug$1("parsing story ID from git branch:", branch);
|
|
59
|
+
const id = parseInt(branch.match(/\*.*/)[0].match(/\/(ch|sc-)([0-9]+)/)[2], 10);
|
|
60
|
+
debug$1("parsed story ID from git branch:", id);
|
|
61
|
+
if (id) gitID.push(id.toString());
|
|
62
|
+
} else {
|
|
63
|
+
stopSpinner();
|
|
64
|
+
logError("No story ID argument present or found in git branch");
|
|
65
|
+
process.exit(2);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const argIDs = program.args.map((a) => (a.match(/\d+/) || [])[0]);
|
|
69
|
+
argIDs.concat(gitID).map(async (_id) => {
|
|
70
|
+
const id = parseInt(_id, 10);
|
|
71
|
+
let story;
|
|
72
|
+
try {
|
|
73
|
+
if (program.comment) {
|
|
74
|
+
debug$1("request comment create");
|
|
75
|
+
await require_lib_client.default.createStoryComment(id, program.comment);
|
|
76
|
+
debug$1("response comment create");
|
|
77
|
+
}
|
|
78
|
+
} catch (e) {
|
|
79
|
+
stopSpinner();
|
|
80
|
+
log("Error creating comment", id);
|
|
81
|
+
process.exit(3);
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
if (program.task) {
|
|
85
|
+
debug$1("request task create");
|
|
86
|
+
await require_lib_client.default.createTask(id, { description: program.task });
|
|
87
|
+
debug$1("response task create");
|
|
88
|
+
}
|
|
89
|
+
} catch (e) {
|
|
90
|
+
stopSpinner();
|
|
91
|
+
log("Error creating task", id);
|
|
92
|
+
process.exit(3);
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
debug$1("request story");
|
|
96
|
+
story = await require_lib_client.default.getStory(id).then((r) => r.data);
|
|
97
|
+
debug$1("response story");
|
|
98
|
+
} catch (e) {
|
|
99
|
+
stopSpinner();
|
|
100
|
+
logError("Error fetching story", id);
|
|
101
|
+
process.exit(4);
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
if (program.taskComplete) {
|
|
105
|
+
debug$1("calculating task(s) to complete");
|
|
106
|
+
const descMatch = new RegExp(program.taskComplete, "i");
|
|
107
|
+
const tasks = story.tasks.filter((t) => t.description.match(descMatch));
|
|
108
|
+
const updatedTaskIds = tasks.map((t) => t.id);
|
|
109
|
+
debug$1("request tasks complete", updatedTaskIds);
|
|
110
|
+
await Promise.all(tasks.map((t) => require_lib_client.default.updateTask(id, t.id, { complete: !t.complete })));
|
|
111
|
+
debug$1("response tasks complete");
|
|
112
|
+
story.tasks = story.tasks.map((t) => {
|
|
113
|
+
if (updatedTaskIds.indexOf(t.id) > -1) t.complete = !t.complete;
|
|
114
|
+
return t;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
} catch (e) {
|
|
118
|
+
stopSpinner();
|
|
119
|
+
log("Error updating tasks", e);
|
|
120
|
+
process.exit(3);
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
if (hasUpdate) {
|
|
124
|
+
if (hasPositionUpdate) {
|
|
125
|
+
debug$1("calculating move up/down");
|
|
126
|
+
const siblings = await require_lib_stories.default.listStories({
|
|
127
|
+
state: story.workflow_state_id.toString(),
|
|
128
|
+
sort: "state.position:asc,position:asc"
|
|
129
|
+
});
|
|
130
|
+
const siblingIds = siblings.map((s) => s.id);
|
|
131
|
+
const storyIndex = siblingIds.indexOf(~~id);
|
|
132
|
+
if (program.moveAfter) update.after_id = ~~program.moveAfter;
|
|
133
|
+
else if (program.moveBefore) update.before_id = ~~program.moveBefore;
|
|
134
|
+
else if (program.moveUp) update.before_id = siblingIds[Math.max(0, storyIndex - (~~program.moveUp || 1))];
|
|
135
|
+
else if (program.moveDown) update.after_id = siblingIds[Math.min(siblings.length - 1, storyIndex + (~~program.moveDown || 1))];
|
|
136
|
+
debug$1("constructed story position update", update);
|
|
137
|
+
}
|
|
138
|
+
debug$1("request story update");
|
|
139
|
+
const changed = await require_lib_client.default.updateStory(id, update);
|
|
140
|
+
debug$1("response story update");
|
|
141
|
+
story = Object.assign({}, story, changed);
|
|
142
|
+
}
|
|
143
|
+
} catch (e) {
|
|
144
|
+
stopSpinner();
|
|
145
|
+
logError("Error updating story", id);
|
|
146
|
+
process.exit(5);
|
|
147
|
+
}
|
|
148
|
+
if (story) story = require_lib_stories.default.hydrateStory(entities, story);
|
|
149
|
+
if (!program.idonly) spin.stop(true);
|
|
150
|
+
if (story) {
|
|
151
|
+
printStory(story, entities);
|
|
152
|
+
if (program.open) openURL(require_lib_stories.default.storyURL(story));
|
|
153
|
+
if (program.openEpic) {
|
|
154
|
+
if (!story.epic_id) {
|
|
155
|
+
logError("This story is not part of an epic.");
|
|
156
|
+
process.exit(21);
|
|
157
|
+
}
|
|
158
|
+
openURL(require_lib_stories.default.buildURL("epic", story.epic_id));
|
|
159
|
+
}
|
|
160
|
+
if (program.openIteration) {
|
|
161
|
+
if (!story.iteration_id) {
|
|
162
|
+
logError("This story is not part of an iteration.");
|
|
163
|
+
process.exit(22);
|
|
164
|
+
}
|
|
165
|
+
openURL(require_lib_stories.default.buildURL("iteration", story.iteration_id));
|
|
166
|
+
}
|
|
167
|
+
if (program.openProject) openURL(require_lib_stories.default.buildURL("project", story.project_id));
|
|
168
|
+
}
|
|
169
|
+
if (program.download) downloadFiles(story);
|
|
170
|
+
if (story && program.gitBranch) {
|
|
171
|
+
if (!config.mentionName) {
|
|
172
|
+
stopSpinner();
|
|
173
|
+
require_lib_stories.default.checkoutStoryBranch(story, `${story.story_type}-${story.id}-`);
|
|
174
|
+
logError("Error creating story branch in Shortcut format");
|
|
175
|
+
logError("Please run: \"short install --force\" to add your mention name to the config.");
|
|
176
|
+
process.exit(10);
|
|
177
|
+
}
|
|
178
|
+
require_lib_stories.default.checkoutStoryBranch(story);
|
|
179
|
+
} else if (story && program.gitBranchShort) require_lib_stories.default.checkoutStoryBranch(story, `${config.mentionName}/sc-${story.id}/`);
|
|
180
|
+
});
|
|
181
|
+
stopSpinner();
|
|
11
182
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
16
|
-
function step(op) {
|
|
17
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
18
|
-
while (_) try {
|
|
19
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
20
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
21
|
-
switch (op[0]) {
|
|
22
|
-
case 0: case 1: t = op; break;
|
|
23
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
24
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
25
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
26
|
-
default:
|
|
27
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
28
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
29
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
30
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
31
|
-
if (t[2]) _.ops.pop();
|
|
32
|
-
_.trys.pop(); continue;
|
|
33
|
-
}
|
|
34
|
-
op = body.call(thisArg, _);
|
|
35
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
36
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
37
|
-
}
|
|
183
|
+
const openURL = (url) => {
|
|
184
|
+
const open = os.default.platform() === "darwin" ? "open" : "xdg-open";
|
|
185
|
+
(0, child_process.execSync)(`${open} '${url}'`);
|
|
38
186
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
var commander = require("commander");
|
|
42
|
-
var os = require("os");
|
|
43
|
-
var path = require("path");
|
|
44
|
-
var fs = require("fs");
|
|
45
|
-
var https = require("https");
|
|
46
|
-
var chalk_1 = require("chalk");
|
|
47
|
-
var configure_1 = require("../lib/configure");
|
|
48
|
-
var debug_1 = require("debug");
|
|
49
|
-
var client_1 = require("../lib/client");
|
|
50
|
-
var stories_1 = require("../lib/stories");
|
|
51
|
-
var spinner_1 = require("../lib/spinner");
|
|
52
|
-
var config = (0, configure_1.loadConfig)();
|
|
53
|
-
var spin = (0, spinner_1.default)();
|
|
54
|
-
var log = console.log;
|
|
55
|
-
var logError = console.error;
|
|
56
|
-
var debug = (0, debug_1.default)('short');
|
|
57
|
-
var program = commander
|
|
58
|
-
.usage('[options] <id>')
|
|
59
|
-
.description('Update and/or display story details')
|
|
60
|
-
.option('-a, --archived', 'Update story as archived')
|
|
61
|
-
.option('-c, --comment [text]', 'Add comment to story', '')
|
|
62
|
-
.option('-d, --description [text]', 'Update description of story', '')
|
|
63
|
-
.option('-D, --download', 'Download all attached files', '')
|
|
64
|
-
.option('--download-dir [path]', 'Directory to download files to', '.')
|
|
65
|
-
.option('-e, --estimate [number]', 'Update estimate of story', '')
|
|
66
|
-
.option('--epic [id|name]', 'Set epic of story')
|
|
67
|
-
.option('-i, --iteration [id|name]', 'Set iteration of story')
|
|
68
|
-
.option('-f, --format [template]', 'Format the story output by template', '')
|
|
69
|
-
.option('--from-git', 'Fetch story parsed by ID from current git branch')
|
|
70
|
-
.option('--git-branch', 'Checkout git branch from story slug <mention-name>/ch<id>/<type>-<title>\n' +
|
|
71
|
-
'\t\t\t\tas required by the Git integration: https://bit.ly/2RKO1FF')
|
|
72
|
-
.option('--git-branch-short', 'Checkout git branch from story slug <mention-name>/ch<id>/<title>')
|
|
73
|
-
.option('-I, --idonly', 'Print only ID of story results', '')
|
|
74
|
-
.option('-l, --label [id|name]', 'Stories with label id/name, by regex', '')
|
|
75
|
-
.option('--move-after [id]', 'Move story to position below story ID')
|
|
76
|
-
.option('--move-before [id]', 'Move story to position above story ID')
|
|
77
|
-
.option('--move-down [n]', 'Move story position downward by n stories')
|
|
78
|
-
.option('--move-up [n]', 'Move story position upward by n stories')
|
|
79
|
-
.option('-o, --owners [id|name]', 'Update owners of story, comma-separated', '')
|
|
80
|
-
.option('-O, --open', 'Open story in browser')
|
|
81
|
-
.option('--oe, --open-epic', "Open story's epic in browser")
|
|
82
|
-
.option('--oi, --open-iteration', "Open story's iteration in browser")
|
|
83
|
-
.option('--op, --open-project', "Open story's project in browser")
|
|
84
|
-
.option('-q, --quiet', 'Print only story output, no loading dialog', '')
|
|
85
|
-
.option('-s, --state [id|name]', 'Update workflow state of story', '')
|
|
86
|
-
.option('-t, --title [text]', 'Update title/name of story', '')
|
|
87
|
-
.option('--task [text]', 'Create new task on story')
|
|
88
|
-
.option('--task-complete [text]', 'Toggle completion of task on story matching text')
|
|
89
|
-
.option('-y, --type [name]', 'Update type of story', '')
|
|
90
|
-
.parse(process.argv);
|
|
91
|
-
var main = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
92
|
-
var entities, update, typeMatch_1, hasPositionUpdate, hasUpdate, gitID, branch, id, argIDs;
|
|
93
|
-
return __generator(this, function (_a) {
|
|
94
|
-
switch (_a.label) {
|
|
95
|
-
case 0: return [4, stories_1.default.fetchEntities()];
|
|
96
|
-
case 1:
|
|
97
|
-
entities = _a.sent();
|
|
98
|
-
if (!(program.idonly || program.quiet))
|
|
99
|
-
spin.start();
|
|
100
|
-
debug('constructing story update');
|
|
101
|
-
update = {};
|
|
102
|
-
if (program.archived) {
|
|
103
|
-
update.archived = true;
|
|
104
|
-
}
|
|
105
|
-
if (program.state) {
|
|
106
|
-
update.workflow_state_id = (stories_1.default.findState(entities, program.state) || {}).id;
|
|
107
|
-
}
|
|
108
|
-
if (program.estimate) {
|
|
109
|
-
update.estimate = parseInt(program.estimate, 10);
|
|
110
|
-
}
|
|
111
|
-
if (program.title) {
|
|
112
|
-
update.name = program.title;
|
|
113
|
-
}
|
|
114
|
-
if (program.description) {
|
|
115
|
-
update.description = "" + program.description;
|
|
116
|
-
}
|
|
117
|
-
if (program.type) {
|
|
118
|
-
typeMatch_1 = new RegExp(program.type, 'i');
|
|
119
|
-
update.story_type = ['feature', 'bug', 'chore'].filter(function (t) { return !!t.match(typeMatch_1); })[0];
|
|
120
|
-
}
|
|
121
|
-
if (program.owners) {
|
|
122
|
-
update.owner_ids = stories_1.default.findOwnerIds(entities, program.owners);
|
|
123
|
-
}
|
|
124
|
-
if (program.epic) {
|
|
125
|
-
update.epic_id = (stories_1.default.findEpic(entities, program.epic) || {}).id;
|
|
126
|
-
}
|
|
127
|
-
if (program.iteration) {
|
|
128
|
-
update.iteration_id = (stories_1.default.findIteration(entities, program.iteration) || {}).id;
|
|
129
|
-
}
|
|
130
|
-
if (program.label) {
|
|
131
|
-
update.labels = stories_1.default.findLabelNames(entities, program.label);
|
|
132
|
-
}
|
|
133
|
-
hasPositionUpdate = program.moveAfter !== undefined ||
|
|
134
|
-
program.moveBefore !== undefined ||
|
|
135
|
-
program.moveDown !== undefined ||
|
|
136
|
-
program.moveUp !== undefined;
|
|
137
|
-
hasUpdate = Object.keys(update).length > 0 || hasPositionUpdate;
|
|
138
|
-
debug('constructed story update', update);
|
|
139
|
-
gitID = [];
|
|
140
|
-
if (program.fromGit || !program.args.length) {
|
|
141
|
-
debug('fetching story ID from git');
|
|
142
|
-
branch = '';
|
|
143
|
-
try {
|
|
144
|
-
branch = (0, child_process_1.execSync)('git branch').toString('utf-8');
|
|
145
|
-
}
|
|
146
|
-
catch (e) {
|
|
147
|
-
debug(e);
|
|
148
|
-
}
|
|
149
|
-
if (branch.match(/\*.*[0-9]+/)) {
|
|
150
|
-
debug('parsing story ID from git branch:', branch);
|
|
151
|
-
id = parseInt(branch.match(/\*.*/)[0].match(/\/(ch|sc-)([0-9]+)/)[2], 10);
|
|
152
|
-
debug('parsed story ID from git branch:', id);
|
|
153
|
-
if (id) {
|
|
154
|
-
gitID.push(id.toString());
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
stopSpinner();
|
|
159
|
-
logError('No story ID argument present or found in git branch');
|
|
160
|
-
process.exit(2);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
argIDs = program.args.map(function (a) { return (a.match(/\d+/) || [])[0]; });
|
|
164
|
-
argIDs.concat(gitID).map(function (_id) { return __awaiter(void 0, void 0, void 0, function () {
|
|
165
|
-
var id, story, e_1, e_2, e_3, descMatch_1, tasks, updatedTaskIds_1, e_4, siblings, siblingIds, storyIndex, changed, e_5;
|
|
166
|
-
return __generator(this, function (_a) {
|
|
167
|
-
switch (_a.label) {
|
|
168
|
-
case 0:
|
|
169
|
-
id = parseInt(_id, 10);
|
|
170
|
-
_a.label = 1;
|
|
171
|
-
case 1:
|
|
172
|
-
_a.trys.push([1, 4, , 5]);
|
|
173
|
-
if (!program.comment) return [3, 3];
|
|
174
|
-
debug('request comment create');
|
|
175
|
-
return [4, client_1.default.createStoryComment(id, program.comment)];
|
|
176
|
-
case 2:
|
|
177
|
-
_a.sent();
|
|
178
|
-
debug('response comment create');
|
|
179
|
-
_a.label = 3;
|
|
180
|
-
case 3: return [3, 5];
|
|
181
|
-
case 4:
|
|
182
|
-
e_1 = _a.sent();
|
|
183
|
-
stopSpinner();
|
|
184
|
-
log('Error creating comment', id);
|
|
185
|
-
process.exit(3);
|
|
186
|
-
return [3, 5];
|
|
187
|
-
case 5:
|
|
188
|
-
_a.trys.push([5, 8, , 9]);
|
|
189
|
-
if (!program.task) return [3, 7];
|
|
190
|
-
debug('request task create');
|
|
191
|
-
return [4, client_1.default.createTask(id, { description: program.task })];
|
|
192
|
-
case 6:
|
|
193
|
-
_a.sent();
|
|
194
|
-
debug('response task create');
|
|
195
|
-
_a.label = 7;
|
|
196
|
-
case 7: return [3, 9];
|
|
197
|
-
case 8:
|
|
198
|
-
e_2 = _a.sent();
|
|
199
|
-
stopSpinner();
|
|
200
|
-
log('Error creating task', id);
|
|
201
|
-
process.exit(3);
|
|
202
|
-
return [3, 9];
|
|
203
|
-
case 9:
|
|
204
|
-
_a.trys.push([9, 11, , 12]);
|
|
205
|
-
debug('request story');
|
|
206
|
-
return [4, client_1.default.getStory(id).then(function (r) { return r.data; })];
|
|
207
|
-
case 10:
|
|
208
|
-
story = _a.sent();
|
|
209
|
-
debug('response story');
|
|
210
|
-
return [3, 12];
|
|
211
|
-
case 11:
|
|
212
|
-
e_3 = _a.sent();
|
|
213
|
-
stopSpinner();
|
|
214
|
-
logError('Error fetching story', id);
|
|
215
|
-
process.exit(4);
|
|
216
|
-
return [3, 12];
|
|
217
|
-
case 12:
|
|
218
|
-
_a.trys.push([12, 15, , 16]);
|
|
219
|
-
if (!program.taskComplete) return [3, 14];
|
|
220
|
-
debug('calculating task(s) to complete');
|
|
221
|
-
descMatch_1 = new RegExp(program.taskComplete, 'i');
|
|
222
|
-
tasks = story.tasks.filter(function (t) { return t.description.match(descMatch_1); });
|
|
223
|
-
updatedTaskIds_1 = tasks.map(function (t) { return t.id; });
|
|
224
|
-
debug('request tasks complete', updatedTaskIds_1);
|
|
225
|
-
return [4, Promise.all(tasks.map(function (t) { return client_1.default.updateTask(id, t.id, { complete: !t.complete }); }))];
|
|
226
|
-
case 13:
|
|
227
|
-
_a.sent();
|
|
228
|
-
debug('response tasks complete');
|
|
229
|
-
story.tasks = story.tasks.map(function (t) {
|
|
230
|
-
if (updatedTaskIds_1.indexOf(t.id) > -1)
|
|
231
|
-
t.complete = !t.complete;
|
|
232
|
-
return t;
|
|
233
|
-
});
|
|
234
|
-
_a.label = 14;
|
|
235
|
-
case 14: return [3, 16];
|
|
236
|
-
case 15:
|
|
237
|
-
e_4 = _a.sent();
|
|
238
|
-
stopSpinner();
|
|
239
|
-
log('Error updating tasks', e_4);
|
|
240
|
-
process.exit(3);
|
|
241
|
-
return [3, 16];
|
|
242
|
-
case 16:
|
|
243
|
-
_a.trys.push([16, 21, , 22]);
|
|
244
|
-
if (!hasUpdate) return [3, 20];
|
|
245
|
-
if (!hasPositionUpdate) return [3, 18];
|
|
246
|
-
debug('calculating move up/down');
|
|
247
|
-
return [4, stories_1.default.listStories({
|
|
248
|
-
state: story.workflow_state_id.toString(),
|
|
249
|
-
sort: 'state.position:asc,position:asc',
|
|
250
|
-
})];
|
|
251
|
-
case 17:
|
|
252
|
-
siblings = _a.sent();
|
|
253
|
-
siblingIds = siblings.map(function (s) { return s.id; });
|
|
254
|
-
storyIndex = siblingIds.indexOf(~~id);
|
|
255
|
-
if (program.moveAfter) {
|
|
256
|
-
update.after_id = ~~program.moveAfter;
|
|
257
|
-
}
|
|
258
|
-
else if (program.moveBefore) {
|
|
259
|
-
update.before_id = ~~program.moveBefore;
|
|
260
|
-
}
|
|
261
|
-
else if (program.moveUp) {
|
|
262
|
-
update.before_id =
|
|
263
|
-
siblingIds[Math.max(0, storyIndex - (~~program.moveUp || 1))];
|
|
264
|
-
}
|
|
265
|
-
else if (program.moveDown) {
|
|
266
|
-
update.after_id =
|
|
267
|
-
siblingIds[Math.min(siblings.length - 1, storyIndex + (~~program.moveDown || 1))];
|
|
268
|
-
}
|
|
269
|
-
debug('constructed story position update', update);
|
|
270
|
-
_a.label = 18;
|
|
271
|
-
case 18:
|
|
272
|
-
debug('request story update');
|
|
273
|
-
return [4, client_1.default.updateStory(id, update)];
|
|
274
|
-
case 19:
|
|
275
|
-
changed = _a.sent();
|
|
276
|
-
debug('response story update');
|
|
277
|
-
story = Object.assign({}, story, changed);
|
|
278
|
-
_a.label = 20;
|
|
279
|
-
case 20: return [3, 22];
|
|
280
|
-
case 21:
|
|
281
|
-
e_5 = _a.sent();
|
|
282
|
-
stopSpinner();
|
|
283
|
-
logError('Error updating story', id);
|
|
284
|
-
process.exit(5);
|
|
285
|
-
return [3, 22];
|
|
286
|
-
case 22:
|
|
287
|
-
if (story) {
|
|
288
|
-
story = stories_1.default.hydrateStory(entities, story);
|
|
289
|
-
}
|
|
290
|
-
if (!program.idonly)
|
|
291
|
-
spin.stop(true);
|
|
292
|
-
if (story) {
|
|
293
|
-
printStory(story, entities);
|
|
294
|
-
if (program.open) {
|
|
295
|
-
openURL(stories_1.default.storyURL(story));
|
|
296
|
-
}
|
|
297
|
-
if (program.openEpic) {
|
|
298
|
-
if (!story.epic_id) {
|
|
299
|
-
logError('This story is not part of an epic.');
|
|
300
|
-
process.exit(21);
|
|
301
|
-
}
|
|
302
|
-
openURL(stories_1.default.buildURL('epic', story.epic_id));
|
|
303
|
-
}
|
|
304
|
-
if (program.openIteration) {
|
|
305
|
-
if (!story.iteration_id) {
|
|
306
|
-
logError('This story is not part of an iteration.');
|
|
307
|
-
process.exit(22);
|
|
308
|
-
}
|
|
309
|
-
openURL(stories_1.default.buildURL('iteration', story.iteration_id));
|
|
310
|
-
}
|
|
311
|
-
if (program.openProject) {
|
|
312
|
-
openURL(stories_1.default.buildURL('project', story.project_id));
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
if (program.download) {
|
|
316
|
-
downloadFiles(story);
|
|
317
|
-
}
|
|
318
|
-
if (story && program.gitBranch) {
|
|
319
|
-
if (!config.mentionName) {
|
|
320
|
-
stopSpinner();
|
|
321
|
-
stories_1.default.checkoutStoryBranch(story, story.story_type + "-" + story.id + "-");
|
|
322
|
-
logError('Error creating story branch in Shortcut format');
|
|
323
|
-
logError('Please run: "short install --force" to add your mention name to the config.');
|
|
324
|
-
process.exit(10);
|
|
325
|
-
}
|
|
326
|
-
stories_1.default.checkoutStoryBranch(story);
|
|
327
|
-
}
|
|
328
|
-
else if (story && program.gitBranchShort) {
|
|
329
|
-
stories_1.default.checkoutStoryBranch(story, config.mentionName + "/sc-" + story.id + "/");
|
|
330
|
-
}
|
|
331
|
-
return [2];
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
}); });
|
|
335
|
-
stopSpinner();
|
|
336
|
-
return [2];
|
|
337
|
-
}
|
|
338
|
-
});
|
|
339
|
-
}); };
|
|
340
|
-
var openURL = function (url) {
|
|
341
|
-
var open = os.platform() === 'darwin' ? 'open' : 'xdg-open';
|
|
342
|
-
(0, child_process_1.execSync)(open + " '" + url + "'");
|
|
187
|
+
const stopSpinner = () => {
|
|
188
|
+
if (!(program.idonly || program.quiet)) spin.stop(true);
|
|
343
189
|
};
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
});
|
|
358
|
-
};
|
|
359
|
-
var printStory = function (story, entities) {
|
|
360
|
-
if (program.idonly) {
|
|
361
|
-
return log(story.id);
|
|
362
|
-
}
|
|
363
|
-
if (program.format) {
|
|
364
|
-
return stories_1.default.printFormattedStory(program)(story);
|
|
365
|
-
}
|
|
366
|
-
stories_1.default.printDetailedStory(story, entities);
|
|
190
|
+
const downloadFiles = (story) => story.files.map((file) => {
|
|
191
|
+
https.default.get(require_lib_stories.default.fileURL(file), (res) => {
|
|
192
|
+
const filePath = path.default.join(program.downloadDir, file.name);
|
|
193
|
+
log(chalk.default.bold("Downloading file to: ") + filePath);
|
|
194
|
+
const stream = fs.default.createWriteStream(filePath);
|
|
195
|
+
res.pipe(stream);
|
|
196
|
+
stream.on("finish", () => stream.close());
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
const printStory = (story, entities) => {
|
|
200
|
+
if (program.idonly) return log(story.id);
|
|
201
|
+
if (program.format) return require_lib_stories.default.printFormattedStory(program)(story);
|
|
202
|
+
require_lib_stories.default.printDetailedStory(story, entities);
|
|
367
203
|
};
|
|
368
204
|
main();
|
|
369
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnQtc3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL3Nob3J0LXN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLCtDQUF5QztBQUN6QyxxQ0FBdUM7QUFFdkMsdUJBQXlCO0FBQ3pCLDJCQUE2QjtBQUM3Qix1QkFBeUI7QUFDekIsNkJBQStCO0FBQy9CLCtCQUEwQjtBQUMxQiw4Q0FBOEM7QUFFOUMsK0JBQThCO0FBQzlCLHdDQUFtQztBQUNuQywwQ0FBbUU7QUFVbkUsMENBQXFDO0FBRXJDLElBQU0sTUFBTSxHQUFHLElBQUEsc0JBQVUsR0FBRSxDQUFDO0FBQzVCLElBQU0sSUFBSSxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFDO0FBQ3ZCLElBQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDeEIsSUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMvQixJQUFNLEtBQUssR0FBRyxJQUFBLGVBQVMsRUFBQyxPQUFPLENBQUMsQ0FBQztBQUVqQyxJQUFNLE9BQU8sR0FBRyxTQUFTO0tBQ3BCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztLQUN2QixXQUFXLENBQUMscUNBQXFDLENBQUM7S0FDbEQsTUFBTSxDQUFDLGdCQUFnQixFQUFFLDBCQUEwQixDQUFDO0tBQ3BELE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLENBQUM7S0FDMUQsTUFBTSxDQUFDLDBCQUEwQixFQUFFLDZCQUE2QixFQUFFLEVBQUUsQ0FBQztLQUNyRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsNkJBQTZCLEVBQUUsRUFBRSxDQUFDO0tBQzNELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxnQ0FBZ0MsRUFBRSxHQUFHLENBQUM7S0FDdEUsTUFBTSxDQUFDLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLEVBQUUsQ0FB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
|
|
205
|
+
|
|
206
|
+
//#endregion
|