@fractary/core 0.1.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/LICENSE +21 -0
- package/README.md +169 -0
- package/dist/__tests__/smoke.test.d.ts +7 -0
- package/dist/__tests__/smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke.test.js +132 -0
- package/dist/__tests__/smoke.test.js.map +1 -0
- package/dist/common/config.d.ts +30 -0
- package/dist/common/config.d.ts.map +1 -0
- package/dist/common/config.js +120 -0
- package/dist/common/config.js.map +1 -0
- package/dist/common/errors.d.ts +264 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +491 -0
- package/dist/common/errors.js.map +1 -0
- package/dist/common/index.d.ts +9 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +25 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/types.d.ts +622 -0
- package/dist/common/types.d.ts.map +1 -0
- package/dist/common/types.js +8 -0
- package/dist/common/types.js.map +1 -0
- package/dist/docs/index.d.ts +8 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +26 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/docs/manager.d.ts +47 -0
- package/dist/docs/manager.d.ts.map +1 -0
- package/dist/docs/manager.js +250 -0
- package/dist/docs/manager.js.map +1 -0
- package/dist/docs/types.d.ts +113 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/docs/types.js +8 -0
- package/dist/docs/types.js.map +1 -0
- package/dist/file/index.d.ts +9 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/file/index.js +28 -0
- package/dist/file/index.js.map +1 -0
- package/dist/file/local.d.ts +42 -0
- package/dist/file/local.d.ts.map +1 -0
- package/dist/file/local.js +137 -0
- package/dist/file/local.js.map +1 -0
- package/dist/file/manager.d.ts +42 -0
- package/dist/file/manager.d.ts.map +1 -0
- package/dist/file/manager.js +68 -0
- package/dist/file/manager.js.map +1 -0
- package/dist/file/types.d.ts +52 -0
- package/dist/file/types.d.ts.map +1 -0
- package/dist/file/types.js +8 -0
- package/dist/file/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/logs/index.d.ts +8 -0
- package/dist/logs/index.d.ts.map +1 -0
- package/dist/logs/index.js +26 -0
- package/dist/logs/index.js.map +1 -0
- package/dist/logs/manager.d.ts +97 -0
- package/dist/logs/manager.d.ts.map +1 -0
- package/dist/logs/manager.js +584 -0
- package/dist/logs/manager.js.map +1 -0
- package/dist/logs/types.d.ts +45 -0
- package/dist/logs/types.d.ts.map +1 -0
- package/dist/logs/types.js +8 -0
- package/dist/logs/types.js.map +1 -0
- package/dist/repo/git.d.ts +182 -0
- package/dist/repo/git.d.ts.map +1 -0
- package/dist/repo/git.js +496 -0
- package/dist/repo/git.js.map +1 -0
- package/dist/repo/index.d.ts +10 -0
- package/dist/repo/index.d.ts.map +1 -0
- package/dist/repo/index.js +29 -0
- package/dist/repo/index.js.map +1 -0
- package/dist/repo/manager.d.ts +179 -0
- package/dist/repo/manager.d.ts.map +1 -0
- package/dist/repo/manager.js +433 -0
- package/dist/repo/manager.js.map +1 -0
- package/dist/repo/providers/bitbucket.d.ts +48 -0
- package/dist/repo/providers/bitbucket.d.ts.map +1 -0
- package/dist/repo/providers/bitbucket.js +86 -0
- package/dist/repo/providers/bitbucket.js.map +1 -0
- package/dist/repo/providers/github.d.ts +30 -0
- package/dist/repo/providers/github.d.ts.map +1 -0
- package/dist/repo/providers/github.js +311 -0
- package/dist/repo/providers/github.js.map +1 -0
- package/dist/repo/providers/gitlab.d.ts +47 -0
- package/dist/repo/providers/gitlab.d.ts.map +1 -0
- package/dist/repo/providers/gitlab.js +84 -0
- package/dist/repo/providers/gitlab.js.map +1 -0
- package/dist/repo/providers/index.d.ts +9 -0
- package/dist/repo/providers/index.d.ts.map +1 -0
- package/dist/repo/providers/index.js +15 -0
- package/dist/repo/providers/index.js.map +1 -0
- package/dist/repo/types.d.ts +48 -0
- package/dist/repo/types.d.ts.map +1 -0
- package/dist/repo/types.js +8 -0
- package/dist/repo/types.js.map +1 -0
- package/dist/spec/index.d.ts +9 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +30 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/manager.d.ts +106 -0
- package/dist/spec/manager.d.ts.map +1 -0
- package/dist/spec/manager.js +672 -0
- package/dist/spec/manager.js.map +1 -0
- package/dist/spec/templates.d.ts +28 -0
- package/dist/spec/templates.d.ts.map +1 -0
- package/dist/spec/templates.js +357 -0
- package/dist/spec/templates.js.map +1 -0
- package/dist/spec/types.d.ts +53 -0
- package/dist/spec/types.d.ts.map +1 -0
- package/dist/spec/types.js +8 -0
- package/dist/spec/types.js.map +1 -0
- package/dist/work/index.d.ts +8 -0
- package/dist/work/index.d.ts.map +1 -0
- package/dist/work/index.js +26 -0
- package/dist/work/index.js.map +1 -0
- package/dist/work/manager.d.ts +112 -0
- package/dist/work/manager.d.ts.map +1 -0
- package/dist/work/manager.js +227 -0
- package/dist/work/manager.js.map +1 -0
- package/dist/work/providers/github.d.ts +40 -0
- package/dist/work/providers/github.d.ts.map +1 -0
- package/dist/work/providers/github.js +299 -0
- package/dist/work/providers/github.js.map +1 -0
- package/dist/work/providers/jira.d.ts +60 -0
- package/dist/work/providers/jira.d.ts.map +1 -0
- package/dist/work/providers/jira.js +109 -0
- package/dist/work/providers/jira.js.map +1 -0
- package/dist/work/providers/linear.d.ts +57 -0
- package/dist/work/providers/linear.d.ts.map +1 -0
- package/dist/work/providers/linear.js +103 -0
- package/dist/work/providers/linear.js.map +1 -0
- package/dist/work/types.d.ts +42 -0
- package/dist/work/types.d.ts.map +1 -0
- package/dist/work/types.js +8 -0
- package/dist/work/types.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fractary/faber - WorkManager
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for work tracking operations.
|
|
5
|
+
* Supports GitHub Issues, Jira, and Linear.
|
|
6
|
+
*/
|
|
7
|
+
import { WorkConfig, Issue, IssueCreateOptions, IssueUpdateOptions, IssueFilters, WorkType, Comment, Label, Milestone, MilestoneCreateOptions, FaberContext } from '../common/types';
|
|
8
|
+
import { ListCommentsOptions } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* WorkManager - Unified work tracking across platforms
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const work = new WorkManager();
|
|
15
|
+
* const issue = await work.fetchIssue(123);
|
|
16
|
+
* await work.createComment(123, 'Implementation complete');
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class WorkManager {
|
|
20
|
+
private provider;
|
|
21
|
+
private config;
|
|
22
|
+
constructor(config?: WorkConfig);
|
|
23
|
+
/**
|
|
24
|
+
* Load work configuration from project
|
|
25
|
+
*/
|
|
26
|
+
private loadConfig;
|
|
27
|
+
/**
|
|
28
|
+
* Create the appropriate provider based on config
|
|
29
|
+
*/
|
|
30
|
+
private createProvider;
|
|
31
|
+
/**
|
|
32
|
+
* Get the current platform
|
|
33
|
+
*/
|
|
34
|
+
getPlatform(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Create a new issue
|
|
37
|
+
*/
|
|
38
|
+
createIssue(options: IssueCreateOptions): Promise<Issue>;
|
|
39
|
+
/**
|
|
40
|
+
* Fetch an issue by ID
|
|
41
|
+
*/
|
|
42
|
+
fetchIssue(issueId: string | number): Promise<Issue>;
|
|
43
|
+
/**
|
|
44
|
+
* Update an existing issue
|
|
45
|
+
*/
|
|
46
|
+
updateIssue(issueId: string | number, options: IssueUpdateOptions): Promise<Issue>;
|
|
47
|
+
/**
|
|
48
|
+
* Close an issue
|
|
49
|
+
*/
|
|
50
|
+
closeIssue(issueId: string | number): Promise<Issue>;
|
|
51
|
+
/**
|
|
52
|
+
* Reopen a closed issue
|
|
53
|
+
*/
|
|
54
|
+
reopenIssue(issueId: string | number): Promise<Issue>;
|
|
55
|
+
/**
|
|
56
|
+
* Search for issues
|
|
57
|
+
*/
|
|
58
|
+
searchIssues(query: string, filters?: IssueFilters): Promise<Issue[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Assign an issue to a user
|
|
61
|
+
*/
|
|
62
|
+
assignIssue(issueId: string | number, assignee: string): Promise<Issue>;
|
|
63
|
+
/**
|
|
64
|
+
* Unassign an issue
|
|
65
|
+
*/
|
|
66
|
+
unassignIssue(issueId: string | number): Promise<Issue>;
|
|
67
|
+
/**
|
|
68
|
+
* Create a comment on an issue
|
|
69
|
+
*/
|
|
70
|
+
createComment(issueId: string | number, body: string, faberContext?: FaberContext): Promise<Comment>;
|
|
71
|
+
/**
|
|
72
|
+
* List comments on an issue
|
|
73
|
+
*/
|
|
74
|
+
listComments(issueId: string | number, options?: ListCommentsOptions): Promise<Comment[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Add labels to an issue
|
|
77
|
+
*/
|
|
78
|
+
addLabels(issueId: string | number, labels: string[]): Promise<Label[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Remove labels from an issue
|
|
81
|
+
*/
|
|
82
|
+
removeLabels(issueId: string | number, labels: string[]): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Set labels on an issue (replaces existing)
|
|
85
|
+
*/
|
|
86
|
+
setLabels(issueId: string | number, labels: string[]): Promise<Label[]>;
|
|
87
|
+
/**
|
|
88
|
+
* List all labels (or labels on an issue)
|
|
89
|
+
*/
|
|
90
|
+
listLabels(issueId?: string | number): Promise<Label[]>;
|
|
91
|
+
/**
|
|
92
|
+
* Create a new milestone
|
|
93
|
+
*/
|
|
94
|
+
createMilestone(options: MilestoneCreateOptions): Promise<Milestone>;
|
|
95
|
+
/**
|
|
96
|
+
* Set milestone on an issue
|
|
97
|
+
*/
|
|
98
|
+
setMilestone(issueId: string | number, milestone: string): Promise<Issue>;
|
|
99
|
+
/**
|
|
100
|
+
* Remove milestone from an issue
|
|
101
|
+
*/
|
|
102
|
+
removeMilestone(issueId: string | number): Promise<Issue>;
|
|
103
|
+
/**
|
|
104
|
+
* List all milestones
|
|
105
|
+
*/
|
|
106
|
+
listMilestones(state?: 'open' | 'closed' | 'all'): Promise<Milestone[]>;
|
|
107
|
+
/**
|
|
108
|
+
* Classify the type of work based on issue metadata
|
|
109
|
+
*/
|
|
110
|
+
classifyWorkType(issue: Issue): Promise<WorkType>;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/work/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fractary/faber - WorkManager
|
|
4
|
+
*
|
|
5
|
+
* Main entry point for work tracking operations.
|
|
6
|
+
* Supports GitHub Issues, Jira, and Linear.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.WorkManager = void 0;
|
|
10
|
+
const config_1 = require("../common/config");
|
|
11
|
+
const errors_1 = require("../common/errors");
|
|
12
|
+
const github_1 = require("./providers/github");
|
|
13
|
+
const jira_1 = require("./providers/jira");
|
|
14
|
+
const linear_1 = require("./providers/linear");
|
|
15
|
+
/**
|
|
16
|
+
* WorkManager - Unified work tracking across platforms
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const work = new WorkManager();
|
|
21
|
+
* const issue = await work.fetchIssue(123);
|
|
22
|
+
* await work.createComment(123, 'Implementation complete');
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
class WorkManager {
|
|
26
|
+
provider;
|
|
27
|
+
config;
|
|
28
|
+
constructor(config) {
|
|
29
|
+
this.config = config || this.loadConfig();
|
|
30
|
+
this.provider = this.createProvider(this.config);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load work configuration from project
|
|
34
|
+
*/
|
|
35
|
+
loadConfig() {
|
|
36
|
+
const config = (0, config_1.loadWorkConfig)((0, config_1.findProjectRoot)());
|
|
37
|
+
if (!config) {
|
|
38
|
+
throw new errors_1.ConfigurationError('Work configuration not found. Run "fractary work init" to set up.');
|
|
39
|
+
}
|
|
40
|
+
return config;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create the appropriate provider based on config
|
|
44
|
+
*/
|
|
45
|
+
createProvider(config) {
|
|
46
|
+
switch (config.platform) {
|
|
47
|
+
case 'github':
|
|
48
|
+
return new github_1.GitHubWorkProvider(config);
|
|
49
|
+
case 'jira':
|
|
50
|
+
return new jira_1.JiraWorkProvider(config);
|
|
51
|
+
case 'linear':
|
|
52
|
+
return new linear_1.LinearWorkProvider(config);
|
|
53
|
+
default:
|
|
54
|
+
throw new errors_1.ConfigurationError(`Unsupported work platform: ${config.platform}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the current platform
|
|
59
|
+
*/
|
|
60
|
+
getPlatform() {
|
|
61
|
+
return this.provider.platform;
|
|
62
|
+
}
|
|
63
|
+
// =========================================================================
|
|
64
|
+
// ISSUES
|
|
65
|
+
// =========================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Create a new issue
|
|
68
|
+
*/
|
|
69
|
+
async createIssue(options) {
|
|
70
|
+
return this.provider.createIssue(options);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Fetch an issue by ID
|
|
74
|
+
*/
|
|
75
|
+
async fetchIssue(issueId) {
|
|
76
|
+
return this.provider.fetchIssue(issueId);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Update an existing issue
|
|
80
|
+
*/
|
|
81
|
+
async updateIssue(issueId, options) {
|
|
82
|
+
return this.provider.updateIssue(issueId, options);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Close an issue
|
|
86
|
+
*/
|
|
87
|
+
async closeIssue(issueId) {
|
|
88
|
+
return this.provider.closeIssue(issueId);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Reopen a closed issue
|
|
92
|
+
*/
|
|
93
|
+
async reopenIssue(issueId) {
|
|
94
|
+
return this.provider.reopenIssue(issueId);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Search for issues
|
|
98
|
+
*/
|
|
99
|
+
async searchIssues(query, filters) {
|
|
100
|
+
return this.provider.searchIssues(query, filters);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Assign an issue to a user
|
|
104
|
+
*/
|
|
105
|
+
async assignIssue(issueId, assignee) {
|
|
106
|
+
return this.provider.assignIssue(issueId, assignee);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Unassign an issue
|
|
110
|
+
*/
|
|
111
|
+
async unassignIssue(issueId) {
|
|
112
|
+
return this.provider.unassignIssue(issueId);
|
|
113
|
+
}
|
|
114
|
+
// =========================================================================
|
|
115
|
+
// COMMENTS
|
|
116
|
+
// =========================================================================
|
|
117
|
+
/**
|
|
118
|
+
* Create a comment on an issue
|
|
119
|
+
*/
|
|
120
|
+
async createComment(issueId, body, faberContext) {
|
|
121
|
+
return this.provider.createComment(issueId, body, faberContext);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* List comments on an issue
|
|
125
|
+
*/
|
|
126
|
+
async listComments(issueId, options) {
|
|
127
|
+
return this.provider.listComments(issueId, options);
|
|
128
|
+
}
|
|
129
|
+
// =========================================================================
|
|
130
|
+
// LABELS
|
|
131
|
+
// =========================================================================
|
|
132
|
+
/**
|
|
133
|
+
* Add labels to an issue
|
|
134
|
+
*/
|
|
135
|
+
async addLabels(issueId, labels) {
|
|
136
|
+
return this.provider.addLabels(issueId, labels);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Remove labels from an issue
|
|
140
|
+
*/
|
|
141
|
+
async removeLabels(issueId, labels) {
|
|
142
|
+
return this.provider.removeLabels(issueId, labels);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Set labels on an issue (replaces existing)
|
|
146
|
+
*/
|
|
147
|
+
async setLabels(issueId, labels) {
|
|
148
|
+
return this.provider.setLabels(issueId, labels);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* List all labels (or labels on an issue)
|
|
152
|
+
*/
|
|
153
|
+
async listLabels(issueId) {
|
|
154
|
+
return this.provider.listLabels(issueId);
|
|
155
|
+
}
|
|
156
|
+
// =========================================================================
|
|
157
|
+
// MILESTONES
|
|
158
|
+
// =========================================================================
|
|
159
|
+
/**
|
|
160
|
+
* Create a new milestone
|
|
161
|
+
*/
|
|
162
|
+
async createMilestone(options) {
|
|
163
|
+
return this.provider.createMilestone(options);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Set milestone on an issue
|
|
167
|
+
*/
|
|
168
|
+
async setMilestone(issueId, milestone) {
|
|
169
|
+
return this.provider.setMilestone(issueId, milestone);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Remove milestone from an issue
|
|
173
|
+
*/
|
|
174
|
+
async removeMilestone(issueId) {
|
|
175
|
+
return this.provider.removeMilestone(issueId);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* List all milestones
|
|
179
|
+
*/
|
|
180
|
+
async listMilestones(state) {
|
|
181
|
+
return this.provider.listMilestones(state);
|
|
182
|
+
}
|
|
183
|
+
// =========================================================================
|
|
184
|
+
// CLASSIFICATION
|
|
185
|
+
// =========================================================================
|
|
186
|
+
/**
|
|
187
|
+
* Classify the type of work based on issue metadata
|
|
188
|
+
*/
|
|
189
|
+
async classifyWorkType(issue) {
|
|
190
|
+
const labels = issue.labels.map(l => l.name.toLowerCase());
|
|
191
|
+
const title = issue.title.toLowerCase();
|
|
192
|
+
const body = issue.body.toLowerCase();
|
|
193
|
+
// Check labels first
|
|
194
|
+
if (labels.some(l => l.includes('bug') || l.includes('defect'))) {
|
|
195
|
+
return 'bug';
|
|
196
|
+
}
|
|
197
|
+
if (labels.some(l => l.includes('feature') || l.includes('enhancement'))) {
|
|
198
|
+
return 'feature';
|
|
199
|
+
}
|
|
200
|
+
if (labels.some(l => l.includes('chore') || l.includes('maintenance'))) {
|
|
201
|
+
return 'chore';
|
|
202
|
+
}
|
|
203
|
+
if (labels.some(l => l.includes('patch') || l.includes('hotfix'))) {
|
|
204
|
+
return 'patch';
|
|
205
|
+
}
|
|
206
|
+
if (labels.some(l => l.includes('infrastructure') || l.includes('infra'))) {
|
|
207
|
+
return 'infrastructure';
|
|
208
|
+
}
|
|
209
|
+
if (labels.some(l => l.includes('api'))) {
|
|
210
|
+
return 'api';
|
|
211
|
+
}
|
|
212
|
+
// Check title/body keywords
|
|
213
|
+
if (title.includes('bug') || title.includes('fix') || body.includes('regression')) {
|
|
214
|
+
return 'bug';
|
|
215
|
+
}
|
|
216
|
+
if (title.includes('add') || title.includes('implement') || title.includes('feature')) {
|
|
217
|
+
return 'feature';
|
|
218
|
+
}
|
|
219
|
+
if (title.includes('refactor') || title.includes('cleanup') || title.includes('chore')) {
|
|
220
|
+
return 'chore';
|
|
221
|
+
}
|
|
222
|
+
// Default to feature
|
|
223
|
+
return 'feature';
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
exports.WorkManager = WorkManager;
|
|
227
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/work/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fractary/faber - GitHub Work Provider
|
|
3
|
+
*
|
|
4
|
+
* Work tracking via GitHub Issues using the gh CLI.
|
|
5
|
+
*/
|
|
6
|
+
import { WorkConfig, Issue, IssueCreateOptions, IssueUpdateOptions, IssueFilters, Comment, Label, Milestone, MilestoneCreateOptions, FaberContext } from '../../common/types';
|
|
7
|
+
import { WorkProvider } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* GitHub Issues provider using gh CLI
|
|
10
|
+
*/
|
|
11
|
+
export declare class GitHubWorkProvider implements WorkProvider {
|
|
12
|
+
readonly platform: "github";
|
|
13
|
+
private owner;
|
|
14
|
+
private repo;
|
|
15
|
+
constructor(config: WorkConfig);
|
|
16
|
+
private getRepoArg;
|
|
17
|
+
createIssue(options: IssueCreateOptions): Promise<Issue>;
|
|
18
|
+
fetchIssue(issueId: string | number): Promise<Issue>;
|
|
19
|
+
updateIssue(issueId: string | number, options: IssueUpdateOptions): Promise<Issue>;
|
|
20
|
+
closeIssue(issueId: string | number): Promise<Issue>;
|
|
21
|
+
reopenIssue(issueId: string | number): Promise<Issue>;
|
|
22
|
+
searchIssues(query: string, filters?: IssueFilters): Promise<Issue[]>;
|
|
23
|
+
assignIssue(issueId: string | number, assignee: string): Promise<Issue>;
|
|
24
|
+
unassignIssue(issueId: string | number): Promise<Issue>;
|
|
25
|
+
createComment(issueId: string | number, body: string, faberContext?: FaberContext): Promise<Comment>;
|
|
26
|
+
listComments(issueId: string | number, options?: {
|
|
27
|
+
limit?: number;
|
|
28
|
+
since?: string;
|
|
29
|
+
}): Promise<Comment[]>;
|
|
30
|
+
addLabels(issueId: string | number, labels: string[]): Promise<Label[]>;
|
|
31
|
+
removeLabels(issueId: string | number, labels: string[]): Promise<void>;
|
|
32
|
+
setLabels(issueId: string | number, labels: string[]): Promise<Label[]>;
|
|
33
|
+
listLabels(issueId?: string | number): Promise<Label[]>;
|
|
34
|
+
createMilestone(options: MilestoneCreateOptions): Promise<Milestone>;
|
|
35
|
+
setMilestone(issueId: string | number, milestone: string): Promise<Issue>;
|
|
36
|
+
removeMilestone(issueId: string | number): Promise<Issue>;
|
|
37
|
+
listMilestones(state?: 'open' | 'closed' | 'all'): Promise<Milestone[]>;
|
|
38
|
+
private parseIssue;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/work/providers/github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,UAAU,EACV,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,KAAK,EACL,SAAS,EACT,sBAAsB,EACtB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA+CxC;;GAEG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IACtC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;gBAET,MAAM,EAAE,UAAU;IAa9B,OAAO,CAAC,UAAU;IAQZ,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;IA4BxD,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAgBpD,WAAW,CACf,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,KAAK,CAAC;IAiBX,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAKpD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAKrD,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,KAAK,EAAE,CAAC;IAwBb,WAAW,CACf,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,KAAK,CAAC;IAKX,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAavD,aAAa,CACjB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAgBb,YAAY,CAChB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC,OAAO,EAAE,CAAC;IAmCf,SAAS,CACb,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,KAAK,EAAE,CAAC;IAMb,YAAY,CAChB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,IAAI,CAAC;IAIV,SAAS,CACb,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,KAAK,EAAE,CAAC;IAYb,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAgBvD,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAuBpE,YAAY,CAChB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;IAKX,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAKzD,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA2B7E,OAAO,CAAC,UAAU;CA2BnB"}
|