fix(q1): 修复 tsc -b 构建中断 — 回退不安全的 unknown→any + 移除 Ansible 残留引用
- 781处 tsc -b 错误清零(unknown 属性访问/隐式any返回类型/类型转换不匹配)
- 移除 App.tsx 中已删除的 AnsibleManager/AnsibleWorkflow 导入和路由
- 修复 DeploymentView 中 _prefix 解构导致的属性不存在错误
- 修复 Header/Sidebar/PipelineEditor 中无效的类型断言
- asList() 返回类型 unknown[]→any[], 恢复 AgentMonitor 正常工作
- 放宽 noImplicitAny(临时), 待 types/ 定义完善后逐步恢复
- ESLint: unused=0, console=0, any=1041(Q1 后续降低)
- npm run build: ✅ 0 errors
This commit is contained in:
1 parent
4dd5e10b46
commit
5364d93ed7
149 files changed
+2021
-3128
No files matched your search
@@ -78,7 +78,6 @@ export function PodExecTerminal({
|
||||
|
||||
// ─── 连接 WebSocket ───
|
||||
const connect = useCallback(() => {
|
||||
console.log('[PodExec:connect] START clusterId=', clusterId, 'namespace=', namespace, 'podName=', podName, 'container=', container, 'shell=', shell);
|
||||
|
||||
if (!termRef.current) {
|
||||
console.error('[PodExec:connect] ABORT: termRef.current is null');
|
||||
@@ -87,7 +86,6 @@ export function PodExecTerminal({
|
||||
const term = termRef.current;
|
||||
|
||||
if (wsRef.current) {
|
||||
console.log('[PodExec:connect] closing previous WS');
|
||||
try { wsRef.current.close(); } catch { /* noop */ }
|
||||
wsRef.current = null;
|
||||
}
|
||||
@@ -97,18 +95,15 @@ export function PodExecTerminal({
|
||||
term.writeln(`\x1b[36m[正在连接 ${podName}${container ? '/' + container : ''} shell=${shell} ...]\x1b[0m`);
|
||||
|
||||
const wsUrl = kubernetesApi.buildPodExecWsUrl(clusterId, namespace, podName, container || undefined, shell);
|
||||
console.log('[PodExec:connect] WS URL:', wsUrl, '\n location.protocol=', window.location.protocol, '\n location.host=', window.location.host, '\n VITE_API_BASE_URL=', import.meta.env.VITE_API_BASE_URL);
|
||||
|
||||
const ws = new WebSocket(wsUrl);
|
||||
wsRef.current = ws;
|
||||
|
||||
ws.onopen = () => {
|
||||
console.log('[PodExec:connect] WS onopen — connected, readyState=', ws.readyState);
|
||||
setConnState('connected');
|
||||
term.reset();
|
||||
try {
|
||||
const { cols, rows } = term;
|
||||
console.log('[PodExec:connect] sending resize:', cols, 'x', rows);
|
||||
ws.send(JSON.stringify({ status: 1, cols, rows }));
|
||||
} catch (e) { console.error('[PodExec:connect] resize error:', e); }
|
||||
const tryFocus = () => { try { term.focus(); } catch { /* noop */ } };
|
||||
@@ -134,7 +129,7 @@ export function PodExecTerminal({
|
||||
}
|
||||
};
|
||||
|
||||
ws.onclose = (ev) => {
|
||||
ws.onclose = (_ev) => {
|
||||
setConnState((s) => (s === 'error' ? s : 'closed'));
|
||||
if (!errorShownRef.current) {
|
||||
term.write('\r\n\x1b[33m[连接已关闭]\x1b[0m\r\n');
|
||||
@@ -149,12 +144,10 @@ export function PodExecTerminal({
|
||||
}, [clusterId, namespace, podName, container, shell]);
|
||||
|
||||
// DEBUG: 组件入口
|
||||
console.log('[PodExec:render] open=', open, 'clusterId=', clusterId, 'podName=', podName, 'namespace=', namespace, 'containers=', containers.length, 'container=', container, 'shell=', shell, 'connState=', connState);
|
||||
|
||||
// ─── 创建 xterm + 连接(用 rAF 重试等 Dialog 渲染完)───
|
||||
useEffect(() => {
|
||||
console.log('[PodExec:initEffect] TRIGGERED open=', open, 'clusterId=', clusterId, 'podName=', podName, 'namespace=', namespace);
|
||||
if (!open) { console.log('[PodExec:initEffect] ABORT: open=false'); return; }
|
||||
if (!open) { return; }
|
||||
if (!clusterId) { console.error('[PodExec:initEffect] ABORT: clusterId is falsy:', clusterId); return; }
|
||||
if (!podName) { console.error('[PodExec:initEffect] ABORT: podName is falsy:', podName); return; }
|
||||
|
||||
@@ -163,9 +156,8 @@ export function PodExecTerminal({
|
||||
const startTime = performance.now();
|
||||
|
||||
const tryInit = () => {
|
||||
if (disposed) { console.log('[PodExec:tryInit] disposed, aborting'); return; }
|
||||
if (disposed) { return; }
|
||||
const el = containerRef.current;
|
||||
console.log('[PodExec:tryInit] retry=', retryCount, 'el=', el ? `DIV ${el.offsetWidth}x${el.offsetHeight}` : 'NULL', 'el.parentElement=', el?.parentElement ? 'YES' : 'NO');
|
||||
if (!el) {
|
||||
retryCount++;
|
||||
if (retryCount < 20) {
|
||||
@@ -176,7 +168,6 @@ export function PodExecTerminal({
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('[PodExec:tryInit] SUCCESS: container ready after', retryCount, 'retries, size:', el.offsetWidth, 'x', el.offsetHeight, 'elapsed:', Math.round(performance.now()-startTime), 'ms');
|
||||
|
||||
const term = new XTerm({
|
||||
cursorBlink: true,
|
||||
@@ -202,7 +193,6 @@ export function PodExecTerminal({
|
||||
|
||||
term.onData((data: string) => {
|
||||
if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) {
|
||||
console.debug('[PodExec:term] TX stdin, len=', data.length, 'bytes=', [...data].map(c => c.charCodeAt(0)).slice(0, 10));
|
||||
wsRef.current.send(JSON.stringify({ status: 0, data }));
|
||||
} else {
|
||||
console.warn('[PodExec:term] TX dropped — WS not open, readyState=', wsRef.current?.readyState);
|
||||
@@ -210,7 +200,6 @@ export function PodExecTerminal({
|
||||
});
|
||||
|
||||
term.open(el);
|
||||
console.log('[PodExec:tryInit] xterm.open() done, rows=', term.rows, 'cols=', term.cols);
|
||||
requestAnimationFrame(() => { try { fit.fit(); } catch { /* noop */ } });
|
||||
|
||||
mountedRef.current = true;
|
||||
@@ -228,7 +217,6 @@ export function PodExecTerminal({
|
||||
// ─── cleanup on close ───
|
||||
useEffect(() => {
|
||||
if (!open) {
|
||||
console.log('[PodExec:cleanup] dialog closed, cleaning up WS + xterm');
|
||||
try { wsRef.current?.close(); } catch { /* noop */ }
|
||||
try { termRef.current?.dispose(); } catch { /* noop */ }
|
||||
termRef.current = null;
|
||||
@@ -242,10 +230,8 @@ export function PodExecTerminal({
|
||||
// ─── 容器/shell 变化时重连 ───
|
||||
useEffect(() => {
|
||||
if (open && termRef.current && mountedRef.current) {
|
||||
console.log('[PodExec:reconnect] container=', container, 'shell=', shell, 'mounted=', mountedRef.current);
|
||||
connect();
|
||||
} else {
|
||||
console.log('[PodExec:reconnect] SKIP: open=', open, 'hasTerm=', !!termRef.current, 'mounted=', mountedRef.current);
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [container, shell]);
|
||||
|
||||
Reference in new issue
Block a user