bjira 0.0.3 → 0.0.4

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/dist/issue.js DELETED
@@ -1,176 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _chalk = _interopRequireDefault(require("chalk"));
9
-
10
- var _cliTable = _interopRequireDefault(require("cli-table3"));
11
-
12
- var _command = _interopRequireDefault(require("./command.js"));
13
-
14
- var _errorhandler = _interopRequireDefault(require("./errorhandler.js"));
15
-
16
- var _field = _interopRequireDefault(require("./field.js"));
17
-
18
- var _jira = _interopRequireDefault(require("./jira.js"));
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- const DEFAULT_QUERY_LIMIT = 20;
23
-
24
- class Issue extends _command.default {
25
- static url(jira, id) {
26
- return `${jira.config.jira.protocol}://${jira.config.jira.host}/browse/${id}`;
27
- }
28
-
29
- addOptions(program) {
30
- const cmd = program.command('issue').description('Show an issue').option('-C, --comments').argument('<id>', 'The issue ID').action(async id => {
31
- var _issue$fields$Sprint;
32
-
33
- const jira = new _jira.default(program);
34
- let resultFields;
35
-
36
- try {
37
- resultFields = await _field.default.listFields(jira);
38
- } catch (e) {
39
- _errorhandler.default.showError(jira, e);
40
-
41
- return;
42
- }
43
-
44
- let result;
45
-
46
- try {
47
- result = await jira.spin('Running query...', jira.api.findIssue(id));
48
- } catch (e) {
49
- _errorhandler.default.showError(jira, e);
50
-
51
- return;
52
- }
53
-
54
- const issue = Issue.replaceFields(result, resultFields);
55
- let epicIssue = null;
56
-
57
- if (issue.fields['Epic Link']) {
58
- const epicResult = await jira.spin('Fetching the epic issue...', jira.api.findIssue(issue.fields['Epic Link']));
59
- epicIssue = Issue.replaceFields(epicResult, resultFields);
60
- }
61
-
62
- const table = new _cliTable.default({
63
- chars: jira.tableChars
64
- });
65
- table.push({
66
- 'Summary': issue.fields['Summary'].trim()
67
- }, {
68
- 'URL:': _chalk.default.blue(Issue.url(jira, id))
69
- }, {
70
- 'Status': _chalk.default.green(issue.fields['Status'].name)
71
- }, {
72
- 'Type': issue.fields['Issue Type'].name
73
- }, {
74
- 'Project': issue.fields['Project'].name + ' (' + issue.fields['Project'].key + ')'
75
- }, {
76
- 'Reporter': this.showUser(issue.fields['Reporter'])
77
- }, {
78
- 'Assignee': this.showUser(issue.fields['Assignee'])
79
- }, {
80
- 'Priority': issue.fields['Priority'].name
81
- }, {
82
- 'Epic Link': this.showEpicIssue(epicIssue)
83
- }, {
84
- 'Labels': issue.fields['Labels'].join(', ')
85
- }, {
86
- 'Sprint': (_issue$fields$Sprint = issue.fields['Sprint']) === null || _issue$fields$Sprint === void 0 ? void 0 : _issue$fields$Sprint.map(sprint => this.showSprint(sprint)).join(', ')
87
- });
88
- jira.fields.forEach(fieldName => {
89
- const data = {};
90
- data[fieldName] = issue.fields[fieldName] || "unset";
91
- table.push(data);
92
- });
93
- table.push({
94
- '': ''
95
- }, {
96
- 'Created on': issue.fields['Created']
97
- }, {
98
- 'Updated on': issue.fields['Updated']
99
- }, {
100
- '': ''
101
- }, {
102
- 'Description': issue.fields['Description']
103
- }, {
104
- '': ''
105
- }, {
106
- 'Comments': issue.fields['Comment'].total
107
- });
108
-
109
- if (cmd.opts().comments) {
110
- issue.fields['Comment'].comments.forEach(comment => {
111
- table.push({
112
- '': ''
113
- }, {
114
- 'Comment': _chalk.default.yellow(comment.id)
115
- }, {
116
- 'Author': this.showUser(comment.author)
117
- }, {
118
- 'Created on': comment['Created']
119
- }, {
120
- 'Updated on': comment['Updated']
121
- }, {
122
- 'Body': comment.body
123
- });
124
- });
125
- }
126
-
127
- console.log(table.toString());
128
- });
129
- }
130
-
131
- static replaceFields(obj, fields) {
132
- if (Array.isArray(obj)) {
133
- obj.forEach((o, pos) => {
134
- obj[o] = Issue.replaceFields(o, fields);
135
- });
136
- } else if (obj && typeof obj === "object") {
137
- Object.keys(obj).forEach(key => {
138
- if (obj[key] === null) {
139
- delete obj[key];
140
- return;
141
- }
142
-
143
- obj[key] = Issue.replaceFields(obj[key], fields);
144
- const field = fields.find(f => f.key == key);
145
-
146
- if (field) {
147
- obj[field.name] = obj[key];
148
- delete obj[key];
149
- }
150
- });
151
- }
152
-
153
- return obj;
154
- }
155
-
156
- showUser(user) {
157
- if (!user) return "(null)";
158
- let str = user.displayName;
159
- if (user.emailAddress) str += ` (${_chalk.default.yellow(user.emailAddress)})`;
160
- return str;
161
- }
162
-
163
- showEpicIssue(issue) {
164
- if (!issue) return "";
165
- return `${_chalk.default.blue(issue.key)} (${_chalk.default.yellow(issue.fields['Summary'].trim())})`;
166
- }
167
-
168
- showSprint(sprint) {
169
- return `${_chalk.default.blue(sprint.name)} (${_chalk.default.yellow(sprint.state)})`;
170
- }
171
-
172
- }
173
-
174
- ;
175
- var _default = Issue;
176
- exports.default = _default;
package/dist/jira.js DELETED
@@ -1,116 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _jiraClient = _interopRequireDefault(require("jira-client"));
9
-
10
- var _fs = _interopRequireDefault(require("fs"));
11
-
12
- var _ora = _interopRequireDefault(require("ora"));
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- class Jira {
17
- constructor(program) {
18
- const opts = program.opts();
19
- this.configFile = opts.config;
20
-
21
- if (!_fs.default.existsSync(this.configFile)) {
22
- console.log(`Config file ${this.configFile} does not exist.`);
23
- process.exit();
24
- return;
25
- }
26
-
27
- this._config = JSON.parse(_fs.default.readFileSync(this.configFile));
28
- this._jiraClient = new _jiraClient.default(this._config.jira);
29
- }
30
-
31
- get latestProject() {
32
- return this._config.latestProject || null;
33
- }
34
-
35
- set latestProject(latestProject) {
36
- this._config.latestProject = latestProject;
37
- }
38
-
39
- addField(fieldName) {
40
- if (!Array.isArray(this._config.fields)) this._config.fields = [];
41
-
42
- this._config.fields.push(fieldName);
43
- }
44
-
45
- removeField(fieldName) {
46
- if (!Array.isArray(this._config.fields) || this._config.fields.indexOf(fieldName) === -1) return;
47
-
48
- this._config.fields.splice(this._config.fields.indexOf(fieldName), 1);
49
- }
50
-
51
- get fields() {
52
- return this._config.fields || [];
53
- }
54
-
55
- get api() {
56
- return this._jiraClient;
57
- }
58
-
59
- get config() {
60
- return this._config;
61
- }
62
-
63
- get tableChars() {
64
- return {
65
- 'top': ' ',
66
- 'top-mid': '',
67
- 'top-left': '',
68
- 'top-right': '',
69
- 'bottom': ' ',
70
- 'bottom-mid': '',
71
- 'bottom-left': '',
72
- 'bottom-right': '',
73
- 'left': ' ',
74
- 'left-mid': '',
75
- 'mid': '',
76
- 'mid-mid': '',
77
- 'right': '',
78
- 'right-mid': '',
79
- 'middle': ' '
80
- };
81
- }
82
-
83
- async spin(msg, promise) {
84
- const spinner = (0, _ora.default)(msg).start();
85
-
86
- try {
87
- const result = await promise;
88
- return result;
89
- } catch (e) {
90
- throw e;
91
- } finally {
92
- spinner.stop();
93
- }
94
- }
95
-
96
- apiRequest(path, options = {}) {
97
- return this.api.doRequest(this.api.makeRequestHeader(this.api.makeUri({
98
- pathname: path
99
- }), options));
100
- }
101
-
102
- apiAgileRequest(path, options = {}) {
103
- return this.api.doRequest(this.api.makeRequestHeader(this.api.makeAgileUri({
104
- pathname: path
105
- }), options));
106
- }
107
-
108
- syncConfig() {
109
- _fs.default.writeFileSync(this.configFile, JSON.stringify(this.config, null, 2), 'utf8');
110
- }
111
-
112
- }
113
-
114
- ;
115
- var _default = Jira;
116
- exports.default = _default;
package/dist/preset.js DELETED
@@ -1,56 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _chalk = _interopRequireDefault(require("chalk"));
9
-
10
- var _inquirer = _interopRequireDefault(require("inquirer"));
11
-
12
- var _cliTable = _interopRequireDefault(require("cli-table3"));
13
-
14
- var _command = _interopRequireDefault(require("./command.js"));
15
-
16
- var _jira = _interopRequireDefault(require("./jira.js"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- class Preset extends _command.default {
21
- addOptions(program) {
22
- const presetCmd = program.command('preset').description('Touch preset queries');
23
- presetCmd.command('create').description('create a new preset').argument('<name>', 'the name of the preset (use $$$ for variables)').argument('<query>', 'the query').action(async (name, query) => {
24
- const jira = new _jira.default(program);
25
-
26
- if (name in jira.config.presets) {
27
- console.log('This preset already exists');
28
- return;
29
- }
30
-
31
- jira.config.presets[name] = query;
32
- jira.syncConfig();
33
- console.log('Config file succesfully updated');
34
- });
35
- presetCmd.command('remove').description('remove a preset').argument('<name>', 'the name of the preest').action(async name => {
36
- const jira = new _jira.default(program);
37
- delete jira.config.presets[name];
38
- jira.syncConfig();
39
- console.log('Config file succesfully updated');
40
- });
41
- presetCmd.command('list').description('list the presets').action(async () => {
42
- const jira = new _jira.default(program);
43
- const table = new _cliTable.default({
44
- chars: jira.tableChars,
45
- head: ['Name', 'Query']
46
- });
47
- Object.keys(jira.config.presets).forEach(key => table.push([_chalk.default.blue(key), _chalk.default.green(jira.config.presets[key])]));
48
- console.log(table.toString());
49
- });
50
- }
51
-
52
- }
53
-
54
- ;
55
- var _default = Preset;
56
- exports.default = _default;
package/dist/project.js DELETED
@@ -1,88 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _chalk = _interopRequireDefault(require("chalk"));
9
-
10
- var _cliTable = _interopRequireDefault(require("cli-table3"));
11
-
12
- var _inquirer = _interopRequireDefault(require("inquirer"));
13
-
14
- var _command = _interopRequireDefault(require("./command.js"));
15
-
16
- var _jira = _interopRequireDefault(require("./jira.js"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
21
-
22
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
23
-
24
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
-
26
- class Project extends _command.default {
27
- addOptions(program) {
28
- const cmd = program.command("project").description("Do things related to projects");
29
- cmd.command("list").description("Show the list of projects").action(async () => {
30
- const jira = new _jira.default(program);
31
- const projects = await jira.spin("Loading projects...", jira.api.listProjects());
32
- const table = new _cliTable.default({
33
- chars: jira.tableChars,
34
- head: ['Key', 'Name']
35
- });
36
- projects.forEach(project => table.push([_chalk.default.blue(project.key), project.name]));
37
- console.log(table.toString());
38
- });
39
- }
40
-
41
- static async pickProject(jira) {
42
- const meta = await jira.spin('Retrieving metadata...', jira.apiRequest('/issue/createmeta'));
43
- meta.projects.sort((a, b) => {
44
- if (a.key === jira.latestProject) {
45
- return -1;
46
- }
47
-
48
- if (b.key === jira.latestProject) {
49
- return 1;
50
- }
51
-
52
- return a.name > b.name;
53
- });
54
- const projectNames = [];
55
- const projectKeys = [];
56
- const issueTypes = [];
57
- meta.projects.forEach(project => {
58
- projectNames.push(project.name);
59
- projectKeys.push(project.key);
60
- issueTypes.push(project.issuetypes);
61
- });
62
- const projectQuestion = [{
63
- type: 'list',
64
- name: 'project',
65
- message: 'Project:',
66
- choices: projectNames,
67
- filter: name => {
68
- const pos = projectNames.indexOf(name);
69
- return {
70
- pos,
71
- name,
72
- key: projectKeys[pos]
73
- };
74
- }
75
- }];
76
- const projectAnswer = await _inquirer.default.prompt(projectQuestion);
77
- jira.latestProject = projectAnswer.project.key;
78
- jira.syncConfig();
79
- return _objectSpread({
80
- issueTypes: issueTypes[projectAnswer.project.pos]
81
- }, projectAnswer.project);
82
- }
83
-
84
- }
85
-
86
- ;
87
- var _default = Project;
88
- exports.default = _default;
package/dist/query.js DELETED
@@ -1,83 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _chalk = _interopRequireDefault(require("chalk"));
9
-
10
- var _cliTable = _interopRequireDefault(require("cli-table3"));
11
-
12
- var _command = _interopRequireDefault(require("./command.js"));
13
-
14
- var _errorhandler = _interopRequireDefault(require("./errorhandler.js"));
15
-
16
- var _field = _interopRequireDefault(require("./field.js"));
17
-
18
- var _jira = _interopRequireDefault(require("./jira.js"));
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- const DEFAULT_QUERY_LIMIT = 20;
23
-
24
- class Query extends _command.default {
25
- addOptions(program) {
26
- const cmd = program.command('query').description('Run a query').argument('<query>', 'The query').option('-l, --limit <limit>', `Set the query limit. Default ${DEFAULT_QUERY_LIMIT}`, DEFAULT_QUERY_LIMIT).action(async query => {
27
- const jira = new _jira.default(program);
28
- const opts = cmd.opts();
29
- let resultFields;
30
-
31
- try {
32
- resultFields = await _field.default.listFields(jira);
33
- } catch (e) {
34
- _errorhandler.default.showError(jira, e);
35
-
36
- return;
37
- }
38
-
39
- let expectedResult = opts.limit;
40
- let issues = [];
41
-
42
- while (issues.length < opts.limit) {
43
- let result;
44
-
45
- try {
46
- result = await jira.spin('Running query...', jira.api.searchJira(query, {
47
- startAt: issues.lengh,
48
- maxResults: opts.limit - issues.length
49
- }));
50
- } catch (e) {
51
- _errorhandler.default.showError(jira, e);
52
-
53
- return;
54
- }
55
-
56
- if (result.warningMessages) {
57
- _errorhandler.default.showWarningMessages(result.warningMessages);
58
-
59
- return;
60
- }
61
-
62
- issues = issues.concat(result.issues);
63
- if (issues.length >= result.total) break;
64
- }
65
-
66
- Query.showIssues(jira, issues, resultFields);
67
- });
68
- }
69
-
70
- static showIssues(jira, issues, fields) {
71
- const table = new _cliTable.default({
72
- chars: jira.tableChars,
73
- head: ['Key', 'Status', 'Type', 'Summary']
74
- });
75
- issues.forEach(issue => table.push([_chalk.default.blue(issue.key), _chalk.default.green(issue.fields.status.name), _chalk.default.green(issue.fields.issuetype.name), issue.fields.summary]));
76
- console.log(table.toString());
77
- }
78
-
79
- }
80
-
81
- ;
82
- var _default = Query;
83
- exports.default = _default;
package/dist/run.js DELETED
@@ -1,104 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _chalk = _interopRequireDefault(require("chalk"));
9
-
10
- var _cliTable = _interopRequireDefault(require("cli-table3"));
11
-
12
- var _command = _interopRequireDefault(require("./command.js"));
13
-
14
- var _errorhandler = _interopRequireDefault(require("./errorhandler.js"));
15
-
16
- var _field = _interopRequireDefault(require("./field.js"));
17
-
18
- var _jira = _interopRequireDefault(require("./jira.js"));
19
-
20
- var _query = _interopRequireDefault(require("./query.js"));
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
-
24
- const DEFAULT_QUERY_LIMIT = 20;
25
-
26
- class Run extends _command.default {
27
- addOptions(program) {
28
- const cmd = program.command('run').description('Run a preset').argument('<name>', 'The preset name').option('-l, --limit <limit>', `Set the query limit. Default ${DEFAULT_QUERY_LIMIT}`, DEFAULT_QUERY_LIMIT).action(async name => {
29
- const jira = new _jira.default(program);
30
- const opts = cmd.opts();
31
-
32
- if (!(name in jira.config.presets)) {
33
- console.log('This preset does not exist');
34
- return;
35
- }
36
-
37
- let query = jira.config.presets[name];
38
-
39
- for (let i = 2; i < program.args.length; ++i) {
40
- const arg = program.args[i];
41
-
42
- if (!query.includes("$$$")) {
43
- console.log("Too many aguments for this query");
44
- return;
45
- }
46
-
47
- query = query.replace('$$$', this.escape(arg));
48
- }
49
-
50
- if (query.includes("$$$")) {
51
- console.log("More arguments are needed");
52
- return;
53
- }
54
-
55
- let resultFields;
56
-
57
- try {
58
- resultFields = await _field.default.listFields(jira);
59
- } catch (e) {
60
- _errorhandler.default.showError(jira, e);
61
-
62
- return;
63
- }
64
-
65
- let expectedResult = opts.limit;
66
- let issues = [];
67
-
68
- while (issues.length < opts.limit) {
69
- let result;
70
-
71
- try {
72
- result = await jira.spin('Running query...', jira.api.searchJira(query, {
73
- startAt: issues.lengh,
74
- maxResults: opts.limit - issues.length
75
- }));
76
- } catch (e) {
77
- _errorhandler.default.showError(jira, e);
78
-
79
- return;
80
- }
81
-
82
- if (result.warningMessages) {
83
- _errorhandler.default.showWarningMessages(result.warningMessages);
84
-
85
- return;
86
- }
87
-
88
- issues = issues.concat(result.issues);
89
- if (issues.length >= result.total) break;
90
- }
91
-
92
- _query.default.showIssues(jira, issues, resultFields);
93
- });
94
- }
95
-
96
- escape(str) {
97
- return str.replace(/\"/g, '\\\"');
98
- }
99
-
100
- }
101
-
102
- ;
103
- var _default = Run;
104
- exports.default = _default;