@shortcut-cli/shortcut-cli 3.0.0-rc1 → 3.2.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shortcut-cli/shortcut-cli",
3
- "version": "3.0.0-rc1",
3
+ "version": "3.2.1",
4
4
  "description": "A command line tool for viewing, creating and updating shortcut.com stories",
5
5
  "main": "index.js",
6
6
  "engines": {
@@ -39,9 +39,9 @@
39
39
  },
40
40
  "homepage": "https://github.com/shortcut-cli/shortcut-cli",
41
41
  "dependencies": {
42
+ "@useshortcut/client": "^1.0.0",
42
43
  "chalk": "^2.2.0",
43
44
  "cli-spinner": "^0.2.6",
44
- "clubhouse-lib": "0.13.0",
45
45
  "commander": "^2.12.0",
46
46
  "debug": "^4.0.0",
47
47
  "prompt": "^1.0.0"
@@ -50,8 +50,8 @@
50
50
  "@types/chalk": "2.2.0",
51
51
  "@types/cli-spinner": "0.2.1",
52
52
  "@types/debug": "4.1.7",
53
- "@types/node": "12.20.19",
54
- "@types/node-fetch": "2.5.12",
53
+ "@types/node": "12.20.27",
54
+ "@types/node-fetch": "3.0.2",
55
55
  "babel-eslint": "10.1.0",
56
56
  "eslint": "7.32.0",
57
57
  "eslint-config-standard": "16.0.3",
@@ -62,6 +62,6 @@
62
62
  "eslint-plugin-standard": "4.1.0",
63
63
  "prettier": "2.2.1",
64
64
  "source-map-support": "0.5.20",
65
- "typescript": "3.8.3"
65
+ "typescript": "4.4.3"
66
66
  }
67
67
  }
