filefive 1.0.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 +2 -0
- package/LICENSE +674 -0
- package/README.md +53 -0
- package/dist/App.js +69 -0
- package/dist/Connection.js +193 -0
- package/dist/FileSystem.js +13 -0
- package/dist/FileWatcher.js +44 -0
- package/dist/Local.js +86 -0
- package/dist/LocalWatcher.js +48 -0
- package/dist/Password.js +51 -0
- package/dist/Queue.js +236 -0
- package/dist/RemoteWatcher.js +44 -0
- package/dist/Session.js +21 -0
- package/dist/commands/clear.js +22 -0
- package/dist/commands/connect.js +87 -0
- package/dist/commands/copy.js +65 -0
- package/dist/commands/disconnect.js +12 -0
- package/dist/commands/duplicate.js +44 -0
- package/dist/commands/getConnection.js +17 -0
- package/dist/commands/index.js +42 -0
- package/dist/commands/mkdir.js +42 -0
- package/dist/commands/read.js +13 -0
- package/dist/commands/remove.js +56 -0
- package/dist/commands/rename.js +21 -0
- package/dist/commands/resolve.js +14 -0
- package/dist/commands/saveConnection.js +50 -0
- package/dist/commands/saveSettings.js +21 -0
- package/dist/commands/settings.js +33 -0
- package/dist/commands/unwatch.js +14 -0
- package/dist/commands/watch.js +25 -0
- package/dist/commands/write.js +17 -0
- package/dist/fs/Ftp.js +188 -0
- package/dist/fs/Local.js +68 -0
- package/dist/fs/SFtp.js +268 -0
- package/dist/index.js +69 -0
- package/dist/keybindings.json +58 -0
- package/dist/log.js +147 -0
- package/dist/options.js +5 -0
- package/dist/public/76e5e3fe6b35d5e6a980.woff2 +0 -0
- package/dist/public/assets/android-chrome-144x144.png +0 -0
- package/dist/public/assets/android-chrome-192x192.png +0 -0
- package/dist/public/assets/android-chrome-256x256.png +0 -0
- package/dist/public/assets/android-chrome-36x36.png +0 -0
- package/dist/public/assets/android-chrome-384x384.png +0 -0
- package/dist/public/assets/android-chrome-48x48.png +0 -0
- package/dist/public/assets/android-chrome-512x512.png +0 -0
- package/dist/public/assets/android-chrome-72x72.png +0 -0
- package/dist/public/assets/android-chrome-96x96.png +0 -0
- package/dist/public/assets/apple-touch-icon-1024x1024.png +0 -0
- package/dist/public/assets/apple-touch-icon-114x114.png +0 -0
- package/dist/public/assets/apple-touch-icon-120x120.png +0 -0
- package/dist/public/assets/apple-touch-icon-144x144.png +0 -0
- package/dist/public/assets/apple-touch-icon-152x152.png +0 -0
- package/dist/public/assets/apple-touch-icon-167x167.png +0 -0
- package/dist/public/assets/apple-touch-icon-180x180.png +0 -0
- package/dist/public/assets/apple-touch-icon-57x57.png +0 -0
- package/dist/public/assets/apple-touch-icon-60x60.png +0 -0
- package/dist/public/assets/apple-touch-icon-72x72.png +0 -0
- package/dist/public/assets/apple-touch-icon-76x76.png +0 -0
- package/dist/public/assets/apple-touch-icon-precomposed.png +0 -0
- package/dist/public/assets/apple-touch-icon.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1125x2436.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1136x640.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1170x2532.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1179x2556.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1242x2208.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1242x2688.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1284x2778.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1290x2796.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1334x750.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1488x2266.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1536x2048.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1620x2160.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1640x2160.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1668x2224.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1668x2388.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-1792x828.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2048x1536.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2048x2732.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2160x1620.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2160x1640.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2208x1242.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2224x1668.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2266x1488.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2388x1668.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2436x1125.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2532x1170.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2556x1179.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2688x1242.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2732x2048.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2778x1284.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-2796x1290.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-640x1136.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-750x1334.png +0 -0
- package/dist/public/assets/apple-touch-startup-image-828x1792.png +0 -0
- package/dist/public/assets/browserconfig.xml +12 -0
- package/dist/public/assets/favicon-16x16.png +0 -0
- package/dist/public/assets/favicon-32x32.png +0 -0
- package/dist/public/assets/favicon-48x48.png +0 -0
- package/dist/public/assets/favicon.ico +0 -0
- package/dist/public/assets/manifest.webmanifest +68 -0
- package/dist/public/assets/mstile-144x144.png +0 -0
- package/dist/public/assets/mstile-150x150.png +0 -0
- package/dist/public/assets/mstile-310x150.png +0 -0
- package/dist/public/assets/mstile-310x310.png +0 -0
- package/dist/public/assets/mstile-70x70.png +0 -0
- package/dist/public/assets/yandex-browser-50x50.png +0 -0
- package/dist/public/assets/yandex-browser-manifest.json +9 -0
- package/dist/public/ceb05254cedfa895b512.ttf +0 -0
- package/dist/public/f72efa639bb45d29e62f.ttf +0 -0
- package/dist/public/index.html +1 -0
- package/dist/public/index.js +2 -0
- package/dist/public/index.js.LICENSE.txt +43 -0
- package/dist/queues/Copy.js +69 -0
- package/dist/queues/Download.js +30 -0
- package/dist/queues/Duplicate.js +27 -0
- package/dist/queues/Queue.js +214 -0
- package/dist/queues/Remove.js +82 -0
- package/dist/queues/Upload.js +57 -0
- package/dist/transform.js +24 -0
- package/dist/types.js +46 -0
- package/dist/utils/ReferenceCountMap.js +61 -0
- package/dist/utils/URI.js +44 -0
- package/dist/utils/filter.js +24 -0
- package/dist/utils/path.js +12 -0
- package/dist/utils/uniqid.js +6 -0
- package/package.json +68 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isLocal = isLocal;
|
|
4
|
+
exports.connectionID = connectionID;
|
|
5
|
+
exports.parseURI = parseURI;
|
|
6
|
+
exports.createURI = createURI;
|
|
7
|
+
const types_1 = require("../types");
|
|
8
|
+
const whatwg_url_1 = require("whatwg-url");
|
|
9
|
+
function isLocal(uri) {
|
|
10
|
+
return uri.startsWith('file:');
|
|
11
|
+
}
|
|
12
|
+
function connectionID(scheme, user, host, port) {
|
|
13
|
+
return scheme == 'file' ? types_1.LocalFileSystemID : `${scheme}://${user}@${host}:${port}`;
|
|
14
|
+
}
|
|
15
|
+
// https://url.spec.whatwg.org/#special-scheme
|
|
16
|
+
// https://jsdom.github.io/whatwg-url/#url=bmF0czovL2xvY2FsaG9zdDo0MjAwLw==&base=ZmlsZTovLy8=
|
|
17
|
+
function parseURI(uri) {
|
|
18
|
+
const { protocol, pathname, username, hostname, port: p } = new whatwg_url_1.URL(uri);
|
|
19
|
+
const port = p ? parseInt(p) : defaultPort(protocol.slice(0, -1));
|
|
20
|
+
return {
|
|
21
|
+
id: connectionID(protocol.slice(0, -1), username, hostname, port),
|
|
22
|
+
scheme: protocol.slice(0, -1),
|
|
23
|
+
path: decodeURI(pathname),
|
|
24
|
+
user: username,
|
|
25
|
+
host: hostname,
|
|
26
|
+
port
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function createURI(id, path) {
|
|
30
|
+
const u = (0, whatwg_url_1.parseURL)(id);
|
|
31
|
+
u.path = path;
|
|
32
|
+
if (!u.port) {
|
|
33
|
+
u.port = defaultPort(u.scheme);
|
|
34
|
+
}
|
|
35
|
+
return (0, whatwg_url_1.serializeURL)(u);
|
|
36
|
+
}
|
|
37
|
+
function defaultPort(protocol) {
|
|
38
|
+
switch (protocol) {
|
|
39
|
+
case 'ftp': return 21;
|
|
40
|
+
case 'sftp': return 22;
|
|
41
|
+
case 'http': return 80;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterRegExp = filterRegExp;
|
|
4
|
+
function escapeRegExp(s) {
|
|
5
|
+
let re = s.replace(/[/\-\\^$+.()|[\]{}]/g, '\\$&');
|
|
6
|
+
re = re.replaceAll('*', '.*');
|
|
7
|
+
re = re.replaceAll('?', '.{1}');
|
|
8
|
+
return re;
|
|
9
|
+
}
|
|
10
|
+
function filterRegExp(settings) {
|
|
11
|
+
if (!settings?.text.length) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
let source = settings.useRe ? settings.text : escapeRegExp(settings.text);
|
|
15
|
+
if (settings.wholeWord) {
|
|
16
|
+
source = `^${source}$`;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return new RegExp(source, settings.matchCase ? '' : 'i');
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.split = split;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
function split(path) {
|
|
6
|
+
const parts = [];
|
|
7
|
+
while (path && path != path_1.sep && path != '.') {
|
|
8
|
+
parts.push((0, path_1.basename)(path));
|
|
9
|
+
path = (0, path_1.dirname)(path);
|
|
10
|
+
}
|
|
11
|
+
return parts.reverse();
|
|
12
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "filefive",
|
|
3
|
+
"description": "A SFTP/FTP client and dual-panel file manager for macOS and Linux",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"license": "GPL-3.0",
|
|
6
|
+
"author": "Max Miroshnikov",
|
|
7
|
+
"bin": {
|
|
8
|
+
"f5": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/miroshnikov/filefive.git"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/miroshnikov/filefive#readme",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/miroshnikov/filefive/issues"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"sftp-client",
|
|
21
|
+
"file-manager",
|
|
22
|
+
"dual-panel",
|
|
23
|
+
"macos-app",
|
|
24
|
+
"linux-app"
|
|
25
|
+
],
|
|
26
|
+
"files": [
|
|
27
|
+
"dist/",
|
|
28
|
+
"bin/"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"dev": "NODE_ENV=development nodemon src/index.ts",
|
|
32
|
+
"build": "tsc -p .",
|
|
33
|
+
"start": "node dist/index.js",
|
|
34
|
+
"publish": "npm publish"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"chalk": "^5.3.0",
|
|
38
|
+
"commander": "^12.1.0",
|
|
39
|
+
"express": "^4.19.2",
|
|
40
|
+
"ftp": "^0.3.10",
|
|
41
|
+
"multer": "^1.4.5-lts.1",
|
|
42
|
+
"open": "^10.1.0",
|
|
43
|
+
"ramda": "^0.30.1",
|
|
44
|
+
"rxjs": "^7.8.1",
|
|
45
|
+
"ssh2": "^1.15.0",
|
|
46
|
+
"trash": "^9.0.0",
|
|
47
|
+
"whatwg-url": "^14.0.0",
|
|
48
|
+
"ws": "^8.18.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/express": "^4.17.21",
|
|
52
|
+
"@types/ftp": "^0.3.36",
|
|
53
|
+
"@types/multer": "^1.4.12",
|
|
54
|
+
"@types/node": "^22.5.4",
|
|
55
|
+
"@types/ramda": "^0.30.1",
|
|
56
|
+
"@types/ssh2": "^1.15.1",
|
|
57
|
+
"@types/whatwg-url": "^11.0.5",
|
|
58
|
+
"@types/ws": "^8.5.12",
|
|
59
|
+
"nodemon": "^3.1.4",
|
|
60
|
+
"ts-node": "^10.9.2",
|
|
61
|
+
"typescript": "^5.5.4"
|
|
62
|
+
},
|
|
63
|
+
"nodemonConfig": {
|
|
64
|
+
"ignore": [
|
|
65
|
+
"frontend/**"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
}
|