github-issue-tower-defence-management 1.153.6 → 1.154.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +6 -3
  3. package/bin/adapter/repositories/GraphqlProjectRepository.js +102 -114
  4. package/bin/adapter/repositories/GraphqlProjectRepository.js.map +1 -1
  5. package/bin/adapter/repositories/RestProjectRepository.js +95 -0
  6. package/bin/adapter/repositories/RestProjectRepository.js.map +1 -0
  7. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +26 -6
  8. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  9. package/bin/adapter/repositories/issue/RestIssueRepository.js +6 -0
  10. package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
  11. package/bin/adapter/repositories/projectFieldDefinition.js +88 -0
  12. package/bin/adapter/repositories/projectFieldDefinition.js.map +1 -0
  13. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js +10 -16
  14. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js.map +1 -1
  15. package/package.json +1 -1
  16. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +3 -0
  17. package/src/adapter/repositories/GraphqlProjectRepository.diskCache.test.ts +16 -4
  18. package/src/adapter/repositories/GraphqlProjectRepository.test.ts +8 -27
  19. package/src/adapter/repositories/GraphqlProjectRepository.ts +139 -151
  20. package/src/adapter/repositories/GraphqlProjectRepositoryProjectLocation.test.ts +296 -0
  21. package/src/adapter/repositories/RestProjectRepository.test.ts +277 -0
  22. package/src/adapter/repositories/RestProjectRepository.ts +129 -0
  23. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +58 -0
  24. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +36 -6
  25. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +19 -0
  26. package/src/adapter/repositories/issue/RestIssueRepository.ts +13 -0
  27. package/src/adapter/repositories/projectFieldDefinition.test.ts +189 -0
  28. package/src/adapter/repositories/projectFieldDefinition.ts +131 -0
  29. package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.test.ts +211 -200
  30. package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts +13 -18
  31. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +5 -0
  32. package/types/adapter/repositories/GraphqlProjectRepository.d.ts +6 -1
  33. package/types/adapter/repositories/GraphqlProjectRepository.d.ts.map +1 -1
  34. package/types/adapter/repositories/RestProjectRepository.d.ts +18 -0
  35. package/types/adapter/repositories/RestProjectRepository.d.ts.map +1 -0
  36. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +6 -2
  37. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  38. package/types/adapter/repositories/issue/RestIssueRepository.d.ts +1 -0
  39. package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
  40. package/types/adapter/repositories/projectFieldDefinition.d.ts +17 -0
  41. package/types/adapter/repositories/projectFieldDefinition.d.ts.map +1 -0
  42. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts +2 -2
  43. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts.map +1 -1
  44. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +2 -0
  45. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [1.154.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.154.0...v1.154.1) (2026-08-15)
