npm-cli-gh-issue-preparator 1.6.0 → 1.7.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/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [1.7.0](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/compare/v1.6.0...v1.7.0) (2026-01-31)
2
+
3
+
4
+ ### Features
5
+
6
+ * **core:** add Comment domain entity with author, content, createdAt ([8e3e861](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/commit/8e3e8617284f818cf72f9e4c33afac9748b2661a))
7
+
1
8
  # [1.6.0](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/compare/v1.5.0...v1.6.0) (2026-01-26)
2
9
 
3
10
 
@@ -52,6 +52,15 @@ class GitHubIssueRepository {
52
52
  name
53
53
  }
54
54
  }
55
+ comments(first: 100) {
56
+ nodes {
57
+ author {
58
+ login
59
+ }
60
+ body
61
+ createdAt
62
+ }
63
+ }
55
64
  }
56
65
  ... on PullRequest {
57
66
  url
@@ -62,6 +71,15 @@ class GitHubIssueRepository {
62
71
  name
63
72
  }
64
73
  }
74
+ comments(first: 100) {
75
+ nodes {
76
+ author {
77
+ login
78
+ }
79
+ body
80
+ createdAt
81
+ }
82
+ }
65
83
  }
66
84
  }
67
85
  fieldValues(first: 20) {
@@ -109,6 +127,15 @@ class GitHubIssueRepository {
109
127
  name
110
128
  }
111
129
  }
130
+ comments(first: 100) {
131
+ nodes {
132
+ author {
133
+ login
134
+ }
135
+ body
136
+ createdAt
137
+ }
138
+ }
112
139
  }
113
140
  ... on PullRequest {
114
141
  url
@@ -119,6 +146,15 @@ class GitHubIssueRepository {
119
146
  name
120
147
  }
121
148
  }
149
+ comments(first: 100) {
150
+ nodes {
151
+ author {
152
+ login
153
+ }
154
+ body
155
+ createdAt
156
+ }
157
+ }
122
158
  }
123
159
  }
124
160
  fieldValues(first: 20) {
@@ -149,6 +185,15 @@ class GitHubIssueRepository {
149
185
  }
150
186
  `;
151
187
  }
188
+ mapCommentsToEntity(commentNodes) {
189
+ if (!commentNodes)
190
+ return [];
191
+ return commentNodes.map((node) => ({
192
+ author: node.author?.login || '',
193
+ content: node.body,
194
+ createdAt: new Date(node.createdAt),
195
+ }));
196
+ }
152
197
  async getStatusOptionId(project, statusName) {
153
198
  const { owner, projectNumber } = this.parseProjectInfo(project);
154
199
  const query = `
@@ -291,6 +336,7 @@ class GitHubIssueRepository {
291
336
  title: item.content.title,
292
337
  labels: item.content.labels?.nodes?.map((l) => l.name) || [],
293
338
  status,
339
+ comments: this.mapCommentsToEntity(item.content.comments?.nodes),
294
340
  });
295
341
  }
296
342
  hasNextPage = projectData.items.pageInfo.hasNextPage;
@@ -394,6 +440,7 @@ class GitHubIssueRepository {
394
440
  title: item.content.title,
395
441
  labels: item.content.labels?.nodes?.map((l) => l.name) || [],
396
442
  status,
443
+ comments: this.mapCommentsToEntity(item.content.comments?.nodes),
397
444
  };
398
445
  }
399
446
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GitHubIssueRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/GitHubIssueRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GitHubIssueRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/GitHubIssueRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Comment.js","sourceRoot":"","sources":["../../../src/domain/entities/Comment.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "npm-cli-gh-issue-preparator",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -105,6 +105,7 @@ describe('GitHubIssueRepository', () => {
105
105
  title: 'Test Issue 1',
106
106
  labels: ['bug', 'category:impl'],
107
107
  status: 'Awaiting Workspace',
108
+ comments: [],
108
109
  });
