github-issue-tower-defence-management 1.112.6 → 1.113.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 +7 -0
- package/bin/adapter/entry-points/cli/index.js +1 -0
- package/bin/adapter/entry-points/cli/index.js.map +1 -1
- package/bin/adapter/entry-points/console/consoleReadApi.js +47 -1
- package/bin/adapter/entry-points/console/consoleReadApi.js.map +1 -1
- package/bin/adapter/entry-points/console/ui-dist/assets/{index-DKFbU8lr.css → index-CEJmPNRK.css} +1 -1
- package/bin/adapter/entry-points/console/ui-dist/assets/{index-DUygHx5u.js → index-DfNrA5uV.js} +36 -36
- package/bin/adapter/entry-points/console/ui-dist/index.html +2 -2
- package/bin/adapter/entry-points/console/webServer.js +6 -0
- package/bin/adapter/entry-points/console/webServer.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/cli/index.ts +5 -1
- package/src/adapter/entry-points/console/consoleReadApi.test.ts +89 -0
- package/src/adapter/entry-points/console/consoleReadApi.ts +71 -0
- package/src/adapter/entry-points/console/ui/e2e/consoleScenario.spec.ts +44 -0
- package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +31 -8
- package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.stories.tsx +41 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.test.tsx +56 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsoleItemDetail.tsx +15 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.test.tsx +46 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestDetail.tsx +8 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.stories.tsx +41 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.test.tsx +72 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/detail/ConsolePullRequestStatusBadges.tsx +71 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleCaches.ts +5 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.test.ts +20 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleItemDetailData.ts +17 -0
- package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.test.ts +41 -0
- package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +36 -5
- package/src/adapter/entry-points/console/ui/src/features/console/logic/types.ts +9 -0
- package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.test.tsx +9 -0
- package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +1 -0
- package/src/adapter/entry-points/console/ui/src/index.css +12 -0
- package/src/adapter/entry-points/console/ui-dist/assets/{index-DKFbU8lr.css → index-CEJmPNRK.css} +1 -1
- package/src/adapter/entry-points/console/ui-dist/assets/{index-DUygHx5u.js → index-DfNrA5uV.js} +36 -36
- package/src/adapter/entry-points/console/ui-dist/index.html +2 -2
- package/src/adapter/entry-points/console/webServer.test.ts +52 -1
- package/src/adapter/entry-points/console/webServer.ts +13 -0
- package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
- package/types/adapter/entry-points/console/consoleReadApi.d.ts +20 -0
- package/types/adapter/entry-points/console/consoleReadApi.d.ts.map +1 -1
- package/types/adapter/entry-points/console/webServer.d.ts +2 -1
- package/types/adapter/entry-points/console/webServer.d.ts.map +1 -1
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>TDPM Console</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-DfNrA5uV.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CEJmPNRK.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="root"></div>
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
startWebServer,
|
|
17
17
|
} from './webServer';
|
|
18
18
|
import type { ImageFetcher } from './consoleImageProxy';
|
|
19
|
-
import { IssueTitleStateCache } from './consoleReadApi';
|
|
19
|
+
import { IssueTitleStateCache, PullRequestStatusCache } from './consoleReadApi';
|
|
20
20
|
import { readDoneProjectItemIds } from './consoleDoneStore';
|
|
21
21
|
import { IssueRepository } from '../../../domain/usecases/adapter-interfaces/IssueRepository';
|
|
22
22
|
import { Project } from '../../../domain/entities/Project';
|
|
@@ -577,6 +577,57 @@ describe('webServer new routes integration', () => {
|
|
|
577
577
|
}
|
|
578
578
|
});
|
|
579
579
|
|
|
580
|
+
it('serves the pull request status read api when a status cache is injected', async () => {
|
|
581
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
|
|
582
|
+
const issueRepository = mock<IssueRepository>();
|
|
583
|
+
issueRepository.getOpenPullRequest.mockResolvedValue({
|
|
584
|
+
url: 'https://github.com/o/r/pull/1',
|
|
585
|
+
branchName: 'feature',
|
|
586
|
+
createdAt: new Date('2026-06-18T03:21:00.000Z'),
|
|
587
|
+
isDraft: false,
|
|
588
|
+
isConflicted: true,
|
|
589
|
+
isPassedAllCiJob: false,
|
|
590
|
+
isCiStateSuccess: false,
|
|
591
|
+
isResolvedAllReviewComments: false,
|
|
592
|
+
isBranchOutOfDate: true,
|
|
593
|
+
missingRequiredCheckNames: ['build'],
|
|
594
|
+
});
|
|
595
|
+
const server = await startWebServer({
|
|
596
|
+
accessToken: testToken,
|
|
597
|
+
uiDistDir: path.join(tmpDir, 'ui-dist'),
|
|
598
|
+
consoleDataOutputDir: null,
|
|
599
|
+
inTmuxDataDir: null,
|
|
600
|
+
dashboardDir: null,
|
|
601
|
+
dashboardDataDir: null,
|
|
602
|
+
dashboardProjectNames: [],
|
|
603
|
+
issueRepository,
|
|
604
|
+
issueTitleStateCache: new IssueTitleStateCache(),
|
|
605
|
+
pullRequestStatusCache: new PullRequestStatusCache(),
|
|
606
|
+
port: 0,
|
|
607
|
+
});
|
|
608
|
+
try {
|
|
609
|
+
const response = await request(
|
|
610
|
+
server,
|
|
611
|
+
'GET',
|
|
612
|
+
`/api/pullrequeststatus?k=${testToken}&url=https://github.com/o/r/pull/1`,
|
|
613
|
+
);
|
|
614
|
+
expect(response.statusCode).toBe(200);
|
|
615
|
+
expect(JSON.parse(response.body)).toEqual({
|
|
616
|
+
found: true,
|
|
617
|
+
status: {
|
|
618
|
+
isConflicted: true,
|
|
619
|
+
isPassedAllCiJob: false,
|
|
620
|
+
isCiStateSuccess: false,
|
|
621
|
+
isBranchOutOfDate: true,
|
|
622
|
+
missingRequiredCheckNames: ['build'],
|
|
623
|
+
},
|
|
624
|
+
});
|
|
625
|
+
} finally {
|
|
626
|
+
await closeServer(server);
|
|
627
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
628
|
+
}
|
|
629
|
+
});
|
|
630
|
+
|
|
580
631
|
it('posts a comment through the comment operation api', async () => {
|
|
581
632
|
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
|
|
582
633
|
const issueRepository = mock<IssueRepository>();
|
|
@@ -9,11 +9,13 @@ import {
|
|
|
9
9
|
} from './consoleDataDelivery';
|
|
10
10
|
import {
|
|
11
11
|
IssueTitleStateCache,
|
|
12
|
+
PullRequestStatusCache,
|
|
12
13
|
handleComments,
|
|
13
14
|
handleIssueTitle,
|
|
14
15
|
handleItemBody,
|
|
15
16
|
handlePrCommits,
|
|
16
17
|
handlePrFiles,
|
|
18
|
+
handlePullRequestStatus,
|
|
17
19
|
handleRelatedPrs,
|
|
18
20
|
} from './consoleReadApi';
|
|
19
21
|
import {
|
|
@@ -172,6 +174,7 @@ export type WebServerOptions = {
|
|
|
172
174
|
issueRepository?: IssueRepository | null;
|
|
173
175
|
resolveProject?: ConsoleProjectResolver | null;
|
|
174
176
|
issueTitleStateCache?: IssueTitleStateCache | null;
|
|
177
|
+
pullRequestStatusCache?: PullRequestStatusCache | null;
|
|
175
178
|
};
|
|
176
179
|
|
|
177
180
|
const FLAT_IN_TMUX_PREFIX = '/in-tmux-by-human/';
|
|
@@ -360,6 +363,7 @@ const handleReadApi = async (
|
|
|
360
363
|
return null;
|
|
361
364
|
}
|
|
362
365
|
const cache = options.issueTitleStateCache ?? null;
|
|
366
|
+
const pullRequestStatusCache = options.pullRequestStatusCache ?? null;
|
|
363
367
|
const url = searchParams.get('url');
|
|
364
368
|
switch (requestPath) {
|
|
365
369
|
case '/api/itembody':
|
|
@@ -377,6 +381,15 @@ const handleReadApi = async (
|
|
|
377
381
|
return null;
|
|
378
382
|
}
|
|
379
383
|
return handleIssueTitle(issueRepository, cache, url);
|
|
384
|
+
case '/api/pullrequeststatus':
|
|
385
|
+
if (pullRequestStatusCache === null) {
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
return handlePullRequestStatus(
|
|
389
|
+
issueRepository,
|
|
390
|
+
pullRequestStatusCache,
|
|
391
|
+
url,
|
|
392
|
+
);
|
|
380
393
|
default:
|
|
381
394
|
return null;
|
|
382
395
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAkIzB,eAAO,MAAM,OAAO,SAAgB,CAAC"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import { IssueRepository } from '../../../domain/usecases/adapter-interfaces/IssueRepository';
|
|
2
2
|
export declare const ISSUE_TITLE_CACHE_TTL_MS: number;
|
|
3
|
+
export declare const PULL_REQUEST_STATUS_CACHE_TTL_MS: number;
|
|
3
4
|
export type IssueOrPullRequestState = {
|
|
4
5
|
state: string;
|
|
5
6
|
merged: boolean;
|
|
6
7
|
isPullRequest: boolean;
|
|
7
8
|
};
|
|
9
|
+
export type PullRequestStatus = {
|
|
10
|
+
isConflicted: boolean;
|
|
11
|
+
isPassedAllCiJob: boolean;
|
|
12
|
+
isCiStateSuccess: boolean;
|
|
13
|
+
isBranchOutOfDate: boolean;
|
|
14
|
+
missingRequiredCheckNames: string[];
|
|
15
|
+
};
|
|
16
|
+
export type PullRequestStatusResponse = {
|
|
17
|
+
found: boolean;
|
|
18
|
+
status: PullRequestStatus | null;
|
|
19
|
+
};
|
|
8
20
|
export declare class IssueTitleStateCache {
|
|
9
21
|
private readonly nowMs;
|
|
10
22
|
private readonly entries;
|
|
@@ -12,6 +24,13 @@ export declare class IssueTitleStateCache {
|
|
|
12
24
|
get: (url: string) => IssueOrPullRequestState | null;
|
|
13
25
|
set: (url: string, state: IssueOrPullRequestState) => void;
|
|
14
26
|
}
|
|
27
|
+
export declare class PullRequestStatusCache {
|
|
28
|
+
private readonly nowMs;
|
|
29
|
+
private readonly entries;
|
|
30
|
+
constructor(nowMs?: () => number);
|
|
31
|
+
get: (url: string) => PullRequestStatusResponse | null;
|
|
32
|
+
set: (url: string, status: PullRequestStatusResponse) => void;
|
|
33
|
+
}
|
|
15
34
|
export type ConsoleReadApiResponse = {
|
|
16
35
|
statusCode: number;
|
|
17
36
|
body: unknown;
|
|
@@ -41,4 +60,5 @@ export declare const handlePrFiles: (issueRepository: IssueRepository, url: stri
|
|
|
41
60
|
export declare const handlePrCommits: (issueRepository: IssueRepository, url: string | null) => Promise<ConsoleReadApiResponse>;
|
|
42
61
|
export declare const handleRelatedPrs: (issueRepository: IssueRepository, url: string | null) => Promise<ConsoleReadApiResponse>;
|
|
43
62
|
export declare const handleIssueTitle: (issueRepository: IssueRepository, cache: IssueTitleStateCache, url: string | null) => Promise<ConsoleReadApiResponse>;
|
|
63
|
+
export declare const handlePullRequestStatus: (issueRepository: IssueRepository, cache: PullRequestStatusCache, url: string | null) => Promise<ConsoleReadApiResponse>;
|
|
44
64
|
//# sourceMappingURL=consoleReadApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consoleReadApi.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleReadApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAGhB,MAAM,6DAA6D,CAAC;AAErE,eAAO,MAAM,wBAAwB,QAAa,CAAC;AAEnD,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"consoleReadApi.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleReadApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as http from 'http';
|
|
2
2
|
import { IssueRepository } from '../../../domain/usecases/adapter-interfaces/IssueRepository';
|
|
3
|
-
import { IssueTitleStateCache } from './consoleReadApi';
|
|
3
|
+
import { IssueTitleStateCache, PullRequestStatusCache } from './consoleReadApi';
|
|
4
4
|
import { ConsoleProjectResolver } from './consoleOperationApi';
|
|
5
5
|
import { ImageFetcher } from './consoleImageProxy';
|
|
6
6
|
export declare const DEFAULT_WEB_PORT = 9981;
|
|
@@ -24,6 +24,7 @@ export type WebServerOptions = {
|
|
|
24
24
|
issueRepository?: IssueRepository | null;
|
|
25
25
|
resolveProject?: ConsoleProjectResolver | null;
|
|
26
26
|
issueTitleStateCache?: IssueTitleStateCache | null;
|
|
27
|
+
pullRequestStatusCache?: PullRequestStatusCache | null;
|
|
27
28
|
};
|
|
28
29
|
export declare const DASHBOARD_REQUEST_PATH = "/tdpm.txt";
|
|
29
30
|
export declare const IMAGE_PROXY_REQUEST_PATH = "/api/img";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webServer.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/webServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAM9F,OAAO,EACL,oBAAoB,
|
|
1
|
+
{"version":3,"file":"webServer.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/webServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAM9F,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EAQvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,sBAAsB,EAMvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAqB,MAAM,qBAAqB,CAAC;AAOtE,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,eAAO,MAAM,+BAA+B,UAA0B,CAAC;AAEvE,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAmCjD,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,KAAG,OAGiB,CAAC;AAEtE,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,KAAG,OAGrB,CAAC;AAIhC,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,KAAG,OAmBvD,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,eAAe,MAAM,EACrB,eAAe,MAAM,GAAG,IAAI,KAC3B,OAAoE,CAAC;AAExE,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EACpC,aAAa,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,KACzC,MAAM,GAAG,IAQX,CAAC;AAuCF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC/C,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,sBAAsB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACxD,CAAC;AAMF,eAAO,MAAM,sBAAsB,cAAc,CAAC;AAElD,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAInD,eAAO,MAAM,wBAAwB,GACnC,cAAc,MAAM,EACpB,aAAa,MAAM,KAClB,MAAM,GAAG,IAWX,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,eAAe,MAAM,EACrB,aAAa,MAAM,KAClB,MAAM,GAAG,IAeX,CAAC;AAoVF,eAAO,MAAM,uBAAuB,GAClC,SAAS,gBAAgB,EACzB,aAAa,MAAM,KAClB,MAAM,GAAG,IAeX,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,gBAAgB,EACzB,SAAS,IAAI,CAAC,eAAe,EAC7B,UAAU,IAAI,CAAC,cAAc,KAC5B,OAAO,CAAC,IAAI,CAwEd,CAAC;AAcF,eAAO,MAAM,eAAe,GAAI,SAAS,gBAAgB,KAAG,IAAI,CAAC,MAM7D,CAAC;AAEL,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,qBAAqB,KAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAQlB,CAAC"}
|