@conduit-harness/conduit-tracker-azuredevops 0.1.0-preview.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/dist/index.d.ts +19 -0
- package/dist/index.js +151 -0
- package/dist/index.js.map +1 -0
- package/package.json +24 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Issue, ServiceConfig } from "@conduit-harness/conduit";
|
|
2
|
+
import { BaseTracker } from "@conduit-harness/conduit";
|
|
3
|
+
export default class AzureDevOpsTrackerClient extends BaseTracker {
|
|
4
|
+
private readonly fetchImpl;
|
|
5
|
+
private readonly base;
|
|
6
|
+
private readonly organization;
|
|
7
|
+
private readonly project;
|
|
8
|
+
private readonly auth;
|
|
9
|
+
constructor(config: ServiceConfig, fetchImpl?: typeof fetch);
|
|
10
|
+
fetchCandidateIssues(): Promise<Issue[]>;
|
|
11
|
+
fetchIssuesByStates(stateNames: string[]): Promise<Issue[]>;
|
|
12
|
+
fetchIssueStatesByIds(issueIds: string[]): Promise<Record<string, string>>;
|
|
13
|
+
comment(issueId: string, body: string): Promise<void>;
|
|
14
|
+
transition(issueId: string, stateName: string): Promise<void>;
|
|
15
|
+
private fetchByStates;
|
|
16
|
+
private queryWorkItemIds;
|
|
17
|
+
private getWorkItems;
|
|
18
|
+
private request;
|
|
19
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { BaseTracker } from "@conduit-harness/conduit";
|
|
2
|
+
function str(v) { return typeof v === "string" && v.length > 0 ? v : undefined; }
|
|
3
|
+
const API_VERSION = "7.1";
|
|
4
|
+
const COMMENTS_API_VERSION = "7.1-preview.4";
|
|
5
|
+
const BATCH_SIZE_MAX = 200;
|
|
6
|
+
const FIELDS = ["System.Id", "System.Title", "System.Description", "System.State", "System.Tags", "System.CreatedDate", "System.ChangedDate", "Microsoft.VSTS.Common.Priority"];
|
|
7
|
+
export default class AzureDevOpsTrackerClient extends BaseTracker {
|
|
8
|
+
fetchImpl;
|
|
9
|
+
base;
|
|
10
|
+
organization;
|
|
11
|
+
project;
|
|
12
|
+
auth;
|
|
13
|
+
constructor(config, fetchImpl = fetch) {
|
|
14
|
+
super(config);
|
|
15
|
+
this.fetchImpl = fetchImpl;
|
|
16
|
+
const raw = config.tracker.raw;
|
|
17
|
+
const baseUrl = (str(raw.base_url) ?? "https://dev.azure.com").replace(/\/+$/, "");
|
|
18
|
+
this.organization = str(raw.organization) ?? "";
|
|
19
|
+
this.project = str(raw.project) ?? "";
|
|
20
|
+
this.base = `${baseUrl}/${encodeURIComponent(this.organization)}`;
|
|
21
|
+
const pat = str(raw.api_key) ?? str(raw.token) ?? process.env.AZURE_DEVOPS_TOKEN ?? "";
|
|
22
|
+
this.auth = "Basic " + Buffer.from(`:${pat}`).toString("base64");
|
|
23
|
+
}
|
|
24
|
+
async fetchCandidateIssues() {
|
|
25
|
+
return await this.fetchByStates(this.config.tracker.activeStates);
|
|
26
|
+
}
|
|
27
|
+
async fetchIssuesByStates(stateNames) {
|
|
28
|
+
return await this.fetchByStates(stateNames);
|
|
29
|
+
}
|
|
30
|
+
async fetchIssueStatesByIds(issueIds) {
|
|
31
|
+
if (issueIds.length === 0)
|
|
32
|
+
return {};
|
|
33
|
+
const out = {};
|
|
34
|
+
for (const chunk of chunks(issueIds, BATCH_SIZE_MAX)) {
|
|
35
|
+
const items = await this.getWorkItems(chunk.map(id => Number(id)).filter(n => Number.isFinite(n)), ["System.Id", "System.State"]);
|
|
36
|
+
for (const item of items)
|
|
37
|
+
out[String(item.id)] = stringField(item.fields["System.State"]);
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
async comment(issueId, body) {
|
|
42
|
+
await this.request("POST", `/${encodeURIComponent(this.project)}/_apis/wit/workItems/${issueId}/comments?api-version=${COMMENTS_API_VERSION}`, "application/json", { text: body });
|
|
43
|
+
}
|
|
44
|
+
async transition(issueId, stateName) {
|
|
45
|
+
await this.request("PATCH", `/${encodeURIComponent(this.project)}/_apis/wit/workitems/${issueId}?api-version=${API_VERSION}`, "application/json-patch+json", [{ op: "add", path: "/fields/System.State", value: stateName }]);
|
|
46
|
+
}
|
|
47
|
+
async fetchByStates(stateNames) {
|
|
48
|
+
const ids = await this.queryWorkItemIds(stateNames);
|
|
49
|
+
if (ids.length === 0)
|
|
50
|
+
return [];
|
|
51
|
+
const out = [];
|
|
52
|
+
for (const chunk of chunks(ids, BATCH_SIZE_MAX)) {
|
|
53
|
+
const items = await this.getWorkItems(chunk, FIELDS);
|
|
54
|
+
for (const item of items)
|
|
55
|
+
out.push(normalizeIssue(item, this.base, this.project));
|
|
56
|
+
}
|
|
57
|
+
return out.filter(i => labelsMatch(i, this.config.tracker.requiredLabels, this.config.tracker.excludedLabels));
|
|
58
|
+
}
|
|
59
|
+
async queryWorkItemIds(stateNames) {
|
|
60
|
+
const escapedProject = wiqlEscape(this.project);
|
|
61
|
+
const stateClause = stateNames.length === 0 ? "" : `AND [System.State] IN (${stateNames.map(s => `'${wiqlEscape(s)}'`).join(", ")})`;
|
|
62
|
+
const query = `SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = '${escapedProject}' ${stateClause} ORDER BY [System.ChangedDate] DESC`;
|
|
63
|
+
const result = await this.request("POST", `/${encodeURIComponent(this.project)}/_apis/wit/wiql?api-version=${API_VERSION}`, "application/json", { query });
|
|
64
|
+
return (result?.workItems ?? []).map(w => w.id);
|
|
65
|
+
}
|
|
66
|
+
async getWorkItems(ids, fields) {
|
|
67
|
+
if (ids.length === 0)
|
|
68
|
+
return [];
|
|
69
|
+
const result = await this.request("POST", `/_apis/wit/workitemsbatch?api-version=${API_VERSION}`, "application/json", { ids, fields });
|
|
70
|
+
return result?.value ?? [];
|
|
71
|
+
}
|
|
72
|
+
async request(method, path, contentType, body) {
|
|
73
|
+
const controller = new AbortController();
|
|
74
|
+
const timer = setTimeout(() => controller.abort(), 30000);
|
|
75
|
+
try {
|
|
76
|
+
const res = await this.fetchImpl(`${this.base}${path}`, {
|
|
77
|
+
method,
|
|
78
|
+
headers: { authorization: this.auth, accept: "application/json", "content-type": contentType },
|
|
79
|
+
body: JSON.stringify(body),
|
|
80
|
+
signal: controller.signal,
|
|
81
|
+
});
|
|
82
|
+
if (!res.ok)
|
|
83
|
+
throw new Error(`azuredevops_api_status: ${res.status}`);
|
|
84
|
+
if (res.status === 204)
|
|
85
|
+
return undefined;
|
|
86
|
+
const text = await res.text();
|
|
87
|
+
return text.length > 0 ? JSON.parse(text) : undefined;
|
|
88
|
+
}
|
|
89
|
+
catch (cause) {
|
|
90
|
+
if (cause instanceof Error && cause.message.startsWith("azuredevops_"))
|
|
91
|
+
throw cause;
|
|
92
|
+
throw new Error(`azuredevops_api_request: ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
clearTimeout(timer);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function chunks(items, size) {
|
|
100
|
+
const out = [];
|
|
101
|
+
for (let i = 0; i < items.length; i += size)
|
|
102
|
+
out.push(items.slice(i, i + size));
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
function wiqlEscape(value) { return value.replace(/'/g, "''"); }
|
|
106
|
+
function stringField(v) { return typeof v === "string" ? v : ""; }
|
|
107
|
+
function htmlToText(html) {
|
|
108
|
+
return html
|
|
109
|
+
.replace(/<\s*br\s*\/?\s*>/gi, "\n")
|
|
110
|
+
.replace(/<\s*\/(p|div|li|h[1-6])\s*>/gi, "\n")
|
|
111
|
+
.replace(/<[^>]+>/g, "")
|
|
112
|
+
.replace(/ /g, " ")
|
|
113
|
+
.replace(/&/g, "&")
|
|
114
|
+
.replace(/</g, "<")
|
|
115
|
+
.replace(/>/g, ">")
|
|
116
|
+
.replace(/"/g, "\"")
|
|
117
|
+
.replace(/'/g, "'")
|
|
118
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
119
|
+
.trim();
|
|
120
|
+
}
|
|
121
|
+
function parseTags(value) {
|
|
122
|
+
if (typeof value !== "string" || value.length === 0)
|
|
123
|
+
return [];
|
|
124
|
+
return value.split(";").map(t => t.trim().toLowerCase()).filter(t => t.length > 0);
|
|
125
|
+
}
|
|
126
|
+
function normalizeIssue(raw, base, project) {
|
|
127
|
+
const fields = raw.fields;
|
|
128
|
+
const descriptionHtml = stringField(fields["System.Description"]);
|
|
129
|
+
const description = descriptionHtml.length > 0 ? htmlToText(descriptionHtml) || null : null;
|
|
130
|
+
const priorityRaw = fields["Microsoft.VSTS.Common.Priority"];
|
|
131
|
+
const priority = typeof priorityRaw === "number" ? priorityRaw : null;
|
|
132
|
+
return {
|
|
133
|
+
id: String(raw.id),
|
|
134
|
+
identifier: `#${raw.id}`,
|
|
135
|
+
title: stringField(fields["System.Title"]),
|
|
136
|
+
description,
|
|
137
|
+
priority,
|
|
138
|
+
state: stringField(fields["System.State"]),
|
|
139
|
+
branchName: null,
|
|
140
|
+
url: `${base}/${encodeURIComponent(project)}/_workitems/edit/${raw.id}`,
|
|
141
|
+
labels: parseTags(fields["System.Tags"]),
|
|
142
|
+
blockedBy: [],
|
|
143
|
+
createdAt: stringField(fields["System.CreatedDate"]) || null,
|
|
144
|
+
updatedAt: stringField(fields["System.ChangedDate"]) || null,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function labelsMatch(issue, required, excluded) {
|
|
148
|
+
const labels = new Set(issue.labels);
|
|
149
|
+
return required.every(l => labels.has(l.toLowerCase())) && !excluded.some(l => labels.has(l.toLowerCase()));
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,SAAS,GAAG,CAAC,CAAU,IAAwB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAE9G,MAAM,WAAW,GAAG,KAAK,CAAC;AAC1B,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAC7C,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gCAAgC,CAAC,CAAC;AAEhL,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,WAAW;IAMX;IALnC,IAAI,CAAS;IACb,YAAY,CAAS;IACrB,OAAO,CAAS;IAChB,IAAI,CAAS;IAE9B,YAAY,MAAqB,EAAmB,YAA0B,KAAK;QACjF,KAAK,CAAC,MAAM,CAAC,CAAC;QADoC,cAAS,GAAT,SAAS,CAAsB;QAEjF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,GAAG,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAClE,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;QACvF,IAAI,CAAC,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAAoB;QAC5C,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,QAAkB;QAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;YAClI,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEQ,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,IAAY;QAClD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,OAAO,yBAAyB,oBAAoB,EAAE,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACrL,CAAC;IAEQ,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,SAAiB;QAC1D,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,OAAO,gBAAgB,WAAW,EAAE,EAAE,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAChO,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,UAAoB;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,GAAG,GAAY,EAAE,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrD,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IACjH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,UAAoB;QACjD,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACrI,MAAM,KAAK,GAAG,mEAAmE,cAAc,KAAK,WAAW,qCAAqC,CAAC;QACrJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAa,MAAM,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,+BAA+B,WAAW,EAAE,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACvK,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,GAAa,EAAE,MAAgB;QACxD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAA2B,MAAM,EAAE,yCAAyC,WAAW,EAAE,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACjK,OAAO,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,WAAmB,EAAE,IAAa;QACvF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAAC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QACpG,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE;gBACtD,MAAM;gBACN,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE;gBAC9F,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,SAAS,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;gBAAE,MAAM,KAAK,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnH,CAAC;gBAAS,CAAC;YAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpC,CAAC;CACF;AAKD,SAAS,MAAM,CAAI,KAAU,EAAE,IAAY;IACzC,MAAM,GAAG,GAAU,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAChF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,IAAY,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhF,SAAS,WAAW,CAAC,CAAU,IAAY,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;SACnC,OAAO,CAAC,+BAA+B,EAAE,IAAI,CAAC;SAC9C,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/D,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,cAAc,CAAC,GAAgB,EAAE,IAAY,EAAE,OAAe;IACrE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,MAAM,WAAW,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,UAAU,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE;QACxB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC1C,WAAW;QACX,QAAQ;QACR,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC1C,UAAU,EAAE,IAAI;QAChB,GAAG,EAAE,GAAG,IAAI,IAAI,kBAAkB,CAAC,OAAO,CAAC,oBAAoB,GAAG,CAAC,EAAE,EAAE;QACvE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACxC,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,IAAI;QAC5D,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,IAAI;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAY,EAAE,QAAkB,EAAE,QAAkB;IACvE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC9G,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@conduit-harness/conduit-tracker-azuredevops",
|
|
3
|
+
"version": "0.1.0-preview.1",
|
|
4
|
+
"description": "Conduit tracker plugin for Azure DevOps Work Items",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" }
|
|
8
|
+
},
|
|
9
|
+
"files": ["dist"],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc -p tsconfig.json",
|
|
12
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"repository": { "type": "git", "url": "git+https://github.com/conduit-harness/conduit.git" },
|
|
16
|
+
"publishConfig": { "access": "public" },
|
|
17
|
+
"engines": { "node": ">=24.0.0" },
|
|
18
|
+
"peerDependencies": { "@conduit-harness/conduit": ">=0.0.1" },
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@conduit-harness/conduit": "workspace:*",
|
|
21
|
+
"@types/node": "latest",
|
|
22
|
+
"typescript": "latest"
|
|
23
|
+
}
|
|
24
|
+
}
|