react-terminal-viewer-cicd 3.0.0-beta.45 → 3.0.0-beta.46
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/esm/Addon/WorkerLog/LogWorker.js +1 -1
- package/dist/esm/PipelineLogViewer/hooks/useLogFetcher.d.ts.map +1 -1
- package/dist/esm/PipelineLogViewer/hooks/useLogFetcher.js +12 -9
- package/dist/esm/PipelineLogViewer/hooks/useStickyHeader.d.ts.map +1 -1
- package/dist/esm/PipelineLogViewer/hooks/useStickyHeader.js +24 -15
- package/dist/worker/src/PipelineLogViewer/hooks/useGroupSnapshotCache.d.ts +38 -0
- package/dist/worker/src/PipelineLogViewer/hooks/useProactiveGroupSnapshot.d.ts +17 -0
- package/dist/worker/src/PipelineLogViewer/utils/pipelineLineNumberColumn.d.ts +7 -0
- package/dist/worker/src/PipelineLogViewer/utils/processAnsiLogs.d.ts +3 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function LogWorker() {
|
|
2
2
|
var workerPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '/worker';
|
|
3
3
|
var worker = null;
|
|
4
|
-
var version = "3.0.0-beta.
|
|
4
|
+
var version = "3.0.0-beta.46" || '0.0.0';
|
|
5
5
|
var path = workerPath.includes('http') ? "".concat(workerPath, "/log.worker.js") : "".concat(window.location.origin).concat(workerPath, "/log.worker.js");
|
|
6
6
|
var blob = new Blob(["importScripts(\"".concat(path, "?v=").concat(version, "\")")], {
|
|
7
7
|
type: 'application/javascript'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLogFetcher.d.ts","sourceRoot":"","sources":["../../../../src/PipelineLogViewer/hooks/useLogFetcher.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,aAAa,EACb,QAAQ,EACR,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,UAAU,oBAAoB;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEvF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,8BAA8B;IAC9B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,WAAW;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY;IACZ,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,gDAAgD;IAChD,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,+DAA+D;IAC/D,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,OAAO,CAAC;IACjC,iDAAiD;IACjD,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;QACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF;;;OAGG;IACH,8CAA8C;IAC9C,WAAW,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAC5D,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,0BAA0B;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB;IAClB,wBAAwB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAC7D,mCAAmC;IACnC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAeD;;;;;;;;GAQG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,
|
|
1
|
+
{"version":3,"file":"useLogFetcher.d.ts","sourceRoot":"","sources":["../../../../src/PipelineLogViewer/hooks/useLogFetcher.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,aAAa,EACb,QAAQ,EACR,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,UAAU,oBAAoB;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEvF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,8BAA8B;IAC9B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,WAAW;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY;IACZ,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,gDAAgD;IAChD,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,+DAA+D;IAC/D,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,OAAO,CAAC;IACjC,iDAAiD;IACjD,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;QACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF;;;OAGG;IACH,8CAA8C;IAC9C,WAAW,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAC5D,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,0BAA0B;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB;IAClB,wBAAwB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAC7D,mCAAmC;IACnC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAeD;;;;;;;;GAQG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CAkgBzE;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -628,23 +628,26 @@ function useLogFetcher(options) {
|
|
|
628
628
|
}
|
|
629
629
|
return _context5.abrupt("return");
|
|
630
630
|
case 2:
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
631
|
+
tasks = []; // 防打扰:若用户在向上查阅历史,暂停日志自动追加(不阻断分组列表刷新)
|
|
632
|
+
if (!isUserBrowsingHistory) {
|
|
633
|
+
tasks.push(initLoad({
|
|
634
|
+
silent: true
|
|
635
|
+
}));
|
|
634
636
|
}
|
|
635
|
-
tasks = [initLoad({
|
|
636
|
-
silent: true
|
|
637
|
-
})];
|
|
638
637
|
if (runningPollSync) {
|
|
639
638
|
tasks.push(runningPollSync());
|
|
640
639
|
}
|
|
641
|
-
|
|
640
|
+
if (!(tasks.length > 0)) {
|
|
641
|
+
_context5.next = 8;
|
|
642
|
+
break;
|
|
643
|
+
}
|
|
644
|
+
_context5.next = 8;
|
|
642
645
|
return Promise.all(tasks).catch(function (err) {
|
|
643
646
|
console.error('[PipelineLogViewer] running poll failed:', err);
|
|
644
647
|
});
|
|
645
|
-
case 7:
|
|
646
|
-
if (!cancelled && mountedRef.current) scheduleNext();
|
|
647
648
|
case 8:
|
|
649
|
+
if (!cancelled && mountedRef.current) scheduleNext();
|
|
650
|
+
case 9:
|
|
648
651
|
case "end":
|
|
649
652
|
return _context5.stop();
|
|
650
653
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStickyHeader.d.ts","sourceRoot":"","sources":["../../../../src/PipelineLogViewer/hooks/useStickyHeader.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,UAAU,sBAAsB;IAC9B,WAAW;IACX,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,UAAU,qBAAqB;IAC7B,0CAA0C;IAC1C,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACzE;AA6CD;;GAEG;AACH,iBAAS,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,
|
|
1
|
+
{"version":3,"file":"useStickyHeader.d.ts","sourceRoot":"","sources":["../../../../src/PipelineLogViewer/hooks/useStickyHeader.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,UAAU,sBAAsB;IAC9B,WAAW;IACX,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,UAAU,qBAAqB;IAC7B,0CAA0C;IAC1C,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACzE;AA6CD;;GAEG;AACH,iBAAS,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAoD/E;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -14,7 +14,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
14
14
|
// 与下一组 start 计算有效区间
|
|
15
15
|
// ============================================================================
|
|
16
16
|
|
|
17
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
17
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
18
18
|
/** 提前探测行数:让吸顶分组在边界前更早感知切换趋势 */
|
|
19
19
|
var STICKY_LEAD_ROWS = 2;
|
|
20
20
|
/**
|
|
@@ -59,19 +59,8 @@ function useStickyHeader(options) {
|
|
|
59
59
|
_useState2 = _slicedToArray(_useState, 2),
|
|
60
60
|
stickyGroup = _useState2[0],
|
|
61
61
|
setStickyGroup = _useState2[1];
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
useEffect(function () {
|
|
65
|
-
if (stickyGroup) {
|
|
66
|
-
var updatedGroup = groups.find(function (g) {
|
|
67
|
-
return g.name === stickyGroup.name;
|
|
68
|
-
});
|
|
69
|
-
if (updatedGroup && updatedGroup.status !== stickyGroup.status) {
|
|
70
|
-
setStickyGroup(updatedGroup);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}, [groups, stickyGroup]);
|
|
74
|
-
var handleRangeChanged = useCallback(function (absoluteTopRow, bufferEnd) {
|
|
62
|
+
var lastParamsRef = useRef(null);
|
|
63
|
+
var evaluateSticky = useCallback(function (absoluteTopRow, bufferEnd) {
|
|
75
64
|
if (groups.length === 0) {
|
|
76
65
|
setStickyGroup(null);
|
|
77
66
|
return;
|
|
@@ -88,8 +77,28 @@ function useStickyHeader(options) {
|
|
|
88
77
|
setStickyGroup(null);
|
|
89
78
|
return;
|
|
90
79
|
}
|
|
91
|
-
setStickyGroup(
|
|
80
|
+
setStickyGroup(function (prev) {
|
|
81
|
+
// 如果吸顶分组名和状态没变,直接返回原引用以避免不必要的重新渲染
|
|
82
|
+
if ((prev === null || prev === void 0 ? void 0 : prev.name) === nextStickyGroup.name && (prev === null || prev === void 0 ? void 0 : prev.status) === nextStickyGroup.status) {
|
|
83
|
+
return prev;
|
|
84
|
+
}
|
|
85
|
+
return nextStickyGroup;
|
|
86
|
+
});
|
|
92
87
|
}, [groups]);
|
|
88
|
+
var handleRangeChanged = useCallback(function (absoluteTopRow, bufferEnd) {
|
|
89
|
+
lastParamsRef.current = {
|
|
90
|
+
absoluteTopRow: absoluteTopRow,
|
|
91
|
+
bufferEnd: bufferEnd
|
|
92
|
+
};
|
|
93
|
+
evaluateSticky(absoluteTopRow, bufferEnd);
|
|
94
|
+
}, [evaluateSticky]);
|
|
95
|
+
|
|
96
|
+
// 当外部的 groups 更新时,重新触发计算,避免只在滚动时才能展示新分组的吸顶头
|
|
97
|
+
useEffect(function () {
|
|
98
|
+
if (lastParamsRef.current) {
|
|
99
|
+
evaluateSticky(lastParamsRef.current.absoluteTopRow, lastParamsRef.current.bufferEnd);
|
|
100
|
+
}
|
|
101
|
+
}, [evaluateSticky]);
|
|
93
102
|
return {
|
|
94
103
|
stickyGroup: stickyGroup,
|
|
95
104
|
handleRangeChanged: handleRangeChanged
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { LogEntry } from '../types';
|
|
2
|
+
/** 单个分组的日志快照 */
|
|
3
|
+
export interface GroupSnapshot {
|
|
4
|
+
/** 分组名称(唯一索引) */
|
|
5
|
+
groupName: string;
|
|
6
|
+
/** 快照覆盖的起始绝对行号 */
|
|
7
|
+
startRow: number;
|
|
8
|
+
/** 快照覆盖的结束绝对行号 */
|
|
9
|
+
endRow: number;
|
|
10
|
+
/** 该分组范围内的日志条目(已经过 ANSI 处理) */
|
|
11
|
+
logs: LogEntry[];
|
|
12
|
+
/** 快照创建时间戳(用于可能的 LRU 淘汰) */
|
|
13
|
+
createdAt: number;
|
|
14
|
+
}
|
|
15
|
+
interface UseGroupSnapshotCacheReturn {
|
|
16
|
+
/** 按分组名获取快照 */
|
|
17
|
+
getSnapshot: (groupName: string) => GroupSnapshot | undefined;
|
|
18
|
+
/** 写入/更新分组快照 */
|
|
19
|
+
setSnapshot: (snapshot: GroupSnapshot) => void;
|
|
20
|
+
/** 删除指定分组快照(折叠时清理) */
|
|
21
|
+
removeSnapshot: (groupName: string) => void;
|
|
22
|
+
/** 清空所有快照(collapseAll / expandAll / reset 时) */
|
|
23
|
+
clearAll: () => void;
|
|
24
|
+
/** 当前所有快照的不可变 Map(供 useDisplayLogs 作为依赖) */
|
|
25
|
+
snapshots: Map<string, GroupSnapshot>;
|
|
26
|
+
/** 判断某绝对行号是否落在任一快照区间内 */
|
|
27
|
+
isRowInSnapshot: (absoluteRow: number) => boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 分组日志快照缓存 Hook
|
|
31
|
+
*
|
|
32
|
+
* 核心策略:
|
|
33
|
+
* 1. 使用 Map<string, GroupSnapshot> 按分组名存储快照
|
|
34
|
+
* 2. 每次写入/删除都产生新的 Map 引用以触发 React 重渲染
|
|
35
|
+
* 3. 同时维护 ref 供同步读取(避免 stale closure)
|
|
36
|
+
*/
|
|
37
|
+
declare function useGroupSnapshotCache(): UseGroupSnapshotCacheReturn;
|
|
38
|
+
export default useGroupSnapshotCache;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FetchLogParams, GroupData, LogDataResult } from '../types';
|
|
2
|
+
import type { GroupSnapshot } from './useGroupSnapshotCache';
|
|
3
|
+
interface UseProactiveGroupSnapshotOptions {
|
|
4
|
+
groups: GroupData[];
|
|
5
|
+
collapsedGroups: Set<string>;
|
|
6
|
+
currentStartRow: number;
|
|
7
|
+
currentEndRow: number;
|
|
8
|
+
loading: boolean;
|
|
9
|
+
snapshotCache: {
|
|
10
|
+
snapshots: Map<string, GroupSnapshot>;
|
|
11
|
+
setSnapshot: (snapshot: GroupSnapshot) => void;
|
|
12
|
+
};
|
|
13
|
+
fetchLogs: (params: FetchLogParams) => Promise<LogDataResult>;
|
|
14
|
+
pageSize: number;
|
|
15
|
+
}
|
|
16
|
+
export default function useProactiveGroupSnapshot({ groups, collapsedGroups, currentStartRow, currentEndRow, loading, snapshotCache, fetchLogs, pageSize, }: UseProactiveGroupSnapshotOptions): void;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DisplayLogLine, GroupData } from '../types';
|
|
2
|
+
/** 控制日志:END_stepId_...(与 PipelineLogViewer itemContent 一致) */
|
|
3
|
+
export declare function isPipelineEndMarkerText(text: string): boolean;
|
|
4
|
+
/** 控制日志:START_stepId_... */
|
|
5
|
+
export declare function isPipelineStartMarkerText(text: string): boolean;
|
|
6
|
+
export declare function maxPipelineLineNumberCellDigitValueInDisplayIndexRange(displayLogs: DisplayLogLine[], fromIndex: number, toIndex: number, groups: GroupData[], pipelineMinAbsoluteRow: number): number;
|
|
7
|
+
export declare function lineNumberColumnWidthPxForMaxValue(maxValue: number): number;
|