@relayfile/adapter-linear 0.1.9 → 0.1.11

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 CHANGED
@@ -2,4 +2,5 @@ export * from './linear-adapter.js';
2
2
  export * from './path-mapper.js';
3
3
  export * from './webhook-normalizer.js';
4
4
  export * from './types.js';
5
+ export * from './queries.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -3,4 +3,5 @@ export * from './linear-adapter.js';
3
3
  export * from './path-mapper.js';
4
4
  export * from './webhook-normalizer.js';
5
5
  export * from './types.js';
6
+ export * from './queries.js';
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,149 @@
1
+ export declare const LINEAR_ISSUE_FIELDS = "\n id\n identifier\n title\n description\n url\n priority\n estimate\n dueDate\n createdAt\n updatedAt\n state {\n id\n name\n type\n color\n }\n assignee {\n id\n name\n displayName\n email\n avatarUrl\n url\n }\n creator {\n id\n name\n displayName\n email\n avatarUrl\n url\n }\n team {\n id\n key\n name\n }\n project {\n id\n name\n state\n url\n }\n cycle {\n id\n number\n name\n }\n labels(first: 20) {\n nodes {\n id\n name\n color\n }\n }\n";
2
+ export declare const LINEAR_PROJECT_FIELDS = "\n id\n name\n description\n state\n progress\n startDate\n targetDate\n url\n createdAt\n updatedAt\n lead {\n id\n name\n email\n }\n status {\n id\n name\n type\n color\n }\n teams(first: 20) {\n nodes {\n id\n key\n name\n }\n }\n";
3
+ export declare const LINEAR_COMMENT_FIELDS = "\n id\n body\n url\n issue {\n id\n identifier\n title\n url\n }\n user {\n id\n name\n displayName\n email\n }\n createdAt\n updatedAt\n";
4
+ export declare const LINEAR_TEAM_FIELDS = "\n id\n name\n key\n description\n color\n icon\n private\n createdAt\n updatedAt\n archivedAt\n";
5
+ export declare const LINEAR_USER_FIELDS = "\n id\n name\n displayName\n email\n admin\n active\n avatarUrl\n createdAt\n updatedAt\n";
6
+ export declare const LINEAR_LIST_ISSUES_QUERY = "\n query ListIssues(\n $first: Int\n $after: String\n $filter: IssueFilter\n $orderBy: PaginationOrderBy\n ) {\n issues(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {\n nodes {\n\n id\n identifier\n title\n description\n url\n priority\n estimate\n dueDate\n createdAt\n updatedAt\n state {\n id\n name\n type\n color\n }\n assignee {\n id\n name\n displayName\n email\n avatarUrl\n url\n }\n creator {\n id\n name\n displayName\n email\n avatarUrl\n url\n }\n team {\n id\n key\n name\n }\n project {\n id\n name\n state\n url\n }\n cycle {\n id\n number\n name\n }\n labels(first: 20) {\n nodes {\n id\n name\n color\n }\n }\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n";
7
+ export declare const LINEAR_SEARCH_ISSUES_QUERY = "\n query SearchIssues($term: String!, $first: Int) {\n searchIssues(term: $term, first: $first) {\n nodes {\n\n id\n identifier\n title\n description\n url\n priority\n estimate\n dueDate\n createdAt\n updatedAt\n state {\n id\n name\n type\n color\n }\n assignee {\n id\n name\n displayName\n email\n avatarUrl\n url\n }\n creator {\n id\n name\n displayName\n email\n avatarUrl\n url\n }\n team {\n id\n key\n name\n }\n project {\n id\n name\n state\n url\n }\n cycle {\n id\n number\n name\n }\n labels(first: 20) {\n nodes {\n id\n name\n color\n }\n }\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n";
8
+ export declare const LINEAR_GET_ISSUE_QUERY = "\n query GetIssue($id: String!) {\n issue(id: $id) {\n\n id\n identifier\n title\n description\n url\n priority\n estimate\n dueDate\n createdAt\n updatedAt\n state {\n id\n name\n type\n color\n }\n assignee {\n id\n name\n displayName\n email\n avatarUrl\n url\n }\n creator {\n id\n name\n displayName\n email\n avatarUrl\n url\n }\n team {\n id\n key\n name\n }\n project {\n id\n name\n state\n url\n }\n cycle {\n id\n number\n name\n }\n labels(first: 20) {\n nodes {\n id\n name\n color\n }\n }\n\n }\n }\n";
9
+ export declare const LINEAR_LIST_PROJECTS_QUERY = "\n query ListProjects(\n $first: Int\n $after: String\n $filter: ProjectFilter\n $orderBy: PaginationOrderBy\n ) {\n projects(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {\n nodes {\n\n id\n name\n description\n state\n progress\n startDate\n targetDate\n url\n createdAt\n updatedAt\n lead {\n id\n name\n email\n }\n status {\n id\n name\n type\n color\n }\n teams(first: 20) {\n nodes {\n id\n key\n name\n }\n }\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n";
10
+ export declare const LINEAR_LIST_COMMENTS_QUERY = "\n query ListComments($id: String!, $first: Int, $after: String) {\n issue(id: $id) {\n comments(first: $first, after: $after) {\n nodes {\n\n id\n body\n url\n issue {\n id\n identifier\n title\n url\n }\n user {\n id\n name\n displayName\n email\n }\n createdAt\n updatedAt\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n }\n";
11
+ export declare const LINEAR_LIST_TEAMS_QUERY = "\n query ListTeams(\n $first: Int\n $after: String\n $filter: TeamFilter\n $orderBy: PaginationOrderBy\n ) {\n teams(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {\n nodes {\n\n id\n name\n key\n description\n color\n icon\n private\n createdAt\n updatedAt\n archivedAt\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n";
12
+ export declare const LINEAR_LIST_USERS_QUERY = "\n query ListUsers(\n $first: Int\n $after: String\n $filter: UserFilter\n $orderBy: PaginationOrderBy\n ) {\n users(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {\n nodes {\n\n id\n name\n displayName\n email\n admin\n active\n avatarUrl\n createdAt\n updatedAt\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n";
13
+ export declare const LINEAR_LIST_MILESTONES_QUERY = "\n query ListMilestones(\n $first: Int\n $after: String\n $filter: ProjectMilestoneFilter\n $orderBy: PaginationOrderBy\n ) {\n projectMilestones(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {\n nodes {\n\n id\n name\n progress\n description\n status\n targetDate\n project {\n id\n name\n }\n createdAt\n updatedAt\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n";
14
+ export declare const LINEAR_LIST_ROADMAPS_QUERY = "\n query ListRoadmaps($first: Int, $after: String, $orderBy: PaginationOrderBy) {\n roadmaps(first: $first, after: $after, orderBy: $orderBy) {\n nodes {\n\n id\n name\n description\n updatedAt\n createdAt\n archivedAt\n color\n slugId\n sortOrder\n url\n creator {\n id\n }\n owner {\n id\n }\n projects(first: 25) {\n nodes {\n id\n teams(first: 10) {\n nodes {\n id\n }\n }\n }\n }\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n";
15
+ export declare const LINEAR_FETCH_ACTIVE_ISSUES_QUERY = "\n query FetchActiveIssues($after: String, $updatedAfter: DateTimeOrDuration!) {\n issues(\n filter: {\n state: { type: { nin: [\"canceled\", \"done\"] } }\n updatedAt: { gt: $updatedAfter }\n }\n first: 100\n after: $after\n orderBy: updatedAt\n ) {\n nodes {\n\n id\n identifier\n title\n description\n state {\n name\n type\n }\n priority\n assignee {\n name\n }\n url\n createdAt\n updatedAt\n\n }\n pageInfo {\n\n hasNextPage\n endCursor\n\n }\n }\n }\n";
16
+ export interface LinearPageInfo {
17
+ hasNextPage?: boolean;
18
+ endCursor?: string | null;
19
+ }
20
+ export interface LinearConnection<TNode> {
21
+ nodes?: TNode[];
22
+ pageInfo?: LinearPageInfo;
23
+ }
24
+ export interface LinearIssueStateNode {
25
+ id?: string | null;
26
+ name?: string | null;
27
+ type?: string | null;
28
+ color?: string | null;
29
+ }
30
+ export interface LinearUserReferenceNode {
31
+ id?: string | null;
32
+ name?: string | null;
33
+ displayName?: string | null;
34
+ email?: string | null;
35
+ avatarUrl?: string | null;
36
+ url?: string | null;
37
+ }
38
+ export interface LinearTeamReferenceNode {
39
+ id?: string | null;
40
+ key?: string | null;
41
+ name?: string | null;
42
+ }
43
+ export interface LinearProjectReferenceNode {
44
+ id?: string | null;
45
+ name?: string | null;
46
+ state?: string | null;
47
+ url?: string | null;
48
+ }
49
+ export interface LinearCycleReferenceNode {
50
+ id?: string | null;
51
+ number?: number | null;
52
+ name?: string | null;
53
+ }
54
+ export interface LinearLabelReferenceNode {
55
+ id?: string | null;
56
+ name?: string | null;
57
+ color?: string | null;
58
+ }
59
+ export interface LinearIssueFilterInput {
60
+ state?: string[];
61
+ labels?: string[];
62
+ assignee?: string;
63
+ team?: string;
64
+ project?: string;
65
+ updatedAfter?: string;
66
+ }
67
+ export interface LinearIssueNode {
68
+ id: string;
69
+ identifier?: string | null;
70
+ title?: string | null;
71
+ description?: string | null;
72
+ state?: LinearIssueStateNode | null;
73
+ priority?: number | null;
74
+ estimate?: number | null;
75
+ dueDate?: string | null;
76
+ assignee?: LinearUserReferenceNode | null;
77
+ creator?: LinearUserReferenceNode | null;
78
+ team?: LinearTeamReferenceNode | null;
79
+ project?: LinearProjectReferenceNode | null;
80
+ cycle?: LinearCycleReferenceNode | null;
81
+ labels?: {
82
+ nodes?: Array<LinearLabelReferenceNode>;
83
+ } | null;
84
+ url?: string | null;
85
+ createdAt?: string | null;
86
+ updatedAt?: string | null;
87
+ }
88
+ export interface LinearProjectNode {
89
+ id: string;
90
+ name?: string | null;
91
+ description?: string | null;
92
+ state?: string | null;
93
+ progress?: number | null;
94
+ startDate?: string | null;
95
+ targetDate?: string | null;
96
+ lead?: {
97
+ id?: string | null;
98
+ name?: string | null;
99
+ email?: string | null;
100
+ } | null;
101
+ status?: {
102
+ id?: string | null;
103
+ name?: string | null;
104
+ type?: string | null;
105
+ color?: string | null;
106
+ } | null;
107
+ teams?: {
108
+ nodes?: Array<{
109
+ id?: string | null;
110
+ key?: string | null;
111
+ name?: string | null;
112
+ }>;
113
+ } | null;
114
+ url?: string | null;
115
+ createdAt?: string | null;
116
+ updatedAt?: string | null;
117
+ }
118
+ export interface LinearCommentNode {
119
+ id: string;
120
+ body?: string | null;
121
+ issue?: {
122
+ id?: string | null;
123
+ identifier?: string | null;
124
+ title?: string | null;
125
+ url?: string | null;
126
+ } | null;
127
+ user?: {
128
+ id?: string | null;
129
+ name?: string | null;
130
+ email?: string | null;
131
+ displayName?: string | null;
132
+ } | null;
133
+ url?: string | null;
134
+ createdAt?: string | null;
135
+ updatedAt?: string | null;
136
+ }
137
+ export interface LinearGraphqlResponse<T> {
138
+ data?: T;
139
+ errors?: Array<{
140
+ message?: string;
141
+ path?: string[];
142
+ }>;
143
+ }
144
+ export declare function buildLinearIssueFilter(input: LinearIssueFilterInput): Record<string, unknown> | undefined;
145
+ export declare function buildLinearProjectFilter(input: {
146
+ team?: string;
147
+ updatedAfter?: string;
148
+ }): Record<string, unknown> | undefined;
149
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,415 @@
1
+ const LINEAR_PAGE_INFO_FIELDS = `
2
+ hasNextPage
3
+ endCursor
4
+ `;
5
+ const LINEAR_MILESTONE_FIELDS = `
6
+ id
7
+ name
8
+ progress
9
+ description
10
+ status
11
+ targetDate
12
+ project {
13
+ id
14
+ name
15
+ }
16
+ createdAt
17
+ updatedAt
18
+ `;
19
+ const LINEAR_ROADMAP_FIELDS = `
20
+ id
21
+ name
22
+ description
23
+ updatedAt
24
+ createdAt
25
+ archivedAt
26
+ color
27
+ slugId
28
+ sortOrder
29
+ url
30
+ creator {
31
+ id
32
+ }
33
+ owner {
34
+ id
35
+ }
36
+ projects(first: 25) {
37
+ nodes {
38
+ id
39
+ teams(first: 10) {
40
+ nodes {
41
+ id
42
+ }
43
+ }
44
+ }
45
+ }
46
+ `;
47
+ const LINEAR_ACTIVE_ISSUE_FIELDS = `
48
+ id
49
+ identifier
50
+ title
51
+ description
52
+ state {
53
+ name
54
+ type
55
+ }
56
+ priority
57
+ assignee {
58
+ name
59
+ }
60
+ url
61
+ createdAt
62
+ updatedAt
63
+ `;
64
+ const UPPERCASE_TEAM_KEY_PATTERN = /^[A-Z]+$/u;
65
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;
66
+ export const LINEAR_ISSUE_FIELDS = `
67
+ id
68
+ identifier
69
+ title
70
+ description
71
+ url
72
+ priority
73
+ estimate
74
+ dueDate
75
+ createdAt
76
+ updatedAt
77
+ state {
78
+ id
79
+ name
80
+ type
81
+ color
82
+ }
83
+ assignee {
84
+ id
85
+ name
86
+ displayName
87
+ email
88
+ avatarUrl
89
+ url
90
+ }
91
+ creator {
92
+ id
93
+ name
94
+ displayName
95
+ email
96
+ avatarUrl
97
+ url
98
+ }
99
+ team {
100
+ id
101
+ key
102
+ name
103
+ }
104
+ project {
105
+ id
106
+ name
107
+ state
108
+ url
109
+ }
110
+ cycle {
111
+ id
112
+ number
113
+ name
114
+ }
115
+ labels(first: 20) {
116
+ nodes {
117
+ id
118
+ name
119
+ color
120
+ }
121
+ }
122
+ `;
123
+ export const LINEAR_PROJECT_FIELDS = `
124
+ id
125
+ name
126
+ description
127
+ state
128
+ progress
129
+ startDate
130
+ targetDate
131
+ url
132
+ createdAt
133
+ updatedAt
134
+ lead {
135
+ id
136
+ name
137
+ email
138
+ }
139
+ status {
140
+ id
141
+ name
142
+ type
143
+ color
144
+ }
145
+ teams(first: 20) {
146
+ nodes {
147
+ id
148
+ key
149
+ name
150
+ }
151
+ }
152
+ `;
153
+ export const LINEAR_COMMENT_FIELDS = `
154
+ id
155
+ body
156
+ url
157
+ issue {
158
+ id
159
+ identifier
160
+ title
161
+ url
162
+ }
163
+ user {
164
+ id
165
+ name
166
+ displayName
167
+ email
168
+ }
169
+ createdAt
170
+ updatedAt
171
+ `;
172
+ export const LINEAR_TEAM_FIELDS = `
173
+ id
174
+ name
175
+ key
176
+ description
177
+ color
178
+ icon
179
+ private
180
+ createdAt
181
+ updatedAt
182
+ archivedAt
183
+ `;
184
+ export const LINEAR_USER_FIELDS = `
185
+ id
186
+ name
187
+ displayName
188
+ email
189
+ admin
190
+ active
191
+ avatarUrl
192
+ createdAt
193
+ updatedAt
194
+ `;
195
+ export const LINEAR_LIST_ISSUES_QUERY = `
196
+ query ListIssues(
197
+ $first: Int
198
+ $after: String
199
+ $filter: IssueFilter
200
+ $orderBy: PaginationOrderBy
201
+ ) {
202
+ issues(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {
203
+ nodes {
204
+ ${LINEAR_ISSUE_FIELDS}
205
+ }
206
+ pageInfo {
207
+ ${LINEAR_PAGE_INFO_FIELDS}
208
+ }
209
+ }
210
+ }
211
+ `;
212
+ export const LINEAR_SEARCH_ISSUES_QUERY = `
213
+ query SearchIssues($term: String!, $first: Int) {
214
+ searchIssues(term: $term, first: $first) {
215
+ nodes {
216
+ ${LINEAR_ISSUE_FIELDS}
217
+ }
218
+ pageInfo {
219
+ ${LINEAR_PAGE_INFO_FIELDS}
220
+ }
221
+ }
222
+ }
223
+ `;
224
+ export const LINEAR_GET_ISSUE_QUERY = `
225
+ query GetIssue($id: String!) {
226
+ issue(id: $id) {
227
+ ${LINEAR_ISSUE_FIELDS}
228
+ }
229
+ }
230
+ `;
231
+ export const LINEAR_LIST_PROJECTS_QUERY = `
232
+ query ListProjects(
233
+ $first: Int
234
+ $after: String
235
+ $filter: ProjectFilter
236
+ $orderBy: PaginationOrderBy
237
+ ) {
238
+ projects(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {
239
+ nodes {
240
+ ${LINEAR_PROJECT_FIELDS}
241
+ }
242
+ pageInfo {
243
+ ${LINEAR_PAGE_INFO_FIELDS}
244
+ }
245
+ }
246
+ }
247
+ `;
248
+ export const LINEAR_LIST_COMMENTS_QUERY = `
249
+ query ListComments($id: String!, $first: Int, $after: String) {
250
+ issue(id: $id) {
251
+ comments(first: $first, after: $after) {
252
+ nodes {
253
+ ${LINEAR_COMMENT_FIELDS}
254
+ }
255
+ pageInfo {
256
+ ${LINEAR_PAGE_INFO_FIELDS}
257
+ }
258
+ }
259
+ }
260
+ }
261
+ `;
262
+ export const LINEAR_LIST_TEAMS_QUERY = `
263
+ query ListTeams(
264
+ $first: Int
265
+ $after: String
266
+ $filter: TeamFilter
267
+ $orderBy: PaginationOrderBy
268
+ ) {
269
+ teams(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {
270
+ nodes {
271
+ ${LINEAR_TEAM_FIELDS}
272
+ }
273
+ pageInfo {
274
+ ${LINEAR_PAGE_INFO_FIELDS}
275
+ }
276
+ }
277
+ }
278
+ `;
279
+ export const LINEAR_LIST_USERS_QUERY = `
280
+ query ListUsers(
281
+ $first: Int
282
+ $after: String
283
+ $filter: UserFilter
284
+ $orderBy: PaginationOrderBy
285
+ ) {
286
+ users(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {
287
+ nodes {
288
+ ${LINEAR_USER_FIELDS}
289
+ }
290
+ pageInfo {
291
+ ${LINEAR_PAGE_INFO_FIELDS}
292
+ }
293
+ }
294
+ }
295
+ `;
296
+ export const LINEAR_LIST_MILESTONES_QUERY = `
297
+ query ListMilestones(
298
+ $first: Int
299
+ $after: String
300
+ $filter: ProjectMilestoneFilter
301
+ $orderBy: PaginationOrderBy
302
+ ) {
303
+ projectMilestones(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {
304
+ nodes {
305
+ ${LINEAR_MILESTONE_FIELDS}
306
+ }
307
+ pageInfo {
308
+ ${LINEAR_PAGE_INFO_FIELDS}
309
+ }
310
+ }
311
+ }
312
+ `;
313
+ export const LINEAR_LIST_ROADMAPS_QUERY = `
314
+ query ListRoadmaps($first: Int, $after: String, $orderBy: PaginationOrderBy) {
315
+ roadmaps(first: $first, after: $after, orderBy: $orderBy) {
316
+ nodes {
317
+ ${LINEAR_ROADMAP_FIELDS}
318
+ }
319
+ pageInfo {
320
+ ${LINEAR_PAGE_INFO_FIELDS}
321
+ }
322
+ }
323
+ }
324
+ `;
325
+ export const LINEAR_FETCH_ACTIVE_ISSUES_QUERY = `
326
+ query FetchActiveIssues($after: String, $updatedAfter: DateTimeOrDuration!) {
327
+ issues(
328
+ filter: {
329
+ state: { type: { nin: ["canceled", "done"] } }
330
+ updatedAt: { gt: $updatedAfter }
331
+ }
332
+ first: 100
333
+ after: $after
334
+ orderBy: updatedAt
335
+ ) {
336
+ nodes {
337
+ ${LINEAR_ACTIVE_ISSUE_FIELDS}
338
+ }
339
+ pageInfo {
340
+ ${LINEAR_PAGE_INFO_FIELDS}
341
+ }
342
+ }
343
+ }
344
+ `;
345
+ function normalizeString(value) {
346
+ if (typeof value !== 'string') {
347
+ return undefined;
348
+ }
349
+ const normalized = value.trim();
350
+ return normalized.length > 0 ? normalized : undefined;
351
+ }
352
+ function normalizeStringArray(values) {
353
+ if (!Array.isArray(values)) {
354
+ return [];
355
+ }
356
+ return values
357
+ .map((value) => normalizeString(value))
358
+ .filter((value) => value !== undefined);
359
+ }
360
+ function isUppercaseTeamKey(value) {
361
+ return UPPERCASE_TEAM_KEY_PATTERN.test(value);
362
+ }
363
+ export function buildLinearIssueFilter(input) {
364
+ const filter = {};
365
+ const states = normalizeStringArray(input.state);
366
+ if (states.length > 0) {
367
+ filter.state = { name: { in: states } };
368
+ }
369
+ const labels = normalizeStringArray(input.labels);
370
+ if (labels.length > 0) {
371
+ filter.labels = { some: { name: { in: labels } } };
372
+ }
373
+ const assignee = normalizeString(input.assignee);
374
+ if (assignee) {
375
+ filter.assignee = assignee.includes('@')
376
+ ? { email: { eq: assignee } }
377
+ : { id: { eq: assignee } };
378
+ }
379
+ const team = normalizeString(input.team);
380
+ if (team) {
381
+ filter.team = isUppercaseTeamKey(team)
382
+ ? { key: { eq: team } }
383
+ : UUID_PATTERN.test(team)
384
+ ? { id: { eq: team } }
385
+ : { name: { containsIgnoreCase: team } };
386
+ }
387
+ const project = normalizeString(input.project);
388
+ if (project) {
389
+ filter.project = { name: { containsIgnoreCase: project } };
390
+ }
391
+ const updatedAfter = normalizeString(input.updatedAfter);
392
+ if (updatedAfter) {
393
+ filter.updatedAt = { gte: updatedAfter };
394
+ }
395
+ return Object.keys(filter).length > 0 ? filter : undefined;
396
+ }
397
+ export function buildLinearProjectFilter(input) {
398
+ const filter = {};
399
+ const team = normalizeString(input.team);
400
+ if (team) {
401
+ filter.teams = {
402
+ some: isUppercaseTeamKey(team)
403
+ ? { key: { eq: team } }
404
+ : UUID_PATTERN.test(team)
405
+ ? { id: { eq: team } }
406
+ : { name: { containsIgnoreCase: team } }
407
+ };
408
+ }
409
+ const updatedAfter = normalizeString(input.updatedAfter);
410
+ if (updatedAfter) {
411
+ filter.updatedAt = { gte: updatedAfter };
412
+ }
413
+ return Object.keys(filter).length > 0 ? filter : undefined;
414
+ }
415
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queries.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.test.d.ts","sourceRoot":"","sources":["../src/queries.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { LINEAR_FETCH_ACTIVE_ISSUES_QUERY, LINEAR_ISSUE_FIELDS, LINEAR_LIST_ISSUES_QUERY, buildLinearIssueFilter, buildLinearProjectFilter, } from './index.js';
4
+ const TEAM_ID = '11111111-1111-1111-1111-111111111111';
5
+ function compactGraphql(query) {
6
+ return query.replace(/\s+/gu, '');
7
+ }
8
+ test('LINEAR_LIST_ISSUES_QUERY matches the expected GraphQL document', () => {
9
+ assert.equal(compactGraphql(LINEAR_LIST_ISSUES_QUERY), compactGraphql(`
10
+ query ListIssues(
11
+ $first: Int
12
+ $after: String
13
+ $filter: IssueFilter
14
+ $orderBy: PaginationOrderBy
15
+ ) {
16
+ issues(first: $first, after: $after, filter: $filter, orderBy: $orderBy) {
17
+ nodes {
18
+ ${LINEAR_ISSUE_FIELDS}
19
+ }
20
+ pageInfo {
21
+ hasNextPage
22
+ endCursor
23
+ }
24
+ }
25
+ }
26
+ `));
27
+ assert.match(LINEAR_LIST_ISSUES_QUERY, /issues\(first:/u);
28
+ assert.match(LINEAR_LIST_ISSUES_QUERY, /filter:/u);
29
+ assert.notEqual(compactGraphql(LINEAR_LIST_ISSUES_QUERY).indexOf(compactGraphql(LINEAR_ISSUE_FIELDS)), -1);
30
+ });
31
+ test('LINEAR_FETCH_ACTIVE_ISSUES_QUERY matches the expected Sage active-issues query', () => {
32
+ assert.equal(compactGraphql(LINEAR_FETCH_ACTIVE_ISSUES_QUERY), compactGraphql(`
33
+ query FetchActiveIssues($after: String, $updatedAfter: DateTimeOrDuration!) {
34
+ issues(
35
+ filter: {
36
+ state: { type: { nin: ["canceled", "done"] } }
37
+ updatedAt: { gt: $updatedAfter }
38
+ }
39
+ first: 100
40
+ after: $after
41
+ orderBy: updatedAt
42
+ ) {
43
+ nodes {
44
+ id
45
+ identifier
46
+ title
47
+ description
48
+ state {
49
+ name
50
+ type
51
+ }
52
+ priority
53
+ assignee {
54
+ name
55
+ }
56
+ url
57
+ createdAt
58
+ updatedAt
59
+ }
60
+ pageInfo {
61
+ hasNextPage
62
+ endCursor
63
+ }
64
+ }
65
+ }
66
+ `));
67
+ assert.notEqual(compactGraphql(LINEAR_FETCH_ACTIVE_ISSUES_QUERY).indexOf('state:{type:{nin:["canceled","done"]}}'), -1);
68
+ });
69
+ test('buildLinearIssueFilter returns undefined for empty input', () => {
70
+ assert.equal(buildLinearIssueFilter({}), undefined);
71
+ });
72
+ test('buildLinearIssueFilter maps state-only input', () => {
73
+ assert.deepEqual(buildLinearIssueFilter({ state: ['Todo'] }), {
74
+ state: { name: { in: ['Todo'] } },
75
+ });
76
+ });
77
+ test('buildLinearIssueFilter combines state and label filters', () => {
78
+ assert.deepEqual(buildLinearIssueFilter({ state: ['Todo', 'In Progress'], labels: ['bug'] }), {
79
+ state: { name: { in: ['Todo', 'In Progress'] } },
80
+ labels: { some: { name: { in: ['bug'] } } },
81
+ });
82
+ });
83
+ test('buildLinearIssueFilter maps assignee email and id forms', () => {
84
+ assert.deepEqual(buildLinearIssueFilter({ assignee: 'alice@example.com' }), {
85
+ assignee: { email: { eq: 'alice@example.com' } },
86
+ });
87
+ assert.deepEqual(buildLinearIssueFilter({ assignee: 'uuid-1234' }), {
88
+ assignee: { id: { eq: 'uuid-1234' } },
89
+ });
90
+ });
91
+ test('buildLinearIssueFilter maps team key, id, and name forms', () => {
92
+ assert.deepEqual(buildLinearIssueFilter({ team: 'ENG' }), {
93
+ team: { key: { eq: 'ENG' } },
94
+ });
95
+ assert.deepEqual(buildLinearIssueFilter({ team: TEAM_ID }), {
96
+ team: { id: { eq: TEAM_ID } },
97
+ });
98
+ assert.deepEqual(buildLinearIssueFilter({ team: 'Core Platform' }), {
99
+ team: { name: { containsIgnoreCase: 'Core Platform' } },
100
+ });
101
+ });
102
+ test('buildLinearProjectFilter returns undefined for empty input', () => {
103
+ assert.equal(buildLinearProjectFilter({}), undefined);
104
+ });
105
+ test('buildLinearProjectFilter maps team key, id, and name forms', () => {
106
+ assert.deepEqual(buildLinearProjectFilter({ team: 'ENG' }), {
107
+ teams: { some: { key: { eq: 'ENG' } } },
108
+ });
109
+ assert.deepEqual(buildLinearProjectFilter({ team: TEAM_ID }), {
110
+ teams: { some: { id: { eq: TEAM_ID } } },
111
+ });
112
+ assert.deepEqual(buildLinearProjectFilter({ team: 'Core Platform' }), {
113
+ teams: { some: { name: { containsIgnoreCase: 'Core Platform' } } },
114
+ });
115
+ });
116
+ test('LinearGraphqlResponse remains usable as a typed contract', () => {
117
+ const response = {
118
+ data: {
119
+ issues: {
120
+ nodes: [{ id: 'ENG-123' }],
121
+ },
122
+ },
123
+ errors: [{ message: 'boom', path: ['issues'] }],
124
+ };
125
+ assert.equal(response.data?.issues.nodes[0]?.id, 'ENG-123');
126
+ assert.equal(response.errors?.[0]?.path?.[0], 'issues');
127
+ });
128
+ //# sourceMappingURL=queries.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.test.js","sourceRoot":"","sources":["../src/queries.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relayfile/adapter-linear",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "Linear adapter bootstrap package for Relayfile",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "scripts": {
24
24
  "typecheck": "tsc --noEmit -p tsconfig.json",
25
- "test": "node --import tsx --test src/__tests__/*.test.ts",
25
+ "test": "node --import tsx --test 'src/**/*.test.ts'",
26
26
  "build": "tsc",
27
27
  "prepublishOnly": "npm run build"
28
28
  },