109
110
  expect(issues[1]).toEqual({
110
111
  id: 'issue-2',
@@ -112,6 +113,7 @@ describe('GitHubIssueRepository', () => {
112
113
  title: 'Test Issue 2',
113
114
  labels: ['enhancement'],
114
115
  status: 'Preparation',
116
+ comments: [],
115
117
  });
116
118
  });
117
119
 
@@ -200,6 +202,7 @@ describe('GitHubIssueRepository', () => {
200
202
  title: 'User Issue',
201
203
  labels: ['enhancement'],
202
204
  status: 'Todo',
205
+ comments: [],
203
206
  });
204
207
  });
205
208
 
@@ -441,6 +444,7 @@ describe('GitHubIssueRepository', () => {
441
444
  title: 'Issue Without Status',
442
445
  labels: ['bug'],
443
446
  status: '',
447
+ comments: [],
444
448
  });
445
449
  });
446
450
  });
@@ -453,6 +457,7 @@ describe('GitHubIssueRepository', () => {
453
457
  title: 'Test Issue',
454
458
  labels: ['bug'],
455
459
  status: 'Preparation',
460
+ comments: [],
456
461
  };
457
462
 
458
463
  mockFetch.mockResolvedValueOnce({
@@ -514,6 +519,7 @@ describe('GitHubIssueRepository', () => {
514
519
  title: 'Test Issue',
515
520
  labels: ['bug'],
516
521
  status: 'Done',
522
+ comments: [],
517
523
  };
518
524
 
519
525
  mockFetch.mockResolvedValueOnce({
@@ -571,6 +577,7 @@ describe('GitHubIssueRepository', () => {
571
577
  title: 'Test Issue',
572
578
  labels: ['bug'],
573
579
  status: 'NonExistentStatus',
580
+ comments: [],
574
581
  };
575
582
 
576
583
  mockFetch.mockResolvedValueOnce({
@@ -610,6 +617,7 @@ describe('GitHubIssueRepository', () => {
610
617
  title: 'Test Issue',
611
618
  labels: ['bug'],
612
619
  status: 'Preparation',
620
+ comments: [],
613
621
  };
614
622
 
615
623
  mockFetch.mockResolvedValueOnce({
@@ -628,6 +636,7 @@ describe('GitHubIssueRepository', () => {
628
636
  title: 'Test Issue',
629
637
  labels: ['bug'],
630
638
  status: 'Preparation',
639
+ comments: [],
631
640
  };
632
641
 
633
642
  mockFetch.mockResolvedValueOnce({
@@ -647,6 +656,7 @@ describe('GitHubIssueRepository', () => {
647
656
  title: 'Test Issue',
648
657
  labels: ['bug'],
649
658
  status: 'Preparation',
659
+ comments: [],
650
660
  };
651
661
 
652
662
  mockFetch.mockResolvedValueOnce({
@@ -686,6 +696,7 @@ describe('GitHubIssueRepository', () => {
686
696
  title: 'Test Issue',
687
697
  labels: ['bug'],
688
698
  status: 'Preparation',
699
+ comments: [],
689
700
  };
690
701
 
691
702
  mockFetch.mockResolvedValueOnce({
@@ -730,6 +741,7 @@ describe('GitHubIssueRepository', () => {
730
741
  title: 'Test Issue',
731
742
  labels: ['bug'],
732
743
  status: 'Preparation',
744
+ comments: [],
733
745
  };
734
746
 
735
747
  mockFetch.mockResolvedValueOnce({
@@ -776,6 +788,7 @@ describe('GitHubIssueRepository', () => {
776
788
  title: 'Test Issue',
777
789
  labels: ['bug'],
778
790
  status: 'Preparation',
791
+ comments: [],
779
792
  };
780
793
 
781
794
  mockFetch.mockResolvedValueOnce({
@@ -820,6 +833,7 @@ describe('GitHubIssueRepository', () => {
820
833
  title: 'Test Issue',
821
834
  labels: ['bug'],
822
835
  status: 'Todo',
836
+ comments: [],
823
837
  };
824
838
 
825
839
  mockFetch.mockResolvedValueOnce({
@@ -872,6 +886,7 @@ describe('GitHubIssueRepository', () => {
872
886
  title: 'Test Issue',
873
887
  labels: ['bug'],
874
888
  status: 'Preparation',
889
+ comments: [],
875
890
  };
876
891
 
877
892
  mockFetch.mockResolvedValueOnce({
@@ -945,6 +960,7 @@ describe('GitHubIssueRepository', () => {
945
960
  title: 'Test Issue',
946
961
  labels: ['bug'],
947
962
  status: 'Preparation',
963
+ comments: [],
948
964
  });
949
965
  });
950
966
 
@@ -1055,6 +1071,7 @@ describe('GitHubIssueRepository', () => {
1055
1071
  title: 'User Issue',
1056
1072
  labels: ['feature'],
1057
1073
  status: 'Todo',
1074
+ comments: [],
1058
1075
  });
1059
1076
  });
1060
1077
 
@@ -1112,6 +1129,7 @@ describe('GitHubIssueRepository', () => {
1112
1129
  title: 'Issue Without Status',
1113
1130
  labels: [],
1114
1131
  status: '',
1132
+ comments: [],
1115
1133
  });
1116
1134
  });
1117
1135
 
@@ -1236,7 +1254,161 @@ describe('GitHubIssueRepository', () => {
1236
1254
  title: 'Issue With Null Labels',
1237
1255
  labels: [],
1238
1256
  status: 'Done',
1257
+ comments: [],
1239
1258
  });
1240
1259
  });
1260
+
1261
+ it('should fetch and map comments correctly', async () => {
1262
+ mockFetch.mockResolvedValueOnce({
1263
+ ok: true,
1264
+ json: jest.fn().mockResolvedValue({
1265
+ data: {
1266
+ organization: {
1267
+ projectV2: {
1268
+ items: {
1269
+ totalCount: 1,
1270
+ pageInfo: {
1271
+ endCursor: null,
1272
+ hasNextPage: false,
1273
+ },
1274
+ nodes: [
1275
+ {
1276
+ id: 'issue-with-comments',
1277
+ content: {
1278
+ url: 'https://github.com/owner/repo/issues/1',
1279
+ title: 'Issue With Comments',
1280
+ number: 1,
1281
+ labels: {
1282
+ nodes: [],
1283
+ },
1284
+ comments: {
1285
+ nodes: [
1286
+ {
1287
+ author: {
1288
+ login: 'user1',
1289
+ },
1290
+ body: 'First comment',
1291
+ createdAt: '2024-01-15T10:00:00Z',
1292
+ },
1293
+ {
1294
+ author: {
1295
+ login: 'user2',
1296
+ },
1297
+ body: 'Second comment',
1298
+ createdAt: '2024-01-16T12:00:00Z',
1299
+ },
1300
+ ],
1301
+ },
1302
+ },
1303
+ fieldValues: {
1304
+ nodes: [
1305
+ {
1306
+ name: 'Todo',
1307
+ field: {
1308
+ name: 'Status',
1309
+ },
1310
+ },
1311
+ ],
1312
+ },
1313
+ },
1314
+ ],
1315
+ },
1316
+ },
1317
+ },
1318
+ },
1319
+ }),
1320
+ });
1321
+
1322
+ const result = await repository.get(
1323
+ 'https://github.com/owner/repo/issues/1',
1324
+ mockProject,
1325
+ );
1326
+
1327
+ expect(result).toEqual({
1328
+ id: 'issue-with-comments',
1329
+ url: 'https://github.com/owner/repo/issues/1',
1330
+ title: 'Issue With Comments',
1331
+ labels: [],
1332
+ status: 'Todo',
1333
+ comments: [
1334
+ {
1335
+ author: 'user1',
1336
+ content: 'First comment',
1337
+ createdAt: new Date('2024-01-15T10:00:00Z'),
1338
+ },
1339
+ {
1340
+ author: 'user2',
1341
+ content: 'Second comment',
1342
+ createdAt: new Date('2024-01-16T12:00:00Z'),
1343
+ },
1344
+ ],
1345
+ });
1346
+ });
1347
+
1348
+ it('should handle comments with null author', async () => {
1349
+ mockFetch.mockResolvedValueOnce({
1350
+ ok: true,
1351
+ json: jest.fn().mockResolvedValue({
1352
+ data: {
1353
+ organization: {
1354
+ projectV2: {
1355
+ items: {
1356
+ totalCount: 1,
1357
+ pageInfo: {
1358
+ endCursor: null,
1359
+ hasNextPage: false,
1360
+ },
1361
+ nodes: [
1362
+ {
1363
+ id: 'issue-null-author',
1364
+ content: {
1365
+ url: 'https://github.com/owner/repo/issues/1',
1366
+ title: 'Issue With Null Author Comment',
1367
+ number: 1,
1368
+ labels: {
1369
+ nodes: [],
1370
+ },
1371
+ comments: {
1372
+ nodes: [
1373
+ {
1374
+ author: null,
1375
+ body: 'Comment from deleted user',
1376
+ createdAt: '2024-01-15T10:00:00Z',
1377
+ },
1378
+ ],
1379
+ },
1380
+ },
1381
+ fieldValues: {
1382
+ nodes: [
1383
+ {
1384
+ name: 'Todo',
1385
+ field: {
1386
+ name: 'Status',
1387
+ },
1388
+ },
1389
+ ],
1390
+ },
1391
+ },
1392
+ ],
1393
+ },
1394
+ },
1395
+ },
1396
+ },
1397
+ }),
1398
+ });
1399
+
1400
+ const result = await repository.get(
1401
+ 'https://github.com/owner/repo/issues/1',
1402
+ mockProject,
1403
+ );
1404
+
1405
+ expect(result?.comments).toEqual([
1406
+ {
1407
+ author: '',
1408
+ content: 'Comment from deleted user',
1409
+ createdAt: new Date('2024-01-15T10:00:00Z'),
1410
+ },
1411
+ ]);
1412
+ });
1241
1413
  });
1242
1414
  });
@@ -1,6 +1,15 @@
1
1
  import { IssueRepository } from '../../domain/usecases/adapter-interfaces/IssueRepository';
2
2
  import { Issue } from '../../domain/entities/Issue';
3
3
  import { Project } from '../../domain/entities/Project';
4
+ import { Comment } from '../../domain/entities/Comment';
5
+
6
+ type CommentNode = {
7
+ author: {
8
+ login: string;
9
+ } | null;
10
+ body: string;
11
+ createdAt: string;
12
+ };
4
13
 
5
14
  type ProjectItem = {
6
15
  id: string;
@@ -11,6 +20,9 @@ type ProjectItem = {
11
20
  labels: {
12
21
  nodes: Array<{ name: string }>;
13
22
  };
23
+ comments?: {
24
+ nodes: CommentNode[];
25
+ };
14
26
  };
15
27
  fieldValues?: {
16
28
  nodes: Array<{
@@ -156,6 +168,15 @@ export class GitHubIssueRepository implements IssueRepository {
156
168
  name
157
169
  }
158
170
  }
171
+ comments(first: 100) {
172
+ nodes {
173
+ author {
174
+ login
175
+ }
176
+ body
177
+ createdAt
178
+ }
179
+ }
159
180
  }
160
181
  ... on PullRequest {
161
182
  url
@@ -166,6 +187,15 @@ export class GitHubIssueRepository implements IssueRepository {
166
187
  name
167
188
  }
168
189
  }
190
+ comments(first: 100) {
191
+ nodes {
192
+ author {
193
+ login
194
+ }
195
+ body
196
+ createdAt
197
+ }
198
+ }
169
199
  }
170
200
  }
171
201
  fieldValues(first: 20) {
@@ -213,6 +243,15 @@ export class GitHubIssueRepository implements IssueRepository {
213
243
  name
214
244
  }
215
245
  }
246
+ comments(first: 100) {
247
+ nodes {
248
+ author {
249
+ login
250
+ }
251
+ body
252
+ createdAt
253
+ }
254
+ }
216
255
  }
217
256
  ... on PullRequest {
218
257
  url
@@ -223,6 +262,15 @@ export class GitHubIssueRepository implements IssueRepository {
223
262
  name
224
263
  }
225
264
  }
265
+ comments(first: 100) {
266
+ nodes {
267
+ author {
268
+ login
269
+ }
270
+ body
271
+ createdAt
272
+ }
273
+ }
226
274
  }
227
275
  }
228
276
  fieldValues(first: 20) {
@@ -254,6 +302,17 @@ export class GitHubIssueRepository implements IssueRepository {
254
302
  `;
255
303
  }
256
304
 
305
+ private mapCommentsToEntity(
306
+ commentNodes: CommentNode[] | undefined,
307
+ ): Comment[] {
308
+ if (!commentNodes) return [];
309
+ return commentNodes.map((node) => ({
310
+ author: node.author?.login || '',
311
+ content: node.body,
312
+ createdAt: new Date(node.createdAt),
313
+ }));
314
+ }
315
+
257
316
  private async getStatusOptionId(
258
317
  project: Project,
259
318
  statusName: string,
@@ -425,6 +484,7 @@ export class GitHubIssueRepository implements IssueRepository {
425
484
  title: item.content.title,
426
485
  labels: item.content.labels?.nodes?.map((l) => l.name) || [],
427
486
  status,
487
+ comments: this.mapCommentsToEntity(item.content.comments?.nodes),
428
488
  });
429
489
  }
430
490
 
@@ -553,6 +613,7 @@ export class GitHubIssueRepository implements IssueRepository {
553
613
  title: item.content.title,
554
614
  labels: item.content.labels?.nodes?.map((l) => l.name) || [],
555
615
  status,
616
+ comments: this.mapCommentsToEntity(item.content.comments?.nodes),
556
617
  };
557
618
  }
558
619
  }
@@ -0,0 +1,5 @@
1
+ export type Comment = {
2
+ author: string;
3
+ content: string;
4
+ createdAt: Date;
5
+ };
@@ -1,7 +1,10 @@
1
+ import { Comment } from './Comment';
2
+
1
3
  export type Issue = {
2
4
  id: string;
3
5
  url: string;
4
6
  title: string;
5
7
  labels: string[];
6
8
  status: string;
9
+ comments: Comment[];
7
10
  };
@@ -47,6 +47,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
47
47
  title: 'Test Issue',
48
48
  labels: [],
49
49
  status: 'Preparation',
50
+ comments: [],
50
51
  };
51
52
 
52
53
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
@@ -92,6 +93,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
92
93
  title: 'Test Issue',
93
94
  labels: [],
94
95
  status: 'Done',
96
+ comments: [],
95
97
  };
96
98
 
97
99
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
@@ -46,6 +46,7 @@ describe('StartPreparationUseCase', () => {
46
46
  title: 'Issue 1',
47
47
  labels: ['category:impl'],
48
48
  status: 'Awaiting Workspace',
49
+ comments: [],
49
50
  },
50
51
  ];
51
52
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
@@ -81,6 +82,7 @@ describe('StartPreparationUseCase', () => {
81
82
  title: 'Issue 1',
82
83
  labels: [],
83
84
  status: 'Awaiting Workspace',
85
+ comments: [],
84
86
  },
85
87
  {
86
88
  id: '2',
@@ -88,6 +90,7 @@ describe('StartPreparationUseCase', () => {
88
90
  title: 'Issue 2',
89
91
  labels: [],
90
92
  status: 'Awaiting Workspace',
93
+ comments: [],
91
94
  },
92
95
  ];
93
96
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
@@ -119,6 +122,7 @@ describe('StartPreparationUseCase', () => {
119
122
  title: `Issue ${i + 1}`,
120
123
  labels: [],
121
124
  status: 'Preparation',
125
+ comments: [],
122
126
  }));
123
127
  const awaitingIssues: Issue[] = [
124
128
  {
@@ -127,6 +131,7 @@ describe('StartPreparationUseCase', () => {
127
131
  title: 'Issue 7',
128
132
  labels: [],
129
133
  status: 'Awaiting Workspace',
134
+ comments: [],
130
135
  },
131
136
  ];
132
137
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
@@ -155,6 +160,7 @@ describe('StartPreparationUseCase', () => {
155
160
  title: 'Issue 1',
156
161
  labels: ['category:impl'],
157
162
  status: 'Awaiting Workspace',
163
+ comments: [],
158
164
  },
159
165
  ];
160
166
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
@@ -185,6 +191,7 @@ describe('StartPreparationUseCase', () => {
185
191
  title: 'Issue 1',
186
192
  labels: ['category:impl'],
187
193
  status: 'Awaiting Workspace',
194
+ comments: [],
188
195
  },
189
196
  ];
190
197
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
@@ -213,6 +220,7 @@ describe('StartPreparationUseCase', () => {
213
220
  title: 'Issue 1',
214
221
  labels: [],
215
222
  status: 'Awaiting Workspace',
223
+ comments: [],
216
224
  };
217
225
  let popCallCount = 0;
218
226
  const issuesWithMockedPop: Issue[] = [awaitingIssue, awaitingIssue];
@@ -255,6 +263,7 @@ describe('StartPreparationUseCase', () => {
255
263
  title: `Issue ${i + 1}`,
256
264
  labels: [],
257
265
  status: 'Awaiting Workspace',
266
+ comments: [],
258
267
  }));
259
268
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
260
269
  mockIssueRepository.getAllOpened.mockResolvedValueOnce(awaitingIssues);
@@ -280,6 +289,7 @@ describe('StartPreparationUseCase', () => {
280
289
  title: `Issue ${i + 1}`,
281
290
  labels: [],
282
291
  status: 'Awaiting Workspace',
292
+ comments: [],
283
293
  }));
284
294
  mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
285
295
  mockIssueRepository.getAllOpened.mockResolvedValueOnce(awaitingIssues);
@@ -6,6 +6,7 @@ export declare class GitHubIssueRepository implements IssueRepository {
6
6
  constructor(token: string);
7
7
  private parseProjectInfo;
8
8
  private buildProjectItemsQuery;
9
+ private mapCommentsToEntity;
9
10
  private getStatusOptionId;
10
11
  getAllOpened(project: Project): Promise<Issue[]>;
11
12
  update(issue: Issue, project: Project): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"GitHubIssueRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/GitHubIssueRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAkHxD,qBAAa,qBAAsB,YAAW,eAAe;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IAE1C,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,sBAAsB;YAyHhB,iBAAiB;IA4GzB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAyEhD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DrD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAqErE"}
1
+ {"version":3,"file":"GitHubIssueRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/GitHubIssueRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AA8HxD,qBAAa,qBAAsB,YAAW,eAAe;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,MAAM;IAE1C,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,sBAAsB;IA6J9B,OAAO,CAAC,mBAAmB;YAWb,iBAAiB;IA4GzB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA0EhD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DrD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAsErE"}
@@ -0,0 +1,6 @@
1
+ export type Comment = {
2
+ author: string;
3
+ content: string;
4
+ createdAt: Date;
5
+ };
6
+ //# sourceMappingURL=Comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Comment.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Comment.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC"}
@@ -1,8 +1,10 @@
1
+ import { Comment } from './Comment';
1
2
  export type Issue = {
2
3
  id: string;
3
4
  url: string;
4
5
  title: string;
5
6
  labels: string[];
6
7
  status: string;
8
+ comments: Comment[];
7
9
  };
8
10
  //# sourceMappingURL=Issue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Issue.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Issue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
1
+ {"version":3,"file":"Issue.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC"}