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.
Files changed (127) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/LICENSE +674 -0
  3. package/README.md +53 -0
  4. package/dist/App.js +69 -0
  5. package/dist/Connection.js +193 -0
  6. package/dist/FileSystem.js +13 -0
  7. package/dist/FileWatcher.js +44 -0
  8. package/dist/Local.js +86 -0
  9. package/dist/LocalWatcher.js +48 -0
  10. package/dist/Password.js +51 -0
  11. package/dist/Queue.js +236 -0
  12. package/dist/RemoteWatcher.js +44 -0
  13. package/dist/Session.js +21 -0
  14. package/dist/commands/clear.js +22 -0
  15. package/dist/commands/connect.js +87 -0
  16. package/dist/commands/copy.js +65 -0
  17. package/dist/commands/disconnect.js +12 -0
  18. package/dist/commands/duplicate.js +44 -0
  19. package/dist/commands/getConnection.js +17 -0
  20. package/dist/commands/index.js +42 -0
  21. package/dist/commands/mkdir.js +42 -0
  22. package/dist/commands/read.js +13 -0
  23. package/dist/commands/remove.js +56 -0
  24. package/dist/commands/rename.js +21 -0
  25. package/dist/commands/resolve.js +14 -0
  26. package/dist/commands/saveConnection.js +50 -0
  27. package/dist/commands/saveSettings.js +21 -0
  28. package/dist/commands/settings.js +33 -0
  29. package/dist/commands/unwatch.js +14 -0
  30. package/dist/commands/watch.js +25 -0
  31. package/dist/commands/write.js +17 -0
  32. package/dist/fs/Ftp.js +188 -0
  33. package/dist/fs/Local.js +68 -0
  34. package/dist/fs/SFtp.js +268 -0
  35. package/dist/index.js +69 -0
  36. package/dist/keybindings.json +58 -0
  37. package/dist/log.js +147 -0
  38. package/dist/options.js +5 -0
  39. package/dist/public/76e5e3fe6b35d5e6a980.woff2 +0 -0
  40. package/dist/public/assets/android-chrome-144x144.png +0 -0
  41. package/dist/public/assets/android-chrome-192x192.png +0 -0
  42. package/dist/public/assets/android-chrome-256x256.png +0 -0
  43. package/dist/public/assets/android-chrome-36x36.png +0 -0
  44. package/dist/public/assets/android-chrome-384x384.png +0 -0
  45. package/dist/public/assets/android-chrome-48x48.png +0 -0
  46. package/dist/public/assets/android-chrome-512x512.png +0 -0
  47. package/dist/public/assets/android-chrome-72x72.png +0 -0
  48. package/dist/public/assets/android-chrome-96x96.png +0 -0
  49. package/dist/public/assets/apple-touch-icon-1024x1024.png +0 -0
  50. package/dist/public/assets/apple-touch-icon-114x114.png +0 -0
  51. package/dist/public/assets/apple-touch-icon-120x120.png +0 -0
  52. package/dist/public/assets/apple-touch-icon-144x144.png +0 -0
  53. package/dist/public/assets/apple-touch-icon-152x152.png +0 -0
  54. package/dist/public/assets/apple-touch-icon-167x167.png +0 -0
  55. package/dist/public/assets/apple-touch-icon-180x180.png +0 -0
  56. package/dist/public/assets/apple-touch-icon-57x57.png +0 -0
  57. package/dist/public/assets/apple-touch-icon-60x60.png +0 -0
  58. package/dist/public/assets/apple-touch-icon-72x72.png +0 -0
  59. package/dist/public/assets/apple-touch-icon-76x76.png +0 -0
  60. package/dist/public/assets/apple-touch-icon-precomposed.png +0 -0
  61. package/dist/public/assets/apple-touch-icon.png +0 -0
  62. package/dist/public/assets/apple-touch-startup-image-1125x2436.png +0 -0
  63. package/dist/public/assets/apple-touch-startup-image-1136x640.png +0 -0
  64. package/dist/public/assets/apple-touch-startup-image-1170x2532.png +0 -0
  65. package/dist/public/assets/apple-touch-startup-image-1179x2556.png +0 -0
  66. package/dist/public/assets/apple-touch-startup-image-1242x2208.png +0 -0
  67. package/dist/public/assets/apple-touch-startup-image-1242x2688.png +0 -0
  68. package/dist/public/assets/apple-touch-startup-image-1284x2778.png +0 -0
  69. package/dist/public/assets/apple-touch-startup-image-1290x2796.png +0 -0
  70. package/dist/public/assets/apple-touch-startup-image-1334x750.png +0 -0
  71. package/dist/public/assets/apple-touch-startup-image-1488x2266.png +0 -0
  72. package/dist/public/assets/apple-touch-startup-image-1536x2048.png +0 -0
  73. package/dist/public/assets/apple-touch-startup-image-1620x2160.png +0 -0
  74. package/dist/public/assets/apple-touch-startup-image-1640x2160.png +0 -0
  75. package/dist/public/assets/apple-touch-startup-image-1668x2224.png +0 -0
  76. package/dist/public/assets/apple-touch-startup-image-1668x2388.png +0 -0
  77. package/dist/public/assets/apple-touch-startup-image-1792x828.png +0 -0
  78. package/dist/public/assets/apple-touch-startup-image-2048x1536.png +0 -0
  79. package/dist/public/assets/apple-touch-startup-image-2048x2732.png +0 -0
  80. package/dist/public/assets/apple-touch-startup-image-2160x1620.png +0 -0
  81. package/dist/public/assets/apple-touch-startup-image-2160x1640.png +0 -0
  82. package/dist/public/assets/apple-touch-startup-image-2208x1242.png +0 -0
  83. package/dist/public/assets/apple-touch-startup-image-2224x1668.png +0 -0
  84. package/dist/public/assets/apple-touch-startup-image-2266x1488.png +0 -0
  85. package/dist/public/assets/apple-touch-startup-image-2388x1668.png +0 -0
  86. package/dist/public/assets/apple-touch-startup-image-2436x1125.png +0 -0
  87. package/dist/public/assets/apple-touch-startup-image-2532x1170.png +0 -0
  88. package/dist/public/assets/apple-touch-startup-image-2556x1179.png +0 -0
  89. package/dist/public/assets/apple-touch-startup-image-2688x1242.png +0 -0
  90. package/dist/public/assets/apple-touch-startup-image-2732x2048.png +0 -0
  91. package/dist/public/assets/apple-touch-startup-image-2778x1284.png +0 -0
  92. package/dist/public/assets/apple-touch-startup-image-2796x1290.png +0 -0
  93. package/dist/public/assets/apple-touch-startup-image-640x1136.png +0 -0
  94. package/dist/public/assets/apple-touch-startup-image-750x1334.png +0 -0
  95. package/dist/public/assets/apple-touch-startup-image-828x1792.png +0 -0
  96. package/dist/public/assets/browserconfig.xml +12 -0
  97. package/dist/public/assets/favicon-16x16.png +0 -0
  98. package/dist/public/assets/favicon-32x32.png +0 -0
  99. package/dist/public/assets/favicon-48x48.png +0 -0
  100. package/dist/public/assets/favicon.ico +0 -0
  101. package/dist/public/assets/manifest.webmanifest +68 -0
  102. package/dist/public/assets/mstile-144x144.png +0 -0
  103. package/dist/public/assets/mstile-150x150.png +0 -0
  104. package/dist/public/assets/mstile-310x150.png +0 -0
  105. package/dist/public/assets/mstile-310x310.png +0 -0
  106. package/dist/public/assets/mstile-70x70.png +0 -0
  107. package/dist/public/assets/yandex-browser-50x50.png +0 -0
  108. package/dist/public/assets/yandex-browser-manifest.json +9 -0
  109. package/dist/public/ceb05254cedfa895b512.ttf +0 -0
  110. package/dist/public/f72efa639bb45d29e62f.ttf +0 -0
  111. package/dist/public/index.html +1 -0
  112. package/dist/public/index.js +2 -0
  113. package/dist/public/index.js.LICENSE.txt +43 -0
  114. package/dist/queues/Copy.js +69 -0
  115. package/dist/queues/Download.js +30 -0
  116. package/dist/queues/Duplicate.js +27 -0
  117. package/dist/queues/Queue.js +214 -0
  118. package/dist/queues/Remove.js +82 -0
  119. package/dist/queues/Upload.js +57 -0
  120. package/dist/transform.js +24 -0
  121. package/dist/types.js +46 -0
  122. package/dist/utils/ReferenceCountMap.js +61 -0
  123. package/dist/utils/URI.js +44 -0
  124. package/dist/utils/filter.js +24 -0
  125. package/dist/utils/path.js +12 -0
  126. package/dist/utils/uniqid.js +6 -0
  127. 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
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
4
+ function default_1() {
5
+ return Math.floor(Math.random() * Date.now()).toString(16);
6
+ }
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
+ }