@lemoncat7/dsh-ssh 1.2.0 → 1.3.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/ARCHITECTURE.md +18 -3
- package/README.md +16 -3
- package/lib/api.d.ts +8 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +218 -13
- package/lib/api.js.map +1 -1
- package/lib/client-api.d.ts +66 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js +14 -0
- package/lib/client-api.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +467 -97
- package/lib/client.js.map +4 -4
- package/lib/connector.js +2 -2
- package/lib/connector.js.map +1 -1
- package/lib/credentials.d.ts +9 -0
- package/lib/credentials.d.ts.map +1 -1
- package/lib/credentials.js +16 -0
- package/lib/credentials.js.map +1 -1
- package/lib/domain.d.ts +42 -1
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js +32 -0
- package/lib/domain.js.map +1 -1
- package/lib/endpoint-session-manager.d.ts +16 -0
- package/lib/endpoint-session-manager.d.ts.map +1 -0
- package/lib/endpoint-session-manager.js +70 -0
- package/lib/endpoint-session-manager.js.map +1 -0
- package/lib/file-transfer-manager.d.ts +50 -0
- package/lib/file-transfer-manager.d.ts.map +1 -0
- package/lib/file-transfer-manager.js +257 -0
- package/lib/file-transfer-manager.js.map +1 -0
- package/lib/file-transfer-tools.d.ts +6 -0
- package/lib/file-transfer-tools.d.ts.map +1 -0
- package/lib/file-transfer-tools.js +143 -0
- package/lib/file-transfer-tools.js.map +1 -0
- package/lib/file-transfer-workspace.d.ts +10 -0
- package/lib/file-transfer-workspace.d.ts.map +1 -0
- package/lib/file-transfer-workspace.js +299 -0
- package/lib/file-transfer-workspace.js.map +1 -0
- package/lib/ftp-adapter.d.ts +18 -0
- package/lib/ftp-adapter.d.ts.map +1 -0
- package/lib/ftp-adapter.js +240 -0
- package/lib/ftp-adapter.js.map +1 -0
- package/lib/ftp-profile-editor.d.ts +9 -0
- package/lib/ftp-profile-editor.d.ts.map +1 -0
- package/lib/ftp-profile-editor.js +89 -0
- package/lib/ftp-profile-editor.js.map +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +17 -2
- package/lib/index.js.map +1 -1
- package/lib/network-dialer.d.ts +12 -0
- package/lib/network-dialer.d.ts.map +1 -0
- package/lib/network-dialer.js +27 -0
- package/lib/network-dialer.js.map +1 -0
- package/lib/proxy.d.ts +3 -3
- package/lib/proxy.d.ts.map +1 -1
- package/lib/proxy.js +11 -7
- package/lib/proxy.js.map +1 -1
- package/lib/remote-file-systems.d.ts +9 -0
- package/lib/remote-file-systems.d.ts.map +1 -0
- package/lib/remote-file-systems.js +23 -0
- package/lib/remote-file-systems.js.map +1 -0
- package/lib/remote-files.d.ts +51 -0
- package/lib/remote-files.d.ts.map +1 -0
- package/lib/remote-files.js +36 -0
- package/lib/remote-files.js.map +1 -0
- package/lib/remote-workspace-tree.d.ts.map +1 -1
- package/lib/remote-workspace-tree.js +5 -15
- package/lib/remote-workspace-tree.js.map +1 -1
- package/lib/session-access.d.ts +3 -0
- package/lib/session-access.d.ts.map +1 -1
- package/lib/session-access.js +4 -1
- package/lib/session-access.js.map +1 -1
- package/lib/sftp-adapter.d.ts +13 -0
- package/lib/sftp-adapter.d.ts.map +1 -0
- package/lib/sftp-adapter.js +28 -0
- package/lib/sftp-adapter.js.map +1 -0
- package/lib/sftp.d.ts +7 -0
- package/lib/sftp.d.ts.map +1 -1
- package/lib/sftp.js +215 -6
- package/lib/sftp.js.map +1 -1
- package/lib/store.d.ts +3 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +51 -3
- package/lib/store.js.map +1 -1
- package/lib/tools.d.ts +3 -1
- package/lib/tools.d.ts.map +1 -1
- package/lib/tools.js +4 -1
- package/lib/tools.js.map +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { IconChevronLeftOutline14, IconCloseOutline16, IconDataOutline16, IconPlusOutline16, IconTrashOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
import { cancelFileTransfer, deleteFileEndpointEntries, loadFileEndpointDirectory, loadFileEndpoints, loadTransferJobs, startFileTransfer, } from './client-api.js';
|
|
5
|
+
import { Dialog, errorMessage } from './ui-components.js';
|
|
6
|
+
import { FtpConnectionsDialog } from './ftp-profile-editor.js';
|
|
7
|
+
const STORAGE_KEY = 'dsh-ssh:file-transfer:tabs:v2';
|
|
8
|
+
const FILE_ROW_HEIGHT = 38;
|
|
9
|
+
export function FileTransferWorkspace({ ftpProfiles, vaultEntries, proxyEntries, access, onProfilesChanged }) {
|
|
10
|
+
const [endpoints, setEndpoints] = useState([]);
|
|
11
|
+
const [jobs, setJobs] = useState([]);
|
|
12
|
+
const [tabs, setTabs] = useState(() => restoreTabs());
|
|
13
|
+
const [activeTabId, setActiveTabId] = useState(() => tabs[0]?.id ?? 'transfer-1');
|
|
14
|
+
const [connectionsOpen, setConnectionsOpen] = useState(false);
|
|
15
|
+
const [accessOpen, setAccessOpen] = useState(false);
|
|
16
|
+
const [conflictJob, setConflictJob] = useState();
|
|
17
|
+
const [error, setError] = useState();
|
|
18
|
+
const [directoryRevisions, setDirectoryRevisions] = useState({});
|
|
19
|
+
const previousJobStatesRef = useRef(new Map());
|
|
20
|
+
const refreshEndpoints = useCallback(async () => {
|
|
21
|
+
try {
|
|
22
|
+
const next = await loadFileEndpoints();
|
|
23
|
+
setEndpoints(next);
|
|
24
|
+
setTabs(current => normalizeTabs(current, next));
|
|
25
|
+
}
|
|
26
|
+
catch (reason) {
|
|
27
|
+
setError(errorMessage(reason));
|
|
28
|
+
}
|
|
29
|
+
}, []);
|
|
30
|
+
useEffect(() => { void refreshEndpoints(); }, [refreshEndpoints, ftpProfiles]);
|
|
31
|
+
useEffect(() => { try {
|
|
32
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(tabs));
|
|
33
|
+
}
|
|
34
|
+
catch { } }, [tabs]);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
const previous = previousJobStatesRef.current;
|
|
37
|
+
const changed = jobs.filter(job => isFinished(job.state) && previous.has(job.id) && !isFinished(previous.get(job.id)));
|
|
38
|
+
previousJobStatesRef.current = new Map(jobs.map(job => [job.id, job.state]));
|
|
39
|
+
if (changed.length === 0)
|
|
40
|
+
return;
|
|
41
|
+
setDirectoryRevisions(current => {
|
|
42
|
+
const next = { ...current };
|
|
43
|
+
for (const job of changed) {
|
|
44
|
+
const key = directoryKey(job.request.destinationEndpointId, job.request.destinationDirectory);
|
|
45
|
+
next[key] = (next[key] ?? 0) + 1;
|
|
46
|
+
}
|
|
47
|
+
return next;
|
|
48
|
+
});
|
|
49
|
+
}, [jobs]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
let stopped = false;
|
|
52
|
+
let timer;
|
|
53
|
+
const poll = async () => {
|
|
54
|
+
if (document.visibilityState === 'hidden') {
|
|
55
|
+
timer = window.setTimeout(() => { void poll(); }, 1800);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const next = await loadTransferJobs();
|
|
60
|
+
if (!stopped)
|
|
61
|
+
setJobs(next);
|
|
62
|
+
}
|
|
63
|
+
catch { }
|
|
64
|
+
if (!stopped)
|
|
65
|
+
timer = window.setTimeout(() => { void poll(); }, 800);
|
|
66
|
+
};
|
|
67
|
+
void poll();
|
|
68
|
+
return () => { stopped = true; if (timer !== undefined)
|
|
69
|
+
clearTimeout(timer); };
|
|
70
|
+
}, []);
|
|
71
|
+
const active = tabs.find(tab => tab.id === activeTabId) ?? tabs[0];
|
|
72
|
+
const updateActive = (mutator) => setTabs(current => current.map(tab => tab.id === active?.id ? mutator(tab) : tab));
|
|
73
|
+
const addTab = () => {
|
|
74
|
+
const id = `transfer-${Date.now().toString(36)}`;
|
|
75
|
+
const tab = createTab(id, tabs.length + 1);
|
|
76
|
+
setTabs(current => [...current, tab]);
|
|
77
|
+
setActiveTabId(id);
|
|
78
|
+
};
|
|
79
|
+
const closeTab = (id) => {
|
|
80
|
+
if (tabs.length === 1)
|
|
81
|
+
return;
|
|
82
|
+
const index = tabs.findIndex(tab => tab.id === id);
|
|
83
|
+
const next = tabs.filter(tab => tab.id !== id);
|
|
84
|
+
setTabs(next);
|
|
85
|
+
if (activeTabId === id)
|
|
86
|
+
setActiveTabId(next[Math.max(0, index - 1)].id);
|
|
87
|
+
};
|
|
88
|
+
const setPaneCount = (count) => updateActive(tab => ({ ...tab, panes: Array.from({ length: count }, (_, index) => tab.panes[index] ?? createPane(`${tab.id}-pane-${index}`)) }));
|
|
89
|
+
const transfer = async (sourceEndpointId, sourcePaths, destinationEndpointId, destinationDirectory) => {
|
|
90
|
+
try {
|
|
91
|
+
setError(undefined);
|
|
92
|
+
const job = await startFileTransfer({ sourceEndpointId, sourcePaths, destinationEndpointId, destinationDirectory, conflictPolicy: 'fail' });
|
|
93
|
+
setJobs(current => [job, ...current.filter(item => item.id !== job.id)]);
|
|
94
|
+
}
|
|
95
|
+
catch (reason) {
|
|
96
|
+
setError(errorMessage(reason));
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
return _jsxs("div", { className: "dsh-ssh-transfer-workspace", children: [_jsxs("header", { className: "dsh-ssh-transfer-header", children: [_jsxs("div", { children: [_jsx("h1", { children: "\u6587\u4EF6\u4F20\u8F93" }), _jsx("p", { children: "FTP\u3001FTPS \u4E0E SFTP \u4E4B\u95F4\u76F4\u63A5\u6D41\u5F0F\u4E92\u4F20" })] }), _jsxs("div", { className: "dsh-ssh-transfer-actions", children: [_jsxs("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: () => setAccessOpen(true), children: ["\u4F1A\u8BDD\u8BBF\u95EE \u00B7 ", access.value?.fileEndpointIds.length ?? 0] }), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: () => setConnectionsOpen(true), children: "FTP \u7BA1\u7406" })] })] }), error && _jsxs("div", { className: "dsh-ssh-banner is-error", role: "alert", children: [_jsx("span", { children: error }), _jsx("button", { type: "button", onClick: () => setError(undefined), "aria-label": "\u5173\u95ED", children: _jsx(IconCloseOutline16, { size: 16 }) })] }), _jsxs("div", { className: "dsh-ssh-transfer-tabbar", role: "tablist", "aria-label": "\u6587\u4EF6\u4F20\u8F93\u4EFB\u52A1\u9875", children: [_jsxs("div", { className: "dsh-ssh-transfer-tabs", children: [tabs.map(tab => _jsxs("span", { className: `dsh-ssh-transfer-tab${tab.id === active?.id ? ' is-active' : ''}`, children: [_jsx("button", { type: "button", role: "tab", "aria-selected": tab.id === active?.id, onClick: () => setActiveTabId(tab.id), children: tab.name }), tabs.length > 1 && _jsx("button", { type: "button", className: "is-close", "aria-label": `关闭 ${tab.name}`, onClick: () => closeTab(tab.id), children: _jsx(IconCloseOutline16, { size: 13 }) })] }, tab.id)), _jsx("button", { type: "button", className: "is-add", "aria-label": "\u65B0\u5EFA\u4F20\u8F93\u4EFB\u52A1\u9875", onClick: addTab, children: _jsx(IconPlusOutline16, { size: 15 }) })] }), _jsx("div", { className: "dsh-ssh-pane-layout", "aria-label": "\u7A97\u683C\u6570\u91CF", children: [2, 3, 4].map(count => _jsxs("button", { type: "button", className: active?.panes.length === count ? 'is-active' : '', onClick: () => setPaneCount(count), children: [count, " \u680F"] }, count)) })] }), endpoints.length === 0 ? _jsxs("div", { className: "dsh-ssh-transfer-empty", children: [_jsx(IconDataOutline16, { size: 24 }), _jsx("strong", { children: "\u8FD8\u6CA1\u6709\u53EF\u7528\u6587\u4EF6\u8FDE\u63A5" }), _jsx("p", { children: "\u65B0\u5EFA FTP/FTPS \u8FDE\u63A5\uFF0C\u6216\u5148\u6DFB\u52A0\u4E00\u53F0 SSH \u4E3B\u673A\u4F7F\u7528 SFTP\u3002" }), _jsx("button", { type: "button", className: "dsh-ssh-primary-button", onClick: () => setConnectionsOpen(true), children: "\u65B0\u5EFA FTP \u8FDE\u63A5" })] })
|
|
100
|
+
: active && _jsx("div", { className: `dsh-ssh-transfer-panes has-${active.panes.length}`, children: active.panes.map((pane, index) => {
|
|
101
|
+
const destination = active.panes[(index + 1) % active.panes.length];
|
|
102
|
+
return _jsx(FileTransferPane, { pane: pane, endpoints: endpoints, refreshRevision: directoryRevisions[directoryKey(pane.endpointId, pane.path)] ?? 0, ...destination === undefined ? {} : { destination }, onManageConnections: () => setConnectionsOpen(true), onChange: patch => updateActive(tab => ({ ...tab, panes: tab.panes.map(item => item.id === pane.id ? { ...item, ...patch } : item) })), onTransfer: (paths, target) => { void transfer(pane.endpointId, paths, target.endpointId, target.path); }, onExternalDrop: (sourceEndpointId, paths) => { void transfer(sourceEndpointId, paths, pane.endpointId, pane.path); } }, pane.id);
|
|
103
|
+
}) }), _jsx(TransferQueue, { jobs: jobs, endpoints: endpoints, onCancel: async (id) => { try {
|
|
104
|
+
await cancelFileTransfer(id);
|
|
105
|
+
setJobs(current => current.map(job => job.id === id ? { ...job, state: 'cancelled' } : job));
|
|
106
|
+
}
|
|
107
|
+
catch (reason) {
|
|
108
|
+
setError(errorMessage(reason));
|
|
109
|
+
} }, onConflict: setConflictJob }), connectionsOpen && _jsx(FtpConnectionsDialog, { profiles: ftpProfiles, vaultEntries: vaultEntries, proxyEntries: proxyEntries, onClose: () => setConnectionsOpen(false), onChanged: () => { onProfilesChanged(); void refreshEndpoints(); } }), accessOpen && _jsx(FileAccessDialog, { endpoints: endpoints, access: access, onClose: () => setAccessOpen(false) }), conflictJob && _jsx(ConflictDialog, { job: conflictJob, onClose: () => setConflictJob(undefined), onRetry: async (conflictPolicy) => { try {
|
|
110
|
+
const next = await startFileTransfer({ ...conflictJob.request, conflictPolicy });
|
|
111
|
+
setJobs(current => [next, ...current]);
|
|
112
|
+
setConflictJob(undefined);
|
|
113
|
+
}
|
|
114
|
+
catch (reason) {
|
|
115
|
+
setError(errorMessage(reason));
|
|
116
|
+
} } })] });
|
|
117
|
+
}
|
|
118
|
+
function FileTransferPane({ pane, endpoints, destination, refreshRevision, onChange, onTransfer, onExternalDrop, onManageConnections }) {
|
|
119
|
+
const [view, setView] = useState();
|
|
120
|
+
const [selected, setSelected] = useState([]);
|
|
121
|
+
const [draftPath, setDraftPath] = useState(pane.path);
|
|
122
|
+
const [loading, setLoading] = useState(false);
|
|
123
|
+
const [scrollTop, setScrollTop] = useState(0);
|
|
124
|
+
const [dragOver, setDragOver] = useState(false);
|
|
125
|
+
const [deleteTarget, setDeleteTarget] = useState();
|
|
126
|
+
const [error, setError] = useState();
|
|
127
|
+
const bodyRef = useRef(null);
|
|
128
|
+
const loadGenerationRef = useRef(0);
|
|
129
|
+
const endpoint = endpoints.find(item => item.id === pane.endpointId);
|
|
130
|
+
const entries = view?.entries ?? [];
|
|
131
|
+
const virtualized = entries.length > 200;
|
|
132
|
+
const virtualStart = virtualized ? Math.max(0, Math.floor(scrollTop / FILE_ROW_HEIGHT) - 8) : 0;
|
|
133
|
+
const visibleEntries = useMemo(() => virtualized ? entries.slice(virtualStart, Math.min(entries.length, virtualStart + 56)) : entries, [entries, virtualStart, virtualized]);
|
|
134
|
+
const load = useCallback(async (path = pane.path) => {
|
|
135
|
+
if (endpoint === undefined)
|
|
136
|
+
return;
|
|
137
|
+
const generation = ++loadGenerationRef.current;
|
|
138
|
+
setLoading(true);
|
|
139
|
+
setError(undefined);
|
|
140
|
+
try {
|
|
141
|
+
const next = await loadFileEndpointDirectory(pane.id, endpoint.id, path);
|
|
142
|
+
if (generation !== loadGenerationRef.current)
|
|
143
|
+
return;
|
|
144
|
+
setView(next);
|
|
145
|
+
setDraftPath(next.path);
|
|
146
|
+
setSelected([]);
|
|
147
|
+
setScrollTop(0);
|
|
148
|
+
if (bodyRef.current)
|
|
149
|
+
bodyRef.current.scrollTop = 0;
|
|
150
|
+
onChange({ endpointId: endpoint.id, path: next.path });
|
|
151
|
+
}
|
|
152
|
+
catch (reason) {
|
|
153
|
+
if (generation === loadGenerationRef.current)
|
|
154
|
+
setError(errorMessage(reason));
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
if (generation === loadGenerationRef.current)
|
|
158
|
+
setLoading(false);
|
|
159
|
+
}
|
|
160
|
+
}, [endpoint?.id, pane.path]);
|
|
161
|
+
useEffect(() => { if (endpoint !== undefined)
|
|
162
|
+
void load(pane.path); }, [endpoint?.id, refreshRevision]);
|
|
163
|
+
const submitPath = (event) => { event.preventDefault(); void load(draftPath); };
|
|
164
|
+
const chooseEndpoint = (next) => { loadGenerationRef.current += 1; onChange({ endpointId: next.id, path: next.initialPath }); setDraftPath(next.initialPath); setView(undefined); setError(undefined); };
|
|
165
|
+
const showConnections = () => { loadGenerationRef.current += 1; onChange({ endpointId: '', path: '/' }); setView(undefined); setSelected([]); setError(undefined); setLoading(false); };
|
|
166
|
+
const select = (entry, additive) => setSelected(current => additive ? current.includes(entry.path) ? current.filter(path => path !== entry.path) : [...current, entry.path] : [entry.path]);
|
|
167
|
+
const removeSelected = async () => {
|
|
168
|
+
if (deleteTarget === undefined || view === undefined || endpoint === undefined)
|
|
169
|
+
return;
|
|
170
|
+
try {
|
|
171
|
+
await deleteFileEndpointEntries({ paneId: pane.id, endpointId: endpoint.id, directory: view.path, paths: deleteTarget.map(entry => entry.path) });
|
|
172
|
+
setSelected([]);
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
await load(view.path);
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const drop = (event) => {
|
|
179
|
+
event.preventDefault();
|
|
180
|
+
setDragOver(false);
|
|
181
|
+
try {
|
|
182
|
+
const payload = JSON.parse(event.dataTransfer.getData('application/x-dsh-remote-files'));
|
|
183
|
+
if (payload.endpointId && Array.isArray(payload.paths))
|
|
184
|
+
onExternalDrop(payload.endpointId, payload.paths);
|
|
185
|
+
}
|
|
186
|
+
catch { }
|
|
187
|
+
};
|
|
188
|
+
if (endpoint === undefined)
|
|
189
|
+
return _jsxs("section", { className: "dsh-ssh-file-pane is-connections", children: [_jsxs("header", { children: [_jsxs("span", { className: "dsh-ssh-pane-heading", children: [_jsx("strong", { children: "\u8FDE\u63A5\u5217\u8868" }), _jsx("small", { children: "\u5355\u51FB\u8FDE\u63A5\u540E\u6D4F\u89C8\u8FDC\u7AEF\u6587\u4EF6" })] }), _jsx("button", { type: "button", className: "dsh-ssh-pane-manage-button", onClick: onManageConnections, children: "FTP \u7BA1\u7406" })] }), _jsx("div", { className: "dsh-ssh-endpoint-list", children: endpoints.map(item => _jsxs("button", { type: "button", className: "dsh-ssh-endpoint-row", onClick: () => chooseEndpoint(item), children: [_jsx("span", { className: `dsh-ssh-protocol-badge is-${item.protocol}`, children: protocolShort(item.protocol) }), _jsxs("span", { children: [_jsx("strong", { title: item.name, children: item.name }), _jsx("small", { title: item.address, children: item.address })] }), _jsxs("span", { children: [_jsx("i", { className: `dsh-ssh-protocol-dot is-${item.protocol}`, "aria-hidden": "true" }), item.group ?? (item.kind === 'sftp' ? 'SSH 主机' : '文件连接')] })] }, item.id)) }), _jsxs("footer", { children: [_jsxs("span", { children: [endpoints.length, " \u4E2A\u53EF\u7528\u8FDE\u63A5"] }), _jsx("small", { children: "SFTP \u590D\u7528 SSH \u4E3B\u673A\u914D\u7F6E" })] })] });
|
|
190
|
+
return _jsxs("section", { className: `dsh-ssh-file-pane${dragOver ? ' is-drop-target' : ''}`, onDragOver: event => { if (event.dataTransfer.types.includes('application/x-dsh-remote-files')) {
|
|
191
|
+
event.preventDefault();
|
|
192
|
+
setDragOver(true);
|
|
193
|
+
} }, onDragLeave: event => { if (!event.currentTarget.contains(event.relatedTarget))
|
|
194
|
+
setDragOver(false); }, onDrop: drop, children: [_jsxs("header", { children: [_jsx("button", { type: "button", className: "dsh-ssh-pane-back", "aria-label": "\u8FD4\u56DE\u8FDE\u63A5\u5217\u8868", onClick: showConnections, children: _jsx(IconChevronLeftOutline14, { size: 14 }) }), _jsxs("span", { className: "dsh-ssh-pane-endpoint", children: [_jsx("strong", { children: endpoint.name }), _jsx("small", { title: endpoint.address, children: endpoint.address })] }), _jsx("span", { className: `dsh-ssh-protocol-badge is-${endpoint.protocol}`, children: protocolShort(endpoint.protocol) })] }), _jsxs("form", { className: "dsh-ssh-file-pathbar", onSubmit: submitPath, children: [_jsx("button", { type: "button", "aria-label": "\u4E0A\u4E00\u7EA7\u76EE\u5F55", disabled: view?.parent === null || loading, onClick: () => { if (view?.parent)
|
|
195
|
+
void load(view.parent); }, children: _jsx(UpGlyph, {}) }), _jsx("button", { type: "button", "aria-label": "\u5237\u65B0\u76EE\u5F55", disabled: loading, onClick: () => { void load(); }, children: _jsx(RefreshGlyph, {}) }), _jsx("input", { "aria-label": "\u8FDC\u7AEF\u8DEF\u5F84", value: draftPath, onChange: event => setDraftPath(event.target.value) }), _jsx("button", { type: "submit", disabled: loading, children: "\u524D\u5F80" })] }), _jsxs("div", { className: "dsh-ssh-file-table", role: "grid", "aria-busy": loading, children: [_jsxs("div", { className: "dsh-ssh-file-table-head", role: "row", children: [_jsx("span", { children: "\u540D\u79F0" }), _jsx("span", { children: "\u5927\u5C0F" }), _jsx("span", { children: "\u4FEE\u6539\u65F6\u95F4" })] }), _jsx("div", { ref: bodyRef, className: "dsh-ssh-file-table-body", onScroll: event => { if (virtualized)
|
|
196
|
+
setScrollTop(event.currentTarget.scrollTop); }, children: loading && !view ? _jsx("div", { className: "dsh-ssh-file-loading", children: "\u6B63\u5728\u8BFB\u53D6\u76EE\u5F55\u2026" }) : error ? _jsxs("div", { className: "dsh-ssh-file-error", children: [_jsx("span", { children: error }), _jsx("button", { type: "button", onClick: () => { void load(); }, children: "\u91CD\u8BD5" })] }) : entries.length === 0 ? _jsx("div", { className: "dsh-ssh-table-empty", children: "\u8FD9\u4E2A\u76EE\u5F55\u662F\u7A7A\u7684\u3002" }) : _jsx("div", { className: virtualized ? 'dsh-ssh-file-virtual-list' : undefined, style: virtualized ? { height: `${entries.length * FILE_ROW_HEIGHT}px` } : undefined, children: visibleEntries.map((entry, offset) => _jsx(FileEntryRow, { entry: entry, endpointId: endpoint.id, selected: selected.includes(entry.path), selectedPaths: selected, ...virtualized ? { style: { position: 'absolute', insetInline: 0, transform: `translateY(${(virtualStart + offset) * FILE_ROW_HEIGHT}px)` } } : {}, onSelect: additive => select(entry, additive), onOpen: () => { if (entry.kind === 'directory')
|
|
197
|
+
void load(entry.path); } }, entry.path)) }) })] }), _jsxs("footer", { children: [_jsx("span", { children: selected.length > 0 ? `已选择 ${selected.length} 项` : `${view?.entries.length ?? 0} 项` }), _jsxs("span", { className: "dsh-ssh-file-pane-actions", children: [_jsxs("button", { type: "button", className: "dsh-ssh-file-delete-button", disabled: selected.length === 0 || loading, onClick: () => setDeleteTarget(entries.filter(entry => selected.includes(entry.path))), children: [_jsx(IconTrashOutline16, { size: 14 }), "\u5220\u9664"] }), _jsxs("button", { type: "button", className: "dsh-ssh-transfer-to-button", disabled: selected.length === 0 || destination === undefined || !destination.endpointId || loading, onClick: () => { if (destination?.endpointId)
|
|
198
|
+
onTransfer(selected, destination); }, children: ["\u4F20\u9001\u5230\u4E0B\u4E00\u680F ", _jsx("span", { "aria-hidden": "true", children: "\u2192" })] })] })] }), dragOver && _jsxs("div", { className: "dsh-ssh-file-drop-overlay", children: [_jsx("strong", { children: "\u4F20\u9001\u5230\u6B64\u76EE\u5F55" }), _jsx("span", { children: view?.path ?? pane.path })] }), deleteTarget !== undefined && _jsx(DeleteRemoteEntriesDialog, { endpoint: endpoint, entries: deleteTarget, onClose: () => setDeleteTarget(undefined), onDelete: removeSelected })] });
|
|
199
|
+
}
|
|
200
|
+
function DeleteRemoteEntriesDialog({ endpoint, entries, onClose, onDelete }) {
|
|
201
|
+
const [deleting, setDeleting] = useState(false);
|
|
202
|
+
const [error, setError] = useState();
|
|
203
|
+
const directories = entries.filter(entry => entry.kind === 'directory').length;
|
|
204
|
+
const submit = async () => {
|
|
205
|
+
setDeleting(true);
|
|
206
|
+
setError(undefined);
|
|
207
|
+
try {
|
|
208
|
+
await onDelete();
|
|
209
|
+
setDeleting(false);
|
|
210
|
+
onClose();
|
|
211
|
+
}
|
|
212
|
+
catch (reason) {
|
|
213
|
+
setError(errorMessage(reason));
|
|
214
|
+
setDeleting(false);
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
return _jsxs(Dialog, { className: "dsh-ssh-file-delete-dialog", title: `删除 ${entries.length} 项?`, subtitle: `${endpoint.name} · 此操作无法撤销`, onClose: () => { if (!deleting)
|
|
218
|
+
onClose(); }, children: [_jsxs("div", { className: "dsh-ssh-file-delete-copy", children: [_jsx("span", { children: _jsx(IconTrashOutline16, { size: 18 }) }), _jsxs("p", { children: ["\u5C06\u76F4\u63A5\u4ECE\u8FDC\u7AEF\u5220\u9664\u6240\u9009\u5185\u5BB9\u3002", directories > 0 ? `其中 ${directories} 个目录及其全部内容会被递归删除。` : ''] })] }), _jsxs("div", { className: "dsh-ssh-file-delete-list", children: [entries.slice(0, 6).map(entry => _jsxs("div", { children: [_jsx(FileGlyph, { directory: entry.kind === 'directory' }), _jsxs("span", { children: [_jsx("strong", { children: entry.name }), _jsx("small", { title: entry.path, children: entry.path })] })] }, entry.path)), entries.length > 6 && _jsxs("p", { children: ["\u4EE5\u53CA\u5176\u4ED6 ", entries.length - 6, " \u9879"] })] }), error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: error }), _jsxs("div", { className: "dsh-ssh-dialog-actions", children: [_jsx("span", {}), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", disabled: deleting, onClick: onClose, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "dsh-ssh-danger-button", disabled: deleting, onClick: () => { void submit(); }, children: deleting ? '正在删除…' : '确认删除' })] })] });
|
|
219
|
+
}
|
|
220
|
+
function FileEntryRow({ entry, endpointId, selected, selectedPaths, style, onSelect, onOpen }) {
|
|
221
|
+
return _jsxs("div", { role: "row", tabIndex: 0, "aria-selected": selected, draggable: entry.kind === 'file' || entry.kind === 'directory', className: `dsh-ssh-file-row is-${entry.kind}${selected ? ' is-selected' : ''}`, style: style, onClick: event => onSelect(event.ctrlKey || event.metaKey), onDoubleClick: onOpen, onKeyDown: event => { if (event.key === 'Enter')
|
|
222
|
+
onOpen(); if (event.key === ' ') {
|
|
223
|
+
event.preventDefault();
|
|
224
|
+
onSelect(event.ctrlKey || event.metaKey);
|
|
225
|
+
} }, onDragStart: event => { const paths = selected ? selectedPaths : [entry.path]; event.dataTransfer.effectAllowed = 'copy'; event.dataTransfer.setData('application/x-dsh-remote-files', JSON.stringify({ endpointId, paths })); }, children: [_jsxs("span", { children: [_jsx(FileGlyph, { directory: entry.kind === 'directory' }), _jsx("i", { title: entry.name, children: entry.name })] }), _jsx("span", { children: entry.kind === 'directory' ? '—' : formatBytes(entry.size) }), _jsx("span", { children: entry.modifiedAt > 0 ? new Date(entry.modifiedAt).toLocaleString() : '—' })] });
|
|
226
|
+
}
|
|
227
|
+
function TransferQueue({ jobs, endpoints, onCancel, onConflict }) {
|
|
228
|
+
const [open, setOpen] = useState(true);
|
|
229
|
+
const active = jobs.filter(job => job.state === 'queued' || job.state === 'scanning' || job.state === 'transferring');
|
|
230
|
+
return _jsxs("section", { className: `dsh-ssh-transfer-queue${open ? ' is-open' : ''}`, children: [_jsxs("button", { type: "button", className: "dsh-ssh-transfer-queue-heading", "aria-expanded": open, onClick: () => setOpen(value => !value), children: [_jsxs("span", { children: [_jsx("strong", { children: "\u4F20\u8F93\u4EFB\u52A1" }), _jsx("small", { children: active.length > 0 ? `${active.length} 个进行中` : jobs.length > 0 ? '最近任务' : '暂无任务' })] }), _jsx("span", { children: open ? '收起' : '展开' })] }), open && _jsx("div", { className: "dsh-ssh-transfer-job-list", children: jobs.length === 0 ? _jsx("p", { children: "\u4ECE\u4E00\u4E2A\u7A97\u683C\u62D6\u5230\u53E6\u4E00\u4E2A\u7A97\u683C\uFF0C\u6216\u9009\u4E2D\u6587\u4EF6\u540E\u70B9\u51FB\u201C\u4F20\u9001\u5230\u4E0B\u4E00\u680F\u201D\u3002" }) : jobs.slice(0, 12).map(job => {
|
|
231
|
+
const progress = job.totalBytes > 0 ? Math.min(100, job.transferredBytes / job.totalBytes * 100) : job.state === 'completed' ? 100 : 0;
|
|
232
|
+
return _jsxs("article", { children: [_jsx("span", { className: `dsh-ssh-transfer-state is-${job.state}`, "aria-hidden": "true" }), _jsxs("span", { className: "dsh-ssh-transfer-job-copy", children: [_jsxs("strong", { children: [remoteLabel(job.request.sourcePaths), " ", _jsx("i", { children: "\u2192" }), " ", endpointName(endpoints, job.request.destinationEndpointId)] }), _jsx("small", { children: job.error ?? jobLabel(job, progress) }), _jsx("span", { className: "dsh-ssh-transfer-progress", children: _jsx("i", { style: { transform: `scaleX(${progress / 100})` } }) })] }), (job.state === 'queued' || job.state === 'scanning' || job.state === 'transferring') ? _jsx("button", { type: "button", className: "dsh-ssh-icon-button", "aria-label": "\u53D6\u6D88\u4F20\u8F93", onClick: () => { void onCancel(job.id); }, children: _jsx(IconCloseOutline16, { size: 15 }) }) : job.state === 'failed' && job.error?.includes('destination already contains') ? _jsx("button", { type: "button", className: "dsh-ssh-job-resolve", onClick: () => onConflict(job), children: "\u5904\u7406" }) : null] }, job.id);
|
|
233
|
+
}) })] });
|
|
234
|
+
}
|
|
235
|
+
function ConflictDialog({ job, onClose, onRetry }) {
|
|
236
|
+
const [policy, setPolicy] = useState('rename');
|
|
237
|
+
const [saving, setSaving] = useState(false);
|
|
238
|
+
return _jsxs(Dialog, { className: "dsh-ssh-transfer-conflict-dialog", title: "\u76EE\u6807\u4E2D\u5B58\u5728\u540C\u540D\u6587\u4EF6", subtitle: "\u4E3A\u672C\u6279\u4F20\u8F93\u9009\u62E9\u5904\u7406\u65B9\u5F0F", onClose: onClose, children: [_jsxs("div", { className: "dsh-ssh-transfer-conflict-copy", children: [_jsx("strong", { children: remoteLabel(job.request.sourcePaths) }), _jsx("span", { children: job.request.destinationDirectory })] }), _jsx("div", { className: "dsh-ssh-conflict-options", children: [['rename', '自动重命名', '保留两份文件,在名称后添加序号'], ['skip', '跳过同名文件', '继续传输其他内容'], ['overwrite', '覆盖目标文件', '使用来源内容替换目标内容']].map(option => _jsxs("button", { type: "button", className: policy === option[0] ? 'is-active' : '', onClick: () => setPolicy(option[0]), children: [_jsx("i", { "aria-hidden": "true" }), _jsxs("span", { children: [_jsx("strong", { children: option[1] }), _jsx("small", { children: option[2] })] })] }, option[0])) }), _jsxs("div", { className: "dsh-ssh-dialog-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: onClose, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "dsh-ssh-primary-button", disabled: saving, onClick: () => { setSaving(true); void onRetry(policy).finally(() => setSaving(false)); }, children: saving ? '正在重新加入队列…' : '继续传输' })] })] });
|
|
239
|
+
}
|
|
240
|
+
function FileAccessDialog({ endpoints, access, onClose }) {
|
|
241
|
+
const value = access.value;
|
|
242
|
+
const toggle = (id) => access.setFileEndpoints(value?.fileEndpointIds.includes(id) ? value.fileEndpointIds.filter(item => item !== id) : [...(value?.fileEndpointIds ?? []), id]);
|
|
243
|
+
return _jsxs(Dialog, { className: "dsh-ssh-file-access-dialog", title: "\u5F53\u524D\u4F1A\u8BDD\u7684\u6587\u4EF6\u6743\u9650", subtitle: "\u6587\u4EF6\u6743\u9650\u4E0E SSH \u547D\u4EE4\u3001\u7EC8\u7AEF\u6743\u9650\u76F8\u4E92\u72EC\u7ACB", onClose: onClose, children: [access.error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: access.error }), _jsx("div", { className: "dsh-ssh-file-access-list", children: endpoints.length === 0 ? _jsx("div", { className: "dsh-ssh-table-empty", children: "\u8FD8\u6CA1\u6709\u53EF\u6388\u6743\u7684\u6587\u4EF6\u8FDE\u63A5\u3002" }) : endpoints.map(endpoint => _jsxs("button", { type: "button", className: value?.fileEndpointIds.includes(endpoint.id) ? 'is-mounted' : '', "aria-pressed": value?.fileEndpointIds.includes(endpoint.id), onClick: () => toggle(endpoint.id), children: [_jsx("span", { className: `dsh-ssh-protocol-badge is-${endpoint.protocol}`, children: protocolShort(endpoint.protocol) }), _jsxs("span", { children: [_jsx("strong", { children: endpoint.name }), _jsx("small", { children: endpoint.address })] }), _jsx("i", { children: value?.fileEndpointIds.includes(endpoint.id) ? '已授权' : '未授权' })] }, endpoint.id)) }), _jsxs("div", { className: "dsh-ssh-file-access-options", children: [_jsxs("label", { children: [_jsxs("span", { children: [_jsx("strong", { children: "\u6587\u4EF6\u64CD\u4F5C\u6743\u9650" }), _jsx("small", { children: "\u6D4F\u89C8\u6A21\u5F0F\u4E0D\u4F1A\u5411 AI \u66B4\u9732\u4F20\u8F93\u5DE5\u5177" })] }), _jsxs("select", { value: value?.filePermission ?? 'browse', onChange: event => access.setFilePermission(event.target.value), children: [_jsx("option", { value: "browse", children: "\u4EC5\u6D4F\u89C8\u76EE\u5F55" }), _jsx("option", { value: "transfer", children: "\u5141\u8BB8\u8DE8\u7AEF\u4F20\u8F93" })] })] }), _jsxs("label", { className: "dsh-ssh-switch-row", children: [_jsxs("span", { children: [_jsx("strong", { children: "\u4F20\u8F93\u524D\u786E\u8BA4" }), _jsx("small", { children: "AI \u53D1\u8D77\u4F20\u8F93\u65F6\u8BF7\u6C42 DSH \u6388\u6743" })] }), _jsx("input", { type: "checkbox", checked: value?.requireFileApproval ?? true, onChange: event => access.setRequireFileApproval(event.target.checked) })] })] }), _jsxs("div", { className: "dsh-ssh-dialog-actions", children: [_jsx("span", {}), _jsx("button", { type: "button", className: "dsh-ssh-primary-button", onClick: onClose, children: "\u5B8C\u6210" })] })] });
|
|
244
|
+
}
|
|
245
|
+
function restoreTabs() {
|
|
246
|
+
try {
|
|
247
|
+
const value = JSON.parse(localStorage.getItem(STORAGE_KEY) ?? '[]');
|
|
248
|
+
if (!Array.isArray(value))
|
|
249
|
+
return [createTab('transfer-1', 1)];
|
|
250
|
+
const tabs = value.slice(0, 8).flatMap((candidate) => {
|
|
251
|
+
if (typeof candidate !== 'object' || candidate === null)
|
|
252
|
+
return [];
|
|
253
|
+
const tab = candidate;
|
|
254
|
+
if (typeof tab.id !== 'string' || !/^[a-zA-Z0-9_-]{1,100}$/.test(tab.id) || typeof tab.name !== 'string' || !Array.isArray(tab.panes))
|
|
255
|
+
return [];
|
|
256
|
+
const panes = tab.panes.slice(0, 4).flatMap((pane) => {
|
|
257
|
+
if (typeof pane !== 'object' || pane === null)
|
|
258
|
+
return [];
|
|
259
|
+
const state = pane;
|
|
260
|
+
return typeof state.id === 'string' && /^[a-zA-Z0-9_-]{1,100}$/.test(state.id) && typeof state.endpointId === 'string' && typeof state.path === 'string'
|
|
261
|
+
? [{ id: state.id, endpointId: '', path: '/' }]
|
|
262
|
+
: [];
|
|
263
|
+
});
|
|
264
|
+
return panes.length >= 2 ? [{ id: tab.id, name: tab.name.slice(0, 40), panes }] : [];
|
|
265
|
+
});
|
|
266
|
+
if (tabs.length > 0)
|
|
267
|
+
return tabs;
|
|
268
|
+
}
|
|
269
|
+
catch { }
|
|
270
|
+
return [createTab('transfer-1', 1)];
|
|
271
|
+
}
|
|
272
|
+
function createTab(id, index) { return { id, name: `任务 ${index}`, panes: [createPane(`${id}-a`), createPane(`${id}-b`)] }; }
|
|
273
|
+
function createPane(id) { return { id, endpointId: '', path: '/' }; }
|
|
274
|
+
function normalizeTabs(tabs, endpoints) { return tabs.map(tab => ({ ...tab, panes: tab.panes.map(pane => !pane.endpointId || endpoints.some(item => item.id === pane.endpointId) ? pane : createPane(pane.id)) })); }
|
|
275
|
+
function endpointName(endpoints, id) { return endpoints.find(endpoint => endpoint.id === id)?.name ?? id; }
|
|
276
|
+
function remoteLabel(paths) { const name = paths[0]?.replaceAll('\\', '/').split('/').filter(Boolean).at(-1) ?? '文件'; return paths.length > 1 ? `${name} 等 ${paths.length} 项` : name; }
|
|
277
|
+
function protocolShort(protocol) { return protocol === 'sftp' ? 'SFTP' : protocol === 'ftp' ? 'FTP' : protocol === 'ftps-explicit' ? 'FTPS' : 'FTPS-I'; }
|
|
278
|
+
function directoryKey(endpointId, value) { return JSON.stringify([endpointId, value.replaceAll('\\', '/').replace(/\/+$/, '') || '/']); }
|
|
279
|
+
function isFinished(state) { return state === 'completed' || state === 'failed' || state === 'cancelled'; }
|
|
280
|
+
function formatBytes(value) { if (value < 1024)
|
|
281
|
+
return `${value} B`; if (value < 1024 ** 2)
|
|
282
|
+
return `${(value / 1024).toFixed(1)} KB`; if (value < 1024 ** 3)
|
|
283
|
+
return `${(value / 1024 ** 2).toFixed(1)} MB`; return `${(value / 1024 ** 3).toFixed(2)} GB`; }
|
|
284
|
+
function jobLabel(job, progress) { if (job.state === 'queued')
|
|
285
|
+
return '等待传输'; if (job.state === 'scanning')
|
|
286
|
+
return '正在扫描目录'; if (job.state === 'transferring') {
|
|
287
|
+
const seconds = Math.max(1, (Date.now() - (job.startedAt ?? Date.now())) / 1000);
|
|
288
|
+
const speed = job.transferredBytes / seconds;
|
|
289
|
+
const remaining = speed > 0 ? Math.max(0, (job.totalBytes - job.transferredBytes) / speed) : 0;
|
|
290
|
+
return `${progress.toFixed(0)}% · ${formatBytes(speed)}/s${remaining > 1 ? ` · 约 ${formatDuration(remaining)}` : ''}`;
|
|
291
|
+
} if (job.state === 'completed')
|
|
292
|
+
return `已完成 ${job.completedFiles} 个文件${job.skippedFiles ? `,跳过 ${job.skippedFiles}` : ''}`; if (job.state === 'cancelled')
|
|
293
|
+
return '已取消'; return '传输失败'; }
|
|
294
|
+
function formatDuration(seconds) { if (seconds < 60)
|
|
295
|
+
return `${Math.ceil(seconds)} 秒`; const minutes = Math.ceil(seconds / 60); return minutes < 60 ? `${minutes} 分钟` : `${Math.floor(minutes / 60)} 小时 ${minutes % 60} 分钟`; }
|
|
296
|
+
function UpGlyph() { return _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "M8 12V4m0 0L4.8 7.2M8 4l3.2 3.2" }) }); }
|
|
297
|
+
function RefreshGlyph() { return _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: "M12.2 5.2A5 5 0 1 0 13 9M12.2 5.2V2.5m0 2.7H9.5" }) }); }
|
|
298
|
+
function FileGlyph({ directory }) { return _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: directory ? _jsx("path", { d: "M2 4.3h4l1.2 1.4H14v6.8H2z" }) : _jsx("path", { d: "M3.2 2h6l3.6 3.6V14H3.2zm6 0v3.6h3.6" }) }); }
|
|
299
|
+
//# sourceMappingURL=file-transfer-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-transfer-workspace.js","sourceRoot":"","sources":["../src/file-transfer-workspace.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SshCredentialVault } from './credentials.js';
|
|
2
|
+
import type { FtpProfile } from './domain.js';
|
|
3
|
+
import { NetworkDialer } from './network-dialer.js';
|
|
4
|
+
import type { RemoteEndpointView, RemoteFileSystemAdapter, RemoteFileSystemSession } from './remote-files.js';
|
|
5
|
+
import { SshStore } from './store.js';
|
|
6
|
+
export declare class FtpFileSystemAdapter implements RemoteFileSystemAdapter {
|
|
7
|
+
private readonly store;
|
|
8
|
+
private readonly credentials;
|
|
9
|
+
private readonly dialer;
|
|
10
|
+
readonly kind: "ftp";
|
|
11
|
+
constructor(store: SshStore, credentials: SshCredentialVault, dialer: NetworkDialer);
|
|
12
|
+
endpoint(id: string): RemoteEndpointView | undefined;
|
|
13
|
+
endpoints(): RemoteEndpointView[];
|
|
14
|
+
connect(id: string, signal?: AbortSignal): Promise<RemoteFileSystemSession>;
|
|
15
|
+
private resolveProfile;
|
|
16
|
+
}
|
|
17
|
+
export declare function connectFtpProfile(profile: FtpProfile, password: string, dialer: NetworkDialer, signal?: AbortSignal): Promise<RemoteFileSystemSession>;
|
|
18
|
+
//# sourceMappingURL=ftp-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ftp-adapter.d.ts","sourceRoot":"","sources":["../src/ftp-adapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAuB,kBAAkB,EAAmB,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAEnJ,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,qBAAa,oBAAqB,YAAW,uBAAuB;IAEtD,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAY,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAsB,OAAO,CAAC,QAAQ,CAAC,MAAM;IADvH,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAS;gBACD,KAAK,EAAE,QAAQ,EAAmB,WAAW,EAAE,kBAAkB,EAAmB,MAAM,EAAE,aAAa;IAEtI,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAKpD,SAAS,IAAI,kBAAkB,EAAE;IAE3B,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAWjF,OAAO,CAAC,cAAc;CAKvB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAE5J"}
|