2
+
3
+
4
+ ### Performance Improvements
5
+
6
+ * read the project field metadata over REST instead of the GraphQL project query ([#1579](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1579)) ([ebee44d](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/ebee44dadd6b16ec1600a0a86b164d093db6dadf)), closes [#1578](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1578) [#1018](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1018) [#1018](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1018)
7
+
8
+ # [1.154.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.153.6...v1.154.0) (2026-08-15)
9
+
10
+
11
+ ### Features
12
+
13
+ * read and write the story issue body over REST in the slow sweep ([#1577](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1577)) ([5dc770f](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/5dc770fe3944416645a5c35095ffbfe38c662c70)), closes [#1576](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1576)
14
+
1
15
  ## [1.153.6](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.153.5...v1.153.6) (2026-08-15)
2
16
 
3
17
 
package/README.md CHANGED
@@ -428,15 +428,18 @@ When `consoleAccessToken` is unset, no console server is started automatically;
428
428
 
429
429
  ## Project ID Cache
430
430
 
431
- The mapping from `owner/projectNumber` to the immutable GitHub Project node ID that `GraphqlProjectRepository.fetchProjectId` resolves is cached on disk so it is shared across processes. Because every TDPM invocation is a fresh process, an in-memory cache alone would re-resolve this mapping over GraphQL on every loop and every worker start; the on-disk cache eliminates that repeated GraphQL traffic. The cache reuses the same `${XDG_CACHE_HOME:-$HOME/.cache}/tdpm/cache/{projectName}/` directory convention as the issue cache and writes each entry atomically (to a `.tmp` file then renamed) so concurrent processes never corrupt or read a partial file.
431
+ The mapping from `owner/projectNumber` to the immutable GitHub Project node ID that `GraphqlProjectRepository.fetchProjectId` resolves is cached on disk so it is shared across processes, and so is the reverse mapping from that node ID back to the owner, owner type and project number. Because every TDPM invocation is a fresh process, an in-memory cache alone would re-resolve these mappings on every loop and every worker start. The cache reuses the same `${XDG_CACHE_HOME:-$HOME/.cache}/tdpm/cache/{projectName}/` directory convention as the issue cache and writes each entry atomically (to a `.tmp` file then renamed) so concurrent processes never corrupt or read a partial file.
432
432
 
433
433
  ```
434
434
  ${XDG_CACHE_HOME:-$HOME/.cache}/tdpm/cache/{projectName}/projectId-{owner}:{projectNumber}/{timestamp}.json
435
+ ${XDG_CACHE_HOME:-$HOME/.cache}/tdpm/cache/{projectName}/projectLocation-{projectId}/{timestamp}.json
435
436
  ```
436
437
 
437
438
  - The `projectId` mapping (`owner/projectNumber` to project node ID) is permanently static, so it is reused with no time-to-live.
438
- - Only the immutable project node ID is cached. Project metadata that can change the project's fields and single-select status and story options resolved by `getProject` is intentionally not cached on disk and is fetched fresh from GraphQL on every call, so newly created status and story options are never missed.
439
- - A malformed or absent cache file falls back to a live GraphQL fetch and never crashes.
439
+ - The `projectLocation` mapping (project node ID to `{owner, ownerType, projectNumber}`) is the same mapping read the other way round and is equally static, so it too carries no time-to-live. It exists because the Projects V2 REST routes are addressed by owner and project number while the code passes the project node ID around. It is written whenever either direction becomes known: when `fetchProjectId` resolves a project URL, and when a cold start GraphQL read of the project returns the project URL.
440
+ - Only these immutable mappings are cached. Project metadata that can change the project's fields and single-select status and story options resolved by `getProject` — is intentionally not cached on disk and is fetched fresh on every call, so newly created status and story options are never missed. With the location known, `getProject` and `listFieldNames` read that fresh metadata from the Projects V2 REST endpoints (`GET /{ownerType}/{owner}/projectsV2/{projectNumber}` and `.../fields`), which spend the core rate-limit budget instead of GraphQL points; the GraphQL project query remains as the cold start path for the first read in a workspace.
441
+ - A malformed or absent cache file falls back to a live GraphQL fetch and never crashes, and a read or write failure of either cache is logged rather than swallowed, because a silently failing write would send every later process back to the GraphQL path with no signal.
442
+ - A recorded location can still go stale if the owner is renamed. When the REST read returns 404 the entry is discarded, the project is re-read over GraphQL, and the corrected location is written back, so a rename recovers by itself on the next read.
440
443
 
441
444
  ## Per-Project Situation Snapshot
442
445
 
@@ -1,34 +1,76 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GraphqlProjectRepository = exports.convertToFieldOptionColor = void 0;
3
+ exports.GraphqlProjectRepository = void 0;
4
4
  const BaseGitHubRepository_1 = require("./BaseGitHubRepository");
5
5
  const githubGraphqlClient_1 = require("./githubGraphqlClient");
6
6
  const ProjectIssuesCacheRepository_1 = require("./ProjectIssuesCacheRepository");
7
- const RequiredProjectField_1 = require("../../domain/entities/RequiredProjectField");
8
- const utils_1 = require("./utils");
7
+ const projectFieldDefinition_1 = require("./projectFieldDefinition");
8
+ const RestProjectRepository_1 = require("./RestProjectRepository");
9
9
  const ONE_HOUR_MS = 60 * 60 * 1000;
10
10
  const PROJECT_ID_DISK_CACHE_KEY_PREFIX = 'projectId';
11
- const convertToFieldOptionColor = (color) => {
12
- switch (color) {
13
- case 'RED':
14
- case 'YELLOW':
15
- case 'GREEN':
16
- case 'BLUE':
17
- case 'PURPLE':
18
- case 'ORANGE':
19
- case 'PINK':
20
- case 'GRAY':
21
- return color;
22
- default:
23
- return 'GRAY';
24
- }
25
- };
26
- exports.convertToFieldOptionColor = convertToFieldOptionColor;
11
+ const PROJECT_LOCATION_DISK_CACHE_KEY_PREFIX = 'projectLocation';
27
12
  class GraphqlProjectRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
28
13
  constructor(localStorageRepository, ghToken = process.env.GH_TOKEN || 'dummy', projectCache) {
29
14
  super(localStorageRepository, ghToken);
30
15
  this.projectIdCache = new Map();
31
16
  this.fetchProjectIdFailedAt = new Map();
17
+ this.projectLocationCache = new Map();
18
+ this.readProjectLocationFromDiskCache = async (projectId) => {
19
+ if (!this.projectCache) {
20
+ return null;
21
+ }
22
+ let cache;
23
+ try {
24
+ cache = await this.projectCache.getLatest(`${PROJECT_LOCATION_DISK_CACHE_KEY_PREFIX}-${projectId}`);
25
+ }
26
+ catch (error) {
27
+ console.warn(`GraphqlProjectRepository: reading the project location disk cache failed, falling back to the GraphQL project query. projectId: ${projectId}, error: ${String(error)}`);
28
+ return null;
29
+ }
30
+ if (!cache) {
31
+ return null;
32
+ }
33
+ const value = cache.value;
34
+ if (typeof value !== 'object' ||
35
+ value === null ||
36
+ !('owner' in value) ||
37
+ !('ownerType' in value) ||
38
+ !('projectNumber' in value) ||
39
+ typeof value.owner !== 'string' ||
40
+ typeof value.projectNumber !== 'number' ||
41
+ (value.ownerType !== 'users' && value.ownerType !== 'orgs')) {
42
+ return null;
43
+ }
44
+ return {
45
+ owner: value.owner,
46
+ ownerType: value.ownerType,
47
+ projectNumber: value.projectNumber,
48
+ };
49
+ };
50
+ this.rememberProjectLocation = async (projectId, location) => {
51
+ this.projectLocationCache.set(projectId, location);
52
+ if (!this.projectCache) {
53
+ return;
54
+ }
55
+ try {
56
+ await this.projectCache.set(`${PROJECT_LOCATION_DISK_CACHE_KEY_PREFIX}-${projectId}`, location);
57
+ }
58
+ catch (error) {
59
+ console.warn(`GraphqlProjectRepository: writing the project location disk cache failed, every later process will fall back to the GraphQL project query. projectId: ${projectId}, error: ${String(error)}`);
60
+ }
61
+ };
62
+ this.findProjectLocation = async (projectId) => {
63
+ const cached = this.projectLocationCache.get(projectId);
64
+ if (cached) {
65
+ return cached;
66
+ }
67
+ const diskCached = await this.readProjectLocationFromDiskCache(projectId);
68
+ if (diskCached) {
69
+ this.projectLocationCache.set(projectId, diskCached);
70
+ return diskCached;
71
+ }
72
+ return null;
73
+ };
32
74
  this.readProjectIdFromDiskCache = async (cacheKey) => {
33
75
  if (!this.projectCache) {
34
76
  return null;
@@ -129,6 +171,11 @@ class GraphqlProjectRepository extends BaseGitHubRepository_1.BaseGitHubReposito
129
171
  }
130
172
  this.projectIdCache.set(cacheKey, projectId);
131
173
  await this.writeProjectIdToDiskCache(cacheKey, projectId);
174
+ await this.rememberProjectLocation(projectId, {
175
+ owner: login,
176
+ ownerType: response.data.organization?.projectV2?.id ? 'orgs' : 'users',
177
+ projectNumber,
178
+ });
132
179
  return projectId;
133
180
  };
134
181
  this.findProjectIdByUrl = async (projectUrl) => {
@@ -136,6 +183,18 @@ class GraphqlProjectRepository extends BaseGitHubRepository_1.BaseGitHubReposito
136
183
  return await this.fetchProjectId(owner, projectNumber);
137
184
  };
138
185
  this.getProject = async (projectId) => {
186
+ const location = await this.findProjectLocation(projectId);
187
+ if (location) {
188
+ const project = await this.restProjectRepository.getProject(location);
189
+ if (project) {
190
+ return project;
191
+ }
192
+ console.warn(`GraphqlProjectRepository: the recorded project location no longer resolves over REST, re-reading the project over GraphQL. projectId: ${projectId}, owner: ${location.owner}, projectNumber: ${location.projectNumber}`);
193
+ this.projectLocationCache.delete(projectId);
194
+ }
195
+ return await this.fetchProjectByGraphql(projectId);
196
+ };
197
+ this.fetchProjectByGraphql = async (projectId) => {
139
198
  const query = `query GetProjectV2($projectId: ID!) {
140
199
  node(id: $projectId) {
141
200
  ... on ProjectV2 {
@@ -207,79 +266,28 @@ class GraphqlProjectRepository extends BaseGitHubRepository_1.BaseGitHubReposito
207
266
  if (!project) {
208
267
  return null;
209
268
  }
210
- const nextActionDate = project.fields.nodes.find((field) => (0, utils_1.normalizeFieldName)(field.name) ===
211
- (0, utils_1.normalizeFieldName)(RequiredProjectField_1.NEXT_ACTION_DATE_FIELD_NAME));
212
- const nextActionHour = project.fields.nodes.find((field) => (0, utils_1.normalizeFieldName)(field.name) ===
213
- (0, utils_1.normalizeFieldName)(RequiredProjectField_1.NEXT_ACTION_HOUR_FIELD_NAME));
214
- const status = project.fields.nodes.find((field) => (0, utils_1.normalizeFieldName)(field.name) === 'status');
215
- if (!status) {
216
- throw new Error('status field is not found');
217
- }
218
- const story = project.fields.nodes.find((field) => (0, utils_1.normalizeFieldName)(field.name) === (0, utils_1.normalizeFieldName)(RequiredProjectField_1.STORY_FIELD_NAME));
219
- const workflowManagementStory = story?.options.find((option) => (0, utils_1.normalizeFieldName)(option.name).includes('workflowmanagement'));
220
- const remainignEstimationMinutes = project.fields.nodes.find((field) => (0, utils_1.normalizeFieldName)(field.name) === 'remainingestimationminutes');
221
- const dependedIssueUrlSeparatedByComma = project.fields.nodes.find((field) => (0, utils_1.normalizeFieldName)(field.name).startsWith((0, utils_1.normalizeFieldName)(RequiredProjectField_1.DEPENDED_ISSUE_URL_FIELD_NAME)));
222
- const completionDate50PercentConfidence = project.fields.nodes.find((field) => (0, utils_1.normalizeFieldName)(field.name).startsWith('completiondate'));
223
- return {
269
+ const fields = project.fields.nodes.map((field) => ({
270
+ fieldId: field.id,
271
+ databaseId: field.databaseId,
272
+ name: field.name,
273
+ options: (field.options ?? []).map((option) => ({
274
+ id: option.id,
275
+ name: option.name,
276
+ color: (0, projectFieldDefinition_1.convertToFieldOptionColor)(option.color),
277
+ description: option.description,
278
+ })),
279
+ }));
280
+ const location = (0, RestProjectRepository_1.projectLocationFromUrl)(project.url);
281
+ if (location) {
282
+ await this.rememberProjectLocation(project.id, location);
283
+ }
284
+ return (0, projectFieldDefinition_1.projectFromDefinition)({
224
285
  id: project.id,
225
286
  url: project.url,
226
287
  databaseId: project.databaseId,
227
288
  name: project.title,
228
- status: {
229
- name: status.name,
230
- fieldId: status.id,
231
- statuses: status.options.map((option) => ({
232
- id: option.id,
233
- name: option.name,
234
- color: (0, exports.convertToFieldOptionColor)(option.color),
235
- description: option.description,
236
- })),
237
- },
238
- nextActionDate: nextActionDate
239
- ? {
240
- name: nextActionDate.name,
241
- fieldId: nextActionDate.id,
242
- }
243
- : null,
244
- nextActionHour: nextActionHour
245
- ? {
246
- name: nextActionHour.name,
247
- fieldId: nextActionHour.id,
248
- }
249
- : null,
250
- story: story && workflowManagementStory
251
- ? {
252
- name: story.name,
253
- fieldId: story.id,
254
- databaseId: story.databaseId,
255
- stories: story.options.map((option) => ({
256
- id: option.id,
257
- name: option.name,
258
- color: (0, exports.convertToFieldOptionColor)(option.color),
259
- description: option.description,
260
- })),
261
- workflowManagementStory,
262
- }
263
- : null,
264
- remainingEstimationMinutes: remainignEstimationMinutes
265
- ? {
266
- name: remainignEstimationMinutes.name,
267
- fieldId: remainignEstimationMinutes.id,
268
- }
269
- : null,
270
- dependedIssueUrlSeparatedByComma: dependedIssueUrlSeparatedByComma
271
- ? {
272
- name: dependedIssueUrlSeparatedByComma.name,
273
- fieldId: dependedIssueUrlSeparatedByComma.id,
274
- }
275
- : null,
276
- completionDate50PercentConfidence: completionDate50PercentConfidence
277
- ? {
278
- name: completionDate50PercentConfidence.name,
279
- fieldId: completionDate50PercentConfidence.id,
280
- }
281
- : null,
282
- };
289
+ fields,
290
+ });
283
291
  };
284
292
  this.getByUrl = async (url) => {
285
293
  const projectId = await this.findProjectIdByUrl(url);
@@ -293,33 +301,12 @@ class GraphqlProjectRepository extends BaseGitHubRepository_1.BaseGitHubReposito
293
301
  return project;
294
302
  };
295
303
  this.listFieldNames = async (project) => {
296
- const query = `query ListProjectV2FieldNames($projectId: ID!) {
297
- node(id: $projectId) {
298
- ... on ProjectV2 {
299
- fields(first: 100) {
300
- nodes {
301
- ... on ProjectV2FieldCommon {
302
- name
303
- }
304
- }
305
- }
306
- }
307
- }
308
- }`;
309
- const response = await (0, githubGraphqlClient_1.postGithubGraphqlJson)({
310
- ghToken: this.ghToken,
311
- query,
312
- variables: { projectId: project.id },
313
- });
314
- if (!response.data || !response.data.node) {
315
- const errorMessages = response.errors
316
- ? response.errors.map((e) => e.message).join('; ')
317
- : 'no data field in response';
318
- throw new Error(`GitHub GraphQL API returned no data for listFieldNames: ${errorMessages}`);
304
+ const location = (0, RestProjectRepository_1.projectLocationFromUrl)(project.url) ??
305
+ (await this.findProjectLocation(project.id));
306
+ if (!location) {
307
+ throw new Error(`listFieldNames: project location is unknown for ${project.id}`);
319
308
  }
320
- return response.data.node.fields.nodes
321
- .map((field) => field.name)
322
- .filter((name) => typeof name === 'string');
309
+ return await this.restProjectRepository.listFieldNames(location);
323
310
  };
324
311
  this.createField = async (project, field) => {
325
312
  const mutation = `mutation CreateProjectV2Field($projectId: ID!, $dataType: ProjectV2CustomFieldType!, $name: String!, $singleSelectOptions: [ProjectV2SingleSelectFieldOptionInput!]) {
@@ -440,6 +427,7 @@ class GraphqlProjectRepository extends BaseGitHubRepository_1.BaseGitHubReposito
440
427
  projectCache === undefined
441
428
  ? null
442
429
  : new ProjectIssuesCacheRepository_1.ProjectIssuesCacheRepository(projectCache);
430
+ this.restProjectRepository = new RestProjectRepository_1.RestProjectRepository(localStorageRepository, ghToken);
443
431
  }
444
432
  }
445
433
  exports.GraphqlProjectRepository = GraphqlProjectRepository;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphqlProjectRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/GraphqlProjectRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GraphqlProjectRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/GraphqlProjectRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RestProjectRepository = exports.projectLocationFromUrl = exports.projectUrlFromLocation = void 0;
7
+ const ky_1 = __importDefault(require("ky"));
8
+ const BaseGitHubRepository_1 = require("./BaseGitHubRepository");
9
+ const projectFieldDefinition_1 = require("./projectFieldDefinition");
10
+ const isNotFoundResponse = (error) => {
11
+ if (typeof error !== 'object' || error === null || !('response' in error)) {
12
+ return false;
13
+ }
14
+ const response = error.response;
15
+ return (typeof response === 'object' &&
16
+ response !== null &&
17
+ 'status' in response &&
18
+ response.status === 404);
19
+ };
20
+ const projectUrlFromLocation = (location) => `https://github.com/${location.ownerType}/${location.owner}/projects/${location.projectNumber}`;
21
+ exports.projectUrlFromLocation = projectUrlFromLocation;
22
+ const projectLocationFromUrl = (projectUrl) => {
23
+ const match = projectUrl.match(/https:\/\/github\.com\/(users|orgs)\/([^/]+)\/projects\/(\d+)/);
24
+ if (!match) {
25
+ return null;
26
+ }
27
+ const [, ownerType, owner, projectNumberText] = match;
28
+ return {
29
+ owner,
30
+ ownerType: ownerType === 'orgs' ? 'orgs' : 'users',
31
+ projectNumber: parseInt(projectNumberText, 10),
32
+ };
33
+ };
34
+ exports.projectLocationFromUrl = projectLocationFromUrl;
35
+ class RestProjectRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
36
+ constructor() {
37
+ super(...arguments);
38
+ this.projectApiUrl = (location) => `https://api.github.com/${location.ownerType}/${location.owner}/projectsV2/${location.projectNumber}`;
39
+ this.requestHeaders = () => ({
40
+ Authorization: `token ${this.ghToken}`,
41
+ Accept: 'application/vnd.github+json',
42
+ });
43
+ this.listFieldDefinitions = async (location) => {
44
+ const fields = await ky_1.default
45
+ .get(`${this.projectApiUrl(location)}/fields`, {
46
+ searchParams: { per_page: 100 },
47
+ headers: this.requestHeaders(),
48
+ })
49
+ .json();
50
+ return fields.map((field) => ({
51
+ fieldId: field.node_id,
52
+ databaseId: field.id,
53
+ name: field.name,
54
+ options: (field.options ?? []).map((option) => ({
55
+ id: option.id,
56
+ name: option.name.raw,
57
+ color: (0, projectFieldDefinition_1.convertToFieldOptionColor)(option.color),
58
+ description: option.description.raw,
59
+ })),
60
+ }));
61
+ };
62
+ this.listFieldNames = async (location) => {
63
+ const fields = await this.listFieldDefinitions(location);
64
+ return fields.map((field) => field.name);
65
+ };
66
+ this.getProject = async (location) => {
67
+ let project;
68
+ let fields;
69
+ try {
70
+ [project, fields] = await Promise.all([
71
+ ky_1.default
72
+ .get(this.projectApiUrl(location), { headers: this.requestHeaders() })
73
+ .json(),
74
+ this.listFieldDefinitions(location),
75
+ ]);
76
+ }
77
+ catch (error) {
78
+ if (isNotFoundResponse(error)) {
79
+ return null;
80
+ }
81
+ throw error;
82
+ }
83
+ const definition = {
84
+ id: project.node_id,
85
+ url: (0, exports.projectUrlFromLocation)(location),
86
+ databaseId: project.id,
87
+ name: project.title,
88
+ fields,
89
+ };
90
+ return (0, projectFieldDefinition_1.projectFromDefinition)(definition);
91
+ };
92
+ }
93
+ }
94
+ exports.RestProjectRepository = RestProjectRepository;
95
+ //# sourceMappingURL=RestProjectRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestProjectRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/RestProjectRepository.ts"],"names":[],"mappings":"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"}
@@ -336,6 +336,9 @@ class ApiV3CheerioRestIssueRepository extends BaseGitHubRepository_1.BaseGitHubR
336
336
  this.updateIssue = async (issue) => {
337
337
  await this.restIssueRepository.updateIssue(issue);
338
338
  };
339
+ this.updateIssueBody = async (issue, body) => {
340
+ await this.restIssueRepository.updateIssueBody(issue, body);
341
+ };
339
342
  this.getIssueByUrl = async (url) => {
340
343
  const projectItem = await this.graphqlProjectItemRepository.fetchProjectItemByUrl(url);
341
344
  if (!projectItem) {
@@ -1339,25 +1342,42 @@ class ApiV3CheerioRestIssueRepository extends BaseGitHubRepository_1.BaseGitHubR
1339
1342
  this.createCommentByUrl = async (issueOrPrUrl, commentBody) => {
1340
1343
  await this.restIssueRepository.createComment(issueOrPrUrl, commentBody);
1341
1344
  };
1342
- this.getIssueOrPullRequestBody = async (url) => {
1345
+ this.fetchIssueBodyResponse = (url) => {
1343
1346
  const { owner, repo, issueNumber } = this.parseIssueUrl(url);
1344
- const response = await this.fetchWithRateLimitRetry(() => fetch(`https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${issueNumber}`, {
1347
+ return this.fetchWithRateLimitRetry(() => fetch(`https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${issueNumber}`, {
1345
1348
  method: 'GET',
1346
1349
  headers: {
1347
1350
  Authorization: `Bearer ${this.ghToken}`,
1348
1351
  Accept: 'application/vnd.github+json',
1349
1352
  },
1350
1353
  }));
1351
- if (!response.ok) {
1352
- const reason = await this.formatGitHubErrorWithStatus(response);
1353
- throw new Error(`Failed to fetch body for ${url}: ${reason}`);
1354
- }
1354
+ };
1355
+ this.parseIssueBodyResponse = async (url, response) => {
1355
1356
  const body = await response.json();
1356
1357
  if (!isIssueOrPullRequestBodyResponse(body)) {
1357
1358
  throw new Error(`Unexpected response shape when fetching body for ${url}`);
1358
1359
  }
1359
1360
  return body.body ?? '';
1360
1361
  };
1362
+ this.getIssueOrPullRequestBody = async (url) => {
1363
+ const response = await this.fetchIssueBodyResponse(url);
1364
+ if (!response.ok) {
1365
+ const reason = await this.formatGitHubErrorWithStatus(response);
1366
+ throw new Error(`Failed to fetch body for ${url}: ${reason}`);
1367
+ }
1368
+ return this.parseIssueBodyResponse(url, response);
1369
+ };
1370
+ this.getIssueBodyByUrl = async (url) => {
1371
+ const response = await this.fetchIssueBodyResponse(url);
1372
+ if (response.status === 404) {
1373
+ return null;
1374
+ }
1375
+ if (!response.ok) {
1376
+ const reason = await this.formatGitHubErrorWithStatus(response);
1377
+ throw new Error(`Failed to fetch body for ${url}: ${reason}`);
1378
+ }
1379
+ return this.parseIssueBodyResponse(url, response);
1380
+ };
1361
1381
  this.getIssueOrPullRequestComments = async (url) => {
1362
1382
  const { owner, repo, issueNumber } = this.parseIssueUrl(url);
1363
1383
  const perPage = 100;