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.
@@ -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.45" || '0.0.0';
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,CA+fzE;AAED,eAAe,aAAa,CAAC"}
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
- if (isUserBrowsingHistory) {
632
- _context5.next = 7;
633
- break;
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
- _context5.next = 7;
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,CAsC/E;AAED,eAAe,eAAe,CAAC"}
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
- // 当外部的 groups 更新时,如果当前有吸顶的分组,更新其状态
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(nextStickyGroup);
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;
@@ -0,0 +1,3 @@
1
+ import type { LogEntry } from '../types';
2
+ declare const processAnsiLogs: (logs: LogEntry[]) => LogEntry[];
3
+ export default processAnsiLogs;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-terminal-viewer-cicd",
3
- "version": "3.0.0-beta.45",
3
+ "version": "3.0.0-beta.46",
4
4
  "author": "https://gitee.com/gitee-frontend",
5
5
  "license": "MIT",
6
6
  "keywords": [