@enrichlayer/el-linear 1.9.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -10
- package/claude-skills/linear-operations/SKILL.md +41 -1
- package/dist/auth/linear-credential.d.ts +27 -0
- package/dist/auth/linear-credential.js +1 -0
- package/dist/auth/oauth-app-config.d.ts +4 -3
- package/dist/auth/oauth-app-config.js +13 -2
- package/dist/auth/oauth-callback.d.ts +2 -3
- package/dist/auth/oauth-callback.js +2 -2
- package/dist/auth/oauth-client.d.ts +8 -2
- package/dist/auth/oauth-client.js +26 -0
- package/dist/auth/oauth-fs.d.ts +2 -1
- package/dist/auth/oauth-headless.d.ts +2 -1
- package/dist/auth/oauth-storage.d.ts +5 -1
- package/dist/auth/oauth-storage.js +1 -1
- package/dist/auth/oauth-token.d.ts +4 -3
- package/dist/auth/oauth-token.js +16 -4
- package/dist/auth/token-resolver.d.ts +14 -5
- package/dist/auth/token-resolver.js +6 -1
- package/dist/commands/attachments.js +2 -1
- package/dist/commands/batch.js +18 -21
- package/dist/commands/comments.js +22 -33
- package/dist/commands/config.js +178 -5
- package/dist/commands/cycles.js +2 -1
- package/dist/commands/documents.js +2 -1
- package/dist/commands/graphql.js +4 -6
- package/dist/commands/init/aliases.js +1 -1
- package/dist/commands/init/defaults.d.ts +2 -1
- package/dist/commands/init/index.js +45 -35
- package/dist/commands/init/oauth.d.ts +4 -1
- package/dist/commands/init/oauth.js +22 -4
- package/dist/commands/init/shared.d.ts +24 -2
- package/dist/commands/init/shared.js +35 -4
- package/dist/commands/init/token.d.ts +3 -3
- package/dist/commands/init/token.js +5 -24
- package/dist/commands/init/workspace.d.ts +2 -1
- package/dist/commands/init/workspace.js +1 -1
- package/dist/commands/introspect.d.ts +27 -0
- package/dist/commands/introspect.js +178 -0
- package/dist/commands/issue-id.js +1 -3
- package/dist/commands/issues/branch.js +9 -1
- package/dist/commands/issues/description.js +2 -6
- package/dist/commands/issues/link-references.d.ts +21 -0
- package/dist/commands/issues/link-references.js +171 -0
- package/dist/commands/issues/relations.d.ts +44 -0
- package/dist/commands/issues/relations.js +132 -0
- package/dist/commands/issues.js +269 -309
- package/dist/commands/labels.js +15 -24
- package/dist/commands/profile.js +1 -0
- package/dist/commands/project-milestones.js +13 -20
- package/dist/commands/projects.d.ts +2 -0
- package/dist/commands/projects.js +157 -44
- package/dist/commands/read-shortcut.d.ts +1 -1
- package/dist/commands/read-shortcut.js +28 -8
- package/dist/commands/refs.js +75 -8
- package/dist/commands/releases.js +26 -30
- package/dist/commands/search.js +49 -33
- package/dist/commands/teams.js +2 -1
- package/dist/commands/templates.js +9 -14
- package/dist/commands/users.js +5 -2
- package/dist/config/config.d.ts +99 -1
- package/dist/config/config.js +264 -52
- package/dist/config/error-enrichment.d.ts +62 -0
- package/dist/config/error-enrichment.js +417 -0
- package/dist/config/issue-validation.d.ts +37 -0
- package/dist/config/issue-validation.js +63 -1
- package/dist/config/paths.d.ts +2 -8
- package/dist/config/paths.js +4 -2
- package/dist/config/resolver.d.ts +8 -1
- package/dist/config/resolver.js +11 -5
- package/dist/main.js +13 -1
- package/dist/queries/attachments-types.d.ts +30 -0
- package/dist/queries/attachments-types.js +5 -0
- package/dist/queries/comments-types.d.ts +55 -0
- package/dist/queries/comments-types.js +5 -0
- package/dist/queries/common.d.ts +2 -2
- package/dist/queries/common.js +8 -0
- package/dist/queries/documents-types.d.ts +62 -0
- package/dist/queries/documents-types.js +9 -0
- package/dist/queries/introspect-types.d.ts +58 -0
- package/dist/queries/introspect-types.js +10 -0
- package/dist/queries/issues-types.d.ts +481 -0
- package/dist/queries/issues-types.js +23 -0
- package/dist/queries/issues.d.ts +51 -10
- package/dist/queries/issues.js +147 -5
- package/dist/queries/labels-types.d.ts +65 -0
- package/dist/queries/labels-types.js +5 -0
- package/dist/queries/project-milestones-types.d.ts +92 -0
- package/dist/queries/project-milestones-types.js +10 -0
- package/dist/queries/project-milestones.d.ts +1 -1
- package/dist/queries/projects-types.d.ts +76 -0
- package/dist/queries/projects-types.js +5 -0
- package/dist/queries/projects.d.ts +2 -0
- package/dist/queries/projects.js +22 -0
- package/dist/queries/releases-types.d.ts +85 -0
- package/dist/queries/releases-types.js +5 -0
- package/dist/queries/search-types.d.ts +102 -0
- package/dist/queries/search-types.js +6 -0
- package/dist/queries/templates-types.d.ts +62 -0
- package/dist/queries/templates-types.js +9 -0
- package/dist/types/linear.d.ts +21 -3
- package/dist/utils/auto-link-references.d.ts +3 -3
- package/dist/utils/auto-link-references.js +30 -34
- package/dist/utils/extract-field.d.ts +19 -0
- package/dist/utils/extract-field.js +99 -0
- package/dist/utils/file-service.d.ts +6 -13
- package/dist/utils/file-service.js +0 -2
- package/dist/utils/formatters/summary.js +6 -1
- package/dist/utils/graphql-attachments-service.js +6 -9
- package/dist/utils/graphql-documents-service.js +19 -25
- package/dist/utils/graphql-issues-service.d.ts +112 -46
- package/dist/utils/graphql-issues-service.js +398 -206
- package/dist/utils/graphql-service.d.ts +10 -12
- package/dist/utils/graphql-service.js +0 -3
- package/dist/utils/issue-reference-extractor.d.ts +7 -0
- package/dist/utils/issue-reference-extractor.js +5 -3
- package/dist/utils/issues-service-bootstrap.d.ts +28 -0
- package/dist/utils/issues-service-bootstrap.js +27 -0
- package/dist/utils/linear-service.d.ts +21 -14
- package/dist/utils/linear-service.js +73 -11
- package/dist/utils/markdown-prosemirror.js +12 -12
- package/dist/utils/mention-resolver.js +1 -1
- package/dist/utils/output.d.ts +82 -2
- package/dist/utils/output.js +76 -11
- package/dist/utils/project-slug.d.ts +21 -0
- package/dist/utils/project-slug.js +45 -0
- package/dist/utils/protected-ranges.d.ts +14 -0
- package/dist/utils/protected-ranges.js +88 -2
- package/dist/utils/sanitize-for-log.d.ts +24 -0
- package/dist/utils/sanitize-for-log.js +38 -0
- package/dist/utils/table-formatter.js +24 -0
- package/dist/utils/validators.d.ts +7 -2
- package/dist/utils/validators.js +6 -0
- package/dist/utils/workspace-url.d.ts +5 -1
- package/dist/utils/workspace-url.js +53 -7
- package/package.json +2 -2
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed response shapes for the GraphQL queries in `./issues.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Pre-fix, every consumer used `GraphQLResponseData` (a recursive
|
|
5
|
+
* `Record<string, unknown>`) and re-cast every field with `as
|
|
6
|
+
* string` / `as GraphQLResponseData`. A renamed Linear field would
|
|
7
|
+
* silently produce `undefined` at runtime; transformers had no
|
|
8
|
+
* compile-time check that they were reading the fields the queries
|
|
9
|
+
* actually requested.
|
|
10
|
+
*
|
|
11
|
+
* These interfaces mirror the shape of `COMPLETE_ISSUE_FRAGMENT` /
|
|
12
|
+
* `COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT` (defined in
|
|
13
|
+
* `./common.ts`) so the transformer can consume a typed node and
|
|
14
|
+
* the compiler catches drift between query and consumer.
|
|
15
|
+
*
|
|
16
|
+
* Pattern for adding new types: define a `Foo` node interface +
|
|
17
|
+
* a `GetFooResponse` (or list-shape) wrapper. Co-locate them in
|
|
18
|
+
* this file or a sibling `*-types.ts` so they live next to the
|
|
19
|
+
* query string.
|
|
20
|
+
*
|
|
21
|
+
* Refs ALL-937.
|
|
22
|
+
*/
|
|
23
|
+
import type { LinearPriority } from "../types/linear.js";
|
|
24
|
+
/** A reference to a related entity — id + display fields. */
|
|
25
|
+
interface IdNameRef {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
}
|
|
29
|
+
interface IdKeyNameRef {
|
|
30
|
+
id: string;
|
|
31
|
+
key: string;
|
|
32
|
+
name: string;
|
|
33
|
+
}
|
|
34
|
+
interface IdIdentifierTitleRef {
|
|
35
|
+
id: string;
|
|
36
|
+
identifier: string;
|
|
37
|
+
title: string;
|
|
38
|
+
}
|
|
39
|
+
interface AssigneeNode {
|
|
40
|
+
id: string;
|
|
41
|
+
name: string;
|
|
42
|
+
url?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Comment shape as embedded inside `COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT`
|
|
46
|
+
* (i.e. comments fetched as part of an issue query). Distinct from
|
|
47
|
+
* `comments-types.ts:CommentResourceNode`, which is the shape returned by
|
|
48
|
+
* the standalone comment queries (`LIST_COMMENTS_QUERY`,
|
|
49
|
+
* `CREATE_COMMENT_MUTATION`, `UPDATE_COMMENT_MUTATION`). The two have
|
|
50
|
+
* incompatible `user` shapes — this one allows `null` and uses the
|
|
51
|
+
* issue-page \"assignee\"-style fields, while the standalone resource
|
|
52
|
+
* shape always populates `user` and includes the comment-author-only
|
|
53
|
+
* `CommentUserRef` fields (DEV-4068 T2).
|
|
54
|
+
*/
|
|
55
|
+
export interface IssueCommentNode {
|
|
56
|
+
id: string;
|
|
57
|
+
body: string;
|
|
58
|
+
createdAt: string;
|
|
59
|
+
updatedAt: string;
|
|
60
|
+
user: AssigneeNode | null;
|
|
61
|
+
}
|
|
62
|
+
interface CycleNode {
|
|
63
|
+
id: string;
|
|
64
|
+
name: string | null;
|
|
65
|
+
number: number;
|
|
66
|
+
}
|
|
67
|
+
interface ProjectMilestoneNode {
|
|
68
|
+
id: string;
|
|
69
|
+
name: string;
|
|
70
|
+
targetDate: string | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Linear's documented generation states for issue summaries. If Linear
|
|
74
|
+
* adds a new state in the future the runtime API would deserialize the
|
|
75
|
+
* new string verbatim — TypeScript wouldn't catch the divergence, but
|
|
76
|
+
* the typical `=== "completed"` check keeps working safely. Widen the
|
|
77
|
+
* union here when Linear documents a new state.
|
|
78
|
+
*/
|
|
79
|
+
type IssueSummaryGenerationStatus = "completed" | "pending" | "failed";
|
|
80
|
+
interface IssueSummary {
|
|
81
|
+
content: unknown;
|
|
82
|
+
generationStatus: IssueSummaryGenerationStatus;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Mirrors `COMPLETE_ISSUE_FRAGMENT` from `src/queries/common.ts`.
|
|
86
|
+
* The transformer in `graphql-issues-service.ts` reads these
|
|
87
|
+
* fields. Keep the shapes in lock-step — if you add a field to
|
|
88
|
+
* the fragment, add it here.
|
|
89
|
+
*/
|
|
90
|
+
export interface IssueNode {
|
|
91
|
+
id: string;
|
|
92
|
+
identifier: string;
|
|
93
|
+
title: string;
|
|
94
|
+
description: string | null;
|
|
95
|
+
summary: IssueSummary | null;
|
|
96
|
+
branchName: string;
|
|
97
|
+
priority: LinearPriority;
|
|
98
|
+
estimate: number | null;
|
|
99
|
+
dueDate: string | null;
|
|
100
|
+
url: string;
|
|
101
|
+
createdAt: string;
|
|
102
|
+
updatedAt: string;
|
|
103
|
+
state: IdNameRef | null;
|
|
104
|
+
assignee: AssigneeNode | null;
|
|
105
|
+
delegate: AssigneeNode | null;
|
|
106
|
+
team: IdKeyNameRef | null;
|
|
107
|
+
project: IdNameRef | null;
|
|
108
|
+
labels: {
|
|
109
|
+
nodes: IdNameRef[];
|
|
110
|
+
};
|
|
111
|
+
cycle: CycleNode | null;
|
|
112
|
+
projectMilestone: ProjectMilestoneNode | null;
|
|
113
|
+
parent: IdIdentifierTitleRef | null;
|
|
114
|
+
children: {
|
|
115
|
+
nodes: IdIdentifierTitleRef[];
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Mirrors `COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT` — same as
|
|
120
|
+
* `IssueNode` but with the comments connection materialized.
|
|
121
|
+
*/
|
|
122
|
+
export interface IssueWithCommentsNode extends IssueNode {
|
|
123
|
+
comments: {
|
|
124
|
+
nodes: IssueCommentNode[];
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** Response shape for `GET_ISSUE_BY_ID_QUERY`. */
|
|
128
|
+
export interface GetIssueByIdResponse {
|
|
129
|
+
issue: IssueWithCommentsNode | null;
|
|
130
|
+
}
|
|
131
|
+
/** Response shape for `GET_ISSUE_BY_IDENTIFIER_QUERY`. */
|
|
132
|
+
export interface GetIssueByIdentifierResponse {
|
|
133
|
+
issues: {
|
|
134
|
+
nodes: IssueWithCommentsNode[];
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/** Response shape for `GET_ISSUES_QUERY`. */
|
|
138
|
+
export interface GetIssuesResponse {
|
|
139
|
+
issues: {
|
|
140
|
+
nodes: IssueNode[];
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/** Response shape for `SEARCH_ISSUES_QUERY` (full-text). */
|
|
144
|
+
export interface SearchIssuesResponse {
|
|
145
|
+
searchIssues: {
|
|
146
|
+
nodes: IssueNode[];
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/** Response shape for `CREATE_ISSUE_MUTATION`. */
|
|
150
|
+
export interface CreateIssueResponse {
|
|
151
|
+
issueCreate: {
|
|
152
|
+
success: boolean;
|
|
153
|
+
issue: IssueNode | null;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/** Response shape for `UPDATE_ISSUE_MUTATION`. */
|
|
157
|
+
export interface UpdateIssueResponse {
|
|
158
|
+
issueUpdate: {
|
|
159
|
+
success: boolean;
|
|
160
|
+
issue: IssueNode | null;
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export interface IssueArchiveEntity {
|
|
164
|
+
id: string;
|
|
165
|
+
}
|
|
166
|
+
interface IssueArchivePayload {
|
|
167
|
+
success: boolean;
|
|
168
|
+
lastSyncId: number;
|
|
169
|
+
entity: IssueArchiveEntity | null;
|
|
170
|
+
}
|
|
171
|
+
/** Response shape for `ARCHIVE_ISSUE_MUTATION`. */
|
|
172
|
+
export interface ArchiveIssueResponse {
|
|
173
|
+
issueArchive: IssueArchivePayload;
|
|
174
|
+
}
|
|
175
|
+
/** Response shape for `DELETE_ISSUE_MUTATION`. */
|
|
176
|
+
export interface DeleteIssueResponse {
|
|
177
|
+
issueDelete: IssueArchivePayload;
|
|
178
|
+
}
|
|
179
|
+
/** Response shape for `GET_ISSUE_TEAM_QUERY`. */
|
|
180
|
+
export interface GetIssueTeamResponse {
|
|
181
|
+
issue: {
|
|
182
|
+
team: {
|
|
183
|
+
id: string;
|
|
184
|
+
} | null;
|
|
185
|
+
} | null;
|
|
186
|
+
}
|
|
187
|
+
type WorkflowStateType = "triage" | "backlog" | "unstarted" | "started" | "completed" | "canceled";
|
|
188
|
+
export interface IssueStartContextResponse {
|
|
189
|
+
issue: {
|
|
190
|
+
id: string;
|
|
191
|
+
identifier: string;
|
|
192
|
+
state: {
|
|
193
|
+
id: string;
|
|
194
|
+
name: string;
|
|
195
|
+
type: WorkflowStateType;
|
|
196
|
+
} | null;
|
|
197
|
+
team: {
|
|
198
|
+
id: string;
|
|
199
|
+
key: string;
|
|
200
|
+
name: string;
|
|
201
|
+
} | null;
|
|
202
|
+
delegate: AssigneeNode | null;
|
|
203
|
+
} | null;
|
|
204
|
+
}
|
|
205
|
+
export interface TeamStartedStatusesResponse {
|
|
206
|
+
team: {
|
|
207
|
+
states: {
|
|
208
|
+
nodes: {
|
|
209
|
+
id: string;
|
|
210
|
+
name: string;
|
|
211
|
+
position: number;
|
|
212
|
+
}[];
|
|
213
|
+
};
|
|
214
|
+
} | null;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Issue summary returned by `GET_ISSUE_RELATIONS_QUERY` on the
|
|
218
|
+
* `relatedIssue` / `issue` peer of each relation. Smaller than
|
|
219
|
+
* `IssueNode` — just enough to display a sidebar entry.
|
|
220
|
+
*/
|
|
221
|
+
export interface RelationPeerNode {
|
|
222
|
+
id: string;
|
|
223
|
+
identifier: string;
|
|
224
|
+
title: string;
|
|
225
|
+
state: {
|
|
226
|
+
id: string;
|
|
227
|
+
name: string;
|
|
228
|
+
} | null;
|
|
229
|
+
priority: LinearPriority | null;
|
|
230
|
+
assignee: {
|
|
231
|
+
id: string;
|
|
232
|
+
name: string;
|
|
233
|
+
} | null;
|
|
234
|
+
team: {
|
|
235
|
+
id: string;
|
|
236
|
+
key: string;
|
|
237
|
+
name: string;
|
|
238
|
+
} | null;
|
|
239
|
+
}
|
|
240
|
+
export interface RelationOutgoingNode {
|
|
241
|
+
id: string;
|
|
242
|
+
type: string;
|
|
243
|
+
relatedIssue: RelationPeerNode | null;
|
|
244
|
+
}
|
|
245
|
+
export interface RelationIncomingNode {
|
|
246
|
+
id: string;
|
|
247
|
+
type: string;
|
|
248
|
+
issue: RelationPeerNode | null;
|
|
249
|
+
}
|
|
250
|
+
export interface BatchResolveProjectMilestoneRef {
|
|
251
|
+
id: string;
|
|
252
|
+
name: string;
|
|
253
|
+
}
|
|
254
|
+
interface BatchResolveProjectNode {
|
|
255
|
+
id: string;
|
|
256
|
+
name: string;
|
|
257
|
+
/** Present on `BATCH_RESOLVE_FOR_CREATE_QUERY`. */
|
|
258
|
+
teams?: {
|
|
259
|
+
nodes: {
|
|
260
|
+
id: string;
|
|
261
|
+
key: string;
|
|
262
|
+
}[];
|
|
263
|
+
};
|
|
264
|
+
/** Present on `BATCH_RESOLVE_FOR_CREATE_QUERY` and `BATCH_RESOLVE_FOR_UPDATE_QUERY`. */
|
|
265
|
+
projectMilestones?: {
|
|
266
|
+
nodes: BatchResolveProjectMilestoneRef[];
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
export interface BatchResolveLabelNode {
|
|
270
|
+
id: string;
|
|
271
|
+
name: string;
|
|
272
|
+
isGroup: boolean;
|
|
273
|
+
team: {
|
|
274
|
+
id: string;
|
|
275
|
+
} | null;
|
|
276
|
+
}
|
|
277
|
+
interface BatchResolveIssueForUpdate {
|
|
278
|
+
id: string;
|
|
279
|
+
identifier: string;
|
|
280
|
+
team: {
|
|
281
|
+
id: string;
|
|
282
|
+
key: string;
|
|
283
|
+
} | null;
|
|
284
|
+
labels: {
|
|
285
|
+
nodes: {
|
|
286
|
+
id: string;
|
|
287
|
+
name: string;
|
|
288
|
+
}[];
|
|
289
|
+
};
|
|
290
|
+
project: {
|
|
291
|
+
id: string;
|
|
292
|
+
projectMilestones: {
|
|
293
|
+
nodes: BatchResolveProjectMilestoneRef[];
|
|
294
|
+
};
|
|
295
|
+
} | null;
|
|
296
|
+
}
|
|
297
|
+
export interface BatchResolveForCreateResponse {
|
|
298
|
+
teams: {
|
|
299
|
+
nodes: {
|
|
300
|
+
id: string;
|
|
301
|
+
key: string;
|
|
302
|
+
name: string;
|
|
303
|
+
}[];
|
|
304
|
+
};
|
|
305
|
+
projectsByName?: {
|
|
306
|
+
nodes: BatchResolveProjectNode[];
|
|
307
|
+
};
|
|
308
|
+
projectsById?: {
|
|
309
|
+
nodes: BatchResolveProjectNode[];
|
|
310
|
+
};
|
|
311
|
+
milestones?: {
|
|
312
|
+
nodes: BatchResolveProjectMilestoneRef[];
|
|
313
|
+
};
|
|
314
|
+
parentIssues: {
|
|
315
|
+
nodes: {
|
|
316
|
+
id: string;
|
|
317
|
+
identifier: string;
|
|
318
|
+
}[];
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
export interface BatchResolveForSearchResponse {
|
|
322
|
+
delegates?: {
|
|
323
|
+
nodes: {
|
|
324
|
+
id: string;
|
|
325
|
+
name: string;
|
|
326
|
+
email: string;
|
|
327
|
+
}[];
|
|
328
|
+
};
|
|
329
|
+
teams: {
|
|
330
|
+
nodes: {
|
|
331
|
+
id: string;
|
|
332
|
+
key: string;
|
|
333
|
+
name: string;
|
|
334
|
+
}[];
|
|
335
|
+
};
|
|
336
|
+
projects?: {
|
|
337
|
+
nodes: BatchResolveProjectNode[];
|
|
338
|
+
};
|
|
339
|
+
users: {
|
|
340
|
+
nodes: {
|
|
341
|
+
id: string;
|
|
342
|
+
name: string;
|
|
343
|
+
email: string;
|
|
344
|
+
}[];
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
export interface BatchResolveForUpdateResponse {
|
|
348
|
+
projectsByName?: {
|
|
349
|
+
nodes: BatchResolveProjectNode[];
|
|
350
|
+
};
|
|
351
|
+
projectsById?: {
|
|
352
|
+
nodes: BatchResolveProjectNode[];
|
|
353
|
+
};
|
|
354
|
+
milestones?: {
|
|
355
|
+
nodes: BatchResolveProjectMilestoneRef[];
|
|
356
|
+
};
|
|
357
|
+
issues: {
|
|
358
|
+
nodes: BatchResolveIssueForUpdate[];
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
export interface ResolveLabelsByNameResponse {
|
|
362
|
+
labels: {
|
|
363
|
+
nodes: BatchResolveLabelNode[];
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Merged blob threaded through the field-resolution helpers. All
|
|
368
|
+
* fields are optional because the helpers don't know which batch
|
|
369
|
+
* query produced the result — they read only what they need.
|
|
370
|
+
*/
|
|
371
|
+
export interface BatchResolveResult {
|
|
372
|
+
teams?: {
|
|
373
|
+
nodes: {
|
|
374
|
+
id: string;
|
|
375
|
+
key: string;
|
|
376
|
+
name: string;
|
|
377
|
+
}[];
|
|
378
|
+
};
|
|
379
|
+
projects?: {
|
|
380
|
+
nodes: BatchResolveProjectNode[];
|
|
381
|
+
};
|
|
382
|
+
milestones?: {
|
|
383
|
+
nodes: BatchResolveProjectMilestoneRef[];
|
|
384
|
+
};
|
|
385
|
+
parentIssues?: {
|
|
386
|
+
nodes: {
|
|
387
|
+
id: string;
|
|
388
|
+
identifier: string;
|
|
389
|
+
}[];
|
|
390
|
+
};
|
|
391
|
+
users?: {
|
|
392
|
+
nodes: {
|
|
393
|
+
id: string;
|
|
394
|
+
name: string;
|
|
395
|
+
email: string;
|
|
396
|
+
}[];
|
|
397
|
+
};
|
|
398
|
+
delegates?: {
|
|
399
|
+
nodes: {
|
|
400
|
+
id: string;
|
|
401
|
+
name: string;
|
|
402
|
+
email: string;
|
|
403
|
+
}[];
|
|
404
|
+
};
|
|
405
|
+
issues?: {
|
|
406
|
+
nodes: BatchResolveIssueForUpdate[];
|
|
407
|
+
};
|
|
408
|
+
labels?: {
|
|
409
|
+
nodes: BatchResolveLabelNode[];
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
/** Response shape for `GET_ISSUE_RELATIONS_QUERY`. */
|
|
413
|
+
export interface GetIssueRelationsResponse {
|
|
414
|
+
issue: {
|
|
415
|
+
id: string;
|
|
416
|
+
identifier: string;
|
|
417
|
+
title: string;
|
|
418
|
+
description: string | null;
|
|
419
|
+
relations: {
|
|
420
|
+
nodes: RelationOutgoingNode[];
|
|
421
|
+
};
|
|
422
|
+
inverseRelations: {
|
|
423
|
+
nodes: RelationIncomingNode[];
|
|
424
|
+
};
|
|
425
|
+
} | null;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Response shape for `ISSUE_RELATION_CREATE_MUTATION`. The relation
|
|
429
|
+
* carries both `issue` and `relatedIssue` peers because the caller
|
|
430
|
+
* decides which side to display based on `reverse`.
|
|
431
|
+
*/
|
|
432
|
+
export interface IssueRelationCreateResponse {
|
|
433
|
+
issueRelationCreate: {
|
|
434
|
+
success: boolean;
|
|
435
|
+
issueRelation: {
|
|
436
|
+
id: string;
|
|
437
|
+
type: string;
|
|
438
|
+
issue: {
|
|
439
|
+
id: string;
|
|
440
|
+
identifier: string;
|
|
441
|
+
title: string;
|
|
442
|
+
};
|
|
443
|
+
relatedIssue: {
|
|
444
|
+
id: string;
|
|
445
|
+
identifier: string;
|
|
446
|
+
title: string;
|
|
447
|
+
};
|
|
448
|
+
} | null;
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
/** Response shape for `SCAN_ISSUES_QUERY`. */
|
|
452
|
+
export interface ScanIssuesResponse {
|
|
453
|
+
issues: {
|
|
454
|
+
nodes: {
|
|
455
|
+
id: string;
|
|
456
|
+
identifier: string;
|
|
457
|
+
description: string | null;
|
|
458
|
+
}[];
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
interface IssueStateSpanNode {
|
|
462
|
+
state: {
|
|
463
|
+
id: string;
|
|
464
|
+
name: string;
|
|
465
|
+
type: string;
|
|
466
|
+
};
|
|
467
|
+
startedAt: string;
|
|
468
|
+
endedAt: string | null;
|
|
469
|
+
}
|
|
470
|
+
/** Response shape for `GET_ISSUE_STATE_HISTORY_QUERY`. */
|
|
471
|
+
export interface GetIssueStateHistoryResponse {
|
|
472
|
+
issue: {
|
|
473
|
+
id: string;
|
|
474
|
+
identifier: string;
|
|
475
|
+
title: string;
|
|
476
|
+
stateHistory: {
|
|
477
|
+
nodes: IssueStateSpanNode[];
|
|
478
|
+
};
|
|
479
|
+
} | null;
|
|
480
|
+
}
|
|
481
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed response shapes for the GraphQL queries in `./issues.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Pre-fix, every consumer used `GraphQLResponseData` (a recursive
|
|
5
|
+
* `Record<string, unknown>`) and re-cast every field with `as
|
|
6
|
+
* string` / `as GraphQLResponseData`. A renamed Linear field would
|
|
7
|
+
* silently produce `undefined` at runtime; transformers had no
|
|
8
|
+
* compile-time check that they were reading the fields the queries
|
|
9
|
+
* actually requested.
|
|
10
|
+
*
|
|
11
|
+
* These interfaces mirror the shape of `COMPLETE_ISSUE_FRAGMENT` /
|
|
12
|
+
* `COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT` (defined in
|
|
13
|
+
* `./common.ts`) so the transformer can consume a typed node and
|
|
14
|
+
* the compiler catches drift between query and consumer.
|
|
15
|
+
*
|
|
16
|
+
* Pattern for adding new types: define a `Foo` node interface +
|
|
17
|
+
* a `GetFooResponse` (or list-shape) wrapper. Co-locate them in
|
|
18
|
+
* this file or a sibling `*-types.ts` so they live next to the
|
|
19
|
+
* query string.
|
|
20
|
+
*
|
|
21
|
+
* Refs ALL-937.
|
|
22
|
+
*/
|
|
23
|
+
export {};
|
package/dist/queries/issues.d.ts
CHANGED
|
@@ -1,13 +1,52 @@
|
|
|
1
|
-
export declare const GET_ISSUES_QUERY = "\n query GetIssues($first: Int!, $orderBy: PaginationOrderBy) {\n issues(\n first: $first\n orderBy: $orderBy\n filter: {\n state: { type: { neq: \"completed\" } }\n }\n ) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
|
|
2
|
-
export declare const SEARCH_ISSUES_QUERY = "\n query SearchIssues($term: String!, $first: Int!) {\n searchIssues(term: $term, first: $first, includeArchived: false) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
|
|
3
|
-
export declare const FILTERED_SEARCH_ISSUES_QUERY = "\n query FilteredSearchIssues(\n $first: Int!\n $filter: IssueFilter\n $orderBy: PaginationOrderBy\n ) {\n issues(\n first: $first\n filter: $filter\n orderBy: $orderBy\n includeArchived: false\n ) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
export declare const GET_ISSUES_QUERY = "\n query GetIssues($first: Int!, $orderBy: PaginationOrderBy) {\n issues(\n first: $first\n orderBy: $orderBy\n filter: {\n state: { type: { neq: \"completed\" } }\n }\n ) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
|
|
2
|
+
export declare const SEARCH_ISSUES_QUERY = "\n query SearchIssues($term: String!, $first: Int!) {\n searchIssues(term: $term, first: $first, includeArchived: false) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
|
|
3
|
+
export declare const FILTERED_SEARCH_ISSUES_QUERY = "\n query FilteredSearchIssues(\n $first: Int!\n $filter: IssueFilter\n $orderBy: PaginationOrderBy\n ) {\n issues(\n first: $first\n filter: $filter\n orderBy: $orderBy\n includeArchived: false\n ) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
|
|
4
|
+
/**
|
|
5
|
+
* Batch-resolves a search's team/project/assignee/delegate filter inputs.
|
|
6
|
+
*
|
|
7
|
+
* The `projects` block is `@include`-gated: Linear treats a null filter
|
|
8
|
+
* comparator as "no filter", so an always-on block with an unset
|
|
9
|
+
* `$projectName` would fetch an arbitrary project. (Search resolves a UUID
|
|
10
|
+
* `--project` directly without consulting this block, so only the
|
|
11
|
+
* name-resolution arm is needed here.)
|
|
12
|
+
*/
|
|
13
|
+
export declare const BATCH_RESOLVE_FOR_SEARCH_QUERY = "\n query BatchResolveForSearch(\n $teamKey: String\n $teamName: String\n $projectName: String\n $hasProjectName: Boolean = false\n $assigneeEmail: String\n $delegateEmail: String\n ) {\n teams(\n filter: {\n or: [\n { key: { eq: $teamKey } }\n { name: { eqIgnoreCase: $teamName } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n key\n name\n }\n }\n\n projects(\n filter: { name: { eqIgnoreCase: $projectName } }\n first: 1\n ) @include(if: $hasProjectName) {\n nodes {\n id\n name\n }\n }\n\n users(filter: { email: { eq: $assigneeEmail } }, first: 1) {\n nodes {\n id\n name\n email\n }\n }\n\n delegates: users(filter: { email: { eq: $delegateEmail } }, first: 1) {\n nodes {\n id\n name\n email\n }\n }\n }\n";
|
|
14
|
+
export declare const GET_ISSUE_BY_ID_QUERY = "\n query GetIssue($id: String!) {\n issue(id: $id) {\n \n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n \n comments {\n nodes {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n url\n }\n }\n }\n\n\n }\n }\n";
|
|
15
|
+
export declare const GET_ISSUE_BY_IDENTIFIER_QUERY = "\n query GetIssueByIdentifier($teamKey: String!, $number: Float!) {\n issues(\n filter: {\n team: { key: { eq: $teamKey } }\n number: { eq: $number }\n }\n first: 1\n ) {\n nodes {\n \n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n \n comments {\n nodes {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n url\n }\n }\n }\n\n\n }\n }\n }\n";
|
|
16
|
+
/**
|
|
17
|
+
* Batch-resolves an update's project/milestone/issue inputs.
|
|
18
|
+
*
|
|
19
|
+
* The project and milestone blocks are `@include`-gated for the same
|
|
20
|
+
* reason as `BATCH_RESOLVE_FOR_CREATE_QUERY`: a null filter comparator is
|
|
21
|
+
* a no-op that returns an arbitrary record. A UUID `--project` is resolved
|
|
22
|
+
* by `id` (`projectsById`) so its milestones are still fetched for
|
|
23
|
+
* `--project-milestone` name resolution; a name uses `projectsByName`.
|
|
24
|
+
*/
|
|
25
|
+
export declare const BATCH_RESOLVE_FOR_UPDATE_QUERY = "\n query BatchResolveForUpdate(\n $projectName: String\n $projectId: ID\n $hasProjectName: Boolean = false\n $hasProjectId: Boolean = false\n $teamKey: String\n $issueNumber: Float\n $milestoneName: String\n $hasMilestoneName: Boolean = false\n ) {\n projectsByName: projects(\n filter: { name: { eqIgnoreCase: $projectName } }\n first: 1\n ) @include(if: $hasProjectName) {\n nodes {\n id\n name\n projectMilestones {\n nodes {\n id\n name\n }\n }\n }\n }\n\n projectsById: projects(\n filter: { id: { eq: $projectId } }\n first: 1\n ) @include(if: $hasProjectId) {\n nodes {\n id\n name\n projectMilestones {\n nodes {\n id\n name\n }\n }\n }\n }\n\n milestones: projectMilestones(\n filter: { name: { eq: $milestoneName } }\n first: 1\n ) @include(if: $hasMilestoneName) {\n nodes {\n id\n name\n }\n }\n\n issues(\n filter: {\n and: [\n { team: { key: { eq: $teamKey } } }\n { number: { eq: $issueNumber } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n identifier\n team {\n id\n key\n }\n labels {\n nodes {\n id\n name\n }\n }\n project {\n id\n projectMilestones {\n nodes {\n id\n name\n }\n }\n }\n }\n }\n }\n";
|
|
26
|
+
export declare const CREATE_ISSUE_MUTATION = "\n mutation CreateIssue($input: IssueCreateInput!) {\n issueCreate(input: $input) {\n success\n issue {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
|
|
27
|
+
export declare const UPDATE_ISSUE_MUTATION = "\n mutation UpdateIssue($id: String!, $input: IssueUpdateInput!) {\n issueUpdate(id: $id, input: $input) {\n success\n issue {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
|
|
28
|
+
export declare const ARCHIVE_ISSUE_MUTATION = "\n mutation ArchiveIssue($id: String!) {\n issueArchive(id: $id) {\n success\n lastSyncId\n entity {\n id\n }\n }\n }\n";
|
|
29
|
+
export declare const DELETE_ISSUE_MUTATION = "\n mutation DeleteIssue($id: String!, $permanentlyDelete: Boolean) {\n issueDelete(id: $id, permanentlyDelete: $permanentlyDelete) {\n success\n lastSyncId\n entity {\n id\n }\n }\n }\n";
|
|
30
|
+
/**
|
|
31
|
+
* Batch-resolves a create's team/project/milestone/parent inputs in one
|
|
32
|
+
* round-trip.
|
|
33
|
+
*
|
|
34
|
+
* The project and milestone blocks are gated behind `@include` directives
|
|
35
|
+
* rather than left always-on. Linear treats a null filter comparator
|
|
36
|
+
* (`{ name: { eqIgnoreCase: null } }`) as "no filter" — so an always-on
|
|
37
|
+
* `projects` block with an unset `$projectName` returns an *arbitrary*
|
|
38
|
+
* project, which the caller would then mistake for the user's project
|
|
39
|
+
* (e.g. auto-switching the team to that unrelated project's team). The
|
|
40
|
+
* `has*` booleans ensure a block is fetched only when its input exists.
|
|
41
|
+
*
|
|
42
|
+
* A UUID `--project` is resolved by `id` (`projectsById`) so its team
|
|
43
|
+
* associations are still fetched for team-project validation; a name is
|
|
44
|
+
* resolved by `name` (`projectsByName`). The two are mutually exclusive,
|
|
45
|
+
* but GraphQL forbids two same-aliased fields with differing arguments,
|
|
46
|
+
* so they carry distinct aliases and the service folds whichever ran
|
|
47
|
+
* into `resolveResult.projects`.
|
|
48
|
+
*/
|
|
49
|
+
export declare const BATCH_RESOLVE_FOR_CREATE_QUERY = "\n query BatchResolveForCreate(\n $teamKey: String\n $teamName: String\n $projectName: String\n $projectId: ID\n $hasProjectName: Boolean = false\n $hasProjectId: Boolean = false\n $parentTeamKey: String\n $parentIssueNumber: Float\n $milestoneName: String\n $hasMilestoneName: Boolean = false\n ) {\n teams(\n filter: {\n or: [\n { key: { eq: $teamKey } }\n { name: { eqIgnoreCase: $teamName } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n key\n name\n }\n }\n\n projectsByName: projects(\n filter: { name: { eqIgnoreCase: $projectName } }\n first: 1\n ) @include(if: $hasProjectName) {\n nodes {\n id\n name\n teams {\n nodes { id key }\n }\n projectMilestones {\n nodes { id name }\n }\n }\n }\n\n projectsById: projects(\n filter: { id: { eq: $projectId } }\n first: 1\n ) @include(if: $hasProjectId) {\n nodes {\n id\n name\n teams {\n nodes { id key }\n }\n projectMilestones {\n nodes { id name }\n }\n }\n }\n\n milestones: projectMilestones(\n filter: { name: { eq: $milestoneName } }\n first: 1\n ) @include(if: $hasMilestoneName) {\n nodes {\n id\n name\n }\n }\n\n parentIssues: issues(\n filter: {\n and: [\n { team: { key: { eq: $parentTeamKey } } }\n { number: { eq: $parentIssueNumber } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n identifier\n }\n }\n }\n";
|
|
11
50
|
/**
|
|
12
51
|
* Build a label-resolution query filtered by names (case-insensitive).
|
|
13
52
|
* Uses `or` + `eqIgnoreCase` since Linear's `in` filter may be case-sensitive.
|
|
@@ -18,6 +57,8 @@ export declare function buildResolveLabelsByNameQuery(labelNames: string[]): {
|
|
|
18
57
|
};
|
|
19
58
|
export declare const GET_ISSUE_STATE_HISTORY_QUERY = "\n query GetIssueStateHistory($id: String!) {\n issue(id: $id) {\n id\n identifier\n title\n stateHistory {\n nodes {\n state { id name type }\n startedAt\n endedAt\n }\n }\n }\n }\n";
|
|
20
59
|
export declare const GET_ISSUE_TEAM_QUERY = "\n query GetIssueTeam($issueId: String!) {\n issue(id: $issueId) {\n team { id }\n }\n }\n";
|
|
60
|
+
export declare const GET_ISSUE_START_CONTEXT_QUERY = "\n query GetIssueStartContext($id: String!) {\n issue(id: $id) {\n id\n identifier\n state { id name type }\n team { id key name }\n delegate { id name url }\n }\n }\n";
|
|
61
|
+
export declare const TEAM_STARTED_STATUSES_QUERY = "\n query TeamStartedStatuses($teamId: String!) {\n team(id: $teamId) {\n states(filter: { type: { eq: \"started\" } }) {\n nodes {\n id\n name\n position\n }\n }\n }\n }\n";
|
|
21
62
|
export declare const ISSUE_RELATION_CREATE_MUTATION = "\n mutation IssueRelationCreate($input: IssueRelationCreateInput!) {\n issueRelationCreate(input: $input) {\n success\n issueRelation {\n id\n type\n issue {\n id\n identifier\n title\n }\n relatedIssue {\n id\n identifier\n title\n }\n }\n }\n }\n";
|
|
22
63
|
export declare const GET_ISSUE_RELATIONS_QUERY = "\n query GetIssueRelations($id: String!) {\n issue(id: $id) {\n id\n identifier\n title\n description\n relations {\n nodes {\n id\n type\n relatedIssue {\n id\n identifier\n title\n state { id name }\n priority\n assignee { id name }\n team { id key name }\n }\n }\n }\n inverseRelations {\n nodes {\n id\n type\n issue {\n id\n identifier\n title\n state { id name }\n priority\n assignee { id name }\n team { id key name }\n }\n }\n }\n }\n }\n";
|
|
23
64
|
export declare const SCAN_ISSUES_QUERY = "\n query ScanIssues($filter: IssueFilter, $first: Int) {\n issues(filter: $filter, first: $first, orderBy: updatedAt) {\n nodes { id identifier description }\n }\n }\n";
|