package/CHANGELOG.md DELETED
@@ -1,166 +0,0 @@
1
- # Changelog
2
- All notable changes to this project will be documented in this file.
3
-
4
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
-
7
- ## [Unreleased]
8
- ### Added
9
- - Branch base story inference: support for both `chNNNN` and `sc-NNNNN`.
10
- - Add tests against Node 16 (soon to be LTS).
11
- ### Changed
12
- - Renamed clubhouse-cli to shortcut-cli.
13
- - Switch branch format to `user/sc-NNNN/...` to fit Shortcut new prefix.
14
- - Simplify the CircleCI configuration so it's easier to test against multiple versions with a matrix.
15
- ### Deprecated
16
- ### Removed
17
- ### Fixed
18
- - Do not expect stories to have a project. Projects are now optional.
19
- ### Security
20
-
21
- ---
22
-
23
- ## [2.7.0] - 2020-08-17
24
- ### Added
25
- - Add support for story search via estimate (thanks [@jbcrail](https://github.com/jbcrail)!).
26
- - Add `prepublish` hook to ensure the project is built before it's being published.
27
-
28
- ## [2.6.3] - 2020-07-30
29
- ## [2.6.2] - 2020-07-30
30
- ## [2.6.1] - 2020-07-30
31
- ### Fixed
32
- - Return clearer error message when trying to open the epic or iteration when the story is not assign to one or the other
33
-
34
- ## [2.6.0] - 2020-06-19
35
- ### Added
36
- - Add support for `--git-branch-short` during story creation.
37
-
38
- ## [2.5.0] - 2020-06-18
39
- ### Added
40
- - Add story formatting options for git branch and git branch short-name (thanks [@jshmfrankel](https://github.com/joshmfrankel)!)
41
-
42
- ## [2.4.0] - 2020-06-16
43
- ### Added
44
- - Allow custom formatting of epics via `club epics --format` (thanks [@gowabash](https://github.com/gowabash)!)
45
- ### Security
46
- - Upgrade dependencies.
47
-
48
- ## [2.3.1] - 2020-03-30
49
- ### Fixed
50
- - Handle checking out to existing branches with `--git-branch`.
51
- ### Security
52
- - Upgrade dependencies.
53
-
54
- ## [2.3.0] - 2020-02-24
55
- ### Added
56
- - Allow filtering of epics by related milestone ID.
57
- ### Fixed
58
- - Prevent accidental git branch story ID matches on usernames with numbers.
59
- ### Security
60
- - Dependency updates.
61
-
62
- ## [2.2.4] - 2020-02-04
63
- ## [2.2.3] - 2020-02-03
64
- ### Fixed
65
- - Fix bug in `clubhouse-lib` `/api/v3` which returns an invalid URL that could not be processed by the client.
66
-
67
- ## [2.2.2] - 2020-01-23
68
- ## [2.2.1] - 2020-01-23
69
- ### Fixed
70
- - Allow story updated timestamp to be printed with custom formatter.
71
-
72
- ## [2.2.0] - 2020-01-22
73
- ### Added
74
- - Respect `XDG_CONFIG_HOME` for the config location.
75
- ### Changed
76
- - The `mentionName` and `urlSlug` (previously names `workspaceName`) configuration now get set automatically.
77
- - The config is now only read once (unless noted otherwise).
78
- ### Security
79
- - General dependency renovations.
80
- ### Upgrading
81
- You will be prompted to run `club install --refresh` upon upgrading to this version, which will pull from the new current member API endpoint to load workspace information into the saved config.
82
-
83
- ## [2.1.0] - 2020-01-12
84
- ### Added
85
- - In `club search`, replace `%self%` with the user's mention name.
86
- - Accept options to open the story's epic, iteration and/or project.
87
- - Use `xdg-open` on non-macOS platform.
88
- - Add the `Config` interface and added `workspaceName` as a parameter.
89
- ### Security
90
- - Several dependency upgrades via Renovatebot.
91
-
92
- ## [2.0.6] - 2019-11-06
93
- ### Changed
94
- - Upgrade to latest `clubhouse-lib`.
95
- ### Fixed
96
- - Fix completed status on story tasks.
97
-
98
- ## [2.0.5] - 2019-10-10
99
- ### Fixed
100
- - Gracefully handle lack of git repository when searching for story ID.
101
-
102
- ## [2.0.4] - 2019-10-10
103
- ### Fixed
104
- - Fix the import of prompt to conform to Typescript
105
-
106
- ## [2.0.3] - 2019-09-23
107
- ### Fixed
108
- - Fix the entity returned by findProject by ID.
109
-
110
- ## [2.0.2] - 2019-08-15
111
- ### Fixed
112
- - Remove source-map-support.
113
-
114
- ## [2.0.1] - 2019-08-15
115
- ### Fixed
116
- - Remove development start script to prevent production override.
117
-
118
- ## [2.0.0] - 2019-08-15
119
- ### Added
120
- - Support Iterations filtering/assignment on stories.
121
-
122
- ### Changed
123
- - Convert to TypeScript.
124
- - New formatting/argument syntax for Epic and story ID.
125
- - Allow non-digit characters in story IDs.
126
-
127
- ## [1.17.0] - 2019-03-19
128
- ### Added
129
- - Running tests on CircleCI.
130
- - Allow for full JSON output in story format.
131
-
132
- ## [1.16.1] - 2019-03-13
133
- ### Fixed
134
- - Fix the ability to open a story during creation.
135
-
136
- ## [1.16.0] - 2019-03-13
137
- ### Changed
138
- - Remove bold styling on non-story-ID items in custom formatting.
139
-
140
- ## [1.15.1] - 2019-03-08
141
- ### Fixed
142
- - Fix reference to non-imported function.
143
-
144
- ## [1.15.0] - 2019-03-06
145
- ### Added
146
- - Added shorthand / aliases for commands see `club --help`.
147
- - Added code formatting with prettier.
148
-
149
- ### Changed
150
- - Renamed `club find` to `club search`.
151
- - Extracted duplicated code to story lib.
152
- - Cleaned up the initialization of commands.
153
-
154
- ### Deprecated
155
- - `club find` has been deprecated in favor of `club search`.
156
-
157
- ## [1.14.0] - 2019-02-28
158
- ### Added
159
- - Support `story --git-branch-short` to create a branch without the story type.
160
-
161
- ## [1.13.0] - 2019-02-25
162
- ### Added
163
- - Support searching via the clubhouse search API endpoint.
164
-
165
- ### Changed
166
- - Upgrade `clubhouse-lib` to 0.5.0.
@@ -1,140 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
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 stories_1 = require("../lib/stories");
41
- var child_process_1 = require("child_process");
42
- var client_1 = require("../lib/client");
43
- var spinner_1 = require("../lib/spinner");
44
- var commander = require("commander");
45
- var configure_1 = require("../lib/configure");
46
- var config = configure_1.loadConfig();
47
- var spin = spinner_1.default();
48
- var log = console.log;
49
- var program = commander
50
- .usage('[options]')
51
- .description('create a story with provided details')
52
- .option('-d, --description [text]', 'Set description of story', '')
53
- .option('-e, --estimate [number]', 'Set estimate of story')
54
- .option('--epic [id|name]', 'Set epic of story')
55
- .option('--git-branch', 'Checkout git branch from story slug <mention-name>/ch<id>/<type>-<title>\n' +
56
- '\t\t\t\tas required by the Git integration: https://bit.ly/2RKO1FF')
57
- .option('--git-branch-short', 'Checkout git branch from story slug <mention-name>/ch<id>/<title>')
58
- .option('-i, --iteration [id|name]', 'Set iteration of story')
59
- .option('-I, --idonly', 'Print only ID of story result')
60
- .option('-l, --label [id|name]', 'Stories with label id/name, by regex', '')
61
- .option('-o, --owners [id|name]', 'Set owners of story, comma-separated', '')
62
- .option('-O, --open', 'Open story in browser')
63
- .option('-p, --project [id|name]', 'Set project of story, required', '')
64
- .option('-t, --title [text]', 'Set title of story, required', '')
65
- .option('-s, --state [id|name]', 'Set workflow state of story', '')
66
- .option('-y, --type [name]', 'Set type of story, default: feature', 'feature')
67
- .parse(process.argv);
68
- var main = function () { return __awaiter(void 0, void 0, void 0, function () {
69
- var entities, update, story, e_1;
70
- return __generator(this, function (_a) {
71
- switch (_a.label) {
72
- case 0: return [4, stories_1.default.fetchEntities()];
73
- case 1:
74
- entities = _a.sent();
75
- if (!program.idonly)
76
- spin.start();
77
- update = {
78
- name: program.title,
79
- story_type: program.type,
80
- description: "" + program.description,
81
- estimate: program.estimate || undefined,
82
- };
83
- if (program.project) {
84
- update.project_id = (stories_1.default.findProject(entities, program.project) || {}).id;
85
- }
86
- if (program.state) {
87
- update.workflow_state_id = (stories_1.default.findState(entities, program.state) || {}).id;
88
- }
89
- if (program.epic) {
90
- update.epic_id = (stories_1.default.findEpic(entities, program.epic) || {}).id;
91
- }
92
- if (program.iteration) {
93
- update.iteration_id = (stories_1.default.findIteration(entities, program.iteration) || {}).id;
94
- }
95
- if (program.estimate) {
96
- update.estimate = parseInt(program.estimate, 10);
97
- }
98
- if (program.owners) {
99
- update.owner_ids = stories_1.default.findOwnerIds(entities, program.owners);
100
- }
101
- if (program.label) {
102
- update.labels = stories_1.default.findLabelNames(entities, program.label);
103
- }
104
- if (!(!update.name || !update.project_id)) return [3, 2];
105
- if (!program.idonly)
106
- spin.stop(true);
107
- log('Must provide --title and --project');
108
- return [3, 5];
109
- case 2:
110
- _a.trys.push([2, 4, , 5]);
111
- return [4, client_1.default.createStory(update)];
112
- case 3:
113
- story = _a.sent();
114
- return [3, 5];
115
- case 4:
116
- e_1 = _a.sent();
117
- log('Error creating story');
118
- return [3, 5];
119
- case 5:
120
- if (!program.idonly)
121
- spin.stop(true);
122
- if (story) {
123
- story = stories_1.default.hydrateStory(entities, story);
124
- stories_1.default.printDetailedStory(story);
125
- if (program.gitBranch) {
126
- stories_1.default.checkoutStoryBranch(story);
127
- }
128
- else if (program.gitBranchShort) {
129
- stories_1.default.checkoutStoryBranch(story, config.mentionName + "/sc-" + story.id + "/");
130
- }
131
- if (program.open) {
132
- child_process_1.exec('open ' + stories_1.default.storyURL(story));
133
- }
134
- }
135
- return [2];
136
- }
137
- });
138
- }); };
139
- main();
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1Yi1jcmVhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2NsdWItY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDBDQUF5RDtBQUV6RCwrQ0FBcUM7QUFFckMsd0NBQW1DO0FBR25DLDBDQUFxQztBQUNyQyxxQ0FBdUM7QUFDdkMsOENBQThDO0FBRTlDLElBQU0sTUFBTSxHQUFHLHNCQUFVLEVBQUUsQ0FBQztBQUM1QixJQUFNLElBQUksR0FBRyxpQkFBTyxFQUFFLENBQUM7QUFDdkIsSUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUN4QixJQUFNLE9BQU8sR0FBRyxTQUFTO0tBQ3BCLEtBQUssQ0FBQyxXQUFXLENBQUM7S0FDbEIsV0FBVyxDQUFDLHNDQUFzQyxDQUFDO0tBQ25ELE1BQU0sQ0FBQywwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxFQUFFLENBQUM7S0FDbEUsTUFBTSxDQUFDLHlCQUF5QixFQUFFLHVCQUF1QixDQUFDO0tBQzFELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQztLQUMvQyxNQUFNLENBQ0gsY0FBYyxFQUNkLDRFQUE0RTtJQUN4RSxvRUFBb0UsQ0FDM0U7S0FDQSxNQUFNLENBQ0gsb0JBQW9CLEVBQ3BCLG1FQUFtRSxDQUN0RTtLQUNBLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSx3QkFBd0IsQ0FBQztLQUM3RCxNQUFNLENBQUMsY0FBYyxFQUFFLCtCQUErQixDQUFDO0tBQ3ZELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxzQ0FBc0MsRUFBRSxFQUFFLENBQUM7S0FDM0UsTUFBTSxDQUFDLHdCQUF3QixFQUFFLHNDQUFzQyxFQUFFLEVBQUUsQ0FBQztLQUM1RSxNQUFNLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDO0tBQzdDLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxnQ0FBZ0MsRUFBRSxFQUFFLENBQUM7S0FDdkUsTUFBTSxDQUFDLG9CQUFvQixFQUFFLDhCQUE4QixFQUFFLEVBQUUsQ0FBQztLQUNoRSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsRUFBRSxDQUFDO0tBQ2xFLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxxQ0FBcUMsRUFBRSxTQUFTLENBQUM7S0FDN0UsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUV6QixJQUFNLElBQUksR0FBRzs7OztvQkFDUSxXQUFNLGlCQUFRLENBQUMsYUFBYSxFQUFFLEVBQUE7O2dCQUF6QyxRQUFRLEdBQUcsU0FBOEI7Z0JBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtvQkFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sR0FBRztvQkFDVCxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ25CLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDeEIsV0FBVyxFQUFFLEtBQUcsT0FBTyxDQUFDLFdBQWE7b0JBQ3JDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLFNBQVM7aUJBQ2pDLENBQUM7Z0JBQ1gsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO29CQUNqQixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsaUJBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSyxFQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQy9GO2dCQUNELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtvQkFDZixNQUFNLENBQUMsaUJBQWlCLEdBQUcsQ0FDdkIsaUJBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSyxFQUFvQixDQUN2RSxDQUFDLEVBQUUsQ0FBQztpQkFDUjtnQkFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ2QsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLGlCQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUssRUFBVyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNuRjtnQkFDRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxZQUFZLEdBQUcsQ0FDbEIsaUJBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSyxFQUFnQixDQUMzRSxDQUFDLEVBQUUsQ0FBQztpQkFDUjtnQkFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3BEO2dCQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDaEIsTUFBTSxDQUFDLFNBQVMsR0FBRyxpQkFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN0RTtnQkFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ2YsTUFBTSxDQUFDLE1BQU0sR0FBRyxpQkFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwRTtxQkFFRyxDQUFBLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUEsRUFBbEMsY0FBa0M7Z0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtvQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQzs7OztnQkFHOUIsV0FBTSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBQTs7Z0JBQXhDLEtBQUssR0FBRyxTQUFnQyxDQUFDOzs7O2dCQUV6QyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQzs7O2dCQUdwQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsSUFBSSxLQUFLLEVBQUU7b0JBQ1AsS0FBSyxHQUFHLGlCQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDL0MsaUJBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO3dCQUNuQixpQkFBUSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN2Qzt5QkFBTSxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUU7d0JBQy9CLGlCQUFRLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFLLE1BQU0sQ0FBQyxXQUFXLFlBQU8sS0FBSyxDQUFDLEVBQUUsTUFBRyxDQUFDLENBQUM7cUJBQ2hGO29CQUNELElBQUksT0FBTyxDQUFDLElBQUksRUFBRTt3QkFDZCxvQkFBSSxDQUFDLE9BQU8sR0FBRyxpQkFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUM1QztpQkFDSjs7OztLQUNKLENBQUM7QUFFRixJQUFJLEVBQUUsQ0FBQyJ9
@@ -1,115 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
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 client_1 = require("../lib/client");
41
- var commander = require("commander");
42
- var chalk_1 = require("chalk");
43
- var spinner_1 = require("../lib/spinner");
44
- var log = console.log;
45
- var spin = spinner_1.default();
46
- var program = commander
47
- .description('Display epics available for stories')
48
- .option('-a, --archived', 'List only epics including archived', '')
49
- .option('-c, --completed', 'List only epics that have been completed', '')
50
- .option('-d, --detailed', 'List more details for each epic', '')
51
- .option('-f, --format [template]', 'Format each epic output by template', '')
52
- .option('-M, --milestone [ID]', 'List epics in milestone matching id', '')
53
- .option('-t, --title [query]', 'List epics with name/title containing query', '')
54
- .option('-s, --started', 'List epics that have been started', '')
55
- .parse(process.argv);
56
- var main = function () { return __awaiter(void 0, void 0, void 0, function () {
57
- var epics, textMatch;
58
- return __generator(this, function (_a) {
59
- switch (_a.label) {
60
- case 0:
61
- spin.start();
62
- return [4, client_1.default.listEpics()];
63
- case 1:
64
- epics = _a.sent();
65
- spin.stop(true);
66
- textMatch = new RegExp(program.title, 'i');
67
- epics
68
- .filter(function (epic) {
69
- return (!!(epic.name + " " + epic.name).match(textMatch) &&
70
- !!(program.milestone ? epic.milestone_id == program.milestone : true));
71
- })
72
- .map(printItem);
73
- return [2];
74
- }
75
- });
76
- }); };
77
- var printItem = function (epic) {
78
- if (epic.archived && !program.archived)
79
- return;
80
- if (!epic.started && program.started)
81
- return;
82
- if (!epic.completed && program.completed)
83
- return;
84
- var defaultFormat = "#%id %t\nMilestone:\t%m\nState:\t\t%s\nDeadline:\t%dl\n";
85
- defaultFormat += "Points:\t\t%p\nPoints Started: %ps\nPoints Done:\t%pd\nCompletion:\t%c\n";
86
- if (epic.archived) {
87
- defaultFormat += "Archived:\t%ar\n";
88
- }
89
- if (epic.started) {
90
- defaultFormat += "Started:\t%st\n";
91
- }
92
- if (epic.completed) {
93
- defaultFormat += "Completed:\t%co\n";
94
- }
95
- if (program.detailed) {
96
- defaultFormat += "Description:\t%d\n";
97
- }
98
- var format = program.format || defaultFormat;
99
- log(format
100
- .replace(/%id/, chalk_1.default.bold("" + epic.id))
101
- .replace(/%t/, chalk_1.default.blue("" + epic.name))
102
- .replace(/%m/, "" + (epic.milestone_id || '_'))
103
- .replace(/%s/, "" + epic.state)
104
- .replace(/%dl/, "" + (epic.deadline || '_'))
105
- .replace(/%d/, "" + epic.description)
106
- .replace(/%p/, "" + epic.stats.num_points)
107
- .replace(/%ps/, "" + epic.stats.num_points_started)
108
- .replace(/%pd/, "" + epic.stats.num_points_done)
109
- .replace(/%c/, Math.round((epic.stats.num_points_done / (epic.stats.num_points || 1)) * 100) + "%")
110
- .replace(/%a/, "" + epic.archived)
111
- .replace(/%st/, "" + epic.started_at)
112
- .replace(/%co/, "" + epic.completed_at));
113
- };
114
- main();
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1Yi1lcGljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2x1Yi1lcGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx3Q0FBbUM7QUFDbkMscUNBQXVDO0FBQ3ZDLCtCQUEwQjtBQUcxQiwwQ0FBcUM7QUFFckMsSUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUN4QixJQUFNLElBQUksR0FBRyxpQkFBTyxFQUFFLENBQUM7QUFFdkIsSUFBTSxPQUFPLEdBQUcsU0FBUztLQUNwQixXQUFXLENBQUMscUNBQXFDLENBQUM7S0FDbEQsTUFBTSxDQUFDLGdCQUFnQixFQUFFLG9DQUFvQyxFQUFFLEVBQUUsQ0FBQztLQUNsRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsMENBQTBDLEVBQUUsRUFBRSxDQUFDO0tBQ3pFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxpQ0FBaUMsRUFBRSxFQUFFLENBQUM7S0FDL0QsTUFBTSxDQUFDLHlCQUF5QixFQUFFLHFDQUFxQyxFQUFFLEVBQUUsQ0FBQztLQUM1RSxNQUFNLENBQUMsc0JBQXNCLEVBQUUscUNBQXFDLEVBQUUsRUFBRSxDQUFDO0tBQ3pFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw2Q0FBNkMsRUFBRSxFQUFFLENBQUM7S0FDaEYsTUFBTSxDQUFDLGVBQWUsRUFBRSxtQ0FBbUMsRUFBRSxFQUFFLENBQUM7S0FDaEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUV6QixJQUFNLElBQUksR0FBRzs7Ozs7Z0JBQ1QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNDLFdBQU0sZ0JBQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQTs7Z0JBQWhDLEtBQUssR0FBRyxTQUF3QjtnQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDVixTQUFTLEdB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
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- var club_search_1 = require("./club-search");
5
- club_search_1.main();
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1Yi1maW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jbHViLWZpbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQXFDO0FBRXJDLGtCQUFJLEVBQUUsQ0FBQyJ9
@@ -1,130 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __assign = (this && this.__assign) || function () {
4
- __assign = Object.assign || function(t) {
5
- for (var s, i = 1, n = arguments.length; i < n; i++) {
6
- s = arguments[i];
7
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8
- t[p] = s[p];
9
- }
10
- return t;
11
- };
12
- return __assign.apply(this, arguments);
13
- };
14
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
- return new (P || (P = Promise))(function (resolve, reject) {
17
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
- step((generator = generator.apply(thisArg, _arguments || [])).next());
21
- });
22
- };
23
- var __generator = (this && this.__generator) || function (thisArg, body) {
24
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
26
- function verb(n) { return function (v) { return step([n, v]); }; }
27
- function step(op) {
28
- if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
30
- 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;
31
- if (y = 0, t) op = [op[0] & 2, t.value];
32
- switch (op[0]) {
33
- case 0: case 1: t = op; break;
34
- case 4: _.label++; return { value: op[1], done: false };
35
- case 5: _.label++; y = op[1]; op = [0]; continue;
36
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
37
- default:
38
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
40
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
41
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
42
- if (t[2]) _.ops.pop();
43
- _.trys.pop(); continue;
44
- }
45
- op = body.call(thisArg, _);
46
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
47
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
48
- }
49
- };
50
- Object.defineProperty(exports, "__esModule", { value: true });
51
- var prompt = require("prompt");
52
- var configure_1 = require("../lib/configure");
53
- var commander = require("commander");
54
- var clubhouse_lib_1 = require("clubhouse-lib");
55
- var extant = configure_1.loadCachedConfig();
56
- var log = console.log;
57
- var program = commander
58
- .version(require('../../package').version)
59
- .description('Install access token and other settings for the Shortcut API')
60
- .option('-f, --force', 'Force install/reinstall')
61
- .option('-r, --refresh', 'Refresh the configuration with details from Shortcut.')
62
- .parse(process.argv);
63
- var enrichConfigWithMemberDetails = function (config) { return __awaiter(void 0, void 0, void 0, function () {
64
- var member;
65
- return __generator(this, function (_a) {
66
- switch (_a.label) {
67
- case 0:
68
- log('Fetching user/member details from Shortcut...');
69
- return [4, clubhouse_lib_1.default.create(config.token).getCurrentMember()];
70
- case 1:
71
- member = _a.sent();
72
- return [2, __assign({ mentionName: member.mention_name, urlSlug: member.workspace2.url_slug }, config)];
73
- }
74
- });
75
- }); };
76
- var main = function () { return __awaiter(void 0, void 0, void 0, function () {
77
- var _a, schema;
78
- return __generator(this, function (_b) {
79
- switch (_b.label) {
80
- case 0:
81
- if (!program.refresh) return [3, 2];
82
- _a = configure_1.updateConfig;
83
- return [4, enrichConfigWithMemberDetails(extant)];
84
- case 1:
85
- _a.apply(void 0, [_b.sent()]);
86
- return [3, 3];
87
- case 2:
88
- if (!extant.token || program.force) {
89
- schema = {
90
- properties: {
91
- token: {
92
- message: 'API Token -> https://app.clubhouse.io/xxxx/settings/account/api-tokens',
93
- required: true,
94
- },
95
- },
96
- };
97
- prompt.start({ message: 'clubhouse' });
98
- prompt.get(schema, function (err, result) { return __awaiter(void 0, void 0, void 0, function () {
99
- var config, success;
100
- return __generator(this, function (_a) {
101
- switch (_a.label) {
102
- case 0:
103
- if (err)
104
- return [2, log(err)];
105
- return [4, enrichConfigWithMemberDetails(result)];
106
- case 1:
107
- config = _a.sent();
108
- log('Saving config...');
109
- success = configure_1.updateConfig(config);
110
- if (success) {
111
- log('Saved config');
112
- }
113
- else {
114
- log('Error saving config');
115
- }
116
- return [2];
117
- }
118
- });
119
- }); });
120
- }
121
- else if (extant.token) {
122
- log('A configuration/token is already saved. To override, re-run with --force');
123
- }
124
- _b.label = 3;
125
- case 3: return [2];
126
- }
127
- });
128
- }); };
129
- main();
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1Yi1pbnN0YWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jbHViLWluc3RhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSwrQkFBaUM7QUFFakMsOENBQTBFO0FBQzFFLHFDQUF1QztBQUN2QywrQ0FBc0M7QUFFdEMsSUFBTSxNQUFNLEdBQUcsNEJBQWdCLEVBQUUsQ0FBQztBQUNsQyxJQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBRXhCLElBQU0sT0FBTyxHQUFHLFNBQVM7S0FDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDekMsV0FBVyxDQUFDLDhEQUE4RCxDQUFDO0tBQzNFLE1BQU0sQ0FBQyxhQUFhLEVBQUUseUJBQXlCLENBQUM7S0FDaEQsTUFBTSxDQUFDLGVBQWUsRUFBRSx1REFBdUQsQ0FBQztLQUNoRixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRXpCLElBQU0sNkJBQTZCLEdBQUcsVUFBTyxNQUFjOzs7OztnQkFDdkQsR0FBRyxDQUFDLCtDQUErQyxDQUFDLENBQUM7Z0JBQ3RDLFdBQU0sdUJBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUE7O2dCQUFoRSxNQUFNLEdBQUcsU0FBdUQ7Z0JBQ3RFLHNCQUNJLFdBQVcsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUNoQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQ2hDLE1BQU0sR0FDWDs7O0tBQ0wsQ0FBQztBQUVGLElBQU0sSUFBSSxHQUFHOzs7OztxQkFDTCxPQUFPLENBQUMsT0FBTyxFQUFmLGNBQWU7Z0JBQ2YsS0FBQSx3QkFBWSxDQUFBO2dCQUFDLFdBQU0sNkJBQTZCLENBQUMsTUFBTSxDQUFDLEVBQUE7O2dCQUF4RCxrQkFBYSxTQUEyQyxFQUFDLENBQUM7OztnQkFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtvQkFDakMsTUFBTSxHQUFHO3dCQUNYLFVBQVUsRUFBRTs0QkFDUixLQUFLLEVBQUU7Z0NBQ0gsT0FBTyxFQUNILHdFQUF3RTtnQ0FDNUUsUUFBUSxFQUFFLElBQUk7NkJBQ2pCO3lCQUNKO3FCQUNKLENBQUM7b0JBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFPLEdBQVUsRUFBRSxNQUFXOzs7OztvQ0FDN0MsSUFBSSxHQUFHO3dDQUFFLFdBQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFDO29DQUNWLFdBQU0sNkJBQTZCLENBQUMsTUFBTSxDQUFDLEVBQUE7O29DQUFwRCxNQUFNLEdBQUcsU0FBMkM7b0NBQzFELEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29DQUNsQixPQUFPLEdBQUcsd0JBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQ0FDckMsSUFBSSxPQUFPLEVBQUU7d0NBQ1QsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3FDQUN2Qjt5Q0FBTTt3Q0FDSCxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztxQ0FDOUI7Ozs7eUJBQ0osQ0FBQyxDQUFDO2lCQUNOO3FCQUFNLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDckIsR0FBRyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7aUJBQ25GOzs7OztLQUNKLENBQUM7QUFFRixJQUFJLEVBQUUsQ0FBQyJ9