cloudcmd 19.15.0 → 19.17.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 +31 -0
- package/HELP.md +26 -22
- package/README.md +1 -1
- package/dist/cloudcmd.common.css +1 -1
- package/dist/cloudcmd.common.css.map +1 -1
- package/dist/cloudcmd.common.js +14 -6
- package/dist/cloudcmd.common.js.map +1 -1
- package/dist/sw.js +1 -1
- package/dist-dev/cloudcmd.common.css +5 -3
- package/dist-dev/cloudcmd.common.js +2 -2
- package/dist-dev/sw.js +1 -1
- package/man/cloudcmd.1 +1 -1
- package/package.json +6 -5
- package/server/cloudcmd.js +15 -0
- package/server/validate.js +2 -2
- package/tmpl/config.hbs +2 -1
package/dist/sw.js
CHANGED
|
@@ -311,7 +311,7 @@ const respondWith = currify((f, e) => {
|
|
|
311
311
|
e.respondWith(f(e));
|
|
312
312
|
});
|
|
313
313
|
const getPathName = url => new URL(url).pathname;
|
|
314
|
-
const date = "
|
|
314
|
+
const date = "Sun May 17 2026 01:48:20 GMT+0300 (Eastern European Summer Time)";
|
|
315
315
|
const NAME = `cloudcmd: ${date}`;
|
|
316
316
|
const createRequest = a => new Request(a, {
|
|
317
317
|
credentials: 'same-origin'
|
|
@@ -331,7 +331,8 @@ a:active {
|
|
|
331
331
|
|
|
332
332
|
.owner {
|
|
333
333
|
display: inline-block;
|
|
334
|
-
width:
|
|
334
|
+
width: 12%;
|
|
335
|
+
|
|
335
336
|
/* when inline-block
|
|
336
337
|
* vertical align should be
|
|
337
338
|
* set top to prevent additional
|
|
@@ -343,7 +344,7 @@ a:active {
|
|
|
343
344
|
|
|
344
345
|
.mode {
|
|
345
346
|
float: right;
|
|
346
|
-
width:
|
|
347
|
+
width: 22%;
|
|
347
348
|
color: var(--column-color);
|
|
348
349
|
}
|
|
349
350
|
|
|
@@ -696,8 +697,9 @@ a:active {
|
|
|
696
697
|
.size,
|
|
697
698
|
.date,
|
|
698
699
|
.owner,
|
|
700
|
+
.time,
|
|
699
701
|
.mode {
|
|
700
|
-
display: none;
|
|
702
|
+
display: none !important;
|
|
701
703
|
}
|
|
702
704
|
|
|
703
705
|
.name {
|
|
@@ -1459,7 +1459,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
1459
1459
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1460
1460
|
|
|
1461
1461
|
"use strict";
|
|
1462
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ selectFile: () => (/* binding */ selectFile)\n/* harmony export */ });\n/* harmony import */ var _vim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vim.js */ \"./client/key/vim/vim.js\");\n/* harmony import */ var _find_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./find.js */ \"./client/key/vim/find.js\");\n/* harmony import */ var _set_current_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set-current.js */ \"./client/key/vim/set-current.js\");\n
|
|
1462
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ selectFile: () => (/* binding */ selectFile)\n/* harmony export */ });\n/* harmony import */ var _vim_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vim.js */ \"./client/key/vim/vim.js\");\n/* harmony import */ var _find_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./find.js */ \"./client/key/vim/find.js\");\n/* harmony import */ var _set_current_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set-current.js */ \"./client/key/vim/set-current.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((key, event, overrides = {}) => {\n const defaults = {\n ...globalThis.DOM,\n ...globalThis.CloudCmd\n };\n const deps = {\n ...defaults,\n ...overrides\n };\n const operations = getOperations(event, deps);\n (0,_vim_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key, operations, deps);\n});\n(Object.getOwnPropertyDescriptor(__WEBPACK_DEFAULT_EXPORT__, \"name\") || {}).writable || Object.defineProperty(__WEBPACK_DEFAULT_EXPORT__, \"name\", { value: \"default\", configurable: true });\nconst getOperations = (event, deps) => {\n var _event$preventDefault, _event$preventDefault2;\n const {\n Info = globalThis.DOM.CurrentInfo,\n CloudCmd = globalThis.CloudCmd,\n Operation,\n unselectFiles,\n setCurrentFile,\n setCurrentByName,\n getCurrentName,\n prompt = globalThis.DOM.Dialog.prompt,\n preventDefault = event === null || event === void 0 || (_event$preventDefault = event.preventDefault) === null || _event$preventDefault === void 0 ? void 0 : _event$preventDefault.bind(event),\n stopImmediatePropagation = event === null || event === void 0 || (_event$preventDefault2 = event.preventDefault) === null || _event$preventDefault2 === void 0 ? void 0 : _event$preventDefault2.bind(event),\n promptNewFile = globalThis.DOM.promptNewFile,\n toggleSelectedFile,\n Buffer = {},\n createFindNext = _createFindNext,\n createFindPrevious = _createFindPrevious,\n createMakeFile = _createMakeFile,\n renameCurrent\n } = deps;\n return {\n makeFile: createMakeFile({\n promptNewFile,\n preventDefault,\n stopImmediatePropagation\n }),\n findNext: createFindNext({\n setCurrentByName\n }),\n findPrevious: createFindPrevious({\n setCurrentByName\n }),\n escape: unselectFiles,\n rename: () => {\n event.preventDefault();\n renameCurrent();\n },\n remove: () => {\n Operation.show('delete');\n },\n operationCopy: () => {\n event.preventDefault();\n Operation.show('copy');\n },\n operationMove: () => {\n event.preventDefault();\n Operation.show('move');\n },\n makeDirectory: () => {\n event.stopImmediatePropagation();\n event.preventDefault();\n globalThis.DOM.promptNewDir();\n },\n terminal: () => {\n CloudCmd.Terminal.show();\n },\n edit: () => {\n CloudCmd.EditFileVim.show();\n },\n copy: () => {\n Buffer.copy();\n unselectFiles();\n },\n select: () => {\n const current = Info.element;\n toggleSelectedFile(current);\n },\n paste: Buffer.paste,\n moveNext: ({\n count,\n isVisual,\n isDelete\n }) => {\n (0,_set_current_js__WEBPACK_IMPORTED_MODULE_2__.setCurrent)('next', {\n count,\n isVisual,\n isDelete\n }, {\n Info,\n setCurrentFile,\n unselectFiles,\n Operation\n });\n },\n movePrevious: ({\n count,\n isVisual,\n isDelete\n }) => {\n (0,_set_current_js__WEBPACK_IMPORTED_MODULE_2__.setCurrent)('previous', {\n count,\n isVisual,\n isDelete\n }, {\n Info,\n setCurrentFile,\n unselectFiles,\n Operation\n });\n },\n find: async () => {\n preventDefault();\n const [, value] = await prompt('Find', '');\n if (!value) return;\n const names = Info.files.map(getCurrentName);\n const [result] = _find_js__WEBPACK_IMPORTED_MODULE_1__.find(value, names);\n setCurrentByName(result);\n }\n };\n};\nconst selectFile = _set_current_js__WEBPACK_IMPORTED_MODULE_2__.selectFileNotParent;\nconst _createFindPrevious = (overrides = {}) => () => {\n const {\n setCurrentByName\n } = overrides;\n const name = _find_js__WEBPACK_IMPORTED_MODULE_1__.findPrevious();\n setCurrentByName(name);\n};\nconst _createFindNext = (overrides = {}) => () => {\n const {\n setCurrentByName\n } = overrides;\n const name = _find_js__WEBPACK_IMPORTED_MODULE_1__.findNext();\n setCurrentByName(name);\n};\nconst _createMakeFile = (overrides = {}) => () => {\n const {\n promptNewFile,\n stopImmediatePropagation,\n preventDefault\n } = overrides;\n stopImmediatePropagation();\n preventDefault();\n promptNewFile();\n};\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/key/vim/index.js\n}");
|
|
1463
1463
|
|
|
1464
1464
|
/***/ },
|
|
1465
1465
|
|
|
@@ -1481,7 +1481,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
1481
1481
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1482
1482
|
|
|
1483
1483
|
"use strict";
|
|
1484
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var fullstore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fullstore */ \"./node_modules/fullstore/lib/fullstore.js\");\n\nconst store = (0,fullstore__WEBPACK_IMPORTED_MODULE_0__.fullstore)('');\nconst visual = (0,fullstore__WEBPACK_IMPORTED_MODULE_0__.fullstore)(false);\nconst stopVisual = () => {\n visual(false);\n};\nconst end = () => {\n store('');\n};\nconst rmFirst = a => {\n return a.split('').slice(1).join('');\n};\nconst noop = () => {};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((key, operations = {}) => {\n const prevStore = store();\n const isVisual = visual();\n const value = store(prevStore.concat(key));\n const {\n escape = noop,\n moveNext = noop,\n movePrevious = noop,\n remove = noop,\n copy = noop,\n paste = noop,\n select = noop,\n find = noop,\n findNext = noop,\n findPrevious = noop,\n makeFile = noop,\n makeDirectory = noop,\n terminal = noop,\n edit = noop,\n operationCopy = noop,\n operationMove = noop\n } = operations;\n if (key === 'Enter') return end();\n if (key === 'Escape') {\n visual(false);\n escape();\n return end();\n }\n if (key === 'j' || key === 'w') {\n const {\n count,\n isDelete,\n isVisual\n } = handleDelete(prevStore);\n !isNaN(count) && moveNext({\n count,\n isVisual,\n isDelete\n });\n return end();\n }\n if (key === 'k' || key === 'b') {\n const {\n count,\n isDelete,\n isVisual\n } = handleDelete(prevStore);\n !isNaN(count) && movePrevious({\n count,\n isVisual,\n isDelete\n });\n return end();\n }\n if (value === 'gg' || key === '^') {\n const {\n isDelete,\n isVisual\n } = handleDelete(prevStore);\n movePrevious({\n count: Infinity,\n isVisual,\n isDelete\n });\n return end();\n }\n if (value === 'md') {\n makeDirectory();\n return end();\n }\n if (value === 'tt') {\n terminal();\n return end();\n }\n if (value === 'e') {\n edit();\n return end();\n }\n if (value === 'cc') {\n operationCopy();\n return end();\n }\n if (value === 'mm') {\n operationMove();\n return end();\n }\n if (value === 'mf') {\n makeFile();\n return end();\n }\n if (key === 'd' && (visual() || prevStore === 'd')) {\n stopVisual();\n remove();\n return end();\n }\n if (key === 'G' || key === '$') {\n moveNext({\n count: Infinity,\n isVisual\n });\n return end();\n }\n if (key === 'y') {\n if (!visual()) return end();\n stopVisual();\n copy();\n return end();\n }\n if (/^p$/i.test(key)) {\n paste();\n return end();\n }\n if (/^v$/i.test(key)) {\n visual(!visual());\n select();\n return end();\n }\n if (key === '/') {\n find();\n return end();\n }\n if (key === 'n') {\n findNext();\n return end();\n }\n if (key === 'N') {\n findPrevious();\n return end();\n }\n if (key === ' ') return end();\n});\n(Object.getOwnPropertyDescriptor(__WEBPACK_DEFAULT_EXPORT__, \"name\") || {}).writable || Object.defineProperty(__WEBPACK_DEFAULT_EXPORT__, \"name\", { value: \"default\", configurable: true });\nfunction handleDelete(prevStore) {\n const isDelete = prevStore[0] === 'd';\n if (isDelete) {\n visual(true);\n prevStore = rmFirst(prevStore);\n }\n const count = getNumber(prevStore);\n const isVisual = visual();\n return {\n count,\n isDelete,\n isVisual\n };\n}\nfunction getNumber(value) {\n if (!value) return 1;\n if (value === 'g') return 1;\n return parseInt(value);\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/key/vim/vim.js\n}");
|
|
1484
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var fullstore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fullstore */ \"./node_modules/fullstore/lib/fullstore.js\");\n\nconst store = (0,fullstore__WEBPACK_IMPORTED_MODULE_0__.fullstore)('');\nconst visual = (0,fullstore__WEBPACK_IMPORTED_MODULE_0__.fullstore)(false);\nconst stopVisual = () => {\n visual(false);\n};\nconst end = () => {\n store('');\n};\nconst rmFirst = a => {\n return a.split('').slice(1).join('');\n};\nconst noop = () => {};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((key, operations = {}) => {\n const prevStore = store();\n const isVisual = visual();\n const value = store(prevStore.concat(key));\n const {\n escape = noop,\n moveNext = noop,\n movePrevious = noop,\n remove = noop,\n copy = noop,\n paste = noop,\n select = noop,\n find = noop,\n findNext = noop,\n findPrevious = noop,\n makeFile = noop,\n makeDirectory = noop,\n terminal = noop,\n edit = noop,\n operationCopy = noop,\n operationMove = noop,\n rename = noop\n } = operations;\n if (key === 'Enter') return end();\n if (key === 'Escape') {\n visual(false);\n escape();\n return end();\n }\n if (key === 'j' || key === 'w') {\n const {\n count,\n isDelete,\n isVisual\n } = handleDelete(prevStore);\n !isNaN(count) && moveNext({\n count,\n isVisual,\n isDelete\n });\n return end();\n }\n if (key === 'k' || key === 'b') {\n const {\n count,\n isDelete,\n isVisual\n } = handleDelete(prevStore);\n !isNaN(count) && movePrevious({\n count,\n isVisual,\n isDelete\n });\n return end();\n }\n if (value === 'gg' || key === '^') {\n const {\n isDelete,\n isVisual\n } = handleDelete(prevStore);\n movePrevious({\n count: Infinity,\n isVisual,\n isDelete\n });\n return end();\n }\n if (value === 'md') {\n makeDirectory();\n return end();\n }\n if (value === 'tt') {\n terminal();\n return end();\n }\n if (value === 'e') {\n edit();\n return end();\n }\n if (value === 'cc') {\n operationCopy();\n return end();\n }\n if (value === 'mm') {\n operationMove();\n return end();\n }\n if (value === 'mf') {\n makeFile();\n return end();\n }\n if (value === 'rr') {\n rename();\n return end();\n }\n if (key === 'd' && (visual() || prevStore === 'd')) {\n stopVisual();\n remove();\n return end();\n }\n if (key === 'G' || key === '$') {\n moveNext({\n count: Infinity,\n isVisual\n });\n return end();\n }\n if (key === 'y') {\n if (!visual()) return end();\n stopVisual();\n copy();\n return end();\n }\n if (/^p$/i.test(key)) {\n paste();\n return end();\n }\n if (/^v$/i.test(key)) {\n visual(!visual());\n select();\n return end();\n }\n if (key === '/') {\n find();\n return end();\n }\n if (key === 'n') {\n findNext();\n return end();\n }\n if (key === 'N') {\n findPrevious();\n return end();\n }\n if (key === ' ') return end();\n});\n(Object.getOwnPropertyDescriptor(__WEBPACK_DEFAULT_EXPORT__, \"name\") || {}).writable || Object.defineProperty(__WEBPACK_DEFAULT_EXPORT__, \"name\", { value: \"default\", configurable: true });\nfunction handleDelete(prevStore) {\n const isDelete = prevStore[0] === 'd';\n if (isDelete) {\n visual(true);\n prevStore = rmFirst(prevStore);\n }\n const count = getNumber(prevStore);\n const isVisual = visual();\n return {\n count,\n isDelete,\n isVisual\n };\n}\nfunction getNumber(value) {\n if (!value) return 1;\n if (value === 'g') return 1;\n return parseInt(value);\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/key/vim/vim.js\n}");
|
|
1485
1485
|
|
|
1486
1486
|
/***/ },
|
|
1487
1487
|
|
package/dist-dev/sw.js
CHANGED
|
@@ -37,7 +37,7 @@ eval("{// shim for using process in browser\nvar process = module.exports = {};\
|
|
|
37
37
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
38
38
|
|
|
39
39
|
"use strict";
|
|
40
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var node_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:process */ \"./node_modules/process/browser.js\");\n/* harmony import */ var try_to_catch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n/* harmony import */ var currify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\n\n\nconst isDev = \"development\" === 'development';\nconst isGet = a => a.method === 'GET';\nconst isBasic = a => a.type === 'basic';\nconst wait = currify__WEBPACK_IMPORTED_MODULE_2__((f, e) => e.waitUntil(f()));\nconst respondWith = currify__WEBPACK_IMPORTED_MODULE_2__((f, e) => {\n const {\n request\n } = e;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n if (url.endsWith('/') || /\\^\\/fs/.test(pathname)) return;\n if (!isGet(request)) return;\n if (!isBasic(request)) return;\n if (pathname.startsWith('/api')) return;\n if (/^socket.io/.test(pathname)) return;\n e.respondWith(f(e));\n});\nconst getPathName = url => new URL(url).pathname;\nconst date = \"
|
|
40
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var node_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:process */ \"./node_modules/process/browser.js\");\n/* harmony import */ var try_to_catch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n/* harmony import */ var currify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\n\n\nconst isDev = \"development\" === 'development';\nconst isGet = a => a.method === 'GET';\nconst isBasic = a => a.type === 'basic';\nconst wait = currify__WEBPACK_IMPORTED_MODULE_2__((f, e) => e.waitUntil(f()));\nconst respondWith = currify__WEBPACK_IMPORTED_MODULE_2__((f, e) => {\n const {\n request\n } = e;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n if (url.endsWith('/') || /\\^\\/fs/.test(pathname)) return;\n if (!isGet(request)) return;\n if (!isBasic(request)) return;\n if (pathname.startsWith('/api')) return;\n if (/^socket.io/.test(pathname)) return;\n e.respondWith(f(e));\n});\nconst getPathName = url => new URL(url).pathname;\nconst date = \"Sun May 17 2026 01:48:22 GMT+0300 (Eastern European Summer Time)\";\nconst NAME = `cloudcmd: ${date}`;\nconst createRequest = a => new Request(a, {\n credentials: 'same-origin'\n});\nconst getRequest = (a, request) => {\n if (a !== '/') return request;\n return createRequest('/');\n};\nglobalThis.addEventListener('install', wait(onInstall));\nglobalThis.addEventListener('fetch', respondWith(onFetch));\nglobalThis.addEventListener('activate', wait(onActivate));\nasync function onActivate() {\n console.info(`cloudcmd: sw: activate: ${NAME}`);\n await globalThis.clients.claim();\n const keys = await caches.keys();\n const deleteCache = caches.delete.bind(caches);\n await Promise.all(keys.map(deleteCache));\n}\nasync function onInstall() {\n console.info(`cloudcmd: sw: install: ${NAME}`);\n await globalThis.skipWaiting();\n}\nasync function onFetch(event) {\n const {\n request\n } = event;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n const newRequest = getRequest(pathname, event.request);\n const cache = await caches.open(NAME);\n const response = await cache.match(request);\n if (!isDev && response) return response;\n const [e, resp] = await (0,try_to_catch__WEBPACK_IMPORTED_MODULE_1__.tryToCatch)(fetch, newRequest, {\n credentials: 'same-origin'\n });\n if (e) return new Response(e.message);\n await addToCache(request, resp.clone());\n return resp;\n}\nasync function addToCache(request, response) {\n const cache = await caches.open(NAME);\n return cache.put(request, response);\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/sw/sw.js\n}");
|
|
41
41
|
|
|
42
42
|
/***/ },
|
|
43
43
|
|
package/man/cloudcmd.1
CHANGED
|
@@ -33,7 +33,7 @@ programs in browser from any computer, mobile or tablet device.
|
|
|
33
33
|
--show-config show config values
|
|
34
34
|
--show-dot-files show dot files
|
|
35
35
|
--show-file-name show file name in view and edit modes
|
|
36
|
-
--editor set editor: "dword", "edward" or "
|
|
36
|
+
--editor set editor: "dword", "edward", "deepword" or "qword"
|
|
37
37
|
--menu set menu: "supermenu" or "aleman"
|
|
38
38
|
--packer set packer: "tar" or "zip"
|
|
39
39
|
--root set root directory
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloudcmd",
|
|
3
|
-
"version": "19.
|
|
3
|
+
"version": "19.17.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
|
|
6
6
|
"description": "File manager for the web with console and editor",
|
|
@@ -130,6 +130,7 @@
|
|
|
130
130
|
"ponse": "^8.0.0",
|
|
131
131
|
"pullout": "^5.0.0",
|
|
132
132
|
"putout": "^42.0.5",
|
|
133
|
+
"qword": "^1.0.0",
|
|
133
134
|
"redzip": "^4.6.1",
|
|
134
135
|
"rendy": "^5.0.0",
|
|
135
136
|
"restafary": "^13.0.1",
|
|
@@ -159,22 +160,21 @@
|
|
|
159
160
|
"@cloudcmd/stub": "^5.0.0",
|
|
160
161
|
"@iocmd/wait": "^2.1.0",
|
|
161
162
|
"@putout/eslint-flat": "^4.0.0",
|
|
163
|
+
"@supertape/loader-css": "^1.0.0",
|
|
162
164
|
"@types/node-fetch": "^2.6.11",
|
|
163
165
|
"auto-globals": "^4.0.0",
|
|
164
166
|
"babel-loader": "^10.0.0",
|
|
165
167
|
"babel-plugin-macros": "^3.0.0",
|
|
166
|
-
"c8": "^11.0.0",
|
|
167
168
|
"cheerio": "^1.0.0-rc.5",
|
|
168
169
|
"clean-css-loader": "^4.2.1",
|
|
169
170
|
"codegen.macro": "^4.0.0",
|
|
170
171
|
"css-loader": "^7.1.2",
|
|
171
172
|
"css-minimizer-webpack-plugin": "^8.0.0",
|
|
172
173
|
"css-modules-require-hook": "^4.2.3",
|
|
173
|
-
"cssnano-preset-default": "^
|
|
174
|
+
"cssnano-preset-default": "^8.0.1",
|
|
174
175
|
"domtokenlist-shim": "^1.2.0",
|
|
175
176
|
"emitify": "^4.0.1",
|
|
176
177
|
"eslint": "^10.0.0",
|
|
177
|
-
"eslint-plugin-n": "^17.0.0-4",
|
|
178
178
|
"eslint-plugin-putout": "^31.0.0",
|
|
179
179
|
"globals": "^17.0.0",
|
|
180
180
|
"gritty": "^10.2.0",
|
|
@@ -207,8 +207,9 @@
|
|
|
207
207
|
"serve-once": "^3.0.1",
|
|
208
208
|
"smalltalk": "^5.0.0",
|
|
209
209
|
"style-loader": "^4.0.0",
|
|
210
|
+
"superc8": "^12.6.0",
|
|
210
211
|
"supermenu": "^5.0.0",
|
|
211
|
-
"supertape": "^
|
|
212
|
+
"supertape": "^13.0.0",
|
|
212
213
|
"tar-stream": "^3.0.0",
|
|
213
214
|
"unionfs": "^4.0.0",
|
|
214
215
|
"url-loader": "^4.0.0",
|
package/server/cloudcmd.js
CHANGED
|
@@ -12,6 +12,7 @@ import {konsole} from 'console-io';
|
|
|
12
12
|
import {edward} from 'edward';
|
|
13
13
|
import {dword} from 'dword';
|
|
14
14
|
import {deepword} from 'deepword';
|
|
15
|
+
import {qword} from 'qword';
|
|
15
16
|
import nomine from 'nomine';
|
|
16
17
|
import {fileop} from '@cloudcmd/fileop';
|
|
17
18
|
import * as cloudfunc from '#common/cloudfunc';
|
|
@@ -152,6 +153,12 @@ function listen({prefixSocket, socket, config}) {
|
|
|
152
153
|
prefixSocket: `${prefixSocket}/dword`,
|
|
153
154
|
});
|
|
154
155
|
|
|
156
|
+
qword.listen(socket, {
|
|
157
|
+
root,
|
|
158
|
+
auth,
|
|
159
|
+
prefixSocket: `${prefixSocket}/qword`,
|
|
160
|
+
});
|
|
161
|
+
|
|
155
162
|
deepword.listen(socket, {
|
|
156
163
|
root,
|
|
157
164
|
auth,
|
|
@@ -215,6 +222,14 @@ function cloudcmdMiddle({modules, config}) {
|
|
|
215
222
|
dropbox,
|
|
216
223
|
dropboxToken,
|
|
217
224
|
}),
|
|
225
|
+
qword({
|
|
226
|
+
root,
|
|
227
|
+
online,
|
|
228
|
+
diff,
|
|
229
|
+
zip,
|
|
230
|
+
dropbox,
|
|
231
|
+
dropboxToken,
|
|
232
|
+
}),
|
|
218
233
|
deepword({
|
|
219
234
|
root,
|
|
220
235
|
online,
|
package/server/validate.js
CHANGED
|
@@ -28,10 +28,10 @@ export const root = (dir, config, overrides = {}) => {
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
export const editor = (name, {exit = _exit} = {}) => {
|
|
31
|
-
const reg = /^(dword|edward|deepword)$/;
|
|
31
|
+
const reg = /^(dword|edward|deepword|qword)$/;
|
|
32
32
|
|
|
33
33
|
if (!reg.test(name))
|
|
34
|
-
exit(
|
|
34
|
+
exit(`cloudcmd --editor: could be "dword", "edward", "deepword" or "qword" only, recieved: "${name}"`);
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
export const menu = (name, {exit = _exit} = {}) => {
|
package/tmpl/config.hbs
CHANGED
|
@@ -57,11 +57,12 @@
|
|
|
57
57
|
<option {{ name-size-selected }}>name-size</option>
|
|
58
58
|
</select>
|
|
59
59
|
</li>
|
|
60
|
-
<li title="Editor: Edward(Ace-based), Dword(Codemirror-based), Deepword(Monaco-based)">
|
|
60
|
+
<li title="Editor: Edward(Ace-based), Dword(Codemirror-based), Deepword(Monaco-based), Qword(Codemirror6-based)">
|
|
61
61
|
<select data-name="js-editor" class="form-control full-width" title="Editor">
|
|
62
62
|
<option {{ edward-selected }}>edward</option>
|
|
63
63
|
<option {{ dword-selected }}>dword</option>
|
|
64
64
|
<option {{ deepword-selected }}>deepword</option>
|
|
65
|
+
<option {{ qword-selected }}>qword</option>
|
|
65
66
|
</select>
|
|
66
67
|
</li>
|
|
67
68
|
<li title="Navigate and edit files using hotkeys of legendary editor">
|