@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
|
@@ -1,79 +1,31 @@
|
|
|
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_client = require('../lib/client.js');
|
|
5
|
+
const commander = require_rolldown_runtime.__toESM(require("commander"));
|
|
6
|
+
const chalk = require_rolldown_runtime.__toESM(require("chalk"));
|
|
7
|
+
|
|
8
|
+
//#region src/bin/short-workflows.ts
|
|
9
|
+
const spin = require_lib_spinner.default();
|
|
10
|
+
const log = console.log;
|
|
11
|
+
const program = commander.default.description("Display workflows/states available for stories").option("-s, --search [query]", "List states containing query", "").parse(process.argv);
|
|
12
|
+
const main = async () => {
|
|
13
|
+
spin.start();
|
|
14
|
+
const wfs = await require_lib_client.default.listWorkflows().then((r) => r.data);
|
|
15
|
+
spin.stop(true);
|
|
16
|
+
wfs.map(printWf);
|
|
11
17
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
}
|
|
18
|
+
const printWf = (wf) => {
|
|
19
|
+
log(chalk.default.bold(`#${wf.id}`) + ` ${wf.name}`);
|
|
20
|
+
log(" == States:");
|
|
21
|
+
wf.states.map(printWfState);
|
|
38
22
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
var spin = (0, spinner_1.default)();
|
|
45
|
-
var log = console.log;
|
|
46
|
-
var program = commander
|
|
47
|
-
.description('Display workflows/states available for stories')
|
|
48
|
-
.option('-s, --search [query]', 'List states containing query', '')
|
|
49
|
-
.parse(process.argv);
|
|
50
|
-
var main = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
51
|
-
var wfs;
|
|
52
|
-
return __generator(this, function (_a) {
|
|
53
|
-
switch (_a.label) {
|
|
54
|
-
case 0:
|
|
55
|
-
spin.start();
|
|
56
|
-
return [4, client_1.default.listWorkflows().then(function (r) { return r.data; })];
|
|
57
|
-
case 1:
|
|
58
|
-
wfs = _a.sent();
|
|
59
|
-
spin.stop(true);
|
|
60
|
-
wfs.map(printWf);
|
|
61
|
-
return [2];
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}); };
|
|
65
|
-
var printWf = function (wf) {
|
|
66
|
-
log(chalk_1.default.bold("#" + wf.id) + (" " + wf.name));
|
|
67
|
-
log(' == States:');
|
|
68
|
-
wf.states.map(printWfState);
|
|
69
|
-
};
|
|
70
|
-
var printWfState = function (state) {
|
|
71
|
-
if (!state.name.match(new RegExp(program.search, 'i'))) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
log(chalk_1.default.bold(" #" + state.id) + (" " + state.name));
|
|
75
|
-
log(" Type: \t" + state.type);
|
|
76
|
-
log(" Stories:\t" + state.num_stories);
|
|
23
|
+
const printWfState = (state) => {
|
|
24
|
+
if (!state.name.match(new RegExp(program.search, "i"))) return;
|
|
25
|
+
log(chalk.default.bold(` #${state.id}`) + ` ${state.name}`);
|
|
26
|
+
log(` Type: \t${state.type}`);
|
|
27
|
+
log(` Stories:\t${state.num_stories}`);
|
|
77
28
|
};
|
|
78
29
|
main();
|
|
79
|
-
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
@@ -1,130 +1,65 @@
|
|
|
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_configure = require('../lib/configure.js');
|
|
4
|
+
const require_lib_stories = require('../lib/stories.js');
|
|
5
|
+
const require_bin_short_search = require('./short-search.js');
|
|
6
|
+
const commander = require_rolldown_runtime.__toESM(require("commander"));
|
|
7
|
+
|
|
8
|
+
//#region src/bin/short-workspace.ts
|
|
9
|
+
const config = require_lib_configure.default.loadConfig();
|
|
10
|
+
const log = console.log;
|
|
11
|
+
const program$1 = commander.default.description("List stories matching saved workspace query").option("-l, --list", "List saved workspaces").option("-q, --quiet", "Print only workspace story output, no loading dialog", "").option("-n, --name [name]", "Load named workspace", "").option("-u, --unset [name]", "Force unset saved workspace").parse(process.argv);
|
|
12
|
+
const main = async () => {
|
|
13
|
+
if (!config || !config.token) {
|
|
14
|
+
log("Not installed yet.");
|
|
15
|
+
log("Please run: short install");
|
|
16
|
+
return;
|
|
17
|
+
} else if (!config.workspaces) {
|
|
18
|
+
log("No workspace saved.");
|
|
19
|
+
log("Please run:");
|
|
20
|
+
log(" short search [options] --save");
|
|
21
|
+
log("to create your first one.");
|
|
22
|
+
return;
|
|
23
|
+
} else if (program$1.list) {
|
|
24
|
+
log("Workspaces:");
|
|
25
|
+
Object.keys(config.workspaces).map((w) => {
|
|
26
|
+
log(" ", w + ":", toArgs(config.workspaces[w]));
|
|
27
|
+
});
|
|
28
|
+
return;
|
|
29
|
+
} else if (program$1.unset) {
|
|
30
|
+
const success = require_lib_configure.default.removeWorkspace(program$1.unset);
|
|
31
|
+
if (success) log("Successfully removed %s workspace", program$1.unset);
|
|
32
|
+
else log("Failed to remove %s workspace", program$1.unset);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const name = `${program$1.name || program$1.args[0] || "default"}`;
|
|
36
|
+
const workspace = config.workspaces[name];
|
|
37
|
+
if (!workspace) {
|
|
38
|
+
log("No workspace saved with name", name);
|
|
39
|
+
log("Please run:");
|
|
40
|
+
log(" short search [options] --save", name);
|
|
41
|
+
log("to create it.");
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const found = require_bin_short_search.program.parse(process.argv);
|
|
45
|
+
const findOpts = found.options.map((o) => o.name());
|
|
46
|
+
const additionalArgs = findOpts.reduce((acc, val) => {
|
|
47
|
+
acc[val] = found[val] || acc[val] || found[val];
|
|
48
|
+
return acc;
|
|
49
|
+
}, workspace);
|
|
50
|
+
if (!program$1.quiet) {
|
|
51
|
+
log("Loading %s workspace ...", name);
|
|
52
|
+
log();
|
|
53
|
+
}
|
|
54
|
+
let stories = [];
|
|
55
|
+
try {
|
|
56
|
+
stories = await require_lib_stories.default.listStories(additionalArgs);
|
|
57
|
+
} catch (e) {
|
|
58
|
+
log("Error fetching stories:", e);
|
|
59
|
+
}
|
|
60
|
+
stories.map(require_lib_stories.default.printFormattedStory(additionalArgs));
|
|
11
61
|
};
|
|
12
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
13
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
14
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
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
|
-
}
|
|
38
|
-
};
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
var configure_1 = require("../lib/configure");
|
|
41
|
-
var commander = require("commander");
|
|
42
|
-
var stories_1 = require("../lib/stories");
|
|
43
|
-
var short_search_1 = require("./short-search");
|
|
44
|
-
var config = configure_1.default.loadConfig();
|
|
45
|
-
var log = console.log;
|
|
46
|
-
var program = commander
|
|
47
|
-
.description('List stories matching saved workspace query')
|
|
48
|
-
.option('-l, --list', 'List saved workspaces')
|
|
49
|
-
.option('-q, --quiet', 'Print only workspace story output, no loading dialog', '')
|
|
50
|
-
.option('-n, --name [name]', 'Load named workspace', '')
|
|
51
|
-
.option('-u, --unset [name]', 'Force unset saved workspace')
|
|
52
|
-
.parse(process.argv);
|
|
53
|
-
var main = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
-
var success, name, workspace, found, findOpts, additionalArgs, stories, e_1;
|
|
55
|
-
return __generator(this, function (_a) {
|
|
56
|
-
switch (_a.label) {
|
|
57
|
-
case 0:
|
|
58
|
-
if (!config || !config.token) {
|
|
59
|
-
log('Not installed yet.');
|
|
60
|
-
log('Please run: short install');
|
|
61
|
-
return [2];
|
|
62
|
-
}
|
|
63
|
-
else if (!config.workspaces) {
|
|
64
|
-
log('No workspace saved.');
|
|
65
|
-
log('Please run:');
|
|
66
|
-
log(' short search [options] --save');
|
|
67
|
-
log('to create your first one.');
|
|
68
|
-
return [2];
|
|
69
|
-
}
|
|
70
|
-
else if (program.list) {
|
|
71
|
-
log('Workspaces:');
|
|
72
|
-
Object.keys(config.workspaces).map(function (w) {
|
|
73
|
-
log(' ', w + ':', toArgs(config.workspaces[w]));
|
|
74
|
-
});
|
|
75
|
-
return [2];
|
|
76
|
-
}
|
|
77
|
-
else if (program.unset) {
|
|
78
|
-
success = configure_1.default.removeWorkspace(program.unset);
|
|
79
|
-
if (success) {
|
|
80
|
-
log('Successfully removed %s workspace', program.unset);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
log('Failed to remove %s workspace', program.unset);
|
|
84
|
-
}
|
|
85
|
-
return [2];
|
|
86
|
-
}
|
|
87
|
-
name = "" + (program.name || program.args[0] || 'default');
|
|
88
|
-
workspace = config.workspaces[name];
|
|
89
|
-
if (!workspace) {
|
|
90
|
-
log('No workspace saved with name', name);
|
|
91
|
-
log('Please run:');
|
|
92
|
-
log(' short search [options] --save', name);
|
|
93
|
-
log('to create it.');
|
|
94
|
-
return [2];
|
|
95
|
-
}
|
|
96
|
-
found = short_search_1.program.parse(process.argv);
|
|
97
|
-
findOpts = found.options.map(function (o) { return o.name(); });
|
|
98
|
-
additionalArgs = findOpts.reduce(function (acc, val) {
|
|
99
|
-
acc[val] = found[val] || acc[val] || found[val];
|
|
100
|
-
return acc;
|
|
101
|
-
}, workspace);
|
|
102
|
-
if (!program.quiet) {
|
|
103
|
-
log('Loading %s workspace ...', name);
|
|
104
|
-
log();
|
|
105
|
-
}
|
|
106
|
-
stories = [];
|
|
107
|
-
_a.label = 1;
|
|
108
|
-
case 1:
|
|
109
|
-
_a.trys.push([1, 3, , 4]);
|
|
110
|
-
return [4, stories_1.default.listStories(additionalArgs)];
|
|
111
|
-
case 2:
|
|
112
|
-
stories = _a.sent();
|
|
113
|
-
return [3, 4];
|
|
114
|
-
case 3:
|
|
115
|
-
e_1 = _a.sent();
|
|
116
|
-
log('Error fetching stories:', e_1);
|
|
117
|
-
return [3, 4];
|
|
118
|
-
case 4:
|
|
119
|
-
stories.map(stories_1.default.printFormattedStory(additionalArgs));
|
|
120
|
-
return [2];
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
}); };
|
|
124
62
|
main();
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
.join(' ');
|
|
129
|
-
};
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnQtd29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9zaG9ydC13b3Jrc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsOENBQXlDO0FBQ3pDLHFDQUF1QztBQUN2QywwQ0FBc0M7QUFFdEMsK0NBQTBEO0FBRzFELElBQU0sTUFBTSxHQUFHLG1CQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDdEMsSUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUV4QixJQUFNLE9BQU8sR0FBRyxTQUFTO0tBQ3BCLFdBQVcsQ0FBQyw2Q0FBNkMsQ0FBQztLQUMxRCxNQUFNLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDO0tBQzdDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsc0RBQXNELEVBQUUsRUFBRSxDQUFDO0tBQ2pGLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLENBQUM7S0FDdkQsTUFBTSxDQUFDLG9CQUFvQixFQUFFLDZCQUE2QixDQUFDO0tBQzNELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFekIsSUFBTSxJQUFJLEdBQUc7Ozs7O2dCQUNULElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUMxQixHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztvQkFDMUIsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQ2pDLFdBQU87aUJBQ1Y7cUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7b0JBQzNCLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUMzQixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ25CLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO29CQUN2QyxHQUFHLENBQUMsMkJBQTJCLENB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
|
|
63
|
+
const toArgs = (obj) => Object.keys(obj).map((k) => `--${k} '${obj[k]}'`).join(" ");
|
|
64
|
+
|
|
65
|
+
//#endregion
|
package/build/bin/short.js
CHANGED
|
@@ -1,31 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
.command('search [options] [SEARCH OPERATORS]', 'search stories with optional query')
|
|
12
|
-
.alias('s')
|
|
13
|
-
.command('find [options] [SEARCH OPERATORS]', '[DEPRECATED] search stories with optional query')
|
|
14
|
-
.command('story ID [options]', 'view or manipulate stories')
|
|
15
|
-
.alias('st')
|
|
16
|
-
.command('create [options]', 'create a story')
|
|
17
|
-
.alias('c')
|
|
18
|
-
.command('members [options]', 'list members')
|
|
19
|
-
.alias('m')
|
|
20
|
-
.command('workflows [options]', 'list workflows and their states')
|
|
21
|
-
.alias('wf')
|
|
22
|
-
.command('epics [options]', 'list epics and their states')
|
|
23
|
-
.alias('e')
|
|
24
|
-
.command('projects [options]', 'list projects and their states')
|
|
25
|
-
.alias('p')
|
|
26
|
-
.command('workspace [NAME] [options]', 'list stories matching saved workspace query', {
|
|
27
|
-
isDefault: true,
|
|
28
|
-
})
|
|
29
|
-
.alias('w')
|
|
30
|
-
.parse(process.argv);
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL3Nob3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLElBQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRTFDLHFDQUF1QztBQUV2QyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUU5QyxTQUFTO0tBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7S0FDcEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7S0FDNUIsT0FBTyxDQUFDLG1CQUFtQixFQUFFLGtDQUFrQyxDQUFDO0tBQ2hFLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRSxvQ0FBb0MsQ0FBQztLQUNwRixLQUFLLENBQUMsR0FBRyxDQUFDO0tBQ1YsT0FBTyxDQUFDLG1DQUFtQyxFQUFFLGlEQUFpRCxDQUFDO0tBQy9GLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSw0QkFBNEIsQ0FBQztLQUMzRCxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ1gsT0FBTyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDO0tBQzdDLEtBQUssQ0FBQyxHQUFHLENBQUM7S0FDVixPQUFPLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDO0tBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUM7S0FDVixPQUFPLENBQUMscUJBQXFCLEVBQUUsaUNBQWlDLENBQUM7S0FDakUsS0FBSyxDQUFDLElBQUksQ0FBQztLQUNYLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSw2QkFBNkIsQ0FBQztLQUN6RCxLQUFLLENBQUMsR0FBRyxDQUFDO0tBQ1YsT0FBTyxDQUFDLG9CQUFvQixFQUFFLGdDQUFnQyxDQUFDO0tBQy9ELEtBQUssQ0FBQyxHQUFHLENBQUM7S0FDVixPQUFPLENBQUMsNEJBQTRCLEVBQUUsNkNBQTZDLEVBQUU7SUFDbEYsU0FBUyxFQUFFLElBQUk7Q0FDbEIsQ0FBQztLQUNELEtBQUssQ0FBQyxHQUFHLENBQUM7S0FDVixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDIn0=
|
|
2
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
3
|
+
const require_package = require('../package.js');
|
|
4
|
+
const commander = require_rolldown_runtime.__toESM(require("commander"));
|
|
5
|
+
|
|
6
|
+
//#region src/bin/short.ts
|
|
7
|
+
process.on("unhandledRejection", console.log);
|
|
8
|
+
commander.default.version(require_package.version).description(require_package.description).command("install [options]", "install and configure API access").command("search [options] [SEARCH OPERATORS]", "search stories with optional query").alias("s").command("find [options] [SEARCH OPERATORS]", "[DEPRECATED] search stories with optional query").command("story ID [options]", "view or manipulate stories").alias("st").command("create [options]", "create a story").alias("c").command("members [options]", "list members").alias("m").command("workflows [options]", "list workflows and their states").alias("wf").command("epics [options]", "list epics and their states").alias("e").command("projects [options]", "list projects and their states").alias("p").command("workspace [NAME] [options]", "list stories matching saved workspace query", { isDefault: true }).alias("w").command("api <path> [options]", "make a request to the Shortcut API").parse(process.argv);
|
|
9
|
+
|
|
10
|
+
//#endregion
|
package/build/lib/client.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
2
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
3
|
+
const require_lib_configure = require('./configure.js');
|
|
4
|
+
const __shortcut_client = require_rolldown_runtime.__toESM(require("@shortcut/client"));
|
|
5
|
+
|
|
6
|
+
//#region src/lib/client.ts
|
|
7
|
+
const config = require_lib_configure.loadConfig();
|
|
8
|
+
const client = new __shortcut_client.ShortcutClient(config.token);
|
|
9
|
+
var client_default = client;
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
exports.default = client_default;
|
package/build/lib/configure.js
CHANGED
|
@@ -1,115 +1,105 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.updateConfig = exports.loadCachedConfig = exports.loadConfig = void 0;
|
|
15
|
-
var path = require("path");
|
|
16
|
-
var fs = require("fs");
|
|
17
|
-
var os = require("os");
|
|
1
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
2
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
3
|
+
const path = require_rolldown_runtime.__toESM(require("path"));
|
|
4
|
+
const fs = require_rolldown_runtime.__toESM(require("fs"));
|
|
5
|
+
const os = require_rolldown_runtime.__toESM(require("os"));
|
|
6
|
+
|
|
7
|
+
//#region src/lib/configure.ts
|
|
18
8
|
function getConfigDir(suffix) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return path.resolve(configBaseDir, suffix);
|
|
9
|
+
const configBaseDir = process.env.XDG_CONFIG_HOME || path.default.resolve(process.env.XDG_DATA_HOME || os.default.homedir(), ".config");
|
|
10
|
+
return path.default.resolve(configBaseDir, suffix);
|
|
22
11
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return config;
|
|
12
|
+
const configDir = getConfigDir("shortcut-cli");
|
|
13
|
+
const configFile = path.default.resolve(configDir, "config.json");
|
|
14
|
+
const legacyConfigDirs = [getConfigDir("clubhouse-cli"), path.default.resolve(os.default.homedir(), ".clubhouse-cli")];
|
|
15
|
+
let CONFIG_CACHE = null;
|
|
16
|
+
/**
|
|
17
|
+
* Config load function to be used in most-cases.
|
|
18
|
+
*/
|
|
19
|
+
const loadConfig = () => {
|
|
20
|
+
const config = loadCachedConfig();
|
|
21
|
+
if (!config || config === {} || !config.token) {
|
|
22
|
+
console.error("Please run 'short install' to configure Shortcut API access.");
|
|
23
|
+
process.exit(11);
|
|
24
|
+
}
|
|
25
|
+
if (!config.urlSlug) {
|
|
26
|
+
console.error("Your config must be updated with data from Shortcut. Please run 'short install --refresh'.");
|
|
27
|
+
process.exit(12);
|
|
28
|
+
}
|
|
29
|
+
return config;
|
|
42
30
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
CONFIG_CACHE = __assign({}, config);
|
|
69
|
-
return config;
|
|
31
|
+
/**
|
|
32
|
+
* Only use this function directly if you need to avoid the config check.
|
|
33
|
+
*/
|
|
34
|
+
const loadCachedConfig = () => {
|
|
35
|
+
if (CONFIG_CACHE) return { ...CONFIG_CACHE };
|
|
36
|
+
let config = {};
|
|
37
|
+
const token = process.env.SHORTCUT_API_TOKEN || process.env.CLUBHOUSE_API_TOKEN;
|
|
38
|
+
legacyConfigDirs.forEach((dir) => {
|
|
39
|
+
if (fs.default.existsSync(dir)) {
|
|
40
|
+
createConfigDir();
|
|
41
|
+
fs.default.renameSync(dir, configDir);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
if (fs.default.existsSync(configFile)) try {
|
|
45
|
+
config = JSON.parse(fs.default.readFileSync(configFile, "utf8"));
|
|
46
|
+
} catch (e) {
|
|
47
|
+
console.error(e);
|
|
48
|
+
process.exit(10);
|
|
49
|
+
}
|
|
50
|
+
if (token) config = {
|
|
51
|
+
token,
|
|
52
|
+
...config
|
|
53
|
+
};
|
|
54
|
+
CONFIG_CACHE = { ...config };
|
|
55
|
+
return config;
|
|
70
56
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
fs.mkdirSync(dir);
|
|
76
|
-
}
|
|
77
|
-
if (!fs.existsSync(configDir)) {
|
|
78
|
-
fs.mkdirSync(configDir);
|
|
79
|
-
}
|
|
57
|
+
const createConfigDir = () => {
|
|
58
|
+
const dir = path.default.dirname(configDir);
|
|
59
|
+
if (!fs.default.existsSync(dir)) fs.default.mkdirSync(dir);
|
|
60
|
+
if (!fs.default.existsSync(configDir)) fs.default.mkdirSync(configDir);
|
|
80
61
|
};
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
62
|
+
const saveConfig = (config) => {
|
|
63
|
+
try {
|
|
64
|
+
createConfigDir();
|
|
65
|
+
fs.default.writeFileSync(configFile, JSON.stringify(config), { flag: "w" });
|
|
66
|
+
CONFIG_CACHE = { ...config };
|
|
67
|
+
return true;
|
|
68
|
+
} catch (e) {
|
|
69
|
+
console.error(e);
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
92
72
|
};
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
73
|
+
const updateConfig = (newConfig) => {
|
|
74
|
+
const extantConfig = loadCachedConfig() || {};
|
|
75
|
+
return saveConfig({
|
|
76
|
+
...newConfig,
|
|
77
|
+
...extantConfig
|
|
78
|
+
});
|
|
96
79
|
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
80
|
+
const saveWorkspace = (name, workspace) => {
|
|
81
|
+
const extantConfig = loadCachedConfig();
|
|
82
|
+
const workspaces = extantConfig.workspaces || {};
|
|
83
|
+
workspaces[name] = workspace;
|
|
84
|
+
return saveConfig({
|
|
85
|
+
workspaces,
|
|
86
|
+
...extantConfig
|
|
87
|
+
});
|
|
103
88
|
};
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
89
|
+
const removeWorkspace = (name) => {
|
|
90
|
+
const extant = loadCachedConfig();
|
|
91
|
+
delete extant.workspaces[name];
|
|
92
|
+
return saveConfig(Object.assign({}, extant));
|
|
108
93
|
};
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
94
|
+
var configure_default = {
|
|
95
|
+
loadConfig,
|
|
96
|
+
updateConfig,
|
|
97
|
+
saveWorkspace,
|
|
98
|
+
removeWorkspace
|
|
114
99
|
};
|
|
115
|
-
|
|
100
|
+
|
|
101
|
+
//#endregion
|
|
102
|
+
exports.default = configure_default;
|
|
103
|
+
exports.loadCachedConfig = loadCachedConfig;
|
|
104
|
+
exports.loadConfig = loadConfig;
|
|
105
|
+
exports.updateConfig = updateConfig;
|
package/build/lib/spinner.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
2
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
3
|
+
const cli_spinner = require_rolldown_runtime.__toESM(require("cli-spinner"));
|
|
4
|
+
|
|
5
|
+
//#region src/lib/spinner.ts
|
|
6
|
+
const spinner = (text = "") => {
|
|
7
|
+
const spin = new cli_spinner.Spinner({
|
|
8
|
+
text: text ? text : "Loading... %s ",
|
|
9
|
+
stream: process.stderr
|
|
10
|
+
});
|
|
11
|
+
spin.setSpinnerString(27);
|
|
12
|
+
return spin;
|
|
12
13
|
};
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
var spinner_default = spinner;
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
exports.default = spinner_default;
|