dsh-group-status 0.3.0 → 0.4.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 +12 -0
- package/README.en.md +6 -6
- package/README.md +6 -6
- package/lib/client.js +1122 -183
- package/lib/client.js.map +1 -1
- package/lib/types/client/contract/slots.d.ts +39 -21
- package/lib/types/client/contract/slots.d.ts.map +1 -1
- package/lib/types/client/contract/slots.js.map +1 -1
- package/lib/types/client/contract/toast.d.ts +67 -0
- package/lib/types/client/contract/toast.d.ts.map +1 -0
- package/lib/types/client/contract/toast.js +2 -0
- package/lib/types/client/contract/toast.js.map +1 -0
- package/lib/types/client/index.d.ts +6 -3
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +48 -13
- package/lib/types/client/index.js.map +1 -1
- package/lib/types/client/locales.d.ts +14 -0
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/locales.js +14 -0
- package/lib/types/client/locales.js.map +1 -1
- package/lib/types/client/navigation.d.ts +45 -12
- package/lib/types/client/navigation.d.ts.map +1 -1
- package/lib/types/client/navigation.js +102 -26
- package/lib/types/client/navigation.js.map +1 -1
- package/lib/types/client/rows/Rows.d.ts.map +1 -1
- package/lib/types/client/rows/Rows.js +4 -4
- package/lib/types/client/rows/Rows.js.map +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.d.ts +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.d.ts.map +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.js +54 -50
- package/lib/types/client/rows/WorkspaceBrowser.js.map +1 -1
- package/lib/types/client/session-actions/ArchiveSession.js +1 -1
- package/lib/types/client/session-actions/ArchiveSession.js.map +1 -1
- package/lib/types/client/session-actions/ForkSession.d.ts +5 -4
- package/lib/types/client/session-actions/ForkSession.d.ts.map +1 -1
- package/lib/types/client/session-actions/ForkSession.js +7 -4
- package/lib/types/client/session-actions/ForkSession.js.map +1 -1
- package/lib/types/client/session-actions/PinSession.js +1 -1
- package/lib/types/client/session-actions/PinSession.js.map +1 -1
- package/lib/types/client/session-actions/RowActionToast.d.ts +5 -8
- package/lib/types/client/session-actions/RowActionToast.d.ts.map +1 -1
- package/lib/types/client/session-actions/RowActionToast.js +10 -49
- package/lib/types/client/session-actions/RowActionToast.js.map +1 -1
- package/lib/types/client/session-actions/SessionId.d.ts +8 -0
- package/lib/types/client/session-actions/SessionId.d.ts.map +1 -0
- package/lib/types/client/session-actions/SessionId.js +16 -0
- package/lib/types/client/session-actions/SessionId.js.map +1 -0
- package/lib/types/client/session-watermarks.d.ts +30 -0
- package/lib/types/client/session-watermarks.d.ts.map +1 -0
- package/lib/types/client/session-watermarks.js +54 -0
- package/lib/types/client/session-watermarks.js.map +1 -0
- package/lib/types/client/shortcuts.d.ts +2 -7
- package/lib/types/client/shortcuts.d.ts.map +1 -1
- package/lib/types/client/shortcuts.js +7 -11
- package/lib/types/client/shortcuts.js.map +1 -1
- package/lib/types/client/toast/Toast.d.ts +41 -0
- package/lib/types/client/toast/Toast.d.ts.map +1 -0
- package/lib/types/client/toast/Toast.js +44 -0
- package/lib/types/client/toast/Toast.js.map +1 -0
- package/lib/types/client/toast/register.d.ts +11 -0
- package/lib/types/client/toast/register.d.ts.map +1 -0
- package/lib/types/client/toast/register.js +162 -0
- package/lib/types/client/toast/register.js.map +1 -0
- package/package.json +33 -30
- package/lib/types/client/legacy/bridge.d.ts +0 -30
- package/lib/types/client/legacy/bridge.d.ts.map +0 -1
- package/lib/types/client/legacy/bridge.js +0 -58
- package/lib/types/client/legacy/bridge.js.map +0 -1
- package/lib/types/client/legacy/register-legacy-facets.d.ts +0 -14
- package/lib/types/client/legacy/register-legacy-facets.d.ts.map +0 -1
- package/lib/types/client/legacy/register-legacy-facets.js +0 -77
- package/lib/types/client/legacy/register-legacy-facets.js.map +0 -1
- package/lib/types/client/legacy/schedule.d.ts +0 -49
- package/lib/types/client/legacy/schedule.d.ts.map +0 -1
- package/lib/types/client/legacy/schedule.js +0 -73
- package/lib/types/client/legacy/schedule.js.map +0 -1
- package/lib/types/client/legacy/store-source.d.ts +0 -78
- package/lib/types/client/legacy/store-source.d.ts.map +0 -1
- package/lib/types/client/legacy/store-source.js +0 -82
- package/lib/types/client/legacy/store-source.js.map +0 -1
- package/lib/types/client/legacy/waiting-review.d.ts +0 -85
- package/lib/types/client/legacy/waiting-review.d.ts.map +0 -1
- package/lib/types/client/legacy/waiting-review.js +0 -179
- package/lib/types/client/legacy/waiting-review.js.map +0 -1
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import type { FacetFold, FacetRenderContext, GroupStatusFacet } from '../facets.ts';
|
|
2
|
-
/** facet id:与 dsh-gitea-dispatch 自己注册时应当使用的 id 保持一致。 */
|
|
3
|
-
export declare const WAITING_REVIEW_FACET_ID = "dsh-gitea-dispatch.waiting-review";
|
|
4
|
-
/**
|
|
5
|
-
* 一条等待评审事实,来自 dsh-gitea-dispatch 的 `useWaitingSummary()`
|
|
6
|
-
* (issue: dsh-gitea-dispatch#16)。
|
|
7
|
-
*
|
|
8
|
-
* 可选字段是提供方契约的一部分:正是它们让徽标能说「在等哪个 PR」「还剩多久」。
|
|
9
|
-
* 本类型此前只声明 `{ prNumber, state }`,于是提供方已经取回的信息被静默丢掉。
|
|
10
|
-
*/
|
|
11
|
-
export interface WaitingReviewSummaryEntry {
|
|
12
|
-
readonly prNumber: number;
|
|
13
|
-
readonly state: 'waiting' | 'overdue';
|
|
14
|
-
/** 等待起点(宿主 state 里是 epoch ms,过 wire 可能是 ISO 字符串)。 */
|
|
15
|
-
readonly startedAt?: number | string;
|
|
16
|
-
/** CI 声明的等待上限(秒);缺省 = 时长未知。 */
|
|
17
|
-
readonly waitMaxSec?: number;
|
|
18
|
-
/** CI 声明的绝对截止(epoch ms);优先于 `startedAt + waitMaxSec`。 */
|
|
19
|
-
readonly deadline?: number;
|
|
20
|
-
}
|
|
21
|
-
/** 会话 id → 该会话的等待事实(没有条目 = 没在等)。 */
|
|
22
|
-
export type WaitingReviewSummaryMap = ReadonlyMap<string, WaitingReviewSummaryEntry>;
|
|
23
|
-
/** 提供方 `summarizeWaitingGroup()` 的折果形状。 */
|
|
24
|
-
export interface WaitingReviewFold {
|
|
25
|
-
/** 组内**在等**的会话数。 */
|
|
26
|
-
sessions: number;
|
|
27
|
-
/** 组内在等的 PR 号(按传入会话顺序)。 */
|
|
28
|
-
prNumbers: readonly number[];
|
|
29
|
-
/** 组内最高优先级状态:overdue > waiting。 */
|
|
30
|
-
state: 'waiting' | 'overdue' | undefined;
|
|
31
|
-
/** 组内**尚未到点**的最早截止(epoch ms);无则缺省。 */
|
|
32
|
-
nextDeadline?: number;
|
|
33
|
-
}
|
|
34
|
-
/** 提供方的分组聚合函数面。 */
|
|
35
|
-
export type WaitingReviewSummarizer = (summary: WaitingReviewSummaryMap, sessionIds: readonly string[], now: number) => WaitingReviewFold;
|
|
36
|
-
/** 等待折果携带的数据:徽标从不解释它,只有本 facet 读。 */
|
|
37
|
-
export interface WaitingReviewData {
|
|
38
|
-
readonly prNumbers: readonly number[];
|
|
39
|
-
readonly state: 'waiting' | 'overdue' | undefined;
|
|
40
|
-
readonly nextDeadline?: number;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* 一条等待的绝对截止(epoch ms);`undefined` = 时长未知。
|
|
44
|
-
*
|
|
45
|
-
* 刻意与提供方的 `deadlineOf` 同口径(绝对 deadline 优先,才退 `startedAt + waitMaxSec`):
|
|
46
|
-
* CI 的等待从"进入循环"起算,而广播在此之前已发出,只按时长算会让徽标的倒计时晚于
|
|
47
|
-
* 真实截止(其 Issues #2577)。`startedAt` 的两种形态同理都要认。
|
|
48
|
-
*/
|
|
49
|
-
export declare function waitingDeadlineOf(entry: WaitingReviewSummaryEntry): number | undefined;
|
|
50
|
-
/**
|
|
51
|
-
* 提供方聚合面缺席时的等价折叠。
|
|
52
|
-
*
|
|
53
|
-
* 与提供方的 `summarizeWaitingGroup()` 同一套判据:四形态 id 兜底(复用
|
|
54
|
-
* `cross-plugin-summary.ts` 的 `entryFor`,规则与它的 `waitingEntryFor` 相同)、
|
|
55
|
-
* `overdue > waiting` 排序、只把**未到期**的截止算作 `nextDeadline`。
|
|
56
|
-
*/
|
|
57
|
-
export declare function summarizeWaitingGroupLocally(summary: WaitingReviewSummaryMap, sessionIds: readonly string[], now: number): WaitingReviewFold;
|
|
58
|
-
/**
|
|
59
|
-
* 同 facet 跨层合并:PR 号取并集去重升序、色档取更紧急的一档、
|
|
60
|
-
* 倒计时取两侧更早的那个未到期截止。
|
|
61
|
-
*/
|
|
62
|
-
export declare function mergeWaitingReviewFold(a: FacetFold<WaitingReviewData>, b: FacetFold<WaitingReviewData>): FacetFold<WaitingReviewData>;
|
|
63
|
-
/** `#15, #2783(+2)`:去重升序、封顶三个。 */
|
|
64
|
-
export declare function prNumberList(prNumbers: readonly number[] | undefined): string;
|
|
65
|
-
/**
|
|
66
|
-
* 等待评审那一句文案:状态 + 剩余时长(分钟粒度)+ PR 号。
|
|
67
|
-
*
|
|
68
|
-
* 措辞与提供方自己的行内呈现同档(`等待评审 3:28` / `评审等待已超时` / `等待评审结果`),
|
|
69
|
-
* 但只到分钟:徽标只在提供方 store 通知时重渲染,秒级读数会停在旧值上撒谎。
|
|
70
|
-
*/
|
|
71
|
-
export declare function waitingReviewLabel(fold: FacetFold<WaitingReviewData>, context: FacetRenderContext): string;
|
|
72
|
-
/**
|
|
73
|
-
* 构造本插件内置的等待评审 facet。
|
|
74
|
-
*
|
|
75
|
-
* @param input - 提供方的摘要读取面;`summarize` 缺席时退回本地等价折叠。
|
|
76
|
-
* @param input.subscribe - 订阅快照变化(提供方 store 的订阅面)。
|
|
77
|
-
* @param input.getSnapshot - 读当前摘要 Map。
|
|
78
|
-
* @param input.summarize - 提供方的分组聚合(有则委托)。
|
|
79
|
-
*/
|
|
80
|
-
export declare function createWaitingReviewFacet(input: {
|
|
81
|
-
subscribe: (listener: () => void) => () => void;
|
|
82
|
-
getSnapshot: () => WaitingReviewSummaryMap | undefined;
|
|
83
|
-
summarize?: WaitingReviewSummarizer;
|
|
84
|
-
}): GroupStatusFacet<WaitingReviewSummaryMap | undefined, WaitingReviewData>;
|
|
85
|
-
//# sourceMappingURL=waiting-review.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"waiting-review.d.ts","sourceRoot":"","sources":["../../../../src/client/legacy/waiting-review.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAa,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAG9F,wDAAwD;AACxD,eAAO,MAAM,uBAAuB,sCAAsC,CAAA;AAI1E;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;IACrC,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,oCAAoC;AACpC,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;AAEpF,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,2BAA2B;IAC3B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,mCAAmC;IACnC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;IACxC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,mBAAmB;AACnB,MAAM,MAAM,uBAAuB,GAAG,CACpC,OAAO,EAAE,uBAAuB,EAChC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,GAAG,EAAE,MAAM,KACR,iBAAiB,CAAA;AAEtB,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,yBAAyB,GAAG,MAAM,GAAG,SAAS,CAgBtF;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,uBAAuB,EAChC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,GAAG,EAAE,MAAM,GACV,iBAAiB,CAoBnB;AAqBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAkBrI;AAED,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAM7E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAc1G;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;IAC/C,WAAW,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAA;IACtD,SAAS,CAAC,EAAE,uBAAuB,CAAA;CACpC,GAAG,gBAAgB,CAAC,uBAAuB,GAAG,SAAS,EAAE,iBAAiB,CAAC,CAkB3E"}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 过渡期适配器:dsh-gitea-dispatch 的「等待评审」→ facet。
|
|
3
|
-
*
|
|
4
|
-
* ⚠️ **本目录整体是临时的**。dsh-gitea-dispatch 自己按 `../facets.ts` 的协议注册之后
|
|
5
|
-
* (对应它的 issue「把摘要 API 升级为 facet 注册」),这个文件与 `schedule.ts`、
|
|
6
|
-
* `facet-icons.tsx` 一起删除,本插件不再认识任何具体状态源。
|
|
7
|
-
*
|
|
8
|
-
* 保留在 `legacy/` 而不是混进核心,是为了让"删除它"成为一次可执行的收尾,而不是一句
|
|
9
|
-
* 口头承诺:核心模块(`group-status.ts` / `badge-labels.ts` / `rows/GroupBadge.tsx`)
|
|
10
|
-
* 里没有任何 `waitingReview` 字样可寻。
|
|
11
|
-
*
|
|
12
|
-
* ## 为什么这里既读快照又自己折
|
|
13
|
-
*
|
|
14
|
-
* 提供方(issue #16)导出 `summarizeWaitingGroup()`。能用到就用它:id 口径、
|
|
15
|
-
* `overdue > waiting` 排序、截止时刻算法都是它的所有物,委托才不会再出现"提供方加了
|
|
16
|
-
* 字段而徽标不知道"的静默丢数据。它不导出(旧版本)时才用本文件的等价实现。
|
|
17
|
-
*
|
|
18
|
-
* @module dsh-group-status/client/legacy/waiting-review
|
|
19
|
-
*/
|
|
20
|
-
import { entryFor } from "../cross-plugin-summary.js";
|
|
21
|
-
import { GROUP_STATUS_FACET_PROTOCOL_VERSION } from "../facets.js";
|
|
22
|
-
/** facet id:与 dsh-gitea-dispatch 自己注册时应当使用的 id 保持一致。 */
|
|
23
|
-
export const WAITING_REVIEW_FACET_ID = 'dsh-gitea-dispatch.waiting-review';
|
|
24
|
-
/**
|
|
25
|
-
* 一条等待的绝对截止(epoch ms);`undefined` = 时长未知。
|
|
26
|
-
*
|
|
27
|
-
* 刻意与提供方的 `deadlineOf` 同口径(绝对 deadline 优先,才退 `startedAt + waitMaxSec`):
|
|
28
|
-
* CI 的等待从"进入循环"起算,而广播在此之前已发出,只按时长算会让徽标的倒计时晚于
|
|
29
|
-
* 真实截止(其 Issues #2577)。`startedAt` 的两种形态同理都要认。
|
|
30
|
-
*/
|
|
31
|
-
export function waitingDeadlineOf(entry) {
|
|
32
|
-
if (typeof entry.deadline === 'number' && Number.isFinite(entry.deadline))
|
|
33
|
-
return entry.deadline;
|
|
34
|
-
const started = typeof entry.startedAt === 'number'
|
|
35
|
-
? entry.startedAt
|
|
36
|
-
: typeof entry.startedAt === 'string' && entry.startedAt !== ''
|
|
37
|
-
? Date.parse(entry.startedAt)
|
|
38
|
-
: Number.NaN;
|
|
39
|
-
if (Number.isFinite(started)
|
|
40
|
-
&& typeof entry.waitMaxSec === 'number'
|
|
41
|
-
&& Number.isFinite(entry.waitMaxSec)
|
|
42
|
-
&& entry.waitMaxSec > 0) {
|
|
43
|
-
return started + entry.waitMaxSec * 1000;
|
|
44
|
-
}
|
|
45
|
-
return undefined;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* 提供方聚合面缺席时的等价折叠。
|
|
49
|
-
*
|
|
50
|
-
* 与提供方的 `summarizeWaitingGroup()` 同一套判据:四形态 id 兜底(复用
|
|
51
|
-
* `cross-plugin-summary.ts` 的 `entryFor`,规则与它的 `waitingEntryFor` 相同)、
|
|
52
|
-
* `overdue > waiting` 排序、只把**未到期**的截止算作 `nextDeadline`。
|
|
53
|
-
*/
|
|
54
|
-
export function summarizeWaitingGroupLocally(summary, sessionIds, now) {
|
|
55
|
-
const prNumbers = [];
|
|
56
|
-
let state;
|
|
57
|
-
let nextDeadline;
|
|
58
|
-
for (const sessionId of sessionIds) {
|
|
59
|
-
const entry = entryFor(summary, sessionId);
|
|
60
|
-
if (entry === undefined)
|
|
61
|
-
continue;
|
|
62
|
-
prNumbers.push(entry.prNumber);
|
|
63
|
-
if (entry.state === 'overdue')
|
|
64
|
-
state = 'overdue';
|
|
65
|
-
else if (state === undefined)
|
|
66
|
-
state = 'waiting';
|
|
67
|
-
const deadline = waitingDeadlineOf(entry);
|
|
68
|
-
// 已到点的条目由 `state: 'overdue'` 表达;把它算进倒计时会折出一个负数。
|
|
69
|
-
if (deadline !== undefined && deadline > now && (nextDeadline === undefined || deadline < nextDeadline)) {
|
|
70
|
-
nextDeadline = deadline;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const fold = { sessions: prNumbers.length, prNumbers, state };
|
|
74
|
-
// 用"缺键"而不是"键=undefined"对齐提供方:两条路径对下游必须不可区分。
|
|
75
|
-
if (nextDeadline !== undefined)
|
|
76
|
-
fold.nextDeadline = nextDeadline;
|
|
77
|
-
return fold;
|
|
78
|
-
}
|
|
79
|
-
/** 折果 `data` 的读取(本文件内部用)。 */
|
|
80
|
-
function dataOf(fold) {
|
|
81
|
-
return fold.data ?? { prNumbers: [], state: undefined };
|
|
82
|
-
}
|
|
83
|
-
/** 把提供方的折果装进 facet 形状(数量 / 色档 / 脉冲)。 */
|
|
84
|
-
function toFacetFold(source) {
|
|
85
|
-
const tone = source.state === 'overdue' ? 'error' : 'warn';
|
|
86
|
-
// 脉冲刻意不给等待评审的超时:提供方把 `overdue` 画成**静止**(其
|
|
87
|
-
// `lib/waiting-glyph.js`:「超时后停动画:静止即不再期待」),且它只代表 CI
|
|
88
|
-
// 窗口到期、不代表评审失败。同一条等待在行内静止、在父级闪动是两套说法。
|
|
89
|
-
// `nextDeadline` 缺键而不是 =undefined:与提供方的折果形状一致,也让两条折叠路径
|
|
90
|
-
// (委托 / 本地)对下游不可区分。
|
|
91
|
-
const data = source.nextDeadline === undefined
|
|
92
|
-
? { prNumbers: source.prNumbers, state: source.state }
|
|
93
|
-
: { prNumbers: source.prNumbers, state: source.state, nextDeadline: source.nextDeadline };
|
|
94
|
-
return { count: source.sessions, tone, pulse: false, data };
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* 同 facet 跨层合并:PR 号取并集去重升序、色档取更紧急的一档、
|
|
98
|
-
* 倒计时取两侧更早的那个未到期截止。
|
|
99
|
-
*/
|
|
100
|
-
export function mergeWaitingReviewFold(a, b) {
|
|
101
|
-
const left = dataOf(a);
|
|
102
|
-
const right = dataOf(b);
|
|
103
|
-
const prNumbers = [...new Set([...left.prNumbers, ...right.prNumbers])].sort((x, y) => x - y);
|
|
104
|
-
const state = left.state === 'overdue' || right.state === 'overdue'
|
|
105
|
-
? 'overdue'
|
|
106
|
-
: left.state ?? right.state;
|
|
107
|
-
const deadlines = [left.nextDeadline, right.nextDeadline].filter((v) => v !== undefined);
|
|
108
|
-
const nextDeadline = deadlines.length === 0 ? undefined : Math.min(...deadlines);
|
|
109
|
-
const data = nextDeadline === undefined
|
|
110
|
-
? { prNumbers, state }
|
|
111
|
-
: { prNumbers, state, nextDeadline };
|
|
112
|
-
return {
|
|
113
|
-
count: a.count + b.count,
|
|
114
|
-
tone: state === 'overdue' ? 'error' : 'warn',
|
|
115
|
-
pulse: a.pulse || b.pulse,
|
|
116
|
-
data,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
/** `#15, #2783(+2)`:去重升序、封顶三个。 */
|
|
120
|
-
export function prNumberList(prNumbers) {
|
|
121
|
-
if (prNumbers === undefined || prNumbers.length === 0)
|
|
122
|
-
return '';
|
|
123
|
-
const distinct = [...new Set(prNumbers)].sort((a, b) => a - b);
|
|
124
|
-
const shown = distinct.slice(0, 3).map(pr => `#${pr}`);
|
|
125
|
-
if (distinct.length > shown.length)
|
|
126
|
-
shown.push(`+${distinct.length - shown.length}`);
|
|
127
|
-
return shown.join(', ');
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* 等待评审那一句文案:状态 + 剩余时长(分钟粒度)+ PR 号。
|
|
131
|
-
*
|
|
132
|
-
* 措辞与提供方自己的行内呈现同档(`等待评审 3:28` / `评审等待已超时` / `等待评审结果`),
|
|
133
|
-
* 但只到分钟:徽标只在提供方 store 通知时重渲染,秒级读数会停在旧值上撒谎。
|
|
134
|
-
*/
|
|
135
|
-
export function waitingReviewLabel(fold, context) {
|
|
136
|
-
const t = context.t;
|
|
137
|
-
const data = dataOf(fold);
|
|
138
|
-
const phrase = (() => {
|
|
139
|
-
if (data.state === 'overdue')
|
|
140
|
-
return t('status.waitingReviewOverdue');
|
|
141
|
-
const deadline = data.nextDeadline;
|
|
142
|
-
if (deadline === undefined)
|
|
143
|
-
return t('status.waitingReview');
|
|
144
|
-
const left = Math.max(0, deadline - context.now);
|
|
145
|
-
if (left < 60_000)
|
|
146
|
-
return t('status.waitingReviewImminent');
|
|
147
|
-
if (left < 3_600_000)
|
|
148
|
-
return t('status.waitingReviewLeft', { time: t('time.minutes', { n: Math.floor(left / 60_000) }) });
|
|
149
|
-
return t('status.waitingReviewLeft', { time: t('time.hours', { n: Math.floor(left / 3_600_000) }) });
|
|
150
|
-
})();
|
|
151
|
-
const prs = prNumberList(data.prNumbers);
|
|
152
|
-
return prs === '' ? `${fold.count} ${phrase}` : `${fold.count} ${phrase} · ${prs}`;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* 构造本插件内置的等待评审 facet。
|
|
156
|
-
*
|
|
157
|
-
* @param input - 提供方的摘要读取面;`summarize` 缺席时退回本地等价折叠。
|
|
158
|
-
* @param input.subscribe - 订阅快照变化(提供方 store 的订阅面)。
|
|
159
|
-
* @param input.getSnapshot - 读当前摘要 Map。
|
|
160
|
-
* @param input.summarize - 提供方的分组聚合(有则委托)。
|
|
161
|
-
*/
|
|
162
|
-
export function createWaitingReviewFacet(input) {
|
|
163
|
-
const summarize = input.summarize ?? summarizeWaitingGroupLocally;
|
|
164
|
-
return {
|
|
165
|
-
protocol: GROUP_STATUS_FACET_PROTOCOL_VERSION,
|
|
166
|
-
id: WAITING_REVIEW_FACET_ID,
|
|
167
|
-
origin: 'legacy',
|
|
168
|
-
settingKey: 'showWaitingReviewInBadge',
|
|
169
|
-
order: 20,
|
|
170
|
-
subscribe: input.subscribe,
|
|
171
|
-
getSnapshot: input.getSnapshot,
|
|
172
|
-
fold: (snapshot, sessionIds, now) => toFacetFold(snapshot === undefined || sessionIds.length === 0
|
|
173
|
-
? { sessions: 0, prNumbers: [], state: undefined }
|
|
174
|
-
: summarize(snapshot, sessionIds, now)),
|
|
175
|
-
merge: mergeWaitingReviewFold,
|
|
176
|
-
label: waitingReviewLabel,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
//# sourceMappingURL=waiting-review.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"waiting-review.js","sourceRoot":"","sources":["../../../../src/client/legacy/waiting-review.ts"],"names":[],"mappings":"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"}
|