From 37ab7068d9090d599fc97e06af3e08d156c1b251 Mon Sep 17 00:00:00 2001 From: Devin Buhl Date: Tue, 16 Apr 2024 00:47:40 -0400 Subject: [PATCH 001/327] feature: publish container image to GHCR (#409) * feat: publish container image to GHCR Fixes: #408 * add permissions to workflow --- .github/workflows/docker.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 5a932ac7..d0f8c6eb 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -6,6 +6,9 @@ on: jobs: buildx: runs-on: ubuntu-latest + permissions: + contents: read + packages: write steps: - name: Checkout uses: actions/checkout@v4 @@ -38,6 +41,12 @@ jobs: with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push base-image uses: docker/build-push-action@v5 with: @@ -48,6 +57,8 @@ jobs: tags: | coderaiser/cloudcmd:latest coderaiser/cloudcmd:${{ steps.build.outputs.version }} + ghcr.io/${{ github.repository }}:latest + ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }} - name: Build and push alpine-image uses: docker/build-push-action@v5 with: @@ -58,3 +69,5 @@ jobs: tags: | coderaiser/cloudcmd:latest-alpine coderaiser/cloudcmd:${{ steps.build.outputs.version }}-alpine + ghcr.io/${{ github.repository }}:latest-alpine + ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-alpine From 6fb2102099e1287136c2ba9e40795dd54579452c Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 16 Apr 2024 23:04:46 +0300 Subject: [PATCH 002/327] fix: server: route: path traversal --- server/route.mjs | 4 ++++ test/rest/fs.mjs | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/server/route.mjs b/server/route.mjs index 5397c27f..d6917ec5 100644 --- a/server/route.mjs +++ b/server/route.mjs @@ -77,7 +77,11 @@ async function route({config, options, request, response}) { const rootName = name.replace(CloudFunc.FS, '') || '/'; const fullPath = root(rootName, config('root')); + if (fullPath.indexOf(config('root'))) + return ponse.sendError(Error(`Path '${fullPath}' beyond root '${config('root')}'`), p); + const {html, win32} = options; + const read = getReadDir(config, { win32, }); diff --git a/test/rest/fs.mjs b/test/rest/fs.mjs index 7557ede0..07f4b7f6 100644 --- a/test/rest/fs.mjs +++ b/test/rest/fs.mjs @@ -18,3 +18,10 @@ test('cloudcmd: rest: fs: path', async (t) => { t.equal(path, '/', 'should dir path be "/"'); t.end(); }); + +test('cloudcmd: path traversal beyond root', async (t) => { + const {body} = await request.get('/fs..%2f..%2fetc/passwd'); + + t.match(body, 'beyond root', 'should return beyond root message'); + t.end(); +}); From 24288536135c15bc6f4cab8837cfae6ae4901f24 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 17 Apr 2024 00:04:02 +0300 Subject: [PATCH 003/327] chore: lint --- .npmignore | 1 + .nycrc.json | 3 ++- client/modules/polyfill.spec.js | 8 +++++--- server/config.js | 10 ++++++---- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.npmignore b/.npmignore index de3559c7..0ecde705 100644 --- a/.npmignore +++ b/.npmignore @@ -30,3 +30,4 @@ webpack.config.js *.cdr *.eps +*.config.* diff --git a/.nycrc.json b/.nycrc.json index df171b24..bd520eb6 100644 --- a/.nycrc.json +++ b/.nycrc.json @@ -4,7 +4,8 @@ "exclude": [ "**/*.spec.js", "**/fixture", - "**/*.*.js" + "**/*.*.js", + "**/*.config.*" ], "branches": 100, "lines": 100, diff --git a/client/modules/polyfill.spec.js b/client/modules/polyfill.spec.js index ea4524a7..02686c1d 100644 --- a/client/modules/polyfill.spec.js +++ b/client/modules/polyfill.spec.js @@ -23,9 +23,11 @@ test('cloudcmd: client: polyfill: scrollIntoViewIfNeaded', (t) => { mockRequire.stop('scroll-into-view-if-neaded'); global.DOM = DOM; - const args = [el, { - block: 'nearest', - }]; + const args = [ + el, { + block: 'nearest', + }, + ]; stopAll(); diff --git a/server/config.js b/server/config.js index 5c1352a2..5d20af30 100644 --- a/server/config.js +++ b/server/config.js @@ -242,8 +242,10 @@ function cryptoPass(manage, json) { const password = criton(json.password, algo); - return [manage, { - ...json, - password, - }]; + return [ + manage, { + ...json, + password, + }, + ]; } From 52df5bfcf49ac8b72b04a6a712737a529d05e5da Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 17 Apr 2024 00:05:05 +0300 Subject: [PATCH 004/327] chore: cloudcmd: v17.4.0 --- ChangeLog | 8 ++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 38e91267..75b23217 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2024.04.17, v17.4.0 + +fix: +- 6fb21020 server: route: path traversal + +feature: +- 37ab7068 publish container image to GHCR (#409) + 2024.04.03, v17.3.3 feature: diff --git a/HELP.md b/HELP.md index 5f2da049..13b1a36c 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.3.3 +# Cloud Commander v17.4.0 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1095,6 +1095,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2024.04.17*, **[v17.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.0)** - *2024.04.03*, **[v17.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.3)** - *2024.03.29*, **[v17.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.2)** - *2024.03.29*, **[v17.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.1)** diff --git a/README.md b/README.md index 0de495f2..5290718d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.3.3 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v17.4.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 98f5d890..0e9ec0df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "17.3.3", + "version": "17.4.0", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From c409a2db82180123c4acaa54474cee8b2fbede28 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 6 May 2024 12:20:55 +0300 Subject: [PATCH 005/327] feature: cloudcmd: copymitter v9.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0e9ec0df..0b24b57b 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "chalk": "^4.0.0", "compression": "^1.7.4", "console-io": "^14.0.0", - "copymitter": "^8.0.1", + "copymitter": "^9.0.0", "criton": "^2.0.0", "currify": "^4.0.0", "deepmerge": "^4.0.0", From 154b4bd6274334afeb240459a615c057fa14552a Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 6 May 2024 12:21:01 +0300 Subject: [PATCH 006/327] feature: cloudcmd: @cloudcmd/move-files v8.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0b24b57b..17526989 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", "@cloudcmd/fileop": "^8.0.0", - "@cloudcmd/move-files": "^7.0.0", + "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", "@putout/cli-validate-args": "^1.0.1", "@putout/plugin-cloudcmd": "^3.1.1", From 610ba8827f9f1a2bf1761df3f90af9fe93b45d63 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 6 May 2024 14:48:47 +0300 Subject: [PATCH 007/327] chore: lint --- .github/workflows/docker.yml | 6 ++---- client/client.js | 15 ++++++++------- client/dom/current-file.spec.js | 20 +++++++++++--------- server/terminal.js | 6 +++++- server/validate.mjs | 19 ++++++++++++++++--- 5 files changed, 42 insertions(+), 24 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index d0f8c6eb..f26b3755 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -27,11 +27,9 @@ jobs: run: redrun lint - name: Build id: build - run: > + run: | redrun build - - echo "::set-output name=version::$(grep '"version":' package.json -m1 - | cut -d\" -f4)" + echo "::set-output name=version::$(grep '"version":' package.json -m1 | cut -d\" -f4)" - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx diff --git a/client/client.js b/client/client.js index 58f4ae83..d1bdbcff 100644 --- a/client/client.js +++ b/client/client.js @@ -74,13 +74,14 @@ function CloudCmdProto(DOM) { right: 'asc', }; - this.changeDir = async (path, { - isRefresh, - panel, - history = true, - noCurrent, - currentName, - } = {}) => { + this.changeDir = async (path, overrides = {}) => { + const { + isRefresh, + panel, + history = true, + noCurrent, + currentName, + } = overrides; const refresh = isRefresh; let panelChanged; diff --git a/client/dom/current-file.spec.js b/client/dom/current-file.spec.js index 3c907fcd..3d822206 100644 --- a/client/dom/current-file.spec.js +++ b/client/dom/current-file.spec.js @@ -285,15 +285,17 @@ test('current-file: parseHrefAttribute', (t) => { t.end(); }); -function getDOM({ - link = {}, - getCurrentDirPath = stub(), - getCurrentDirName = stub(), - getByDataName = stub(), - isContainClass = stub(), - getCurrentType = stub(), - getCurrentPath = stub(), -} = {}) { +function getDOM(overrides = {}) { + const { + link = {}, + getCurrentDirPath = stub(), + getCurrentDirName = stub(), + getByDataName = stub(), + isContainClass = stub(), + getCurrentType = stub(), + getCurrentPath = stub(), + } = overrides; + return { getCurrentDirPath, getCurrentDirName, diff --git a/server/terminal.js b/server/terminal.js index 7a291b31..d10cdc8b 100644 --- a/server/terminal.js +++ b/server/terminal.js @@ -12,7 +12,11 @@ function _getModule(a) { return require(a); } -module.exports = (config, arg, {getModule = _getModule} = {}) => { +module.exports = (config, arg, overrides = {}) => { + const { + getModule = _getModule, + } = overrides; + if (!config('terminal')) return noop; diff --git a/server/validate.mjs b/server/validate.mjs index bf825e85..6b928e7b 100644 --- a/server/validate.mjs +++ b/server/validate.mjs @@ -6,7 +6,12 @@ import {getThemes as _getThemes} from './theme.mjs'; const isString = (a) => typeof a === 'string'; -export const root = (dir, config, {exit = _exit, statSync = _statSync} = {}) => { +export const root = (dir, config, overrides = {}) => { + const { + exit = _exit, + statSync = _statSync, + } = overrides; + if (!isString(dir)) throw Error('dir should be a string'); @@ -36,7 +41,11 @@ export const packer = (name, {exit = _exit} = {}) => { exit('cloudcmd --packer: could be "tar" or "zip" only'); }; -export const columns = (type, {exit = _exit, getColumns = _getColumns} = {}) => { +export const columns = (type, overrides = {}) => { + const { + exit = _exit, + getColumns = _getColumns, + } = overrides; const addQuotes = (a) => `"${a}"`; const all = Object .keys(getColumns()) @@ -51,7 +60,11 @@ export const columns = (type, {exit = _exit, getColumns = _getColumns} = {}) => exit(`cloudcmd --columns: can be only one of: ${names}`); }; -export const theme = (type, {exit = _exit, getThemes = _getThemes} = {}) => { +export const theme = (type, overrides = {}) => { + const { + exit = _exit, + getThemes = _getThemes, + } = overrides; const addQuotes = (a) => `"${a}"`; const all = Object .keys(getThemes()) From 25872c3b11c07aa99e3b812a6899881f09944575 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 6 May 2024 14:49:44 +0300 Subject: [PATCH 008/327] chore: cloudcmd: v17.4.1 --- ChangeLog | 6 ++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 75b23217..bae03a7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2024.05.06, v17.4.1 + +feature: +- 154b4bd6 cloudcmd: @cloudcmd/move-files v8.0.0 +- c409a2db cloudcmd: copymitter v9.0.0 + 2024.04.17, v17.4.0 fix: diff --git a/HELP.md b/HELP.md index 13b1a36c..1d44b4b0 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.0 +# Cloud Commander v17.4.1 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1095,6 +1095,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2024.05.06*, **[v17.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.1)** - *2024.04.17*, **[v17.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.0)** - *2024.04.03*, **[v17.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.3)** - *2024.03.29*, **[v17.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.2)** diff --git a/README.md b/README.md index 5290718d..63158df4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v17.4.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 17526989..75da1b5c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "17.4.0", + "version": "17.4.1", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 14d46c007b84f7dc63523a07bca9b6f6818132f0 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 6 May 2024 11:52:34 +0000 Subject: [PATCH 009/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/client.js | 1 + server/validate.mjs | 2 ++ 2 files changed, 3 insertions(+) diff --git a/client/client.js b/client/client.js index d1bdbcff..4c4555ff 100644 --- a/client/client.js +++ b/client/client.js @@ -82,6 +82,7 @@ function CloudCmdProto(DOM) { noCurrent, currentName, } = overrides; + const refresh = isRefresh; let panelChanged; diff --git a/server/validate.mjs b/server/validate.mjs index 6b928e7b..fa67a321 100644 --- a/server/validate.mjs +++ b/server/validate.mjs @@ -46,6 +46,7 @@ export const columns = (type, overrides = {}) => { exit = _exit, getColumns = _getColumns, } = overrides; + const addQuotes = (a) => `"${a}"`; const all = Object .keys(getColumns()) @@ -65,6 +66,7 @@ export const theme = (type, overrides = {}) => { exit = _exit, getThemes = _getThemes, } = overrides; + const addQuotes = (a) => `"${a}"`; const all = Object .keys(getThemes()) From 9c8c0533a4a84af50565af63c0b801d58d0f9566 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Thu, 13 Jun 2024 09:11:36 +0300 Subject: [PATCH 010/327] Update CONTRIBUTING.md --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 453cbc03..b6b6b4ef 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,5 +26,5 @@ For example util, console, view, edit, style etc... **Examples**: -- [fix(style) .name{width}: 37% -> 35%](https://github.com/coderaiser/cloudcmd/commit/94b0642e3990c17b3a0ee3efeb75f343e1e7c050) -- [fix(console) dispatch: focus -> mouseup](https://github.com/coderaiser/cloudcmd/commit/f41ec5058d1411e86a881f8e8077e0572e0409ec) +- [fix: style: .name{width}: 37% -> 35%](https://github.com/coderaiser/cloudcmd/commit/94b0642e3990c17b3a0ee3efeb75f343e1e7c050) +- [fix: console: dispatch: focus -> mouseup](https://github.com/coderaiser/cloudcmd/commit/f41ec5058d1411e86a881f8e8077e0572e0409ec) From 883eee96a2c2fb4829198e2d620caca518110747 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 14 Jun 2024 22:26:27 +0300 Subject: [PATCH 011/327] chore: lint --- client/sort.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/sort.js b/client/sort.js index fdcfaf65..863c8379 100644 --- a/client/sort.js +++ b/client/sort.js @@ -4,11 +4,8 @@ const DOM = require('./dom'); const Info = DOM.CurrentInfo; - const {sort, order} = CloudCmd; - const position = DOM.getPanelPosition(); - let sortPrevious = sort[position]; const {getPanel} = DOM; From 05ef0ae4522503900f279da652856c0eb580151b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 14 Jun 2024 22:32:50 +0300 Subject: [PATCH 012/327] feature: cloudcmd: c8 v10.1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 75da1b5c..9e6ac9bd 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,7 @@ "auto-globals": "^4.0.0", "babel-loader": "^8.0.0", "babel-plugin-macros": "^3.0.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "cheerio": "^1.0.0-rc.5", "clean-css-loader": "^2.0.0", "codegen.macro": "^4.0.0", From 14d9618a6439f2ff39dc75bb5f4c8a868baf3c3a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 14 Jun 2024 22:33:14 +0300 Subject: [PATCH 013/327] chore: lint --- client/modules/config/index.js | 3 ++- client/modules/edit-names.js | 4 ++-- client/sort.js | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/client/modules/config/index.js b/client/modules/config/index.js index cdd18da1..0ec5b100 100644 --- a/client/modules/config/index.js +++ b/client/modules/config/index.js @@ -225,7 +225,8 @@ function onAuthChange(checked) { const elUsername = input.getElementByName('username', Element); const elPassword = input.getElementByName('password', Element); - elUsername.disabled = elPassword.disabled = !checked; + elUsername.disabled = !checked; + elPassword.disabled = !checked; } function onNameChange(name) { diff --git a/client/modules/edit-names.js b/client/modules/edit-names.js index e1cc3cbe..c0b9ae84 100644 --- a/client/modules/edit-names.js +++ b/client/modules/edit-names.js @@ -63,9 +63,9 @@ async function keyListener(event) { const ctrlMeta = ctrl || meta; const {Key} = CloudCmd; - if (ctrlMeta && event.keyCode === Key.S) + if (ctrlMeta && event.keyCode === Key.S) { hide(); - else if (ctrlMeta && event.keyCode === Key.P) { + } else if (ctrlMeta && event.keyCode === Key.P) { const [, pattern] = await Dialog.prompt('Apply pattern:', '[n][e]'); pattern && applyPattern(pattern); } diff --git a/client/sort.js b/client/sort.js index 863c8379..cf9fb4a4 100644 --- a/client/sort.js +++ b/client/sort.js @@ -20,8 +20,8 @@ CloudCmd.sortPanel = (name, panel = getPanel()) => { else order[position] = 'asc'; - sortPrevious = sort[position] = name; - + sortPrevious = name; + sort[position] = name; const noCurrent = position !== Info.panelPosition; CloudCmd.refresh({ From 2ae6ad34fc7e238b56796694c0cbba5059973be0 Mon Sep 17 00:00:00 2001 From: zilion2000 Date: Wed, 3 Jul 2024 13:57:56 +0200 Subject: [PATCH 014/327] feature: docker: Dockerimage update Debian12 (#414) --- docker/Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 701a4199..e056e946 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM node:lts-buster +FROM node:lts-bookworm LABEL maintainer="Coderaiser" RUN mkdir -p /usr/src/app @@ -15,9 +15,9 @@ COPY . /usr/src/app WORKDIR / -ENV cloudcmd_terminal true -ENV cloudcmd_terminal_path gritty -ENV cloudcmd_open false +ENV cloudcmd_terminal=true +ENV cloudcmd_terminal_path=gritty +ENV cloudcmd_open=false EXPOSE 8000 From 79fb49479e38240109a55708902d47788a9d5031 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 3 Jul 2024 12:01:49 +0000 Subject: [PATCH 015/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .madrun.mjs | 2 +- bin/release.mjs | 2 +- client/cloudcmd.js | 3 ++- server/columns.spec.mjs | 2 +- server/distribute/export.spec.mjs | 2 +- server/distribute/import.mjs | 2 +- server/distribute/import.spec.mjs | 2 +- server/themes.spec.mjs | 2 +- server/user-menu.spec.mjs | 2 +- test/before.mjs | 6 +++--- test/rest/copy.mjs | 2 +- test/rest/move.mjs | 2 +- test/rest/pack.mjs | 4 ++-- test/server/console.mjs | 2 +- 14 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.madrun.mjs b/.madrun.mjs index 428eec7a..0cc7a5ec 100644 --- a/.madrun.mjs +++ b/.madrun.mjs @@ -1,5 +1,5 @@ -import {run, cutEnv} from 'madrun'; import process from 'node:process'; +import {run, cutEnv} from 'madrun'; const testEnv = { THREAD_IT_COUNT: 0, diff --git a/bin/release.mjs b/bin/release.mjs index e9ac53d9..1c12c20e 100755 --- a/bin/release.mjs +++ b/bin/release.mjs @@ -1,13 +1,13 @@ #!/usr/bin/env node import {promisify} from 'node:util'; +import process from 'node:process'; import tryToCatch from 'try-to-catch'; import {createSimport} from 'simport'; import minor from 'minor'; import _place from 'place'; import rendy from 'rendy'; import shortdate from 'shortdate'; -import process from 'node:process'; const simport = createSimport(import.meta.url); const place = promisify(_place); diff --git a/client/cloudcmd.js b/client/cloudcmd.js index 937f6d77..47019e55 100644 --- a/client/cloudcmd.js +++ b/client/cloudcmd.js @@ -10,7 +10,7 @@ const {registerSW, listenSW} = require('./sw/register'); const isDev = process.env.NODE_ENV === 'development'; -module.exports = window.CloudCmd = async (config) => { +module.exports = async (config) => { window.Util = require('../common/util'); window.CloudFunc = require('../common/cloudfunc'); @@ -27,6 +27,7 @@ module.exports = window.CloudCmd = async (config) => { window.CloudCmd.init(prefix, config); }; +window.CloudCmd = module.exports; function getPrefix(prefix) { if (!prefix) diff --git a/server/columns.spec.mjs b/server/columns.spec.mjs index 1e62f5f7..8ddcd54c 100644 --- a/server/columns.spec.mjs +++ b/server/columns.spec.mjs @@ -1,7 +1,7 @@ import {dirname} from 'node:path'; import {fileURLToPath} from 'node:url'; -import test from 'supertape'; import fs from 'node:fs'; +import test from 'supertape'; import {getColumns, isDev} from './columns.mjs'; const __filename = fileURLToPath(import.meta.url); diff --git a/server/distribute/export.spec.mjs b/server/distribute/export.spec.mjs index db65638d..e6dd1f8a 100644 --- a/server/distribute/export.spec.mjs +++ b/server/distribute/export.spec.mjs @@ -1,7 +1,7 @@ -import Config from '../config.js'; import {once} from 'node:events'; import test from 'supertape'; import io from 'socket.io-client'; +import Config from '../config.js'; import {connect} from '../../test/before.mjs'; const config = Config.createConfig(); diff --git a/server/distribute/import.mjs b/server/distribute/import.mjs index 72ce438d..f776abc0 100644 --- a/server/distribute/import.mjs +++ b/server/distribute/import.mjs @@ -3,9 +3,9 @@ import wraptile from 'wraptile'; import squad from 'squad'; import fullstore from 'fullstore'; import io from 'socket.io-client'; +import _forEachKey from 'for-each-key'; import log from './log.mjs'; import env from '../env.js'; -import _forEachKey from 'for-each-key'; const noop = () => {}; const forEachKey = currify(_forEachKey); diff --git a/server/distribute/import.spec.mjs b/server/distribute/import.spec.mjs index 9df6f846..9823aaff 100644 --- a/server/distribute/import.spec.mjs +++ b/server/distribute/import.spec.mjs @@ -1,6 +1,6 @@ import process from 'node:process'; -import test from 'supertape'; import {promisify} from 'node:util'; +import test from 'supertape'; import tryToCatch from 'try-to-catch'; import {connect} from '../../test/before.mjs'; import {createConfigManager} from '../cloudcmd.mjs'; diff --git a/server/themes.spec.mjs b/server/themes.spec.mjs index 6c828343..e88a3ec9 100644 --- a/server/themes.spec.mjs +++ b/server/themes.spec.mjs @@ -1,7 +1,7 @@ import {dirname} from 'node:path'; import {fileURLToPath} from 'node:url'; -import test from 'supertape'; import fs from 'node:fs'; +import test from 'supertape'; import {getThemes, isDev} from './theme.mjs'; const __filename = fileURLToPath(import.meta.url); diff --git a/server/user-menu.spec.mjs b/server/user-menu.spec.mjs index 7ac64f97..0125bd9e 100644 --- a/server/user-menu.spec.mjs +++ b/server/user-menu.spec.mjs @@ -1,10 +1,10 @@ import {dirname, join} from 'node:path'; import {fileURLToPath} from 'node:url'; +import {readFileSync} from 'node:fs'; import {test, stub} from 'supertape'; import serveOnce from 'serve-once'; import threadIt from 'thread-it'; import userMenu from './user-menu.mjs'; -import {readFileSync} from 'node:fs'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/before.mjs b/test/before.mjs index 2c15bdd3..6e6e3f99 100644 --- a/test/before.mjs +++ b/test/before.mjs @@ -1,13 +1,13 @@ import process from 'node:process'; import http from 'node:http'; import os from 'node:os'; +import {promisify} from 'node:util'; +import {fileURLToPath} from 'node:url'; +import {dirname} from 'node:path'; import express from 'express'; import {Server} from 'socket.io'; import writejson from 'writejson'; import readjson from 'readjson'; -import {promisify} from 'node:util'; -import {fileURLToPath} from 'node:url'; -import {dirname} from 'node:path'; import cloudcmd from '../server/cloudcmd.mjs'; const __filename = fileURLToPath(import.meta.url); diff --git a/test/rest/copy.mjs b/test/rest/copy.mjs index 3c673b7b..98e8ea4d 100644 --- a/test/rest/copy.mjs +++ b/test/rest/copy.mjs @@ -1,7 +1,7 @@ import {dirname, join} from 'node:path'; import {fileURLToPath} from 'node:url'; -import serveOnce from 'serve-once'; import {mkdirSync} from 'node:fs'; +import serveOnce from 'serve-once'; import test from 'supertape'; import {rimraf} from 'rimraf'; import cloudcmd from '../../server/cloudcmd.mjs'; diff --git a/test/rest/move.mjs b/test/rest/move.mjs index ee7d1637..e962e5f0 100644 --- a/test/rest/move.mjs +++ b/test/rest/move.mjs @@ -1,5 +1,5 @@ -import wait from '@iocmd/wait'; import {EventEmitter} from 'node:events'; +import wait from '@iocmd/wait'; import {test, stub} from 'supertape'; import serveOnce from 'serve-once'; import cloudcmd from '../../server/cloudcmd.mjs'; diff --git a/test/rest/pack.mjs b/test/rest/pack.mjs index 61332949..5b9c2210 100644 --- a/test/rest/pack.mjs +++ b/test/rest/pack.mjs @@ -1,13 +1,13 @@ import fs from 'node:fs'; import {join, dirname} from 'node:path'; import {promisify} from 'node:util'; +import {fileURLToPath} from 'node:url'; import test from 'supertape'; import tar from 'tar-stream'; import gunzip from 'gunzip-maybe'; import pullout from 'pullout'; -import cloudcmd from '../../server/cloudcmd.mjs'; import serveOnce from 'serve-once'; -import {fileURLToPath} from 'node:url'; +import cloudcmd from '../../server/cloudcmd.mjs'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/server/console.mjs b/test/server/console.mjs index cf42d5bd..266cce14 100644 --- a/test/server/console.mjs +++ b/test/server/console.mjs @@ -1,8 +1,8 @@ import path, {dirname} from 'node:path'; import {once} from 'node:events'; -import test from 'supertape'; import {fileURLToPath} from 'node:url'; import {createRequire} from 'node:module'; +import test from 'supertape'; import io from 'socket.io-client'; import {connect} from '../before.mjs'; From 6abf327d0d25f88a709a35ce2a4360a04b62f185 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 3 Jul 2024 15:02:39 +0300 Subject: [PATCH 016/327] feature: cloudcmd: package-json v10.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9e6ac9bd..01df5b74 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "once": "^1.4.0", "onezip": "^6.0.1", "open": "^10.0.3", - "package-json": "^9.0.0", + "package-json": "^10.0.0", "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^35.0.0", From d8451e56aaa0a0cafae23720e4669a6254fe0a2b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 3 Jul 2024 15:03:42 +0300 Subject: [PATCH 017/327] feature: cloudcmd: just-pascal-case v3.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 01df5b74..d204d2e0 100644 --- a/package.json +++ b/package.json @@ -181,7 +181,7 @@ "html-webpack-plugin": "^4.0.1", "inherits": "^2.0.3", "just-capitalize": "^1.0.0", - "just-pascal-case": "^1.1.0", + "just-pascal-case": "^3.2.0", "limier": "^3.0.0", "load.js": "^3.0.0", "madrun": "^10.0.0", From 4cc47e30de98712f7991a0c4f08f0a34a2643b56 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 3 Jul 2024 15:03:54 +0300 Subject: [PATCH 018/327] feature: cloudcmd: just-capitalize v3.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d204d2e0..7ac0f511 100644 --- a/package.json +++ b/package.json @@ -180,7 +180,7 @@ "html-looks-like": "^1.0.2", "html-webpack-plugin": "^4.0.1", "inherits": "^2.0.3", - "just-capitalize": "^1.0.0", + "just-capitalize": "^3.2.0", "just-pascal-case": "^3.2.0", "limier": "^3.0.0", "load.js": "^3.0.0", From ba2d0b36af8ceff7f37795e9fa1115d46071a9a0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 3 Jul 2024 15:03:59 +0300 Subject: [PATCH 019/327] feature: cloudcmd: just-snake-case v3.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ac0f511..12ea387b 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "jaguar": "^6.0.0", "jju": "^1.3.0", "jonny": "^3.0.0", - "just-snake-case": "^1.1.0", + "just-snake-case": "^3.2.0", "markdown-it": "^14.0.0", "mellow": "^3.0.0", "nano-memoize": "^3.0.16", From b5e9ae5ad9ec57b70e4c183586ee29ae9f10e66d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 3 Jul 2024 16:09:41 +0300 Subject: [PATCH 020/327] chore: cloudcmd: v17.4.2 --- ChangeLog | 10 ++++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index bae03a7f..82b6bf51 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2024.07.03, v17.4.2 + +feature: +- ba2d0b36 cloudcmd: just-snake-case v3.2.0 +- 4cc47e30 cloudcmd: just-capitalize v3.2.0 +- d8451e56 cloudcmd: just-pascal-case v3.2.0 +- 6abf327d cloudcmd: package-json v10.0.0 +- 2ae6ad34 docker: Dockerimage update Debian12 (#414) +- 05ef0ae4 cloudcmd: c8 v10.1.2 + 2024.05.06, v17.4.1 feature: diff --git a/HELP.md b/HELP.md index 1d44b4b0..d5477ce2 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.1 +# Cloud Commander v17.4.2 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1095,6 +1095,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2024.07.03*, **[v17.4.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.2)** - *2024.05.06*, **[v17.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.1)** - *2024.04.17*, **[v17.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.0)** - *2024.04.03*, **[v17.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.3.3)** diff --git a/README.md b/README.md index 63158df4..34bc9fa5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v17.4.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 12ea387b..c4a9b04a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "17.4.1", + "version": "17.4.2", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 61ca7f36a449cdd5f97659467aeafde856bab9e1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 19 Jul 2024 17:34:06 +0300 Subject: [PATCH 021/327] feature: cloudcmd: putout v36.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c4a9b04a..5fd6f969 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "package-json": "^10.0.0", "ponse": "^7.0.0", "pullout": "^5.0.0", - "putout": "^35.0.0", + "putout": "^36.0.2", "redzip": "^3.0.0", "rendy": "^4.1.3", "restafary": "^12.0.0", From 6e8348b8437a4cf997652b84a5b9399097615725 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 19 Jul 2024 17:34:34 +0300 Subject: [PATCH 022/327] feature: cloudcmd: rimraf v6.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5fd6f969..5a5bab1b 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ "readjson": "^2.0.1", "redlint": "^3.13.1", "request": "^2.76.0", - "rimraf": "^5.0.1", + "rimraf": "^6.0.1", "scroll-into-view-if-needed": "^3.0.4", "serve-once": "^3.0.1", "serviceworker-webpack-plugin": "^1.0.1", From d70362fbf13654135b56d0e821044856bd56216a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 19 Jul 2024 18:15:40 +0300 Subject: [PATCH 023/327] chore: npmvrc: add --- .nvmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..1efe0ac6 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v20.15.1 From 3140b7f99866a8c6b3277991f8c61e232fb756e1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 27 Jul 2024 15:54:10 +0300 Subject: [PATCH 024/327] chore: cloudcmd: v17.4.3 --- ChangeLog | 6 ++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 82b6bf51..0d84fe2d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2024.07.27, v17.4.3 + +feature: +- 6e8348b8 cloudcmd: rimraf v6.0.1 +- 61ca7f36 cloudcmd: putout v36.0.2 + 2024.07.03, v17.4.2 feature: diff --git a/HELP.md b/HELP.md index d5477ce2..d2d40555 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.2 +# Cloud Commander v17.4.3 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1095,6 +1095,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2024.07.27*, **[v17.4.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.3)** - *2024.07.03*, **[v17.4.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.2)** - *2024.05.06*, **[v17.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.1)** - *2024.04.17*, **[v17.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.0)** diff --git a/README.md b/README.md index 34bc9fa5..a98e59aa 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v17.4.3 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 5a5bab1b..5eb9ecd8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "17.4.2", + "version": "17.4.3", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From a6aa9bbc4481d2a9f0d060d6215d9c4b34fbb71e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 11:46:51 +0300 Subject: [PATCH 025/327] fix: revert rimraf v6.0.1 This reverts commit 6e8348b8437a4cf997652b84a5b9399097615725. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5eb9ecd8..5c1c6804 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ "readjson": "^2.0.1", "redlint": "^3.13.1", "request": "^2.76.0", - "rimraf": "^6.0.1", + "rimraf": "^5.0.1", "scroll-into-view-if-needed": "^3.0.4", "serve-once": "^3.0.1", "serviceworker-webpack-plugin": "^1.0.1", From 282b3d5cca7dad3c20e50ab4d465ff8b6d3da19e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 11:47:20 +0300 Subject: [PATCH 026/327] feature: cloudcmd: @putout/cli-validate-args v2.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c1c6804..3dd3e152 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "@cloudcmd/fileop": "^8.0.0", "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", - "@putout/cli-validate-args": "^1.0.1", + "@putout/cli-validate-args": "^2.0.0", "@putout/plugin-cloudcmd": "^3.1.1", "apart": "^2.0.0", "chalk": "^4.0.0", From 544e30dbf8d0f04842797ea177b61213526809b9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 11:48:11 +0300 Subject: [PATCH 027/327] chore: cloudcmd: v17.4.4 --- ChangeLog | 8 ++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0d84fe2d..996c17f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2024.08.16, v17.4.4 + +fix: +- a6aa9bbc revert rimraf v6.0.1 + +feature: +- 282b3d5c cloudcmd: @putout/cli-validate-args v2.0.0 + 2024.07.27, v17.4.3 feature: diff --git a/HELP.md b/HELP.md index d2d40555..28bc97b5 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.3 +# Cloud Commander v17.4.4 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1095,6 +1095,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2024.08.16*, **[v17.4.4](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.4)** - *2024.07.27*, **[v17.4.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.3)** - *2024.07.03*, **[v17.4.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.2)** - *2024.05.06*, **[v17.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.1)** diff --git a/README.md b/README.md index a98e59aa..e7b0cee2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.3 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v17.4.4 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 3dd3e152..f53f42f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "17.4.3", + "version": "17.4.4", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 74d1eb7e2859032b9536f176993a6e83b5d601a7 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 12:05:52 +0300 Subject: [PATCH 028/327] feature: drop support of node < 20 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f53f42f7..6ba787b5 100644 --- a/package.json +++ b/package.json @@ -215,7 +215,7 @@ "webpackbar": "^5.0.0-3" }, "engines": { - "node": ">=18" + "node": ">=20" }, "license": "MIT", "publishConfig": { From 5e93bcca1e31bd4e2b87aa610cdd0a25c1e34d0f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 12:06:47 +0300 Subject: [PATCH 029/327] feature: cloudcmd: rimraf v6.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6ba787b5..f6eedc46 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ "readjson": "^2.0.1", "redlint": "^3.13.1", "request": "^2.76.0", - "rimraf": "^5.0.1", + "rimraf": "^6.0.1", "scroll-into-view-if-needed": "^3.0.4", "serve-once": "^3.0.1", "serviceworker-webpack-plugin": "^1.0.1", From 88df2f05185b7dc74ddb3b03a510ec422b90afbe Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 12:08:02 +0300 Subject: [PATCH 030/327] chore: actions: node v22 --- .github/workflows/docker.yml | 4 ++-- .github/workflows/nodejs.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index f26b3755..6e22e4f0 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -15,10 +15,10 @@ jobs: - uses: oven-sh/setup-bun@v1 with: bun-version: latest - - name: Use Node.js 18.x + - name: Use Node.js 22.x uses: actions/setup-node@v4 with: - node-version: 18.x + node-version: 22.x - name: Install Redrun run: bun i yarn redrun -g --no-save - name: NPM Install diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 9dc3035e..8bdc6cc0 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -9,8 +9,8 @@ jobs: strategy: matrix: node-version: - - 18.x - 20.x + - 22.x steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v1 From b63d6fccdebae3ecb2d55560b48a08ffcc38502e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 12:12:56 +0300 Subject: [PATCH 031/327] chore: lint --- .putout.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.putout.json b/.putout.json index 1d2b1379..fa70da30 100644 --- a/.putout.json +++ b/.putout.json @@ -7,13 +7,7 @@ "fontello.json" ], "rules": { - "github/convert-npm-to-bun": "off", - "github/set-node-versions": ["on", { - "versions": [ - "18.x", - "20.x" - ] - }] + "github/convert-npm-to-bun": "off" }, "match": { "base64": { From 9109511e95bb9e9bbc8504c48b2abed616fd6a94 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 12:15:19 +0300 Subject: [PATCH 032/327] chore: lint --- .putout.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.putout.json b/.putout.json index fa70da30..9d6789b6 100644 --- a/.putout.json +++ b/.putout.json @@ -1,5 +1,7 @@ { - "plugins": ["cloudcmd"], + "plugins": [ + "cloudcmd" + ], "ignore": [ "html", "fixture*", @@ -7,7 +9,8 @@ "fontello.json" ], "rules": { - "github/convert-npm-to-bun": "off" + "github/convert-npm-to-bun": "off", + "github/set-node-versions": "off" }, "match": { "base64": { @@ -47,4 +50,4 @@ "merge-duplicate-functions": "off" } } -} +} \ No newline at end of file From ac3f20c5d1129da99b237e135a638806edffcc60 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 12:15:44 +0300 Subject: [PATCH 033/327] chore: cloudcmd: v18.0.0 --- ChangeLog | 6 ++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 996c17f4..08ce9e43 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2024.08.16, v18.0.0 + +feature: +- 5e93bcca cloudcmd: rimraf v6.0.1 +- 74d1eb7e drop support of node < 20 + 2024.08.16, v17.4.4 fix: diff --git a/HELP.md b/HELP.md index 28bc97b5..3c9cea75 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.4 +# Cloud Commander v18.0.0 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1095,6 +1095,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2024.08.16*, **[v18.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.0)** - *2024.08.16*, **[v17.4.4](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.4)** - *2024.07.27*, **[v17.4.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.3)** - *2024.07.03*, **[v17.4.2](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.2)** diff --git a/README.md b/README.md index e7b0cee2..e2f26870 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v17.4.4 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v18.0.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index f6eedc46..419de4d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "17.4.4", + "version": "18.0.0", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 75a75365cf5859af30f33b6c8075ab78b037b37f Mon Sep 17 00:00:00 2001 From: coderaiser Date: Fri, 16 Aug 2024 09:17:21 +0000 Subject: [PATCH 034/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .putout.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.putout.json b/.putout.json index 9d6789b6..dcaac97f 100644 --- a/.putout.json +++ b/.putout.json @@ -1,7 +1,5 @@ { - "plugins": [ - "cloudcmd" - ], + "plugins": ["cloudcmd"], "ignore": [ "html", "fixture*", @@ -50,4 +48,4 @@ "merge-duplicate-functions": "off" } } -} \ No newline at end of file +} From 62ed8411ae0c1d454b75b7a73ef1840711ee934b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 14:53:03 +0300 Subject: [PATCH 035/327] fix: bin: validateArgs is not a function (#147) --- bin/cloudcmd.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/cloudcmd.mjs b/bin/cloudcmd.mjs index 4ea301ac..6551c50b 100755 --- a/bin/cloudcmd.mjs +++ b/bin/cloudcmd.mjs @@ -164,7 +164,7 @@ else main(); async function main() { - const validateArgs = await simport('@putout/cli-validate-args'); + const {validateArgs} = await simport('@putout/cli-validate-args'); const error = await validateArgs(args, [ ...yargsOptions.boolean, From 9ec94dee158587666db17b9d00f50dc1f1625cd6 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 14:54:05 +0300 Subject: [PATCH 036/327] feature: cloudcmd: chalk v5.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 419de4d4..dd5b848d 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "@putout/cli-validate-args": "^2.0.0", "@putout/plugin-cloudcmd": "^3.1.1", "apart": "^2.0.0", - "chalk": "^4.0.0", + "chalk": "^5.3.0", "compression": "^1.7.4", "console-io": "^14.0.0", "copymitter": "^9.0.0", From a522c49c1f9f5cbc2bfb7bdb16b98f232b9c38e0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 14:54:54 +0300 Subject: [PATCH 037/327] chore: cloudcmd: v18.0.1 --- ChangeLog | 8 ++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 08ce9e43..5e7d4433 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2024.08.16, v18.0.1 + +fix: +- 62ed8411 bin: validateArgs is not a function (#147) + +feature: +- 9ec94dee cloudcmd: chalk v5.3.0 + 2024.08.16, v18.0.0 feature: diff --git a/HELP.md b/HELP.md index 3c9cea75..50d01d0f 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.0.0 +# Cloud Commander v18.0.1 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1095,6 +1095,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2024.08.16*, **[v18.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.1)** - *2024.08.16*, **[v18.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.0)** - *2024.08.16*, **[v17.4.4](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.4)** - *2024.07.27*, **[v17.4.3](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.3)** diff --git a/README.md b/README.md index e2f26870..f2a7d93b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.0.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v18.0.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index dd5b848d..bd7e40d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "18.0.0", + "version": "18.0.1", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 3d03efbe63509f5aa34977b2c004f6f0aa65cc1f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 16 Aug 2024 17:17:44 +0300 Subject: [PATCH 038/327] feature: css: show links in one small screens --- css/query.css | 14 ++++++++------ font/fontello.eot | Bin 14436 -> 14284 bytes font/fontello.json | 12 ++++++++++++ font/fontello.svg | 8 +++++--- font/fontello.ttf | Bin 14268 -> 14116 bytes font/fontello.woff | Bin 8796 -> 8716 bytes font/fontello.woff2 | Bin 7360 -> 7272 bytes 7 files changed, 25 insertions(+), 9 deletions(-) diff --git a/css/query.css b/css/query.css index 6b7c98a4..6e07a0c7 100644 --- a/css/query.css +++ b/css/query.css @@ -129,15 +129,14 @@ color: white; } - .file::before, - .file-link::before { + .file::before { color: rgb(26 224 124 / 56%); content: '\e80d'; } - .current-file .file::before, .file-link::before { - color: white; + color: rgb(26 224 124 / 56%); + content: '\e81d'; } /* меняем иконки на шрифтовые */ @@ -160,11 +159,14 @@ display: inline-block; } - .directory::before, - .directory-link::before { + .directory::before { content: '\e807'; } + .directory-link::before { + content: '\e81e'; + } + .file, .file-link { background-image: none; diff --git a/font/fontello.eot b/font/fontello.eot index c6b5875af90f3191bb1f67a76c6b4daa763f52e6..99e28f3eeb1447890525b7be9bb7cf15c795b07c 100644 GIT binary patch delta 1012 zcmYjQQD{?F829Gl$1o`%9;>|uyA(AT~AG%6??J`Bg$+#rrIHqZw}6aNz(+kyZ7=ljn8 zpa1{PIrq29=90SU09Y4QN4b(3yLB;pzGjW@1HefDI5t;yD}NNMZwX%o;Ktl?HAXy* zREa*p6P03lcGtuA2%jYwD7vRB#CH%rPTpTEojEbF_=O)pxegE&3-j*rLC2-N`ZsAk zvp|IZlJY&kc7?FDP_C{VU7l&(BO*n_T4`y{U3Hen2!BQRVA)-%pd0*&@SlWZr`+=V zjn8``lp6qGH!4e~tLt~(_yHh!hnilmyfa@}-PpT9wa$5$ahfZokruR2f zy`Q<*@;=4L(O3VAFQV3n%GfqOsvd~csATIQZ}2G?fc=oqzM4W5VPxp+VhW3+swjC7 zDAqw?DpS-oP&rfiD%E5PvZCyjzX_bfjO=^jrJlrSCNbg@y*qH5A-2c+lcQlf@Sny>k8 z!p4k+HxstzxBS{|GosHnKUF)FtPoh5)y*LGh78PKYv-7II@!E@9b~u0 zQded|`yN1uHzfV*?;-jPp83|J)=71eE}MQ4DHgmVRuW_0S?i4Vk98;({4ylpp4=%0 zAApa%Jd_w5hL31=!JA4vK-)W<+(5hDN{%Dtj;CH>7_Xm8>Dc8jojmpS(ELg@@b6^E MEmfg@`NiwOr&;sNd;kCd delta 1152 zcmcIiPi)&{6o1clY^QPTBu(s=wOKN^$<~CjHh+v*DVa2I)^s$q(pUg#WLcV~YN*v! zrJK5>w}BXchLPZc;D9PltW~5Q5EoR~i6K;RLBIte)LjrrR2ov(@{)}M5;w%t_r9Nh zzxTfH`PuKQ`JXMv#YX`?yWuc6ZR_gw8<|%d;nP0?U>*R@mTE<7;`3i^;vWOBd}(Ph zL^|0qjy8GPs?;tF{&|JCpQuzRUb0B{036*T6f1L=r@ue3u>`=a0|al)l#3U86XTNr z`ZC4SGbD%~aNEQw4t+DV#pQDgFCW|?;ad_`=H^Sq`Q*|r#qz{6wc@gc8}dH!w}^*c zD%Q%k-|y-sP8Tq@t@%rfXV5^-lcnx{JuE|Sn@bIwTN##h`mB;D=SXe(bhS5p`F9E^qpS&9p((B@b>S_-M3kn zB2f^q)n&_q&AaR@Hs>5Cdm2uFgITsfrCAWb1q$de00xY~6uy>m^&v<&ehPh<%dI=} z=Q1z4Nns>d00t$-($K*RyhB*^b}@pF7kqVa$|!+Tsss>$W09+Ls0`~u-of$}@PWV6 z=dV75o#0VAJ=I1xDx#=7OQ4A7K~%(vL%DSy6)OIt5Z3=|rGF`ux!`Wx?}k}zxAT8g zDHJlN#&fZlB#9zNKQTX%n;M@wZ9etn=;JY?5i`=MWMX(|Fdpd-2fI~Ckrdf2x(_J6u6Vk?yaG{rO1P$%wxx8MgP=1Zp!<=sXZz!8qC&AlV88OrJYwsc0plxTJ!ot zi7Wh#_ItX4hwX3l%l4VRlRZkQedsV;1Da$q2GUT4*Xij?`;)$19I`*^-^8Kj^N}&6 fb8FGj<}Xnfx~1vrT>0VRLTRSDRBnpLzL5U{YQ5D) diff --git a/font/fontello.json b/font/fontello.json index 354b93cc..22f82f33 100644 --- a/font/fontello.json +++ b/font/fontello.json @@ -180,6 +180,18 @@ "code": 59420, "src": "fontawesome" }, + { + "uid": "e15f0d620a7897e2035c18c80142f6d9", + "css": "link-ext", + "code": 59421, + "src": "fontawesome" + }, + { + "uid": "e35de5ea31cd56970498e33efbcb8e36", + "css": "link-ext-alt", + "code": 59422, + "src": "fontawesome" + }, { "uid": "60617c8adc1e7eb3c444a5491dd13f57", "css": "attention-circled-1", diff --git a/font/fontello.svg b/font/fontello.svg index 4564f981..d12c9f1e 100644 --- a/font/fontello.svg +++ b/font/fontello.svg @@ -1,7 +1,7 @@ -Copyright (C) 2021 by original authors @ fontello.com +Copyright (C) 2024 by original authors @ fontello.com @@ -64,7 +64,9 @@ - + + + - \ No newline at end of file + diff --git a/font/fontello.ttf b/font/fontello.ttf index 4fc26184e1cd73e9158c547a0f354069f042bb85..2499b12693af1766c6fabf8e515a8d4ed73118da 100644 GIT binary patch delta 985 zcmYjQU1$?a6h3EWcN2GG($sZZX__W&{;1ZLbes5ltp-IU(kg=1htzGYsWoYXhFV3M zK3M!gxn6SNK3(obMMPB8K%WF(d=dpk@j(>CABf_kf(j;{iHZ)KJ@b8Y&Ybhj%-))~ zFn-ow2y9*jfc*fldpK+5-lYP!310```tW4lM?8&4hCa@{xpa1D>E|Paj}mmGt%Et@ z>j>{5Z%=0q@9i5qZwHX>0C<(r5o=F-+@if&@6mc}lnDEO(j$O2iEv;vo1fY_Iaqy5 zM1+W$%*3!Y9iLoA_!8lDS!*hXmh(B`_k?}pR(9n6zfB&>bpWvYxru}M*=O4y1B9MY z)3dn)Bf06hm2*_<#9yBVxWr4v?YL&Z%ePg>U>Cmv|Iju__G>Vj%4D2u2^n>UXMe<; zB348%A+OeW2~xEfN$_QF@ilJ2mQoj+kMoYvf*38O4SWpMvR4Gu@O5der$BY8pLv;Y zgD|XtWbdX3qT)t|@uf^+ev~CC2?{E+ATgOq@(jqF$$Xj$F$q~(G{|=V=P)Rm?OV|l z?1=@tZA$ZET&OE;{?<^B+lHB*Iw*3G~n1Q7>ZpQ@XtyKrAA7!4yM6{Dv7H~iQ^h$go8y8 zB@wZ?rBeS=?IEWqhx{nFfGlx{a*0TCOAjcQs_msGB2`rmMQSAi89V8rQg2m9Z{D}x zH}l@??9S~A59hB1Yrzx00AL0HPUXwF%EY7JE#mh8SU$hB7$BYOU5+++x>78kANcDs zaSu_cn7ddZ-38FMODGoSE=~V*WPJ&MTLbVvohjr#?~IO50_e*WPt1@Y-sHB3QyjWy z%8Scq7QWbjLBewqR_5mOx%t@A4#hIWljYoU1=r<0;@5}=F67FEXE)l~iPHtlv&#I% z#Zz}TuLAV0(o0{iEEFo$jUyWXM&SEDvn;af)+hMk$DQot{w#dTPQrD%2Fc%;jesSO zkW+{F?c3Owq&Bi5ge^^-gU^~dTtnaPw0^^nD22Z@%AiUCi5#%eWW)UR3_FYU$J}T~ z%?_|X%Vw!G3j#Pm0Ui3mfH9cDuab^#1PRBFqKfJCnmuzSdCo}+Bf$bNC@~cu+IWGt z39IflMo@V{t%6-f3G7nQiwGQxT(L!CSO@YpmM?+|o>tXUdIwvR;W@_(OEDv*;>Pf~X8D_+( zrv3f>!+lJISuxF2DrGkJA6>DwSJmbf>R&mw^YZKK+t)M<4A_ z^36jB;VRH1lQEEh5`05XPb|KB2M4X)?hPEQ*L%j0&h3Rp>La}lbV}2uxx#z7h5Sru LsZc-H_gH=nirmf1 diff --git a/font/fontello.woff b/font/fontello.woff index 16fa9d71203ef2b7d396e36e65551d2e5d8ecccf..0b73db1b01f1306ead83088bd13ba51ef2112d89 100644 GIT binary patch delta 6566 zcmXY#by(C*w8s}|>6KVQ*rf!NMjE8M1?iIRh9!T1lyrAV2-2Z+H_|1NOM^5>hunSd zz4JWZXU_S|nP<+NnZM4mRJ0Vam#T~m2nB>3w74LG|7Je=1Y$lw3Tc^$(klp?IhZYA*;X;a+g%2>Tu|`rPy%>NQO)hB{XzdbJp3_!Wo1Lg2g8(p(vr6u8t;Up}YbH zsV?3{!6Lo!dfoFm=ptzuLD6vBRe1K%w5iH7PDseQS26TiWMn~p9od>v_JHxf^K>_y z^y*Pg>vJBP8Ask6l&@WVvA;}itnvr)yuv%)nND3(mIQpA>%iZwx3axzxx5{>%If6b z%oQN$Xf*GqQ?2mc3DxFpI~z|W5M2OjccYvF_&M(GqL*~$cpfa@{=zZ7j z&dkK39r{;n-CT{Ij#vdpdb`p&m}&onScN3?uk?D6I=>sS3QeeQU{8$Lx?{exqFNI> z(=rwDG2!z@>`>p(9z4nQsxQt5YE8iLUy@C9xWC*EvTE>bGZQh4|DG2GRNwaO4g<*1 z^|z-Q^vL6@uWxPiYMW?Z*<5k)MtBKpyxJFKh%8V6JE((M6YCfvBk2^l==5k@@U#-< z`abOGxY~EI8fv@f4>HmBe%2_$FmH}|-EA`^*d;yR2zH ztG#d(Qv2d!C@W_nqj~9iryX(M?gfOb7_{BeW_@(rfVpVU_KxA9N4XAT`H~m9Yhp;y zs}$+>U|VF5gE6`ovCV4oK%cOo{{8M;6xeqp8St*cAsO~$*2(sGmMIw4Tv@Y`+^~WU z->5=!E`iqHjWF79$(CBupC0h_oASZf_LkF?`>lzNbM{PEsku|LSSAW{RT`GYJ+e{ywH;?#->X2Qf+D?{o7FZF(4A0LkIy^2VnasvZkQH0L z*d9{?Qz1BujtOtGBtoLJXi}1i21UgZdx%R34Dx=LAfAh*-wvZoQ!KBW%W@c*Mz4HD zprsfuBj3_pnoKFF#@o|U0l>R)8+XbtFFE=~8MN|0tQjhc(B@KQ-F|7+7HL?RtJO+0 zT>e?bMp1hK<$s@GVo>isL6G+S{5a*kP-=tC>8+Mm3iX~dA3XzEeeineU?XSwrWD8a z)yNdwbkJ&1PcR@wj?ZZgMO5MhhEkA3`z`5g=cQm1|JsyBk74oz7)Ybk+|f9*$7aH{ zRDUIvK_4k`We4t`>WehuHu!T=SzWqY|LqvgW55&DEyuB)P}r_3sZ#Pmf&!ggoKBNH zt0FPnoMj%X_y%fn&ymTbS0m`y zX@03YU-9u-MF+ovlw-#P>7FDL5UDwIG^XsRz_5rC!rF+=Nw%WM<=y*l%{fZ}7}FC+X^+QCRu5r76XGcR$=Rt9Q4iR6Hm)44;_ONK4y~mzCyrMyLgkebb|zJvk0JXK zv`U#;E>O4l6NYRJQF;E7nGjb&(k0KSn0uea1Ckq5-t?zxcH1hw4ryABYu{@nW#zYc z5@CFmlm=S+!@8VwA(`*m*plOzb+y#{08F@>XVHdLt+Fs7lXOi=G`!KA zA<#PI&HTJL2^qy`h&x`gU!jqV@%%d9Sk4$lh+$QE6|{rfmv7-Q>*{y~t-6Gj?ES~G zU+cB^^;)G?YnS#ZRC?>mFHHMo93y7> zL9NePK>g7~lVP{2n(4pn#~T4AtqE=aj+}p@yA=fW=nbFT3mvScS}=zn$5czy-x{vb z-lA#oQ%a`{hYZ(KOSzK0Vhh@e>`T#|E&8gk_(mPuqujj#bs2Ol-_~TBxn@$KhpzFm z0>8@eef4Gao6Ae$x(rP&TOSd&4EIml9yO~Rs6d2I>7bu74+`d`No6|L{AC5MEFz|FI%3G~DR{%4SdCY7x{TPGZ+p=1N66Ux?lve>Z+Uev z#vUiR$o4)p1;o`K8T15VMz@@>b|!Eb@zOMb2n=t2^*17TPkTFroo0`YE)vk`P_DQ` zCV?zIr+}<>Wn+4xy2$0Jw>hr)!rSYfO=*sU!&OrAM#w2um=a{BTi;Z z#9~^CVs>YrKLuSRX7*~qo(&6KCfTb_<{ls)K9Xim)7i)Q%vw$DmSKU8rW?@e1=`}y z7x2aBh)=si2*)j>;C5(_pV!Ys;Q`GR}G?LBx!MvvCv=pb9B zEk>Zbw6e(BVA8cj__CmPs5iY%{VcH7tN(y+pd~mE%Jb3(2>4-2lEF zADee^$Uncg7BG|5Vym?kxjyP>sS)S5;O1&)y||JJB{WI?%s1T-YWI(DK3(}=iOP^H ztIYdXPK9-gNr$*iVlqwC+gNscYhpX68Q89b+r(vE#Xg4h9r$HFJS?AB%;el!bK-Y$ z86EpYuD)eF`o81z*p027V$I^KmxvpIhX)zmaNtkUq|qbH)QJWKY* z%1@lwo~i5U{ivKD%6==R2MN-Np|CZ%IKZ&)nx2iu+W$QYOg?fe+jx*T^j(#*gwB5} zTZ}V~lYfxb4SxDH>qALy`*8)aZRkJ1P`~%HGthp|;y$lm`8RYiZf}X3rv|vOi>tB` ze4NFIJv&l)80a@n3*$?*9`cS*4cj#NlQ+9~=0?!IC>kzPuP0V5K1BGFY`iSX{0H)d_9~ixDd!wDO4PTN)li}B~<3Ir&)hs+ali|+F zshSA}`l4n;OVCd&t6_{a?124qk((X2Lnqzj3p4ZOWh$9Z;VIB5M==7(rLSS6RKwL) zQnW+&_8t+H07wu7C5wk7eVwHH9k9;!0#+^?*B4?QWZMgo5LI*1!ScoHO%COR3Wgu>M%>cWlYF`E5w{wNUz1P+Z!4y|-3yV9>7Mx#*tVgfg^ z^3&xeXAc!k6Qj1u@lJnht5~DaQ>)7Deboz7z3)ETz`MFQ-`+S=OJDlO?(5xdGaA4{>yfyXYf*;fc+}glIzOV z>$VqOdBxQ=Xe`W9N?^%}rjq7~7`;9vi5{^sXaF;opcE=@AICxehwY&nqAl{xB>1{L z1veotX`C!T+cM4|v9WUISpFIu)mMvw(*weKRK-QCaH?0nbMeNkv{s*V>>J1Lmh@T17@6kOH@CiY%O^}73A zJKk>{uT^xe#ebo1q$B~g zEPZ`z*r%@8`yR?vrl>|jtg1E3%{IE9%q=AYtR*HWD#9(_Q)L&L!-L_0Gqj^|mBwkq z6yHodmFY`Op`#yt4$#pW2P((8h^y(9Vf9_Mz4H>G7&81pCrsSnBd*6>$3Hyan1^q< zSQ>QH%_64DHyx5Ifewnt3bD_)!HCJ=`L~L#)Xp|LZRDq<(;oKs z(xMEfgq--?*v-AlhUuT^U^~mEB7S;*)!5EzWAP;fX>lbNOTenHQW%9jkK8#0w6a&PsO zKQo*xrR(G{r>Xg&Ud?wzx%Z$^Yv-m-lO2N(=QeUWJX|P6q@7j9=CJBzwMGKQkyTeE z{{P17^L;Q24xA^(tG!6Ru>ZTvfqT7lT>NoR$VioAY$*hhq&j@{I7ZU1gi9Bp>Uf6g zp3O~LkWI98KFV5qahe%~C5!hwNR7}!SIvc=B+Qv3hI9fvO3q-rZFCw;!~ zJ+kR24ChI&_M4nzb=cqvOSuHNaM#jX7^|FD`zV`e9U;zg>)P45^BFHYqwCu&gxKpu z@MSKNw8k{Pw7&QxHQB4j6g256gC>!T@f$N3chBdpn0xr$(1*%O+ivGq1qSKf3tB=@G=B=^Bb7+;&Eehqw&W)Df{rn zWa@gOzhs1)n;T!X+hB(UD4)5GAM#4D=bj_sL(L3PCo$|rubI;sN7)c(k@cCEgf0!C zQ(lHKvpAP>p|%@{e+a8kY<6A#H+Q@_{W;@RQAWZFSQxVfa_pN(-L+n2rb^WaY#=Um zA@2k>-|f*X_`j^$oa}&~2L@C_R{afx(_H@wE)KCL#Fd)AUQosd65lbpZKwF(!`o!sKVkxM|1OGO=Wgl4e>3 zH7y&iARB#F1U5KGl9t;`aS;|Awfw&Ch_q;Cj1hla32?ox`uJUK=vqcHAWrUsly0Te z0V5eTd&#-3v83MR!r+W7>mFDefgSIMGk596AWUA9HM zq#6d2e9Ze4fW^GePH!)Ztk;5y3R;Ux(>BNe7#1a0r_C?^_xv|(#fTPENe3a)#(hqf z0=a0Op{t#Sd>Muh7%crDe@tc2(FgH*^{Gxx#z+o`O)1mQH6rK%v`&dp`k63mn{!2K zRp_V^(`RolFLqT7D!4oy{SJq3qVyN?`fom^iMupxKo7sgd<|@z)F{wPT5Ah$l=TQR z`|g==mGxgTw!j~4cZnQ(-xEM_cc}=-r%$QP&eZj4r$gkmga7{GocxXx8um^?5L5w{LKf$#sh)okBb;R+6IP6b_>&JJ!+18n;n@Oik@1sRH*zW08ylCcm zx#Bssttp;SBzFkO<=EYVIL32~M zmOA6K8PREDTSiV_^qM-V0AvZ(EJrhdtR~7iq>B4$oJPCjy(cJ6?R$5VhnnuWd{XpM zl@t^I_jPSw`4yp`ouwu7I)q8|@nVBxIpA_@=2gEF4{hV-ru{SD=NrP7g{$~+`fkI3 zHBlkUVm~i-cF6aBYAlZ~YH^(b19@{PgHzgsM|wMv_)3f3uRVj+#zhpk3y8YBFpsOo zYD2RZe6;qaXLeqGE{MYGWe=$tYRu^*^bpcwH9C6KP2svehh25on|8QMEt8g6YZgkrG&eA1cxakj^7kJ^O0_a0)m36|w zIbt39=-wp*ml)Gks8$Kky z_O8R%`kloxazV*iuRpQ%iJJcfH05w;&m_L|t42o)biV!!2G!K+NuE^j({oJ*dqme% zCfBV?A!I~mF|HZ3pk=p*UUXm9njXWJ+6P{GNxDe<9kzuBoP6zX?Em}T?Zr;Qnt0HM zn|>}u{ZDbmR9@V8woy1tD;;<|v}{{XAmuNAF8;3vX>MWy+K3{hm1j76;58<{$uI^< zL#RczcLS%MfX4}QJQMt9t^$yBu>z1xGtOaBEHx!&J_wX`is747L#^;!ZU=P^1@!Zd zAu9=uMijvRN`Q*&Zle6x7Y2ocFp)E|9gMW)Kru)w8XxyR0MGV_AF=HbBMy5yn~svu z*V}8TXHl@3HQ@_}>bTE17B#VQ4$yQ zgU^a1=mrr&$XMAC2G@C4^2Uw1bL@7f=HS|)H`*@j9e1|PQ!Ws4-Glk!CHE!Qx`ap; zm3Aqg*DsiJhI6yO&7#Q{P#Lpc2|w@A+W6z&ls6bO{xRie>dbPvX*|XvH_+{_FQOk_ z#mOx&V++INm1O&oiP_;oYnGZLvw7mZCu#Z_kLP0pOK^}>OvCtsbW)*mCWj=KTN(*n zXn4p#Z=_IxAA{NQW;&;W4XP!*Ii_f56x}=8(B-_ENKrkJ=)s~Ra+hNUy^1B_pA?DH z!ZRaB7uUz+zl6t%-!A`XF9yb)7&!S$VGD6bi`fGuUguSiMSKdsr`t}NHLDQi|1G^k z+>&b#2d-3od=z$2>gvfP!6|B|US*=Zt9r&mH6CL+ zt#lX_I>eHRQ#KSmwW;Urho)}UW9K+b;SKBwc=zko(^!Iv+HNbL4$PStv#87VBP~o* zE6GMy2W^**>}zFz>_&126GO3CSvGF8N*(Ey*zGF0v}lx3h@iueXNEgwhed*4VI@bX z``Bcxz0PKWO6|VhX2`~LlL~9f!4XXzQPkh>#krq3Ab*@IgwY?Bg?W0?Z`lup%q*w( zJa{?h*m%PU!~eeEWOz z=G~d^oO3?soH=*y%>Cy?D=aAhJv9{-0Vn|EVSxgO{fQ z08r+T@iYK{hN;0$X=WZ zWE%VbL~L#EZG~iY006KM0AT1}l&JCeXlV{Z`cPyI2q_VIVT78_M$z{ z8FCPcJMy9MUY z+xxr?L)Fx4D~8-o#D4y46f67i)_xj69H* zUKwt2V0TlFlN?tDd8CT*`h(WgDt87qZgEt%SiaK+R|Xij5fFMG&^;ov9-HH2to2ir zYl#VXOp4ox8+sqwtuDVl+SKJ4EgGJw`1wZ-Dh?K+-pJpcZooZT^oK-Cqi5?_+w$LK zXYW-dhEg*3Y|tBR&Ik(b1PbLL(l_iR>}eEyLmmWg6Q+ChQw?1lUhs&^QrPq2D9R+vg>IMUzO#2F82-5N;7}xwl%m zfBfW#h^?lL63w!n{H-p@rV$A%sc9e1tA&NMMQe-q2NElDOwc9ZSb{QH@dMOJ`ppDKpQJMcKcHn>@=2|)b5EThqBAn3 zm}B(*TZ0J(m7o5ZK1HNFndlOh)2wV)=LPm7EH4wwe!m)dRc!m)|KeOgfYCj&FG0Sn zs5DGr*0B>FIt0=^wEkH}D)&ufBu8CJhf^L_;A|&4_!|R=P0vbdsrTU@`gikloIGM4 z?hB>`B^eG^^w(kBsGZj&gnl6V%aCX&|96*i&c)h7v~P|KWkBYbWVaw~{%NdSScrQi z!mA5kw93Htz$`vZRX6Yls-xY$`PsJN3;a)R)2uy}4Sb}YL;4=>UEzgTolQWT{#UBk z4`w#{EA4I{7AFJ=r0VytHXa?0n+rBS=nK+a-iW~5TZz@09wli`7Ou`_UeLFx70}K) zqcG-q#skKc1E&TR{)*5;L2DB_EG;FH2qh?7D^0bpo;^n}wMUHk7f>5mtC`5vz+rHa zy6*B`)8P$Ywz_+N{(6uRwqg)BQQQ@bAWP$W$V(d25T6o#kdYYCkX|K&O0i3@mS!@3 zXp-t@%37~H9eGhfHw|{pB^93^Csrn*tp+UtJM{M>Ur1EW73_55hKlD z7eRZY_2AEz{-teGLgHn<@+Ri5X`|+!>&>!DjRcdq46DWA9cGvB3@YSMD^^~=Q-HS) zS59D!KLNQD)nj7dD(nlGA$->uZg3Y=Z~*CR+1JhJN+|%N&o*ut-i!&dSubOv8Dgn$ zPj&;LrWNiaWl7=&FCbGnUvzco5R~nD<@&a}yS0^0+zCTFJeThTAVpoH$Elj&r-i?z zxAghaXnQ+XQJ=1hj5^jC_g(MTm5#q(NnFJpc{VgJ8_R~$l^8GoLAdxo_cu*m)CAMs z&t^-W53*KM-;b{BU)?YJ%Rilj$Yp;zAJPnSxqC>wIMLiy@Df_M$GnqLLY#Dj;(sC0 zqFL`>qmjo{+r5F_j2%WhUVmDV;1wN%$}}e)3UPQR3Z2dP>JfYxy&CQ6tS&? z4*20$umf*)D53l)){-Ie{}Wf5(LC1CluZ3mR>wP)lL{;TNh(vPl5A_28$?fFCD)9r z(r(IYUU6`m-XE(--pxO2X+YeO2Btk~kMX^-51E}vj^Y-2Yxi%?e;#)Vbo#D=#d-?z zSn;@PbjP{%!xB-22z$0W@T@qg==!VLSp9sd^$(NwD!>5u>?cnRLZ!hyP91keHZ)ZD zD&IQCP|W!3*5k%EvtFvVveu!1%wHmE1uS!Hx0Kjlx(A>f;w)kLA(R2qpvwNo^rZ#1 zK?(Cpx)Z}0Ufd|O&-)AT^L zK45+g@vd`mL&sDEiUK%e!0#;(1?$o*<|lDwlD`&aq5Vv`O<>HP3~4?ZYF>gS)*MF0 zMM%vJ2g4z+A=Q(p->bhoGcH5xt~-YU84{jjw1Na~uhE8ERTw*;S~AV8Nimlk zr~DjmVnWXHyr0FqPM2oKI&O;sMen?E)0QMfviDE_U>Sz!IitN`~G_+kKW%DFgn&bG%wj3x%@)U1Q)Y zbxVbR8+}y>92(&JPl5NFcpy*!rb(G!pzn?OLkZ2NQ^^JE)f@hMcK;}^h&NVBV~ys$ zg+h949@*8}fJI5UdF2pE9(5AsJYSNnU4@E-Zqvi5FpqC=^Z+*nb@19i(zP6|V`Xc1 zYry&!>!x>Nb{q$zwRj@H{`V?3Hi7#Q2hx=gjD1Z+wfw>*o+)>(w2872c534RwU-2G z4HnBdDKu8$_(;5TKv$n52pG$+8s8I480PsU2}Uplkt421AFd$7)ubn&Ya7RD-wI zqc|9mztj7EVNAjouuN^V5*Yf5@A|3QgDW0?mm+5*7_jBXpS>MPN8yjE?l*)r(T$_v zn2{@9`<~MbCAr87z0{)S)bz6IWuejAI+DfwGN5UGnXR-BAIH#`E6$U#t{oq&B=Xa9 zs^=vQ3a!35wAw&ajXwir8fBju*u!BE0@+mIm&U$j;c9we8zTEv z1KKw5zFf^fL;+hyt%5xSHG3*TS-gAA|1swX~& z#D^o_<0D(FTMUes+20-3=y4F!eAFeuNfYo&8b5;?NFum$=Xy%) z0-@~@ZbfT7GaERJl(|GbSI@sp8Fn5nXPqNq(kvxvo=n>&8VTdzGyVJ?e2kMciIgK34f0pL^uwJpxSOVECcb_qkH#na!U@{V+s?CFvKabG$Z&`LwY6tX6h@k zQAE61bk`M)aZ2Y1-DHx&Sf(4nf19{YyiFB&4O68i_G8MZh&(~aZ63=Z5M5Vp1o&=U ziw#%|4OMdJ9ZAbA>jsaZeaz0G?RvW%Pr`Q-8^oD&^}|x_b_R)zt4Vjnj;tlDa0h#? zoJhl@{^(MIVD!x3VT8gqEDPs0JXd=4R|??=F9@N4itr%KgjaKUS@91-0XYmXdnk~r zHdkMzj)KnS&`g#-mr0xnc>~P6ut{Ei@ zEOKdBTi(3w;R+*KD*m8!3%a&R30;KFJi+f!ydEkOuqp;?5Z2e41&;406LIN$vmIz@ z4scVKzpD)Y4ix;F01ET213qR8np0s)amWTq6bqq-n5$9g3%ey8;q(X+w5H*Ga5@D;7 zQKpnNE~%HidDb8zx4_~+68#1Y#J}-3ZLQ}FK*$QjU521t!T{_JhJOF1UFxIv-iT*Z zwksrMULm@LPp9M!MqBUp(>M+H%C9Dw{GFXWX3I6(c%%wK9mjqcT@3T=eN-rK+xsZ9 zg}Mnxg?hqc(41Iaov|2*(Yy;+Mi6nttYEQLL%-*dFcZe(2UkbIj!@)r?rkzPer14BkJAtLzh!XkXF}Sh-2@ zT$`_d{c&fMsCn)8?VE-eq24a3iCIJK!QOaTzt&PBK_?9yMKSi?ty>;U|R?ujU zAU1(^azbQ&X?%Cr%WvYUT-J3ZX}(>qic4T`67IsT+ddpoeo67)DJ$js$s*n)HkR~Z zpX?F3vzzQj@HL!65>fouC4(s$-)5V{ok^;Gsjqrx9eD`m#Z}k>Tf`R=*n${l6mUWs zbc3+RY0OTjC#urNn=K#*p?&*iZs8a#zK>SZS(5~f*r75%_bFQ}PNi%?iMOzJ zs6e`<&kIwoUds1mTYv}El*h(4PwP?GaiQb7(e(a)?XJXGH(BBQypd9|8NX}V^e#ez zYf}Q!kgy+~j-oE7-}lD}#a<}cF2F1P95N=34LfKuYtt9)Bc#(v3)HU6;gO#%go@if z+szhjBP#OSm)u_bt)5`}TH6E)hCm_W{J`{Z9MZsG7GY1-1=*m? zrODnSioD4Y4x- zvPFPMsA-0r?ALO!ofmF~g=Dqe>U>(8@A$LH9;{Lon|hrV6o&Eg$U)`Z?&N3TZk#fv zguI!+V4cdp|9~`ITDTlRIu{t>x0cW0q&kP11S)EUIu2XO5jE|#EYp$398qFM^fWqK zP-hp_8V;d+|1AeHR!o0o*NUF%U;`Df%wKFrZ!=ljQ3EyuJo2 z?>gnRl3JQA*{dfO782W8ha70P_(eD4lGTyug<>@P$G9&UlOZMK51ve7q?*R z%x_;8?OzYDGzCW)ad~+uM%O&wEg4_sYc%dDq_%HOnd(i6`qdX5jpY+^i;EYezwFhp zBX4t34*U7@0O;~PsB7ZfPh8#&gvwCH z+Q6U~V=+4UVz-Z(%PiTYLZCJ=l{U4PW!3&8l~DzK{Y!dU@QI6uY+3>25WBMaMI!5K z8M!PH<716qIYEfQfnvRy%T`JZ5w+fLH*IBN8fnixSRyLJ15PYs&rh_iVq{oPf^)nU@Ax!}{w`T4?- z{EpLJvMBlLz4J59*r?Ty3UE%%YUK*<@PDZ>K8up@kv_yYYroz_lr~OANL?udwtFXo zY^p^i8;HedmnGqmt$aEDyH!sSizZY;^A%NH2V5G(?kJ@SYMwaDdbq#wqw(=}CG6y< zzpv~2J(KA1LjOW{SjO-8z}ZC&rHtz-#Sjhh7FAg*~GOV~A ztSun2d^FqizkgLNk8EqQpRg5`l!_Z$ENXrm&5G~mN6xA9fkmfmui8l6vo3bM0%M)M z|6@XEgjhO+M~?3cjsyx^1hMnWKlUiqd@Dp7Z44<74H;K?1qFce=zxTP`X zo8#~`Y>W4Sye3Xs^20OTF?BqLhJ9gevD6Y`k%F!s7Xv-i^se*tbZ~I6TK8%2eZ-3_ zCwLcw(gY+}j7v=jF z+^W(L^ES|Hf@d+X2+Iu-5!L<%k`TSbJ7KO-K;U<77_s4ikusWN#0OLsPW z=l^dayvy$E?4&t;o_%JlK*5(G0WuK*(oZmb5)BztaJ7B}+5&{d*{T7F6%0}cA`1Wt zavmcf41j~Q$W=2y1YiS*L3(|J`2PW~4EOj|jc!3;7$QlUht2lo*^DW5xN|3|BLo5w zbjla)b+YTHS{yV~Hh_2$tagQ+vHMXV?E9#~jhjF19PI5Gp+NuAqW1mk)voTO&JWUb zip<&~ef+Tny6tm8V7Rv$RZesmSFWSvZi&NByKwXTMn48>4x<`uOq}EJ_huq%^S3}v z)=fdiXSPi$C&rcLETCccrKqaFcMk4!ii#qb>U#~#u^I5fyhvSvgp~ya73*4o9iCUR zU$_PghQV>cPMKaljK@35IX?^wYyZ|=+X4#$uhaw=-;NSx&)quQ9CQo*8^Du8@oLN1MIn4;x2U%y%J*(c1<$6CvbuG3X zt+Nn7jWZuOc5*%#r_6lKS&k^ku79p0PZ0BcT(c^JJkaJJHO}K4#ru-5T*ZpdWYB{mu^8~h2^z3RPu6H znGXSkeqZ7-D}K$nD7&bgUkbe`flf5ezM5PfViPM>dzz&oQ%hixk3~fl{+gQKjj9S= zBjtsz(}@1;qdz_iP?B7y7Vzq$o$=Dt=TWrHcSn4mnz7^1o$g(xrs%rmBKNFc(8-vf zEQHys#Z1cnk)17D)@^sSAG97X*D5Bc_b*yDg)6YF&gnbnng}mwM>~QhnDzY!G^k7G zFRg5r{ygQrws3BR+Ys|a%Zm8vWd%KQP}B5DK8Ko&Nlx0geAiw1`pZ`oz4VePsKGpg uv6l6iDn6UX)x&po;9OE29%-oBz^pGZ%$77;|5(6wi*mnaeVZ81?DszkBWfc6 diff --git a/font/fontello.woff2 b/font/fontello.woff2 index 8b7b62f023217c7ff1966dbd151c423110fa5453..23125c95c06acb6ec8cc8187494fdcebe5b01fb7 100644 GIT binary patch literal 7272 zcmV-u9GByFPew8T0RR91032ul4*&oF05>E602~ki0RR9100000000000000000000 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 Cu>2SR literal 7360 zcmV;x96#fCPew8T0RR91035&o4*&oF05`k<032oj0RR9100000000000000000000 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 Date: Fri, 16 Aug 2024 17:18:24 +0300 Subject: [PATCH 039/327] chore: cloudcmd: v18.0.2 --- ChangeLog | 5 +++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5e7d4433..a0cf7422 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2024.08.16, v18.0.2 + +feature: +- 3d03efbe css: show links in one small screens + 2024.08.16, v18.0.1 fix: diff --git a/HELP.md b/HELP.md index 50d01d0f..ee18c39a 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.0.1 +# Cloud Commander v18.0.2 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1095,6 +1095,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2024.08.16*, **[v18.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.2)** - *2024.08.16*, **[v18.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.1)** - *2024.08.16*, **[v18.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.0.0)** - *2024.08.16*, **[v17.4.4](//github.com/coderaiser/cloudcmd/releases/tag/v17.4.4)** diff --git a/README.md b/README.md index f2a7d93b..f7281055 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.0.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v18.0.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index bd7e40d3..91d7d7c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "18.0.1", + "version": "18.0.2", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From ddf4542b75a42ba9dce2eab6142c1b6323842cc3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 17 Aug 2024 13:10:43 +0300 Subject: [PATCH 040/327] feature: cloudcmd: add ability to hide dot files (#307) --- HELP.md | 245 ++++++++++++++++++++------------------- bin/cloudcmd.mjs | 3 + client/client.js | 14 ++- client/key/index.js | 13 +++ common/cloudfunc.js | 9 ++ common/cloudfunc.spec.js | 33 ++++++ json/config.json | 1 + json/help.json | 2 + man/cloudcmd.1 | 2 + server/route.mjs | 1 + tmpl/config.hbs | 6 + 11 files changed, 203 insertions(+), 126 deletions(-) diff --git a/HELP.md b/HELP.md index ee18c39a..fa3eae4b 100644 --- a/HELP.md +++ b/HELP.md @@ -59,78 +59,79 @@ cloudcmd Cloud Commander supports the following command-line parameters: -|Parameter |Operation -|:------------------------------|:------------------------------ -| `-h, --help` | display help and exit -| `-v, --version` | display version and exit -| `-s, --save` | save configuration -| `-o, --online` | load scripts from remote servers -| `-a, --auth` | enable authorization -| `-u, --username` | set username -| `-p, --password` | set password -| `-c, --config` | configuration file path -| `--show-config` | show config values -| `--show-file-name` | show file name in view and edit -| `--editor` | set editor: "dword", "edward" or "deepword" -| `--packer` | set packer: "tar" or "zip" -| `--root` | set root directory -| `--prefix` | set url prefix -| `--prefix-socket` | set prefix for url connection -| `--port` | set port number -| `--confirm-copy` | confirm copy -| `--confirm-move` | confirm move -| `--open` | open web browser when server starts -| `--name` | set tab name in web browser -| `--one-file-panel` | show one file panel -| `--keys-panel` | show keys panel -| `--contact` | enable contact -| `--config-dialog` | enable config dialog -| `--config-auth` | enable auth change in config dialog -| `--console` | enable console -| `--sync-console-path` | sync console path -| `--terminal` | enable terminal -| `--terminal-path` | set terminal path -| `--terminal-command` | set command to run in terminal (shell by default) -| `--terminal-auto-restart` | restart command on exit -| `--vim` | enable vim hot keys -| `--columns` | set visible columns -| `--theme` | set theme 'light' or 'dark'" -| `--export` | enable export of config through a server -| `--export-token` | authorization token used by export server -| `--import` | enable import of config -| `--import-token` | authorization token used to connect to export server -| `--import-url` | url of an import server -| `--import-listen` | enable listen on config updates from import server -| `--dropbox` | enable dropbox integration -| `--dropbox-token` | set dropbox token -| `--log` | enable logging -| `--no-show-config` | do not show config values -| `--no-server` | do not start server -| `--no-auth` | disable authorization -| `--no-online` | load scripts from local server -| `--no-open` | do not open web browser when server started -| `--no-name` | set default tab name in web browser -| `--no-keys-panel` | hide keys panel -| `--no-one-file-panel` | show two file panels -| `--no-confirm-copy` | do not confirm copy -| `--no-confirm-move` | do not confirm move -| `--no-config-dialog` | disable config dialog -| `--no-config-auth` | disable auth change in config dialog -| `--no-console` | disable console -| `--no-sync-console-path` | do not sync console path -| `--no-contact` | disable contact -| `--no-terminal` | disable terminal -| `--no-terminal-command` | set default shell to run in terminal -| `--no-terminal-auto-restart` | do not restart command on exit -| `--no-vim` | disable vim hot keys +| Parameter |Operation +|:-----------------------------|:------------------------------ +| `-h, --help` | display help and exit +| `-v, --version` | display version and exit +| `-s, --save` | save configuration +| `-o, --online` | load scripts from remote servers +| `-a, --auth` | enable authorization +| `-u, --username` | set username +| `-p, --password` | set password +| `-c, --config` | configuration file path +| `--show-config` | show config values +| `--show-dot-files` | show dot files +| `--show-file-name` | show file name in view and edit +| `--editor` | set editor: "dword", "edward" or "deepword" +| `--packer` | set packer: "tar" or "zip" +| `--root` | set root directory +| `--prefix` | set url prefix +| `--prefix-socket` | set prefix for url connection +| `--port` | set port number +| `--confirm-copy` | confirm copy +| `--confirm-move` | confirm move +| `--open` | open web browser when server starts +| `--name` | set tab name in web browser +| `--one-file-panel` | show one file panel +| `--keys-panel` | show keys panel +| `--contact` | enable contact +| `--config-dialog` | enable config dialog +| `--config-auth` | enable auth change in config dialog +| `--console` | enable console +| `--sync-console-path` | sync console path +| `--terminal` | enable terminal +| `--terminal-path` | set terminal path +| `--terminal-command` | set command to run in terminal (shell by default) +| `--terminal-auto-restart` | restart command on exit +| `--vim` | enable vim hot keys +| `--columns` | set visible columns +| `--theme` | set theme 'light' or 'dark'" +| `--export` | enable export of config through a server +| `--export-token` | authorization token used by export server +| `--import` | enable import of config +| `--import-token` | authorization token used to connect to export server +| `--import-url` | url of an import server +| `--import-listen` | enable listen on config updates from import server +| `--dropbox` | enable dropbox integration +| `--dropbox-token` | set dropbox token +| `--log` | enable logging +| `--no-show-config` | do not show config values +| `--no-server` | do not start server +| `--no-auth` | disable authorization +| `--no-online` | load scripts from local server +| `--no-open` | do not open web browser when server started +| `--no-name` | set default tab name in web browser +| `--no-keys-panel` | hide keys panel +| `--no-one-file-panel` | show two file panels +| `--no-confirm-copy` | do not confirm copy +| `--no-confirm-move` | do not confirm move +| `--no-config-dialog` | disable config dialog +| `--no-config-auth` | disable auth change in config dialog +| `--no-console` | disable console +| `--no-sync-console-path` | do not sync console path +| `--no-contact` | disable contact +| `--no-terminal` | disable terminal +| `--no-terminal-command` | set default shell to run in terminal +| `--no-terminal-auto-restart` | do not restart command on exit +| `--no-vim` | disable vim hot keys | `--no-themes` | set default visible themes -| `--no-export` | disable export config through a server -| `--no-import` | disable import of config -| `--no-import-listen` | disable listen on config updates from import server -| `--no-show-file-name` | do not show file name in view and edit -| `--no-dropbox` | disable dropbox integration -| `--no-dropbox-token` | unset dropbox token -| `--no-log` | disable logging +| `--no-export` | disable export config through a server +| `--no-import` | disable import of config +| `--no-import-listen` | disable listen on config updates from import server +| `--no-show-file-name` | do not show file name in view and edit +| `--no-dropbox` | disable dropbox integration +| `--no-dropbox-token` | unset dropbox token +| `--no-log` | disable logging For options not specified by command-line parameters, Cloud Commander then reads configuration data from `~/.cloudcmd.json`. It uses port `8000` by default. @@ -152,56 +153,57 @@ Then, start the server again with `cloudcmd` and reload the page. ## Hot keys -|Key |Operation -|:----------------------|:-------------------------------------------- -| `F1` | help -| `F2` | show `user menu` -| `F3` | view, change directory -| `Shift + F3` | view raw file, change directory -| `F4` | edit -| `F5` | copy -| `Alt` + `F5` | pack -| `F6` | rename/move -| `Shift` + `F6` | rename current file -| `F7` | new directory -| `Shift + F7` | new file -| `F8`, `Delete` | remove -| `Shift + Delete` | remove without prompt -| `F9` | menu -| `Alt` + `F9` | extract -| `F10` | config -| `*` | select/unselect all -| `+` | expand selection -| `-` | shrink selection -| `:` | open Command Line -| `Ctrl + X` | cut to buffer -| `Ctrl + C` | copy to buffer -| `Ctrl + V` | paste from buffer -| `Ctrl + Z` | clear buffer -| `Ctrl + P` | copy path -| `Ctrl + R` | refresh -| `Ctrl + D` | clear local storage -| `Ctrl + A` | select all files in a panel -| `Ctrl + M` | [rename selected files](https://github.com/coderaiser/cloudcmd/releases/tag/v12.1.0) in editor -| `Ctrl + U` | swap panels -| `Ctrl + F3` | sort by name -| `Ctrl + F5` | sort by date -| `Ctrl + F6` | sort by size -| `Up`, `Down` | file system navigation -| `Enter` | change directory/view file -| `Alt + Left/Right` | show content of directory under cursor in target panel -| `Alt + G` | go to directory -| `Ctrl + \` | go to the root directory -| `Tab` | move via panels -| `Page Up` | up on one page -| `Page Down` | down on one page -| `Home` | to begin of list -| `End` | to end of list -| `Space` | select current file (and get size of directory) -| `Insert` | select current file (and move to next) -| `F9` | context menu -| `~` | console -| `Esc` | toggle vim hotkeys (`file manager`, `editor`) +| Key |Operation +|:---------------------|:-------------------------------------------- +| `F1` | help +| `F2` | show `user menu` +| `F3` | view, change directory +| `Shift + F3` | view raw file, change directory +| `F4` | edit +| `F5` | copy +| `Alt` + `F5` | pack +| `F6` | rename/move +| `Shift` + `F6` | rename current file +| `F7` | new directory +| `Shift + F7` | new file +| `F8`, `Delete` | remove +| `Shift + Delete` | remove without prompt +| `F9` | menu +| `Alt` + `F9` | extract +| `F10` | config +| `*` | select/unselect all +| `+` | expand selection +| `-` | shrink selection +| `:` | open Command Line +| `Ctrl + X` | cut to buffer +| `Ctrl + C` | copy to buffer +| `Ctrl + V` | paste from buffer +| `Ctrl + Z` | clear buffer +| `Ctrl + P` | copy path +| `Ctrl + R` | refresh +| `Ctrl + D` | clear local storage +| `Ctrl + A` | select all files in a panel +| `Ctrl + M` | [rename selected files](https://github.com/coderaiser/cloudcmd/releases/tag/v12.1.0) in editor +| `Ctrl + U` | swap panels +| `Ctrl + F3` | sort by name +| `Ctrl + F5` | sort by date +| `Ctrl + F6` | sort by size +| `Ctrl + Command + .` | show/hide dot files +| `Up`, `Down` | file system navigation +| `Enter` | change directory/view file +| `Alt + Left/Right` | show content of directory under cursor in target panel +| `Alt + G` | go to directory +| `Ctrl + \` | go to the root directory +| `Tab` | move via panels +| `Page Up` | up on one page +| `Page Down` | down on one page +| `Home` | to begin of list +| `End` | to end of list +| `Space` | select current file (and get size of directory) +| `Insert` | select current file (and move to next) +| `F9` | context menu +| `~` | console +| `Esc` | toggle vim hotkeys (`file manager`, `editor`) ### Vim @@ -398,6 +400,7 @@ Here's a description of all options: "confirmCopy": true, // confirm copy "confirmMove": true, // confirm move "showConfig": false, // show config at startup + "showDotFiles": true, // show dot files "showFileName": false, // do not show file name in view and edit "contact": true, // enable contact "configDialog": true, // enable config dialog diff --git a/bin/cloudcmd.mjs b/bin/cloudcmd.mjs index 6551c50b..0a7ec042 100755 --- a/bin/cloudcmd.mjs +++ b/bin/cloudcmd.mjs @@ -86,6 +86,7 @@ const yargsOptions = { 'confirm-copy', 'confirm-move', 'show-config', + 'show-dot-files', 'show-file-name', 'vim', 'keys-panel', @@ -124,6 +125,7 @@ const yargsOptions = { 'export': choose(env.bool('export'), config('export')), 'prefix-socket': config('prefixSocket'), + 'show-dot-files': choose(env.bool('show_dot_files'), config('showDotFiles')), 'show-file-name': choose(env.bool('show_file_name'), config('showFileName')), 'sync-console-path': choose(env.bool('sync_console_path'), config('syncConsolePath')), 'config-dialog': choose(env.bool('config_dialog'), config('configDialog')), @@ -189,6 +191,7 @@ async function main() { config('username', args.username); config('console', args.console); config('syncConsolePath', args.syncConsolePath); + config('showDotFiles', args.showDotFiles); config('showFileName', args.showFileName); config('contact', args.contact); config('terminal', args.terminal); diff --git a/client/client.js b/client/client.js index 4c4555ff..139dd002 100644 --- a/client/client.js +++ b/client/client.js @@ -103,6 +103,7 @@ function CloudCmdProto(DOM) { history, noCurrent, currentName, + showDotFiles: CloudCmd.config('showDotFiles'), }, panel); }; @@ -300,7 +301,6 @@ function CloudCmdProto(DOM) { * @param options * { refresh, history } - необходимость обновить данные о каталоге * @param panel - * @param callback * */ async function ajaxLoad(path, options = {}, panel) { @@ -348,13 +348,16 @@ function CloudCmdProto(DOM) { /** * Функция строит файловую таблицу - * @param json - данные о файлах + * @param data - данные о файлах * @param panelParam - * @param history - * @param callback + * @param options - history, noCurrent, showDotFiles */ async function createFileTable(data, panelParam, options) { - const {history, noCurrent} = options; + const { + history, + noCurrent, + showDotFiles, + } = options; const names = [ 'file', @@ -385,6 +388,7 @@ function CloudCmdProto(DOM) { data, id: panel.id, prefix, + showDotFiles, template: { file, path, diff --git a/client/key/index.js b/client/key/index.js index d7d455af..b0678601 100644 --- a/client/key/index.js +++ b/client/key/index.js @@ -509,6 +509,19 @@ async function switchKey(event) { event.preventDefault(); } + break; + + case KEY.DOT: + if (meta && shift) { + const showDotFiles = !CloudCmd.config('showDotFiles'); + CloudCmd._config('showDotFiles', showDotFiles); + CloudCmd.refresh(); + await DOM.RESTful.Config.write({ + showDotFiles, + }); + } + break; } } + diff --git a/common/cloudfunc.js b/common/cloudfunc.js index 39e422e7..4e4e09d7 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -16,6 +16,13 @@ const Path = store(); Path('/'); +const filterOutDotFiles = ({showDotFiles}) => ({name}) => { + if (showDotFiles) + return true; + + return !name.startsWith('.'); +}; + module.exports.FS = FS; module.exports.apiURL = '/api/v1'; module.exports.MAX_FILE_SIZE = 500 * 1024; @@ -118,6 +125,7 @@ module.exports.buildFromJSON = (params) => { template, sort = 'name', order = 'asc', + showDotFiles, } = params; const templateFile = template.file; @@ -195,6 +203,7 @@ module.exports.buildFromJSON = (params) => { } fileTable += files + .filter(filterOutDotFiles({showDotFiles})) .map(updateField) .map((file) => { const name = encode(file.name); diff --git a/common/cloudfunc.spec.js b/common/cloudfunc.spec.js index b5aceb7b..e4e06dd7 100644 --- a/common/cloudfunc.spec.js +++ b/common/cloudfunc.spec.js @@ -142,3 +142,36 @@ test('cloudfunc: getSize: file', (t) => { t.equal(result, expected); t.end(); }); + +test('cloudfunc: buildFromJSON: showDotFiles: false', (t) => { + const data = { + path: '/media/', + files: [{ + date: '30.08.2016', + mode: 'rwx rwx rwx', + name: '.floppy', + owner: 'root', + size: '7b', + type: 'directory-link', + }], + }; + + const html = buildFromJSON({ + prefix: '', + template, + data, + showDotFiles: false, + }); + + const $ = cheerio.load(html); + const el = $('[data-name="js-file-LmZsb3BweQ=="]'); + + const result = el + .find('[data-name="js-name"]') + .text(); + + const expected = ''; + + t.equal(result, expected); + t.end(); +}); diff --git a/json/config.json b/json/config.json index fd66580f..e65f41ee 100644 --- a/json/config.json +++ b/json/config.json @@ -30,6 +30,7 @@ "terminalPath": "", "terminalCommand": "", "terminalAutoRestart": true, + "showDotFiles": true, "showConfig": false, "showFileName": false, "vim": false, diff --git a/json/help.json b/json/help.json index 056713ff..6289a2d2 100644 --- a/json/help.json +++ b/json/help.json @@ -8,6 +8,7 @@ "-p, --password ": "set password", "-c, --config ": "configuration file path", "--show-config ": "show config values", + "--show-dot-files ": "show dot files", "--show-file-name ": "show file name in view and edit", "--editor ": "set editor: \"dword\", \"edward\" or \"deepword\"", "--packer ": "set packer: \"tar\" or \"zip\"", @@ -65,6 +66,7 @@ "--no-export ": "disable export config through a server", "--no-import ": "disable import of config", "--no-import-listen ": "disable listen on config updates from import server", + "--no-show-dot-files ": "do not show dot files", "--no-show-file-name ": "do not show file name in view and edit", "--no-dropbox ": "disable dropbox integration", "--no-dropbox-token ": "unset dropbox token", diff --git a/man/cloudcmd.1 b/man/cloudcmd.1 index 9ce86c60..607ff241 100644 --- a/man/cloudcmd.1 +++ b/man/cloudcmd.1 @@ -31,6 +31,7 @@ programs in browser from any computer, mobile or tablet device. -p, --password set password -c, --config configuration file path --show-config show config values + --show-dot-files show dot files --show-file-name show file name in view and edit modes --editor set editor: "dword", "edward" or "deepword" --packer set packer: "tar" or "zip" @@ -66,6 +67,7 @@ programs in browser from any computer, mobile or tablet device. --dropbox-token set dropbox token --log enable logging --no-show-config do not show config values + --no-show-dot-files do not show dot files --no-server do not start server --no-auth disable authorization --no-online load scripts from local server diff --git a/server/route.mjs b/server/route.mjs index d6917ec5..675a0b7a 100644 --- a/server/route.mjs +++ b/server/route.mjs @@ -180,6 +180,7 @@ function buildIndex(config, html, data) { data, prefix: getPrefix(config), template: Template, + showDotFiles: config('showDotFiles'), }); return indexProcessing(config, { diff --git a/tmpl/config.hbs b/tmpl/config.hbs index dfcc4c09..a05db1e6 100644 --- a/tmpl/config.hbs +++ b/tmpl/config.hbs @@ -135,6 +135,12 @@ placeholder="Port" class="form-control"> +
  • + +
  • - From 2fc503f71f363af6b6754b9f2709c71c3e0506fe Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 20 Jan 2025 18:05:22 +0200 Subject: [PATCH 067/327] feature: cloudcmd: @putout/babel v3.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3e689170..1584c2cc 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,7 @@ "@cloudcmd/modal": "^3.0.0", "@cloudcmd/olark": "^3.0.2", "@cloudcmd/stub": "^4.0.1", - "@putout/babel": "^2.0.0", + "@putout/babel": "^3.0.0", "@types/node-fetch": "^2.6.11", "auto-globals": "^4.0.0", "babel-loader": "^8.0.0", From d8da7922d90563fbba0e59f0bdd73391737deb4b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 20 Jan 2025 18:18:52 +0200 Subject: [PATCH 068/327] chore: client: lint --- client/dom/current-file.spec.js | 10 ++--- client/dom/directory.js | 12 ++---- client/dom/images.js | 4 +- client/dom/load-remote.js | 70 ++++++++++++++++----------------- client/modules/edit.js | 5 +-- client/modules/konsole.js | 18 ++++----- client/modules/menu.js | 4 +- client/modules/terminal-run.js | 18 ++++----- client/modules/terminal.js | 18 ++++----- client/modules/view/get-type.js | 4 +- client/modules/view/index.js | 5 ++- client/modules/view/types.js | 4 +- 12 files changed, 71 insertions(+), 101 deletions(-) diff --git a/client/dom/current-file.spec.js b/client/dom/current-file.spec.js index 3d822206..de1ba2af 100644 --- a/client/dom/current-file.spec.js +++ b/client/dom/current-file.spec.js @@ -261,12 +261,10 @@ test('current-file: isCurrentIsDir: file', (t) => { t.end(); }); -function getCloudCmd({emit} = {}) { - return { - prefix: '', - emit: emit || stub(), - }; -} +const getCloudCmd = ({emit} = {}) => ({ + prefix: '', + emit: emit || stub(), +}); test('current-file: parseNameAttribute', (t) => { const result = currentFile._parseNameAttribute('js-file-aGVsbG8mbmJzcDt3b3JsZA=='); diff --git a/client/dom/directory.js b/client/dom/directory.js index 88802d40..c7cfa386 100644 --- a/client/dom/directory.js +++ b/client/dom/directory.js @@ -63,14 +63,8 @@ module.exports = (items) => { uploader.on('end', CloudCmd.refresh); }; -function percent(i, n, per = 100) { - return Math.round(i * per / n); -} +const percent = (i, n, per = 100) => Math.round(i * per / n); -function uploadFile(url, data) { - return DOM.load.put(url, data); -} +const uploadFile = (url, data) => DOM.load.put(url, data); -function uploadDir(url) { - return DOM.load.put(`${url}?dir`); -} +const uploadDir = (url) => DOM.load.put(`${url}?dir`); diff --git a/client/dom/images.js b/client/dom/images.js index 382da9e8..bb5579c1 100644 --- a/client/dom/images.js +++ b/client/dom/images.js @@ -10,9 +10,7 @@ const LOADING = 'loading'; const HIDDEN = 'hidden'; const ERROR = 'error'; -function getLoadingType() { - return isSVG() ? '-svg' : '-gif'; -} +const getLoadingType = () => isSVG() ? '-svg' : '-gif'; module.exports.get = getElement; /** diff --git a/client/dom/load-remote.js b/client/dom/load-remote.js index 0def5f00..72fb9db9 100644 --- a/client/dom/load-remote.js +++ b/client/dom/load-remote.js @@ -17,42 +17,40 @@ module.exports = (name, options, callback = options) => { if (o.name && window[o.name]) return callback(); - Files - .get('modules') - .then(async (modules) => { - const online = config('online') && navigator.onLine; - const module = findObjByNameInArr(modules.remote, name); - - const isArray = itype.array(module.local); - const {version} = module; - - let remoteTmpls; - let local; - - if (isArray) { - remoteTmpls = module.remote; - local = module.local; - } else { - remoteTmpls = [module.remote]; - local = [module.local]; - } - - const localURL = local.map((url) => prefix + url); - - const remoteURL = remoteTmpls.map((tmpl) => { - return rendy(tmpl, { - version, - }); + Files.get('modules').then(async (modules) => { + const online = config('online') && navigator.onLine; + const module = findObjByNameInArr(modules.remote, name); + + const isArray = itype.array(module.local); + const {version} = module; + + let remoteTmpls; + let local; + + if (isArray) { + remoteTmpls = module.remote; + local = module.local; + } else { + remoteTmpls = [module.remote]; + local = [module.local]; + } + + const localURL = local.map((url) => prefix + url); + + const remoteURL = remoteTmpls.map((tmpl) => { + return rendy(tmpl, { + version, }); - - if (online) { - const [e] = await tryToCatch(load.parallel, remoteURL); - - if (!e) - return callback(); - } - - const [e] = await tryToCatch(load.parallel, localURL); - callback(e); }); + + if (online) { + const [e] = await tryToCatch(load.parallel, remoteURL); + + if (!e) + return callback(); + } + + const [e] = await tryToCatch(load.parallel, localURL); + callback(e); + }); }; diff --git a/client/modules/edit.js b/client/modules/edit.js index a62535b7..441aaf62 100644 --- a/client/modules/edit.js +++ b/client/modules/edit.js @@ -11,6 +11,7 @@ const load = require('load.js'); const {MAX_FILE_SIZE: maxSize} = require('../../common/cloudfunc'); const {time, timeEnd} = require('../../common/util'); +const getEditor = () => editor; const isFn = (a) => typeof a === 'function'; const loadJS = load.js; @@ -91,10 +92,6 @@ module.exports.show = (options) => { module.exports.getEditor = getEditor; -function getEditor() { - return editor; -} - module.exports.getElement = () => Element; module.exports.hide = () => { diff --git a/client/modules/konsole.js b/client/modules/konsole.js index 41936486..6993380d 100644 --- a/client/modules/konsole.js +++ b/client/modules/konsole.js @@ -46,22 +46,18 @@ module.exports.clear = () => { konsole.clear(); }; -function getPrefix() { - return CloudCmd.prefix + '/console'; -} +const getPrefix = () => CloudCmd.prefix + '/console'; function getPrefixSocket() { return CloudCmd.prefixSocket + '/console'; } -function getEnv() { - return { - ACTIVE_DIR: DOM.getCurrentDirPath.bind(DOM), - PASSIVE_DIR: DOM.getNotCurrentDirPath.bind(DOM), - CURRENT_NAME: DOM.getCurrentName.bind(DOM), - CURRENT_PATH: () => Info.path, - }; -} +const getEnv = () => ({ + ACTIVE_DIR: DOM.getCurrentDirPath.bind(DOM), + PASSIVE_DIR: DOM.getNotCurrentDirPath.bind(DOM), + CURRENT_NAME: DOM.getCurrentName.bind(DOM), + CURRENT_PATH: () => Info.path, +}); async function onPath(path) { if (Info.dirPath === path) diff --git a/client/modules/menu.js b/client/modules/menu.js index 150bb186..8f739164 100644 --- a/client/modules/menu.js +++ b/client/modules/menu.js @@ -226,9 +226,7 @@ function beforeShow(callback, params) { return isShow; } -function beforeClick(name) { - return MenuShowedName !== name; -} +const beforeClick = (name) => MenuShowedName !== name; async function _uploadTo(nameModule) { const [error, data] = await Info.getData(); diff --git a/client/modules/terminal-run.js b/client/modules/terminal-run.js index 01bd30a9..3e4b857d 100644 --- a/client/modules/terminal-run.js +++ b/client/modules/terminal-run.js @@ -75,22 +75,18 @@ function hide() { CloudCmd.View.hide(); } -function getPrefix() { - return CloudCmd.prefix + '/gritty'; -} +const getPrefix = () => CloudCmd.prefix + '/gritty'; function getPrefixSocket() { return CloudCmd.prefixSocket + '/gritty'; } -function getEnv() { - return { - ACTIVE_DIR: DOM.getCurrentDirPath, - PASSIVE_DIR: DOM.getNotCurrentDirPath, - CURRENT_NAME: DOM.getCurrentName, - CURRENT_PATH: DOM.getCurrentPath, - }; -} +const getEnv = () => ({ + ACTIVE_DIR: DOM.getCurrentDirPath, + PASSIVE_DIR: DOM.getNotCurrentDirPath, + CURRENT_NAME: DOM.getCurrentName, + CURRENT_PATH: DOM.getCurrentPath, +}); function create(createOptions) { const { diff --git a/client/modules/terminal.js b/client/modules/terminal.js index f94024d4..d36b700a 100644 --- a/client/modules/terminal.js +++ b/client/modules/terminal.js @@ -57,22 +57,18 @@ function hide() { CloudCmd.View.hide(); } -function getPrefix() { - return CloudCmd.prefix + '/gritty'; -} +const getPrefix = () => CloudCmd.prefix + '/gritty'; function getPrefixSocket() { return CloudCmd.prefixSocket + '/gritty'; } -function getEnv() { - return { - ACTIVE_DIR: DOM.getCurrentDirPath, - PASSIVE_DIR: DOM.getNotCurrentDirPath, - CURRENT_NAME: DOM.getCurrentName, - CURRENT_PATH: DOM.getCurrentPath, - }; -} +const getEnv = () => ({ + ACTIVE_DIR: DOM.getCurrentDirPath, + PASSIVE_DIR: DOM.getNotCurrentDirPath, + CURRENT_NAME: DOM.getCurrentName, + CURRENT_PATH: DOM.getCurrentPath, +}); function create() { const options = { diff --git a/client/modules/view/get-type.js b/client/modules/view/get-type.js index 80252aa1..3ac092e0 100644 --- a/client/modules/view/get-type.js +++ b/client/modules/view/get-type.js @@ -45,9 +45,7 @@ function isMedia(name) { return isAudio(name) || isVideo(name); } -function isAudio(name) { - return /\.(mp3|ogg|m4a)$/i.test(name); -} +const isAudio = (name) => /\.(mp3|ogg|m4a)$/i.test(name); function isVideo(name) { return /\.(mp4|avi|webm)$/i.test(name); diff --git a/client/modules/view/index.js b/client/modules/view/index.js index 0e79ab4e..17a3b1fa 100644 --- a/client/modules/view/index.js +++ b/client/modules/view/index.js @@ -55,7 +55,10 @@ CloudCmd[Name] = module.exports; const Info = DOM.CurrentInfo; const {Key} = CloudCmd; -const basename = (a) => a.split('/').pop(); + +const basename = (a) => a + .split('/') + .pop(); let El; let TemplateAudio; diff --git a/client/modules/view/types.js b/client/modules/view/types.js index 0ea9aef9..e36fec4d 100644 --- a/client/modules/view/types.js +++ b/client/modules/view/types.js @@ -2,6 +2,7 @@ const {extname} = require('node:path'); const currify = require('currify'); +const isAudio = (name) => /\.(mp3|ogg|m4a)$/i.test(name); const testRegExp = currify((name, reg) => reg.test(name)); const getRegExp = (ext) => RegExp(`\\.${ext}$`, 'i'); @@ -53,9 +54,6 @@ function isMedia(name) { } module.exports.isAudio = isAudio; -function isAudio(name) { - return /\.(mp3|ogg|m4a)$/i.test(name); -} function isVideo(name) { return /\.(mp4|avi|webm)$/i.test(name); From 907afc6e4aa5187b93ea389b0df7342a7eac372b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 20 Jan 2025 18:19:13 +0200 Subject: [PATCH 069/327] chore: test: lint --- test/before.mjs | 10 ++++------ test/rest/pack.mjs | 12 +++++------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/test/before.mjs b/test/before.mjs index 6e6e3f99..ccb2399f 100644 --- a/test/before.mjs +++ b/test/before.mjs @@ -64,9 +64,7 @@ export const connect = promisify((options, fn = options) => { }); }); -function defaultConfig() { - return { - auth: false, - root: __dirname, - }; -} +const defaultConfig = () => ({ + auth: false, + root: __dirname, +}); diff --git a/test/rest/pack.mjs b/test/rest/pack.mjs index afbe0a0f..8dd40245 100644 --- a/test/rest/pack.mjs +++ b/test/rest/pack.mjs @@ -224,10 +224,8 @@ test('cloudcmd: rest: pack: zip: put: error', async (t) => { t.end(); }); -function getPackOptions(to, names = ['pack']) { - return { - to, - names, - from: '/fixture', - }; -} +const getPackOptions = (to, names = ['pack']) => ({ + to, + names, + from: '/fixture', +}); From ddd1722f39a2338ab826199a24d8475ce67de7ca Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 20 Jan 2025 18:22:07 +0200 Subject: [PATCH 070/327] chore: lint --- bin/cloudcmd.mjs | 4 ++-- common/cloudfunc.js | 14 ++++++-------- css/supports.css | 2 +- server/config.js | 8 +++++--- server/rest/index.js | 9 +++------ server/terminal.js | 4 +--- static/user-menu.spec.js | 14 ++++++-------- 7 files changed, 24 insertions(+), 31 deletions(-) diff --git a/bin/cloudcmd.mjs b/bin/cloudcmd.mjs index 0a7ec042..e6b4c1a9 100755 --- a/bin/cloudcmd.mjs +++ b/bin/cloudcmd.mjs @@ -17,11 +17,11 @@ process.on('unhandledRejection', exit); const require = createRequire(import.meta.url); const Info = require('../package.json'); - +const isUndefined = (a) => typeof a === 'undefined'; const simport = createSimport(import.meta.url); const choose = (a, b) => { - if (a === undefined) + if (isUndefined(a)) return b; return a; diff --git a/common/cloudfunc.js b/common/cloudfunc.js index c9a24c42..c906b548 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -248,14 +248,12 @@ module.exports.buildFromJSON = (params) => { return fileTable; }; -function updateField(file) { - return { - ...file, - date: file.date || '--.--.----', - owner: file.owner || 'root', - size: getSize(file), - }; -} +const updateField = (file) => ({ + ...file, + date: file.date || '--.--.----', + owner: file.owner || 'root', + size: getSize(file), +}); function getAttribute(type) { if (type === 'directory') diff --git a/css/supports.css b/css/supports.css index bf470c2d..ea2084d2 100644 --- a/css/supports.css +++ b/css/supports.css @@ -1,6 +1,6 @@ @supports (overflow: overlay) { .files { - overflow-y: overlay; + overflow-y: auto; } .fm-header { diff --git a/server/config.js b/server/config.js index a79e7165..3b180f09 100644 --- a/server/config.js +++ b/server/config.js @@ -22,7 +22,7 @@ const criton = require('criton'); const exit = require(`${DIR_SERVER}exit`); const CloudFunc = require(`${DIR_COMMON}cloudfunc`); - +const isUndefined = (a) => typeof a === 'undefined'; const DIR = `${DIR_SERVER}../`; const HOME = homedir(); @@ -31,7 +31,9 @@ const formatMsg = currify((a, b) => CloudFunc.formatMsg(a, b)); const {apiURL} = CloudFunc; -const key = (a) => Object.keys(a).pop(); +const key = (a) => Object + .keys(a) + .pop(); const ConfigPath = path.join(DIR, 'json/config.json'); const ConfigHome = path.join(HOME, '.cloudcmd.json'); @@ -90,7 +92,7 @@ function createConfig({configPath} = {}) { if (key === '*') return config; - if (value === undefined) + if (isUndefined(value)) return config[key]; config[key] = value; diff --git a/server/rest/index.js b/server/rest/index.js index f4cae656..c133e2dc 100644 --- a/server/rest/index.js +++ b/server/rest/index.js @@ -21,7 +21,8 @@ const root = require(`../root`); const CloudFunc = require(`../../common/cloudfunc`); const markdown = require(`../markdown/index.js`); const info = require('./info'); - +const isUndefined = (a) => typeof a === 'undefined'; +const isRootAll = (root, names) => names.some(isRootWin32(root)); const isString = (a) => typeof a === 'string'; const isFn = (a) => typeof a === 'function'; const swap = wraptile((fn, a, b) => fn(b, a)); @@ -66,7 +67,7 @@ function rest({fs, config, moveFiles}, request, response) { if (options.name) params.name = options.name; - if (options.gzip !== undefined) + if (!isUndefined(options.gzip)) params.gzip = options.gzip; if (options.query) @@ -370,10 +371,6 @@ const isRootWin32 = currify((root, path) => { module.exports._isRootWin32 = isRootWin32; module.exports._isRootAll = isRootAll; -function isRootAll(root, names) { - return names.some(isRootWin32(root)); -} - module.exports._getWin32RootMsg = getWin32RootMsg; function getWin32RootMsg() { diff --git a/server/terminal.js b/server/terminal.js index d10cdc8b..67613f0a 100644 --- a/server/terminal.js +++ b/server/terminal.js @@ -8,9 +8,7 @@ const noop = (req, res, next) => { noop.listen = noop; -function _getModule(a) { - return require(a); -} +const _getModule = (a) => require(a); module.exports = (config, arg, overrides = {}) => { const { diff --git a/static/user-menu.spec.js b/static/user-menu.spec.js index b10b5b15..9c42302a 100644 --- a/static/user-menu.spec.js +++ b/static/user-menu.spec.js @@ -337,11 +337,9 @@ function getDOM() { }; } -function getCloudCmd() { - return { - refresh: stub(), - EditFile: { - show: stub(), - }, - }; -} +const getCloudCmd = () => ({ + refresh: stub(), + EditFile: { + show: stub(), + }, +}); From 301252906f44758626b93ab25e2b2fc5c0b2ddd4 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 20 Jan 2025 18:48:58 +0200 Subject: [PATCH 071/327] chore: cloudcmd: v18.5.0 --- ChangeLog | 8 ++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2ca00c56..2c0ccdd7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2025.01.20, v18.5.0 + +fix: +- ad8e55d8 client: themes -> columns (#434) + +feature: +- 2fc503f7 cloudcmd: @putout/babel v3.0.0 + 2024.12.13, v18.4.1 feature: diff --git a/HELP.md b/HELP.md index 98282eb0..21aa8379 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.4.1 +# Cloud Commander v18.5.0 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1098,6 +1098,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2025.01.20*, **[v18.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.0)** - *2024.12.13*, **[v18.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.4.1)** - *2024.11.22*, **[v18.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.4.0)** - *2024.11.14*, **[v18.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.3.0)** diff --git a/README.md b/README.md index 8c0e0e97..0df3b1a3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.4.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v18.5.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 1584c2cc..e02fb1df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "18.4.1", + "version": "18.5.0", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 161d4f952beb7630c123df382233cd300b0b34b6 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 21 Jan 2025 00:45:53 +0200 Subject: [PATCH 072/327] chore: lint --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index ab62820d..13d9e227 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -34,4 +34,5 @@ module.exports = { browser: true, }, }], + ignorePatterns: ['*.md{js}'], }; From b0be1194744c6bc8048ab438f5a4164e46547b76 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 21 Jan 2025 00:52:48 +0200 Subject: [PATCH 073/327] chore: actions: yarn -> bun --- .github/workflows/docker.yml | 4 ++-- .github/workflows/nodejs.yml | 4 ++-- .putout.json | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 6e22e4f0..e4877cb7 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -20,9 +20,9 @@ jobs: with: node-version: 22.x - name: Install Redrun - run: bun i yarn redrun -g --no-save + run: bun i redrun -g --no-save - name: NPM Install - run: yarn --no-lockfile + run: bun i --no-save - name: Lint run: redrun lint - name: Build diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 8bdc6cc0..88fed4f0 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -21,9 +21,9 @@ jobs: with: node-version: ${{ matrix.node-version }} - name: Install Redrun - run: bun i yarn redrun -g --no-save + run: bun i redrun -g --no-save - name: Install - run: yarn --no-lockfile + run: bun i --no-save - name: Lint run: redrun fix:lint - uses: actions/cache@v4 diff --git a/.putout.json b/.putout.json index 99e64ec8..08b4f06e 100644 --- a/.putout.json +++ b/.putout.json @@ -7,7 +7,6 @@ "fontello.json" ], "rules": { - "github/convert-npm-to-bun": "off", "github/set-node-versions": "off" }, "match": { From 3ad6720f5f2148c6cc3372e2889ec323484e8621 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 24 Jan 2025 00:48:44 +0200 Subject: [PATCH 074/327] chore: lint --- server/distribute/import.mjs | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/server/distribute/import.mjs b/server/distribute/import.mjs index f776abc0..0a48d065 100644 --- a/server/distribute/import.mjs +++ b/server/distribute/import.mjs @@ -105,25 +105,15 @@ export const distributeImport = (config, options, fn) => { const onConnect = emitAuth(importUrl, config, socket); const onAccept = logWrapped(isLog, importStr, `${connectedStr} to ${colorUrl}`); - const onDisconnect = squad( - done( - fn, - statusStore, - ), - logWrapped( - isLog, - importStr, - `${disconnectedStr} from ${colorUrl}`, - ), - rmListeners( - socket, - { - onError, - onConnect, - onConfig, - }, - ), - ); + const onDisconnect = squad(...[ + done(fn, statusStore), + logWrapped(isLog, importStr, `${disconnectedStr} from ${colorUrl}`), + rmListeners(socket, { + onError, + onConnect, + onConfig, + }), + ]); const onChange = squad(logWrapped(isLog, importStr), config); From 8e98b778bd2e145cc63960f07664c99aee37b6f1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 3 Feb 2025 14:49:43 +0200 Subject: [PATCH 075/327] feature: cloudcmd: eslint-plugin-putout v24.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e02fb1df..52246ebe 100644 --- a/package.json +++ b/package.json @@ -173,7 +173,7 @@ "emitify": "^4.0.1", "eslint": "^8.0.1", "eslint-plugin-n": "^17.0.0-4", - "eslint-plugin-putout": "^23.1.0", + "eslint-plugin-putout": "^24.0.0", "extract-text-webpack-plugin": "^4.0.0-alpha.0", "gritty": "^8.0.0", "gunzip-maybe": "^1.3.1", From 353a1fb6c114ae6b571603a16cc6f5965cfdad96 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 3 Feb 2025 14:49:47 +0200 Subject: [PATCH 076/327] feature: cloudcmd: putout v38.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 52246ebe..d4a5ccbc 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "package-json": "^10.0.0", "ponse": "^7.0.0", "pullout": "^5.0.0", - "putout": "^37.0.1", + "putout": "^38.0.5", "redzip": "^3.0.0", "rendy": "^4.1.3", "restafary": "^12.0.0", From 467f0a79c379a8f2fc14ed2a29e0fd629052f3b3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 3 Feb 2025 14:50:27 +0200 Subject: [PATCH 077/327] feature: cloudcmd: webpack-merge v6.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d4a5ccbc..7fa52346 100644 --- a/package.json +++ b/package.json @@ -211,7 +211,7 @@ "url-loader": "^4.0.0", "webpack": "^4.0.0", "webpack-cli": "^3.0.1", - "webpack-merge": "^5.0.8", + "webpack-merge": "^6.0.1", "webpackbar": "^5.0.0-3" }, "engines": { From 2dea0a3b2de8d46a7ef05a1aa3ca90a634eb49bb Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 3 Feb 2025 14:51:27 +0200 Subject: [PATCH 078/327] chore: cloudcmd: v18.5.1 --- ChangeLog | 7 +++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c0ccdd7..414c5329 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2025.02.03, v18.5.1 + +feature: +- 467f0a79 cloudcmd: webpack-merge v6.0.1 +- 353a1fb6 cloudcmd: putout v38.0.5 +- 8e98b778 cloudcmd: eslint-plugin-putout v24.0.0 + 2025.01.20, v18.5.0 fix: diff --git a/HELP.md b/HELP.md index 21aa8379..f002d2d9 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.5.0 +# Cloud Commander v18.5.1 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1098,6 +1098,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2025.02.03*, **[v18.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.1)** - *2025.01.20*, **[v18.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.0)** - *2024.12.13*, **[v18.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.4.1)** - *2024.11.22*, **[v18.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.4.0)** diff --git a/README.md b/README.md index 0df3b1a3..a1a4a2f4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.5.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v18.5.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 7fa52346..509170a8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "18.5.0", + "version": "18.5.1", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 4eaeccba1cb1ac2bd2aa425dd2dd9fdbad6d2b34 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 15:53:17 +0200 Subject: [PATCH 079/327] chore: github: issue template --- .github/ISSUE_TEMPLATE.md | 13 ------------- .github/ISSUE_TEMPLATE/config.yml | 4 ++++ 2 files changed, 4 insertions(+), 13 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 45635a3c..00000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,13 +0,0 @@ - - -- **Version** (`cloudcmd -v`): -- **Node Version** `node -v`: -- **OS** (`uname -a` on Linux): -- **Browser name/version**: -- **Used Command Line Parameters**: -- **Changed Config**: -- [ ] **I'm ready to donate on [Patreon](https://patreon.com/coderaiser) 🎁** -- [ ] **I'm willing to work on this issue 💪** diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..aedb0578 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: Stack Overflow + url: https://stackoverflow.com/search?q=cloudcmd + about: Please ask and answer questions here. From c68a3a7f077da4c15931fecec7a031b6f0baa526 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 15:54:10 +0200 Subject: [PATCH 080/327] chore: github: issue_template.md --- .github/ISSUE_TEMPLATE/issue_template.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/issue_template.md diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md new file mode 100644 index 00000000..c7ebcbed --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -0,0 +1,8 @@ +- **Version** (`cloudcmd -v`): +- **Node Version** `node -v`: +- **OS** (`uname -a` on Linux): +- **Browser name/version**: +- **Used Command Line Parameters**: +- **Changed Config**: +- [ ] **I'm ready to donate on [Patreon](https://patreon.com/coderaiser) 🎁** +- [ ] **I'm willing to work on this issue 💪** From 3adfec81c2a6eb5d8553b4bddb5c8a4c7b8f5b0c Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 15:54:49 +0200 Subject: [PATCH 081/327] chore: github: config: forbid blank issues --- .github/ISSUE_TEMPLATE/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index aedb0578..5f41e73a 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,3 +1,4 @@ +blank_issues_enabled: false contact_links: - name: Stack Overflow url: https://stackoverflow.com/search?q=cloudcmd From 7492b4bfc702a2afbd13bfef9b3e90d48dfda90e Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 15:56:47 +0200 Subject: [PATCH 082/327] chore: issue_template: configure --- .github/ISSUE_TEMPLATE/issue_template.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index c7ebcbed..3ce5705b 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,3 +1,11 @@ +--- +name: Tracking issue +about: Use this template for tracking new features. +title: "[DATE]: [FEATURE NAME]" +labels: needs triage +assignees: coderaiser +--- + - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: - **OS** (`uname -a` on Linux): From 7ae60605bb36f21ccf6cb2df2f1b0d3735549e9c Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 13:57:41 +0000 Subject: [PATCH 083/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/issue_template.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index 3ce5705b..f5402193 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,10 +1,11 @@ ---- +*** + name: Tracking issue about: Use this template for tracking new features. title: "[DATE]: [FEATURE NAME]" labels: needs triage assignees: coderaiser ---- +--------------------- - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: From a38b3a79ceac3d55cf3f534515c0bbf3018d1584 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 15:58:38 +0200 Subject: [PATCH 084/327] chrome: issue_template.md --- .github/ISSUE_TEMPLATE/issue_template.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index f5402193..f51666e9 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,11 +1,10 @@ -*** - +--- name: Tracking issue -about: Use this template for tracking new features. -title: "[DATE]: [FEATURE NAME]" +about: Create an issue with bug report or feature request. +title: "" labels: needs triage assignees: coderaiser ---------------------- +--- - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: From 56d621b1ffd85a6835b6dc74d8719f1b3a12db24 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 13:59:35 +0000 Subject: [PATCH 085/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/issue_template.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index f51666e9..32af23ac 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,10 +1,11 @@ ---- +*** + name: Tracking issue about: Create an issue with bug report or feature request. title: "" labels: needs triage assignees: coderaiser ---- +--------------------- - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: From e71550d557509b091a3612693c45ce6880176ad5 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 16:04:53 +0200 Subject: [PATCH 086/327] chrome: issue_template: improve --- .github/ISSUE_TEMPLATE/issue_template.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index 32af23ac..a97748e2 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -13,5 +13,9 @@ assignees: coderaiser - **Browser name/version**: - **Used Command Line Parameters**: - **Changed Config**: -- [ ] **I'm ready to donate on [Patreon](https://patreon.com/coderaiser) 🎁** -- [ ] **I'm willing to work on this issue 💪** +```json +{} +``` +- [ ] 🎁 **I'm ready to donate on https://opencollective.com/cloudcmd** +- [ ] 🎁 **I'm ready to donate on https://ko-fi.com/coderaiser** +- [ ] 💪 **I'm willing to work on this issue** From a598ef3ed05bd1b11893fb75c8ee2146340651d8 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 14:05:53 +0000 Subject: [PATCH 087/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/issue_template.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index a97748e2..e0d6bfde 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -13,9 +13,11 @@ assignees: coderaiser - **Browser name/version**: - **Used Command Line Parameters**: - **Changed Config**: + ```json {} ``` + - [ ] 🎁 **I'm ready to donate on https://opencollective.com/cloudcmd** - [ ] 🎁 **I'm ready to donate on https://ko-fi.com/coderaiser** - [ ] 💪 **I'm willing to work on this issue** From 3d52ce80f28e94d50b189c7f67bce06927692c79 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 16:06:08 +0200 Subject: [PATCH 088/327] Update FUNDING.yml --- .github/FUNDING.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 93b856e8..9fdb6d3c 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,4 +1,3 @@ github: coderaiser -patreon: coderaiser open_collective: cloudcmd ko_fi: coderaiser From e2591061af10838b69e2ec99bc85754007f94de3 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 17:38:33 +0200 Subject: [PATCH 089/327] chore: issue_template: updated --- .github/ISSUE_TEMPLATE/issue_template.md | 56 ++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index e0d6bfde..e267a2ae 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -5,6 +5,62 @@ about: Create an issue with bug report or feature request. title: "" labels: needs triage assignees: coderaiser +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this report! + - type: input + id: version + attributes: + label: **Version** (`cloudcmd -v`): + description: Version of used Cloud Commander + placeholder: version + validations: + required: true + - type: input + id: node-version + attributes: + label: **Node Version** (`node -v`): + description: Version of used Node.js + placeholder: version + validations: + required: false + - type: textarea + id: what-happened + attributes: + label: What happened? + description: Also tell us, what did you expect to happen? + placeholder: Tell us what you see! + value: "A bug happened!" + validations: + required: true + - + validations: + required: true + - type: dropdown + id: browsers + attributes: + label: What browsers are you seeing the problem on? + multiple: true + options: + - Firefox + - Chrome + - Safari + - Microsoft Edge + - type: textarea + id: changed-config + attributes: + label: Changed Config + description: Please copy and paste any relevant changed `~/.cloudcmd.json`. This will be automatically formatted into code, so no need for backticks. + render: json + - type: checkboxes + id: work-on-issue + attributes: + label: Work on this issue + options: + - label: 💪 **I'm willing to work on this issue** + required: false --------------------- - **Version** (`cloudcmd -v`): From 53acae1a631c4ddbc90547d3a2fdbaf6ea72375f Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 15:39:36 +0000 Subject: [PATCH 090/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/issue_template.md | 105 ++++++++++++----------- 1 file changed, 53 insertions(+), 52 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index e267a2ae..5a35c27c 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -6,62 +6,63 @@ title: "" labels: needs triage assignees: coderaiser body: - - type: markdown - attributes: - value: | - Thanks for taking the time to fill out this report! + +- type: markdown + attributes: + value: | + Thanks for taking the time to fill out this report! +- type: input + id: version + attributes: + label: **Version** (`cloudcmd -v`): + description: Version of used Cloud Commander + placeholder: version + validations: + required: true - type: input - id: version - attributes: - label: **Version** (`cloudcmd -v`): - description: Version of used Cloud Commander - placeholder: version - validations: - required: true - - type: input id: node-version attributes: - label: **Node Version** (`node -v`): - description: Version of used Node.js - placeholder: version + label: **Node Version** (`node -v`): + description: Version of used Node.js + placeholder: version validations: - required: false - - type: textarea - id: what-happened - attributes: - label: What happened? - description: Also tell us, what did you expect to happen? - placeholder: Tell us what you see! - value: "A bug happened!" - validations: - required: true - - - validations: - required: true - - type: dropdown - id: browsers - attributes: - label: What browsers are you seeing the problem on? - multiple: true - options: - - Firefox - - Chrome - - Safari - - Microsoft Edge - - type: textarea - id: changed-config - attributes: - label: Changed Config - description: Please copy and paste any relevant changed `~/.cloudcmd.json`. This will be automatically formatted into code, so no need for backticks. - render: json - - type: checkboxes - id: work-on-issue - attributes: - label: Work on this issue - options: - - label: 💪 **I'm willing to work on this issue** - required: false ---------------------- + required: false +- type: textarea + id: what-happened + attributes: + label: What happened? + description: Also tell us, what did you expect to happen? + placeholder: Tell us what you see! + value: "A bug happened!" + validations: + required: true +- validations: + required: true +- type: dropdown + id: browsers + attributes: + label: What browsers are you seeing the problem on? + multiple: true + options: + - Firefox + - Chrome + - Safari + - Microsoft Edge +- type: textarea + id: changed-config + attributes: + label: Changed Config + description: Please copy and paste any relevant changed `~/.cloudcmd.json`. This will be automatically formatted into code, so no need for backticks. + render: json +- type: checkboxes + id: work-on-issue + attributes: + label: Work on this issue + options: + - label: 💪 **I'm willing to work on this issue** + required: false + +*** - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: From 38666cbb8b51982489c65db5da56b84450a731c7 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 17:40:55 +0200 Subject: [PATCH 091/327] Update issue_template.md --- .github/ISSUE_TEMPLATE/issue_template.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index 5a35c27c..2acfd7de 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,5 +1,3 @@ -*** - name: Tracking issue about: Create an issue with bug report or feature request. title: "" From 2e02ba46e807608e8727c0b277ed585354b076a2 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 15:41:51 +0000 Subject: [PATCH 092/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/issue_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index 2acfd7de..6ead6d89 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -58,7 +58,7 @@ body: label: Work on this issue options: - label: 💪 **I'm willing to work on this issue** - required: false + required: false *** From b2f113bf0a7ab68f9c1224942f90fbe02b1ccb17 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 17:43:12 +0200 Subject: [PATCH 093/327] Update issue_template.md --- .github/ISSUE_TEMPLATE/issue_template.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index 6ead6d89..47959bec 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,3 +1,5 @@ +--------------------- + name: Tracking issue about: Create an issue with bug report or feature request. title: "" @@ -59,9 +61,7 @@ body: options: - label: 💪 **I'm willing to work on this issue** required: false - -*** - +--------------------- - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: - **OS** (`uname -a` on Linux): From 51a4cee6889bd1356558f86750003c0ac94d3e6a Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 17:43:54 +0200 Subject: [PATCH 094/327] Update issue_template.md --- .github/ISSUE_TEMPLATE/issue_template.md | 58 ------------------------ 1 file changed, 58 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index 47959bec..10b88bd9 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,66 +1,8 @@ ---------------------- - name: Tracking issue about: Create an issue with bug report or feature request. title: "" labels: needs triage assignees: coderaiser -body: - -- type: markdown - attributes: - value: | - Thanks for taking the time to fill out this report! -- type: input - id: version - attributes: - label: **Version** (`cloudcmd -v`): - description: Version of used Cloud Commander - placeholder: version - validations: - required: true - - type: input - id: node-version - attributes: - label: **Node Version** (`node -v`): - description: Version of used Node.js - placeholder: version - validations: - required: false -- type: textarea - id: what-happened - attributes: - label: What happened? - description: Also tell us, what did you expect to happen? - placeholder: Tell us what you see! - value: "A bug happened!" - validations: - required: true -- validations: - required: true -- type: dropdown - id: browsers - attributes: - label: What browsers are you seeing the problem on? - multiple: true - options: - - Firefox - - Chrome - - Safari - - Microsoft Edge -- type: textarea - id: changed-config - attributes: - label: Changed Config - description: Please copy and paste any relevant changed `~/.cloudcmd.json`. This will be automatically formatted into code, so no need for backticks. - render: json -- type: checkboxes - id: work-on-issue - attributes: - label: Work on this issue - options: - - label: 💪 **I'm willing to work on this issue** - required: false --------------------- - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: From 716765104c1d6062cf09a1bd502c395b9a4ad992 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 17:44:25 +0200 Subject: [PATCH 095/327] Update config.yml --- .github/ISSUE_TEMPLATE/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5f41e73a..aedb0578 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,3 @@ -blank_issues_enabled: false contact_links: - name: Stack Overflow url: https://stackoverflow.com/search?q=cloudcmd From dbd8c6ab7c8f0fa163cc29e33095a06158b9d044 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 17:45:01 +0200 Subject: [PATCH 096/327] Update issue_template.md --- .github/ISSUE_TEMPLATE/issue_template.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index 10b88bd9..e7a2f6b6 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -3,7 +3,9 @@ about: Create an issue with bug report or feature request. title: "" labels: needs triage assignees: coderaiser + --------------------- + - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: - **OS** (`uname -a` on Linux): From 34fb175d63c7e9092f31c4ac30bca0c1e0c3e02e Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 15:45:56 +0000 Subject: [PATCH 097/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/issue_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index e7a2f6b6..02a1cf86 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -4,7 +4,7 @@ title: "" labels: needs triage assignees: coderaiser ---------------------- +*** - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: From 84719365b14d7436caccd0b1144c02c827edd9b0 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 18:12:28 +0200 Subject: [PATCH 098/327] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 33 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..7cf2e8cb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: needs clarification +assignees: coderaiser + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] +- Node.js version + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From ac9a27b333eff98ec20e9b5a03ea3da029f48fbe Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 16:13:38 +0000 Subject: [PATCH 099/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/bug_report.md | 13 ++++++++----- .github/ISSUE_TEMPLATE/feature_request.md | 5 +++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 7cf2e8cb..04b3eb52 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,17 +1,19 @@ ---- +*** + name: Bug report about: Create a report to help us improve title: '' labels: needs clarification assignees: coderaiser ---- +*** **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -24,9 +26,10 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] - Node.js version **Additional context** diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bbcbbe7d..32531b98 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,11 +1,12 @@ ---- +*** + name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' ---- +*** **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] From 8ff0ee6a1a444d565ad1c60ce27ba5888300c41d Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 18:14:03 +0200 Subject: [PATCH 100/327] Update issue_template.md --- .github/ISSUE_TEMPLATE/issue_template.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index 02a1cf86..e2072f57 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,10 +1,11 @@ +--- name: Tracking issue about: Create an issue with bug report or feature request. title: "" labels: needs triage assignees: coderaiser -*** +--- - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: From 99118e65a69c49b6296b1d7bc09c124305edd86c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 4 Feb 2025 19:02:58 +0200 Subject: [PATCH 101/327] chore: lint --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++-- .github/ISSUE_TEMPLATE/feature_request.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 04b3eb52..dc08cbad 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,4 +1,4 @@ -*** +--- name: Bug report about: Create a report to help us improve @@ -6,7 +6,7 @@ title: '' labels: needs clarification assignees: coderaiser -*** +--- **Describe the bug** A clear and concise description of what the bug is. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 32531b98..549a8874 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,4 +1,4 @@ -*** +--- name: Feature request about: Suggest an idea for this project @@ -6,7 +6,7 @@ title: '' labels: '' assignees: '' -*** +--- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] From 2d21001e5518aafa72b80fe1741fbbc2c04a7180 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 19:03:58 +0200 Subject: [PATCH 102/327] Update config.yml --- .github/ISSUE_TEMPLATE/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index aedb0578..5f41e73a 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,3 +1,4 @@ +blank_issues_enabled: false contact_links: - name: Stack Overflow url: https://stackoverflow.com/search?q=cloudcmd From f1193955fb9045ca57cfb9e1158da0047c654693 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 4 Feb 2025 17:04:57 +0000 Subject: [PATCH 103/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/issue_template.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md index e2072f57..17bf5831 100644 --- a/.github/ISSUE_TEMPLATE/issue_template.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,11 +1,12 @@ ---- +*** + name: Tracking issue about: Create an issue with bug report or feature request. title: "" labels: needs triage assignees: coderaiser ---- +*** - **Version** (`cloudcmd -v`): - **Node Version** `node -v`: From b0a7fc1648f94867175d4649b01f29e8677b90d6 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 28 Mar 2025 16:24:00 +0200 Subject: [PATCH 104/327] feature: cloudcmd: putout v39.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 509170a8..e4ae67c5 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "package-json": "^10.0.0", "ponse": "^7.0.0", "pullout": "^5.0.0", - "putout": "^38.0.5", + "putout": "^39.3.0", "redzip": "^3.0.0", "rendy": "^4.1.3", "restafary": "^12.0.0", From f774d5b290087e1c24bf18badcfb544251028969 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 28 Mar 2025 16:24:36 +0200 Subject: [PATCH 105/327] feature: cloudcmd: eslint-plugin-putout v26.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e4ae67c5..58356917 100644 --- a/package.json +++ b/package.json @@ -173,7 +173,7 @@ "emitify": "^4.0.1", "eslint": "^8.0.1", "eslint-plugin-n": "^17.0.0-4", - "eslint-plugin-putout": "^24.0.0", + "eslint-plugin-putout": "^26.1.0", "extract-text-webpack-plugin": "^4.0.0-alpha.0", "gritty": "^8.0.0", "gunzip-maybe": "^1.3.1", From 43fd5ed6600e23bccd35473ca74416ed0a2025e2 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 28 Mar 2025 16:24:39 +0200 Subject: [PATCH 106/327] feature: cloudcmd: madrun v11.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 58356917..495cd5dd 100644 --- a/package.json +++ b/package.json @@ -184,7 +184,7 @@ "just-pascal-case": "^3.2.0", "limier": "^3.0.0", "load.js": "^3.0.0", - "madrun": "^10.0.0", + "madrun": "^11.0.0", "memfs": "^4.2.0", "minor": "^1.2.2", "mock-require": "^3.0.1", From 368c9bb814b8ead2c529a3aaceb00b29e1ee799a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 28 Mar 2025 16:25:13 +0200 Subject: [PATCH 107/327] feature: cloudcmd: eslint v9.23.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 495cd5dd..ba36b747 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "css-modules-require-hook": "^4.2.3", "domtokenlist-shim": "^1.2.0", "emitify": "^4.0.1", - "eslint": "^8.0.1", + "eslint": "^9.23.0", "eslint-plugin-n": "^17.0.0-4", "eslint-plugin-putout": "^26.1.0", "extract-text-webpack-plugin": "^4.0.0-alpha.0", From e7cc9b92ae0fa45c65e0b80c0312726155060aa3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 28 Mar 2025 16:25:16 +0200 Subject: [PATCH 108/327] feature: cloudcmd: redlint v4.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ba36b747..d50e7e8f 100644 --- a/package.json +++ b/package.json @@ -196,7 +196,7 @@ "philip": "^3.0.0", "place": "^1.1.4", "readjson": "^2.0.1", - "redlint": "^3.13.1", + "redlint": "^4.1.1", "request": "^2.76.0", "rimraf": "^6.0.1", "scroll-into-view-if-needed": "^3.0.4", From 08ab63d704fe829404c6275d73f41c95e09e979c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 28 Mar 2025 16:25:19 +0200 Subject: [PATCH 109/327] feature: cloudcmd: supertape v11.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d50e7e8f..9d5ff285 100644 --- a/package.json +++ b/package.json @@ -205,7 +205,7 @@ "smalltalk": "^4.0.0", "style-loader": "^2.0.0", "supermenu": "^4.0.1", - "supertape": "^10.0.0", + "supertape": "^11.0.4", "tar-stream": "^3.0.0", "unionfs": "^4.0.0", "url-loader": "^4.0.0", From e87418adde461fb8c07ae04560662242a226a9d4 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 28 Mar 2025 16:25:36 +0200 Subject: [PATCH 110/327] chore: lint --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 9d5ff285..e82b2f00 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,6 @@ "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", "@putout/cli-validate-args": "^2.0.0", - "@putout/plugin-cloudcmd": "^3.1.1", "apart": "^2.0.0", "chalk": "^5.3.0", "compression": "^1.7.4", From 51f51b54de7df656eac5f58c3261d16b3884b3be Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 28 Mar 2025 16:36:51 +0200 Subject: [PATCH 111/327] feature: cloudcmd: @putout/plugin-cloudcmd v4.0.0 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index e82b2f00..b5dc2368 100644 --- a/package.json +++ b/package.json @@ -158,6 +158,7 @@ "@cloudcmd/olark": "^3.0.2", "@cloudcmd/stub": "^4.0.1", "@putout/babel": "^3.0.0", + "@putout/plugin-cloudcmd": "^4.0.0", "@types/node-fetch": "^2.6.11", "auto-globals": "^4.0.0", "babel-loader": "^8.0.0", From f7379c0562adcbb835f2b8bcd87c8032321766e9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 29 Mar 2025 00:20:04 +0200 Subject: [PATCH 112/327] chore: lint --- client/client.js | 3 ++- client/dom/load-remote.js | 2 +- client/dom/load.js | 2 +- client/listeners/index.js | 2 +- client/modules/menu.js | 1 + client/modules/operation/index.js | 11 +++++++---- client/modules/user-menu/navigate.js | 7 +------ client/modules/user-menu/navigate.spec.js | 7 +------ 8 files changed, 15 insertions(+), 20 deletions(-) diff --git a/client/client.js b/client/client.js index f17e0b23..4d53c634 100644 --- a/client/client.js +++ b/client/client.js @@ -94,6 +94,7 @@ function CloudCmdProto(DOM) { imgPosition = 'top'; Images.show.load(imgPosition, panel); + /* загружаем содержимое каталога */ await ajaxLoad(addSlashToEnd(path), { refresh, @@ -237,7 +238,7 @@ function CloudCmdProto(DOM) { const dirPath = DOM.getCurrentDirPath(); - Listeners = CloudCmd.Listeners; + ({Listeners} = CloudCmd); Listeners.init(); const panels = getPanels(); diff --git a/client/dom/load-remote.js b/client/dom/load-remote.js index 72fb9db9..84c7e329 100644 --- a/client/dom/load-remote.js +++ b/client/dom/load-remote.js @@ -29,7 +29,7 @@ module.exports = (name, options, callback = options) => { if (isArray) { remoteTmpls = module.remote; - local = module.local; + ({local} = module); } else { remoteTmpls = [module.remote]; local = [module.local]; diff --git a/client/dom/load.js b/client/dom/load.js index 9148c1b8..03c25d73 100644 --- a/client/dom/load.js +++ b/client/dom/load.js @@ -63,7 +63,7 @@ module.exports.ajax = (params) => { if (!isArrayBuf && isObject || isArray) data = jonny.stringify(p.data); else - data = p.data; + ({data} = p); xhr.onreadystatechange = (event) => { const xhr = event.target; diff --git a/client/listeners/index.js b/client/listeners/index.js index 78342411..3bd0ce9c 100644 --- a/client/listeners/index.js +++ b/client/listeners/index.js @@ -216,7 +216,7 @@ async function onPathElementClick(panel, event) { function copyPath(el) { clipboard .writeText(el - .parentElement.title) + .parentElement.title) .then(CloudCmd.log) .catch(CloudCmd.log); } diff --git a/client/modules/menu.js b/client/modules/menu.js index 8f739164..6ab88453 100644 --- a/client/modules/menu.js +++ b/client/modules/menu.js @@ -276,6 +276,7 @@ function download(type) { const path = DOM.getCurrentPath(file); CloudCmd.log(`downloading file ${path}...`); + /* * if we send ajax request - * no need in hash so we escape # diff --git a/client/modules/operation/index.js b/client/modules/operation/index.js index 68d17a33..bf19bda8 100644 --- a/client/modules/operation/index.js +++ b/client/modules/operation/index.js @@ -343,10 +343,13 @@ async function _processFiles(options, data) { let names = []; if (data) { - from = data.from; - to = data.to; - names = data.names; - panel = Info.panel; + ({ + from, + to, + names, + } = data); + + ({panel} = Info); } else { from = Info.dirPath; to = DOM.getNotCurrentDirPath(); diff --git a/client/modules/user-menu/navigate.js b/client/modules/user-menu/navigate.js index 445d47d1..d3c89830 100644 --- a/client/modules/user-menu/navigate.js +++ b/client/modules/user-menu/navigate.js @@ -2,12 +2,7 @@ const fullstore = require('fullstore'); -const { - J, - K, - UP, - DOWN, -} = require('../../key/key.js'); +const {J, K, UP, DOWN} = require('../../key/key.js'); const store = fullstore(1); const isDigit = (a) => /^\d+$/.test(a); diff --git a/client/modules/user-menu/navigate.spec.js b/client/modules/user-menu/navigate.spec.js index abf95aab..5dbbfb81 100644 --- a/client/modules/user-menu/navigate.spec.js +++ b/client/modules/user-menu/navigate.spec.js @@ -3,12 +3,7 @@ const test = require('supertape'); const navigate = require('./navigate'); -const { - UP, - DOWN, - J, - K, -} = require('../../key/key.js'); +const {UP, DOWN, J, K} = require('../../key/key.js'); test('cloudcmd: user-menu: navigate: DOWN', (t) => { const el = { From 9f52ed795da399687a9731849030804ff5b7c8f7 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 29 Mar 2025 19:30:38 +0200 Subject: [PATCH 113/327] chore: package: postcss --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index b5dc2368..a102b349 100644 --- a/package.json +++ b/package.json @@ -195,6 +195,7 @@ "optimize-css-assets-webpack-plugin": "^5.0.0", "philip": "^3.0.0", "place": "^1.1.4", + "postcss": "^8.5.3", "readjson": "^2.0.1", "redlint": "^4.1.1", "request": "^2.76.0", From 84c6935ae43376b50f593ef49d44ec7d507ec6ac Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sat, 29 Mar 2025 17:32:46 +0000 Subject: [PATCH 114/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/release.mjs | 3 +- common/cloudfunc.js | 71 ++++++++++++++++++++-------------------- server/repl.js | 36 ++++++++++---------- server/show-config.js | 6 ++-- server/user-menu.mjs | 8 ++--- test/common/cloudfunc.js | 17 +++++----- test/rest/pack.mjs | 4 +-- 7 files changed, 73 insertions(+), 72 deletions(-) diff --git a/bin/release.mjs b/bin/release.mjs index 1c12c20e..ee55509a 100755 --- a/bin/release.mjs +++ b/bin/release.mjs @@ -19,7 +19,8 @@ await main(); async function main() { const history = '## Version history\n\n'; const link = '//github.com/coderaiser/cloudcmd/releases/tag/'; - const template = '- *{{ date }}*, ' + + const template = + '- *{{ date }}*, ' + '**[v{{ version }}]' + '(' + link + 'v{{ version }})**\n'; diff --git a/common/cloudfunc.js b/common/cloudfunc.js index c906b548..66ec044f 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -173,7 +173,6 @@ module.exports.buildFromJSON = (params) => { Path(path); fileTable += `${header}
      `; - /* Если мы не в корне */ if (path !== '/') { const dotDot = getDotDot(path); @@ -204,43 +203,43 @@ module.exports.buildFromJSON = (params) => { fileTable += files .filter(filterOutDotFiles({ - showDotFiles, - })) + showDotFiles, + })) .map(updateField) .map((file) => { - const name = encode(file.name); - const link = prefix + FS + path + name; - - const { - type, - mode, - date, - owner, - size, - } = file; - - const linkResult = rendy(templateLink, { - link, - title: name, - name, - attribute: getAttribute(file.type), - }); - - const dataName = getDataName(file.name); - const attribute = `draggable="true" ${dataName}`; - - return rendy(templateFile, { - tag: 'li', - attribute, - className: '', - type, - name: linkResult, - size, - date, - owner, - mode, - }); - }) + const name = encode(file.name); + const link = prefix + FS + path + name; + + const { + type, + mode, + date, + owner, + size, + } = file; + + const linkResult = rendy(templateLink, { + link, + title: name, + name, + attribute: getAttribute(file.type), + }); + + const dataName = getDataName(file.name); + const attribute = `draggable="true" ${dataName}`; + + return rendy(templateFile, { + tag: 'li', + attribute, + className: '', + type, + name: linkResult, + size, + date, + owner, + mode, + }); + }) .join(''); fileTable += '
    '; diff --git a/server/repl.js b/server/repl.js index 0c4d5279..c1647f04 100644 --- a/server/repl.js +++ b/server/repl.js @@ -6,22 +6,22 @@ const repl = require('node:repl'); module.exports = net .createServer((socket) => { - const {pid} = process; - const addr = socket.remoteAddress; - const port = socket.remotePort; - - const r = repl.start({ - prompt: `[${pid} ${addr}:${port}>`, - input: socket, - output: socket, - terminal: true, - useGlobal: false, - }); - - r.on('exit', () => { - socket.end(); - }); - - r.context.socket = socket; - }) + const {pid} = process; + const addr = socket.remoteAddress; + const port = socket.remotePort; + + const r = repl.start({ + prompt: `[${pid} ${addr}:${port}>`, + input: socket, + output: socket, + terminal: true, + useGlobal: false, + }); + + r.on('exit', () => { + socket.end(); + }); + + r.context.socket = socket; +}) .listen(1337); diff --git a/server/show-config.js b/server/show-config.js index 065fd7dd..78180b79 100644 --- a/server/show-config.js +++ b/server/show-config.js @@ -11,9 +11,9 @@ module.exports = (config) => { const data = Object .keys(config) .map((name) => [ - name, - config[name], - ]); + name, + config[name], + ]); if (!data.length) return ''; diff --git a/server/user-menu.mjs b/server/user-menu.mjs index ead1b3e3..cad6f9b1 100644 --- a/server/user-menu.mjs +++ b/server/user-menu.mjs @@ -80,10 +80,10 @@ async function onGET({req, res, menuName, readFile}) { function getError(error, source) { return montag` const e = Error(\`
    ${codeframe({
    -            error,
    -            source,
    -            highlightCode: false,
    -        })}
    \`); + error, + source, + highlightCode: false, + })}\`); e.code = 'frame'; diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index 185ff7b5..c8acadea 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -44,7 +44,8 @@ const data = { }], }; -let Expect = '
    ' + +let Expect = + '
    ' + '' + '' + @@ -74,13 +75,13 @@ test('cloudfunc: render', (t) => { const isNotOk = Expect .split('') .some((item, number) => { - const ret = result[number] !== item; - - if (ret) - i = number; - - return ret; - }); + const ret = result[number] !== item; + + if (ret) + i = number; + + return ret; + }); timeEnd('CloudFunc.buildFromJSON'); diff --git a/test/rest/pack.mjs b/test/rest/pack.mjs index 8dd40245..9aefcb97 100644 --- a/test/rest/pack.mjs +++ b/test/rest/pack.mjs @@ -170,7 +170,7 @@ test('cloudcmd: rest: pack: zip: put: file', async (t) => { config, }; - const name = String(Math.random()) + '.zip'; + const name = `${Math.random()}.zip`; await request.put(`/api/v1/pack`, { options, @@ -192,7 +192,7 @@ test('cloudcmd: rest: pack: zip: put: response', async (t) => { config, }; - const name = String(Math.random()) + '.zip'; + const name = `${Math.random()}.zip`; const {body} = await request.put(`/api/v1/pack`, { options, From 8450bfa611e2bc9c3cbf4c440abb3c3957c00db5 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 10 Apr 2025 17:22:21 +0300 Subject: [PATCH 115/327] feature: cloudcmd: putout v40.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a102b349..d7f7b639 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,7 @@ "package-json": "^10.0.0", "ponse": "^7.0.0", "pullout": "^5.0.0", - "putout": "^39.3.0", + "putout": "^40.0.3", "redzip": "^3.0.0", "rendy": "^4.1.3", "restafary": "^12.0.0", From 4b78d70b5c7270719aa69efc8c5cef3d0c85f167 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 10 Apr 2025 17:24:15 +0300 Subject: [PATCH 116/327] chore: cloudcmd: v18.5.2 --- ChangeLog | 12 ++++++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 414c5329..826f9ea3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2025.04.10, v18.5.2 + +feature: +- 8450bfa6 cloudcmd: putout v40.0.3 +- 51f51b54 cloudcmd: @putout/plugin-cloudcmd v4.0.0 +- 08ab63d7 cloudcmd: supertape v11.0.4 +- e7cc9b92 cloudcmd: redlint v4.1.1 +- 368c9bb8 cloudcmd: eslint v9.23.0 +- 43fd5ed6 cloudcmd: madrun v11.0.0 +- f774d5b2 cloudcmd: eslint-plugin-putout v26.1.0 +- b0a7fc16 cloudcmd: putout v39.3.0 + 2025.02.03, v18.5.1 feature: diff --git a/HELP.md b/HELP.md index f002d2d9..1e445be7 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.5.1 +# Cloud Commander v18.5.2 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1098,6 +1098,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2025.04.10*, **[v18.5.2](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.2)** - *2025.02.03*, **[v18.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.1)** - *2025.01.20*, **[v18.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.0)** - *2024.12.13*, **[v18.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.4.1)** diff --git a/README.md b/README.md index a1a4a2f4..a7e5c744 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.5.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v18.5.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index d7f7b639..799c2ca2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "18.5.1", + "version": "18.5.2", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From b26c8bba3744a72e756df76e4264a434b16dacd6 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 24 Apr 2025 17:19:31 +0300 Subject: [PATCH 117/327] feature: cloudcmd: thread-it v3.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 799c2ca2..d147cfc8 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "socket.io-client": "^4.0.1", "squad": "^3.0.0", "table": "^6.0.1", - "thread-it": "^2.0.0", + "thread-it": "^3.0.0", "try-catch": "^3.0.0", "try-to-catch": "^3.0.0", "tryrequire": "^3.0.0", From 2a97ac66fb7e570355c2efc0841aadcb5b8b3417 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 17:14:47 +0300 Subject: [PATCH 118/327] feature: cloudcmd: yargs-parser v22.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d147cfc8..8d2b91a1 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "win32": "^7.0.0", "wraptile": "^3.0.0", "writejson": "^3.0.0", - "yargs-parser": "^21.0.0" + "yargs-parser": "^22.0.0" }, "devDependencies": { "@babel/code-frame": "^7.22.5", From 8ccec23d6c9a55e04a18f43d34c0623e74deadeb Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 17:16:39 +0300 Subject: [PATCH 119/327] feature: cloudcmd: help: require -> import --- bin/cloudcmd.mjs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bin/cloudcmd.mjs b/bin/cloudcmd.mjs index e6b4c1a9..b82e887c 100755 --- a/bin/cloudcmd.mjs +++ b/bin/cloudcmd.mjs @@ -316,7 +316,11 @@ async function readConfig(name) { } async function help() { - const bin = require('../json/help.json'); + const {default: bin} = await import('../json/help.json', { + with: { + type: 'json' + } + }); const forEachKey = await simport('for-each-key'); const currify = await simport('currify'); From 99ad0c217d7fa03c3622d11a3800b0bb72a9460c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 17:16:50 +0300 Subject: [PATCH 120/327] feature: cloudcmd: rm @putout/babel --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 8d2b91a1..6e56f6d6 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,6 @@ "@cloudcmd/modal": "^3.0.0", "@cloudcmd/olark": "^3.0.2", "@cloudcmd/stub": "^4.0.1", - "@putout/babel": "^3.0.0", "@putout/plugin-cloudcmd": "^4.0.0", "@types/node-fetch": "^2.6.11", "auto-globals": "^4.0.0", From 4ab4be124bc4e0d332ede37e0ca1ab46032b358c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 18:34:59 +0300 Subject: [PATCH 121/327] feature: thread-it: get rid (#438) --- package.json | 1 - server/markdown/index.js | 4 +--- server/server.mjs | 2 -- server/user-menu.mjs | 5 +---- 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 6e56f6d6..e43f4de8 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,6 @@ "socket.io-client": "^4.0.1", "squad": "^3.0.0", "table": "^6.0.1", - "thread-it": "^3.0.0", "try-catch": "^3.0.0", "try-to-catch": "^3.0.0", "tryrequire": "^3.0.0", diff --git a/server/markdown/index.js b/server/markdown/index.js index cb6096ac..bf8fa455 100644 --- a/server/markdown/index.js +++ b/server/markdown/index.js @@ -5,14 +5,12 @@ const {callbackify} = require('node:util'); const pullout = require('pullout'); const ponse = require('ponse'); -const threadIt = require('thread-it'); const {read} = require('redzip'); const root = require('../root'); const isString = (a) => typeof a === 'string'; -const parse = threadIt(join(__dirname, 'worker')); +const parse = require('./worker'); -threadIt.init(); // warm up parse(''); diff --git a/server/server.mjs b/server/server.mjs index 9bdd1f3f..096f9f40 100644 --- a/server/server.mjs +++ b/server/server.mjs @@ -10,7 +10,6 @@ import {Server} from 'socket.io'; import tryRequire from 'tryrequire'; import wraptile from 'wraptile'; import compression from 'compression'; -import threadIt from 'thread-it'; import exit from './exit.js'; import cloudcmd from './cloudcmd.mjs'; @@ -20,7 +19,6 @@ const two = currify((f, a, b) => f(a, b)); const shutdown = wraptile(async (promises) => { console.log('closing cloudcmd...'); await Promise.all(promises); - threadIt.terminate(); process.exit(0); }); diff --git a/server/user-menu.mjs b/server/user-menu.mjs index cad6f9b1..c7d85855 100644 --- a/server/user-menu.mjs +++ b/server/user-menu.mjs @@ -5,13 +5,10 @@ import {join} from 'node:path'; import montag from 'montag'; import tryToCatch from 'try-to-catch'; import currify from 'currify'; -import threadIt from 'thread-it'; -import {codeframe} from 'putout'; +import {putout, codeframe} from 'putout'; const require = createRequire(import.meta.url); -const putout = threadIt(require.resolve('putout')); -threadIt.init(); // warm up worker cache transpile(''); From f4b0f92f05b20ecc6e393087373b84ffbaade1c1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 18:40:04 +0300 Subject: [PATCH 122/327] feature: cloudcmd: express v5.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e43f4de8..27de7048 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "edward": "^15.0.0", "es6-promisify": "^7.0.0", "execon": "^1.2.0", - "express": "^4.13.0", + "express": "^5.1.0", "files-io": "^4.0.0", "find-up": "^7.0.0", "for-each-key": "^2.0.0", From 9a4cf388d36af1052532c3ebe48d7f17b99b071b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 18:42:15 +0300 Subject: [PATCH 123/327] feature: cloudcmd: eslint-plugin-putout v27.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 27de7048..c4174c95 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "emitify": "^4.0.1", "eslint": "^9.23.0", "eslint-plugin-n": "^17.0.0-4", - "eslint-plugin-putout": "^26.1.0", + "eslint-plugin-putout": "^27.2.1", "extract-text-webpack-plugin": "^4.0.0-alpha.0", "gritty": "^8.0.0", "gunzip-maybe": "^1.3.1", From 1679b788c230786b5bcc8707bcbd962230357c1c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 19:57:34 +0300 Subject: [PATCH 124/327] feature: cloudcmd: webpackbar v7.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c4174c95..0f3505a8 100644 --- a/package.json +++ b/package.json @@ -211,7 +211,7 @@ "webpack": "^4.0.0", "webpack-cli": "^3.0.1", "webpack-merge": "^6.0.1", - "webpackbar": "^5.0.0-3" + "webpackbar": "^7.0.0" }, "engines": { "node": ">=20" From 5f0391fc44b0507bf533ce6b61abc3765ba3fb27 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 20:10:47 +0300 Subject: [PATCH 125/327] chore: lint --- .putout.json | 3 --- bin/cloudcmd.mjs | 5 +++-- client/key/vim/index.js | 3 ++- client/modules/operation/index.js | 24 ++++++++++++------------ common/base64.spec.js | 20 +++++++++++--------- server/markdown/index.js | 4 ++-- server/user-menu.mjs | 3 --- 7 files changed, 30 insertions(+), 32 deletions(-) diff --git a/.putout.json b/.putout.json index 08b4f06e..1afdcf8b 100644 --- a/.putout.json +++ b/.putout.json @@ -6,9 +6,6 @@ "app.json", "fontello.json" ], - "rules": { - "github/set-node-versions": "off" - }, "match": { "base64": { "types/convert-typeof-to-is-type": "off" diff --git a/bin/cloudcmd.mjs b/bin/cloudcmd.mjs index b82e887c..c8759719 100755 --- a/bin/cloudcmd.mjs +++ b/bin/cloudcmd.mjs @@ -318,9 +318,10 @@ async function readConfig(name) { async function help() { const {default: bin} = await import('../json/help.json', { with: { - type: 'json' - } + type: 'json', + }, }); + const forEachKey = await simport('for-each-key'); const currify = await simport('currify'); diff --git a/client/key/vim/index.js b/client/key/vim/index.js index e8b01558..6a209ea7 100644 --- a/client/key/vim/index.js +++ b/client/key/vim/index.js @@ -29,8 +29,9 @@ const getOperations = (event, deps) => { setCurrentFile, setCurrentByName, getCurrentName, + toggleSelectedFile, - Buffer = {}, + Buffer = {}, } = deps; return { diff --git a/client/modules/operation/index.js b/client/modules/operation/index.js index bf19bda8..8105e85f 100644 --- a/client/modules/operation/index.js +++ b/client/modules/operation/index.js @@ -59,19 +59,19 @@ module.exports.init = promisify((callback) => { exec.series([ DOM.loadSocket, async (callback) => { - if (config('dropbox')) - return callback(); - - const {prefix, prefixSocket} = CloudCmd; - - await loadAll(); - await initOperations(prefix, prefixSocket, callback); - }, + if (config('dropbox')) + return callback(); + + const {prefix, prefixSocket} = CloudCmd; + + await loadAll(); + await initOperations(prefix, prefixSocket, callback); + }, (callback) => { - Loaded = true; - Images.hide(); - callback(); - }, + Loaded = true; + Images.hide(); + callback(); + }, ], callback); }); diff --git a/common/base64.spec.js b/common/base64.spec.js index bc3ea2f5..cc096ee2 100644 --- a/common/base64.spec.js +++ b/common/base64.spec.js @@ -6,16 +6,16 @@ const {btoa, atob} = require('./base64'); test('btoa: browser', (t) => { const btoaOriginal = global.btoa; + const btoaStub = stub(); const str = 'hello'; - global.btoa = stub(); + global.btoa = btoaStub; btoa(str); - - t.calledWith(global.btoa, [str], 'should call global.btoa'); - t.end(); - global.btoa = btoaOriginal; + + t.calledWith(btoaStub, [str], 'should call global.btoa'); + t.end(); }); test('btoa: node', (t) => { @@ -30,16 +30,18 @@ test('btoa: node', (t) => { test('atob: browser', (t) => { const atobOriginal = global.atob; + const atobStub = stub(); + const str = 'hello'; - global.atob = stub(); + global.atob = atobStub; atob(str); - t.calledWith(global.atob, [str], 'should call global.btoa'); - t.end(); - global.atob = atobOriginal; + + t.calledWith(atobStub, [str], 'should call global.btoa'); + t.end(); }); test('atob: node', (t) => { diff --git a/server/markdown/index.js b/server/markdown/index.js index bf8fa455..639e219d 100644 --- a/server/markdown/index.js +++ b/server/markdown/index.js @@ -1,6 +1,5 @@ 'use strict'; -const {join} = require('node:path'); const {callbackify} = require('node:util'); const pullout = require('pullout'); @@ -8,8 +7,9 @@ const ponse = require('ponse'); const {read} = require('redzip'); const root = require('../root'); -const isString = (a) => typeof a === 'string'; + const parse = require('./worker'); +const isString = (a) => typeof a === 'string'; // warm up parse(''); diff --git a/server/user-menu.mjs b/server/user-menu.mjs index c7d85855..5ae51536 100644 --- a/server/user-menu.mjs +++ b/server/user-menu.mjs @@ -1,4 +1,3 @@ -import {createRequire} from 'node:module'; import {homedir} from 'node:os'; import {readFile as _readFile} from 'node:fs/promises'; import {join} from 'node:path'; @@ -7,8 +6,6 @@ import tryToCatch from 'try-to-catch'; import currify from 'currify'; import {putout, codeframe} from 'putout'; -const require = createRequire(import.meta.url); - // warm up worker cache transpile(''); From 2eb3dc669259c0bd3aa0470dadf14dc9cb66cbe9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 21:17:14 +0300 Subject: [PATCH 126/327] feature: cloudcmd: @iocmd/wait v2.1.0 --- package.json | 1 + server/user-menu.spec.mjs | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index 0f3505a8..c36f415e 100644 --- a/package.json +++ b/package.json @@ -156,6 +156,7 @@ "@cloudcmd/modal": "^3.0.0", "@cloudcmd/olark": "^3.0.2", "@cloudcmd/stub": "^4.0.1", + "@iocmd/wait": "^2.1.0", "@putout/plugin-cloudcmd": "^4.0.0", "@types/node-fetch": "^2.6.11", "auto-globals": "^4.0.0", diff --git a/server/user-menu.spec.mjs b/server/user-menu.spec.mjs index 0125bd9e..635c7746 100644 --- a/server/user-menu.spec.mjs +++ b/server/user-menu.spec.mjs @@ -3,7 +3,6 @@ import {fileURLToPath} from 'node:url'; import {readFileSync} from 'node:fs'; import {test, stub} from 'supertape'; import serveOnce from 'serve-once'; -import threadIt from 'thread-it'; import userMenu from './user-menu.mjs'; const __filename = fileURLToPath(import.meta.url); @@ -67,8 +66,6 @@ test('cloudcmd: user menu: io.cp', async (t) => { options, }); - threadIt.terminate(); - t.equal(body, fixtureCopyFix); t.end(); }); From a87e5ceaf65fb095b63ba6507bc85009a8ed9fa8 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 2 Jul 2025 21:18:44 +0300 Subject: [PATCH 127/327] chore: cloudcmd: v18.6.0 --- ChangeLog | 13 +++++++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 826f9ea3..d916b549 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2025.07.02, v18.6.0 + +feature: +- 2eb3dc66 cloudcmd: @iocmd/wait v2.1.0 +- 1679b788 cloudcmd: webpackbar v7.0.0 +- 9a4cf388 cloudcmd: eslint-plugin-putout v27.2.1 +- f4b0f92f cloudcmd: express v5.1.0 +- 4ab4be12 thread-it: get rid (#438) +- 99ad0c21 cloudcmd: rm @putout/babel +- 8ccec23d cloudcmd: help: require -> import +- 2a97ac66 cloudcmd: yargs-parser v22.0.0 +- b26c8bba cloudcmd: thread-it v3.0.0 + 2025.04.10, v18.5.2 feature: diff --git a/HELP.md b/HELP.md index 1e445be7..fe68d6c2 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.5.2 +# Cloud Commander v18.6.0 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1098,6 +1098,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2025.07.02*, **[v18.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.6.0)** - *2025.04.10*, **[v18.5.2](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.2)** - *2025.02.03*, **[v18.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.1)** - *2025.01.20*, **[v18.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.0)** diff --git a/README.md b/README.md index a7e5c744..8ef53740 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.5.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v18.6.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index c36f415e..b0930aef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "18.5.2", + "version": "18.6.0", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 2057065dbfb6306effb19bb919d9f50df233620d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 3 Jul 2025 23:20:53 +0300 Subject: [PATCH 128/327] feature: cloudcmd: @putout/eslint-flat v3.0.1 --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b0930aef..e9b4ce09 100644 --- a/package.json +++ b/package.json @@ -157,6 +157,7 @@ "@cloudcmd/olark": "^3.0.2", "@cloudcmd/stub": "^4.0.1", "@iocmd/wait": "^2.1.0", + "@putout/eslint-flat": "^3.0.1", "@putout/plugin-cloudcmd": "^4.0.0", "@types/node-fetch": "^2.6.11", "auto-globals": "^4.0.0", @@ -215,7 +216,7 @@ "webpackbar": "^7.0.0" }, "engines": { - "node": ">=20" + "node": ">=20.19" }, "license": "MIT", "publishConfig": { From 4b476a6dff7bc42fea4de68e5c296be60e6eb8d3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 3 Jul 2025 23:20:57 +0300 Subject: [PATCH 129/327] feature: cloudcmd: globals v16.3.0 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index e9b4ce09..ba5c5d4d 100644 --- a/package.json +++ b/package.json @@ -175,6 +175,7 @@ "eslint-plugin-n": "^17.0.0-4", "eslint-plugin-putout": "^27.2.1", "extract-text-webpack-plugin": "^4.0.0-alpha.0", + "globals": "^16.3.0", "gritty": "^8.0.0", "gunzip-maybe": "^1.3.1", "html-looks-like": "^1.0.2", From b77e9c91d4746bfc27beaae2cb498ab671173e0d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 3 Jul 2025 23:21:05 +0300 Subject: [PATCH 130/327] feature: cloudcmd: pipe-io v4.0.1 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index ba5c5d4d..1ef5b304 100644 --- a/package.json +++ b/package.json @@ -127,6 +127,7 @@ "onezip": "^6.0.1", "open": "^10.0.3", "package-json": "^10.0.0", + "pipe-io": "^4.0.1", "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^40.0.3", From e99d084728e9c7eebfa52752676495d912c5707f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 3 Jul 2025 23:21:44 +0300 Subject: [PATCH 131/327] feature: cloudcmd: montag v1.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1ef5b304..3bbed088 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "just-snake-case": "^3.2.0", "markdown-it": "^14.0.0", "mellow": "^3.0.0", + "montag": "^1.2.1", "nano-memoize": "^3.0.16", "nomine": "^4.0.0", "object.omit": "^3.0.0", @@ -190,7 +191,6 @@ "memfs": "^4.2.0", "minor": "^1.2.2", "mock-require": "^3.0.1", - "montag": "^1.2.1", "morgan": "^1.6.1", "multi-rename": "^2.0.0", "nodemon": "^3.0.1", From af77eeed8d33e5aaf8c466cab75da0efe98b002d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 4 Jul 2025 12:51:42 +0300 Subject: [PATCH 132/327] chore: lint --- .npmignore | 4 +- bin/release.mjs | 4 +- client/key/vim/index.js | 2 +- client/listeners/index.js | 5 +- client/modules/operation/index.js | 24 ++++---- client/modules/user-menu/navigate.js | 7 ++- client/modules/user-menu/navigate.spec.js | 7 ++- common/cloudfunc.js | 71 ++++++++++++----------- eslint.config.mjs | 42 ++++++++++++++ package.json | 1 + server/repl.js | 36 ++++++------ server/show-config.js | 6 +- server/user-menu.mjs | 8 +-- test/common/cloudfunc.js | 17 +++--- 14 files changed, 143 insertions(+), 91 deletions(-) create mode 100644 eslint.config.mjs diff --git a/.npmignore b/.npmignore index 0ecde705..eb036c9d 100644 --- a/.npmignore +++ b/.npmignore @@ -1,5 +1,5 @@ .* -*.spec.js +*.spec.* *.fixture.js* manifest.yml docker @@ -19,7 +19,7 @@ app.json bower.json manifest.yml -bin/release.js +bin/release.mjs client img/logo/cloudcmd-hq.png diff --git a/bin/release.mjs b/bin/release.mjs index ee55509a..694eb7da 100755 --- a/bin/release.mjs +++ b/bin/release.mjs @@ -19,8 +19,8 @@ await main(); async function main() { const history = '## Version history\n\n'; const link = '//github.com/coderaiser/cloudcmd/releases/tag/'; - const template = - '- *{{ date }}*, ' + + const template = '- ' + + '*{{ date }}*, ' + '**[v{{ version }}]' + '(' + link + 'v{{ version }})**\n'; diff --git a/client/key/vim/index.js b/client/key/vim/index.js index 6a209ea7..7c94f773 100644 --- a/client/key/vim/index.js +++ b/client/key/vim/index.js @@ -31,7 +31,7 @@ const getOperations = (event, deps) => { getCurrentName, toggleSelectedFile, - Buffer = {}, + Buffer = {}, } = deps; return { diff --git a/client/listeners/index.js b/client/listeners/index.js index 3bd0ce9c..8e948d67 100644 --- a/client/listeners/index.js +++ b/client/listeners/index.js @@ -215,8 +215,7 @@ async function onPathElementClick(panel, event) { function copyPath(el) { clipboard - .writeText(el - .parentElement.title) + .writeText(el.parentElement.title) .then(CloudCmd.log) .catch(CloudCmd.log); } @@ -422,7 +421,7 @@ function dragndrop() { }; /** - * In Mac OS Chrome dropEffect = 'none' + * In macOS Chrome dropEffect = 'none' * so drop do not firing up when try * to upload file from download bar */ diff --git a/client/modules/operation/index.js b/client/modules/operation/index.js index 8105e85f..bf19bda8 100644 --- a/client/modules/operation/index.js +++ b/client/modules/operation/index.js @@ -59,19 +59,19 @@ module.exports.init = promisify((callback) => { exec.series([ DOM.loadSocket, async (callback) => { - if (config('dropbox')) - return callback(); - - const {prefix, prefixSocket} = CloudCmd; - - await loadAll(); - await initOperations(prefix, prefixSocket, callback); - }, + if (config('dropbox')) + return callback(); + + const {prefix, prefixSocket} = CloudCmd; + + await loadAll(); + await initOperations(prefix, prefixSocket, callback); + }, (callback) => { - Loaded = true; - Images.hide(); - callback(); - }, + Loaded = true; + Images.hide(); + callback(); + }, ], callback); }); diff --git a/client/modules/user-menu/navigate.js b/client/modules/user-menu/navigate.js index d3c89830..445d47d1 100644 --- a/client/modules/user-menu/navigate.js +++ b/client/modules/user-menu/navigate.js @@ -2,7 +2,12 @@ const fullstore = require('fullstore'); -const {J, K, UP, DOWN} = require('../../key/key.js'); +const { + J, + K, + UP, + DOWN, +} = require('../../key/key.js'); const store = fullstore(1); const isDigit = (a) => /^\d+$/.test(a); diff --git a/client/modules/user-menu/navigate.spec.js b/client/modules/user-menu/navigate.spec.js index 5dbbfb81..abf95aab 100644 --- a/client/modules/user-menu/navigate.spec.js +++ b/client/modules/user-menu/navigate.spec.js @@ -3,7 +3,12 @@ const test = require('supertape'); const navigate = require('./navigate'); -const {UP, DOWN, J, K} = require('../../key/key.js'); +const { + UP, + DOWN, + J, + K, +} = require('../../key/key.js'); test('cloudcmd: user-menu: navigate: DOWN', (t) => { const el = { diff --git a/common/cloudfunc.js b/common/cloudfunc.js index 66ec044f..c906b548 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -173,6 +173,7 @@ module.exports.buildFromJSON = (params) => { Path(path); fileTable += `${header}
      `; + /* Если мы не в корне */ if (path !== '/') { const dotDot = getDotDot(path); @@ -203,43 +204,43 @@ module.exports.buildFromJSON = (params) => { fileTable += files .filter(filterOutDotFiles({ - showDotFiles, - })) + showDotFiles, + })) .map(updateField) .map((file) => { - const name = encode(file.name); - const link = prefix + FS + path + name; - - const { - type, - mode, - date, - owner, - size, - } = file; - - const linkResult = rendy(templateLink, { - link, - title: name, - name, - attribute: getAttribute(file.type), - }); - - const dataName = getDataName(file.name); - const attribute = `draggable="true" ${dataName}`; - - return rendy(templateFile, { - tag: 'li', - attribute, - className: '', - type, - name: linkResult, - size, - date, - owner, - mode, - }); - }) + const name = encode(file.name); + const link = prefix + FS + path + name; + + const { + type, + mode, + date, + owner, + size, + } = file; + + const linkResult = rendy(templateLink, { + link, + title: name, + name, + attribute: getAttribute(file.type), + }); + + const dataName = getDataName(file.name); + const attribute = `draggable="true" ${dataName}`; + + return rendy(templateFile, { + tag: 'li', + attribute, + className: '', + type, + name: linkResult, + size, + date, + owner, + mode, + }); + }) .join(''); fileTable += '
    '; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..b7808852 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,42 @@ +import {safeAlign} from 'eslint-plugin-putout'; +import {defineConfig} from 'eslint/config'; +import n from 'eslint-plugin-n'; +import globals from 'globals'; +import {matchToFlat} from '@putout/eslint-flat'; + +export const match = { + 'bin/release.mjs': { + 'no-console': 'off', + 'n/hashbang': 'off', + }, + 'client/dom/index.js': { + 'no-multi-spaces': 'off', + }, + 'client/**/*.js': { + 'n/no-extraneous-require': 'off', + 'n/no-unsupported-features/node-builtins': 'off', + }, + 'bin/cloudcmd.js': { + 'no-console': 'off', + }, +}; +export default defineConfig([ + safeAlign, { + ignores: ['**/fixture'], + rules: { + 'key-spacing': 'off', + 'n/prefer-node-protocol': 'error', + }, + plugins: { + n, + }, + }, { + files: ['{client,common,static}/**/*.js'], + languageOptions: { + globals: { + ...globals.browser, + }, + }, + }, + ...matchToFlat(match), +]); diff --git a/package.json b/package.json index 3bbed088..7ee17729 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "just-snake-case": "^3.2.0", "markdown-it": "^14.0.0", "mellow": "^3.0.0", + "mime-types": "^3.0.1", "montag": "^1.2.1", "nano-memoize": "^3.0.16", "nomine": "^4.0.0", diff --git a/server/repl.js b/server/repl.js index c1647f04..0c4d5279 100644 --- a/server/repl.js +++ b/server/repl.js @@ -6,22 +6,22 @@ const repl = require('node:repl'); module.exports = net .createServer((socket) => { - const {pid} = process; - const addr = socket.remoteAddress; - const port = socket.remotePort; - - const r = repl.start({ - prompt: `[${pid} ${addr}:${port}>`, - input: socket, - output: socket, - terminal: true, - useGlobal: false, - }); - - r.on('exit', () => { - socket.end(); - }); - - r.context.socket = socket; -}) + const {pid} = process; + const addr = socket.remoteAddress; + const port = socket.remotePort; + + const r = repl.start({ + prompt: `[${pid} ${addr}:${port}>`, + input: socket, + output: socket, + terminal: true, + useGlobal: false, + }); + + r.on('exit', () => { + socket.end(); + }); + + r.context.socket = socket; + }) .listen(1337); diff --git a/server/show-config.js b/server/show-config.js index 78180b79..065fd7dd 100644 --- a/server/show-config.js +++ b/server/show-config.js @@ -11,9 +11,9 @@ module.exports = (config) => { const data = Object .keys(config) .map((name) => [ - name, - config[name], - ]); + name, + config[name], + ]); if (!data.length) return ''; diff --git a/server/user-menu.mjs b/server/user-menu.mjs index 5ae51536..1100e1f3 100644 --- a/server/user-menu.mjs +++ b/server/user-menu.mjs @@ -74,10 +74,10 @@ async function onGET({req, res, menuName, readFile}) { function getError(error, source) { return montag` const e = Error(\`
    ${codeframe({
    -        error,
    -        source,
    -        highlightCode: false,
    -    })}
    \`); + error, + source, + highlightCode: false, + })}\`); e.code = 'frame'; diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index c8acadea..185ff7b5 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -44,8 +44,7 @@ const data = { }], }; -let Expect = - '
    ' + +let Expect = '
    ' + '' + '' + @@ -75,13 +74,13 @@ test('cloudfunc: render', (t) => { const isNotOk = Expect .split('') .some((item, number) => { - const ret = result[number] !== item; - - if (ret) - i = number; - - return ret; - }); + const ret = result[number] !== item; + + if (ret) + i = number; + + return ret; + }); timeEnd('CloudFunc.buildFromJSON'); From 0d61a972fbbdef6c95b4c3b8e5f7374d57ec4b13 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 4 Jul 2025 13:32:47 +0300 Subject: [PATCH 133/327] chore: lint --- .npmignore | 2 +- eslint.config.mjs | 2 +- package.json | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.npmignore b/.npmignore index eb036c9d..08137773 100644 --- a/.npmignore +++ b/.npmignore @@ -1,5 +1,6 @@ .* *.spec.* +*.config.* *.fixture.js* manifest.yml docker @@ -13,7 +14,6 @@ html yarn-error.log yarn.lock now.json -cssnano.config.js app.json bower.json diff --git a/eslint.config.mjs b/eslint.config.mjs index b7808852..d445c4a9 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -12,7 +12,7 @@ export const match = { 'client/dom/index.js': { 'no-multi-spaces': 'off', }, - 'client/**/*.js': { + '{client,static}/**/*.js': { 'n/no-extraneous-require': 'off', 'n/no-unsupported-features/node-builtins': 'off', }, diff --git a/package.json b/package.json index 7ee17729..fc54a917 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ }, "subdomain": "cloudcmd", "dependencies": { - "@babel/core": "^7.22.9", + "@babel/core": "^8.0.0-beta.1", "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", "@cloudcmd/fileop": "^8.0.0", @@ -172,6 +172,7 @@ "codegen.macro": "^4.0.0", "css-loader": "^3.0.0", "css-modules-require-hook": "^4.2.3", + "cssnano-preset-default": "^7.0.7", "domtokenlist-shim": "^1.2.0", "emitify": "^4.0.1", "eslint": "^9.23.0", From baaf47e62f3d49079fe86fea11bbb1a5df0f7117 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Fri, 4 Jul 2025 10:34:29 +0000 Subject: [PATCH 134/327] =?UTF-8?q?chore:=20cloudcmd:=20actions:=20lint=20?= =?UTF-8?q?=E2=98=98=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/dom/current-file.js | 3 +-- client/modules/edit-file.js | 9 +++------ client/modules/edit-names-vim.js | 3 +-- client/modules/edit-names.js | 3 +-- client/modules/view/index.js | 3 +-- 5 files changed, 7 insertions(+), 14 deletions(-) diff --git a/client/dom/current-file.js b/client/dom/current-file.js index 3dd831c4..1150de2a 100644 --- a/client/dom/current-file.js +++ b/client/dom/current-file.js @@ -305,8 +305,7 @@ module.exports.isCurrentIsDir = (currentFile) => { module.exports.getCurrentType = (currentFile) => { const current = currentFile || DOM.getCurrentFile(); const el = DOM.getByDataName('js-type', current); - const type = el - .className + const type = el.className .split(' ') .pop(); diff --git a/client/modules/edit-file.js b/client/modules/edit-file.js index 5551a155..f631351a 100644 --- a/client/modules/edit-file.js +++ b/client/modules/edit-file.js @@ -61,8 +61,7 @@ module.exports.show = async (options) => { Images.show.load(); - CloudCmd - .Edit + CloudCmd.Edit .getEditor() .setOption('keyMap', 'default'); @@ -78,8 +77,7 @@ module.exports.show = async (options) => { setMsgChanged(name); - CloudCmd - .Edit + CloudCmd.Edit .getEditor() .setValueFirst(path, data) .setModeForPath(name) @@ -131,8 +129,7 @@ function setMenu(event) { }, afterClick: () => { - CloudCmd - .Edit + CloudCmd.Edit .getEditor() .focus(); }, diff --git a/client/modules/edit-names-vim.js b/client/modules/edit-names-vim.js index 540259e5..266dc9dc 100644 --- a/client/modules/edit-names-vim.js +++ b/client/modules/edit-names-vim.js @@ -21,8 +21,7 @@ module.exports.init = async () => { module.exports.show = () => { Events.addKey(listener); - CloudCmd - .EditNames + CloudCmd.EditNames .show(ConfigView) .getEditor() .setKeyMap('vim'); diff --git a/client/modules/edit-names.js b/client/modules/edit-names.js index c0b9ae84..c2eaac12 100644 --- a/client/modules/edit-names.js +++ b/client/modules/edit-names.js @@ -44,8 +44,7 @@ module.exports.show = (options) => { DOM.Events.addKey(keyListener); - CloudCmd - .Edit + CloudCmd.Edit .getEditor() .setValueFirst('edit-names', names) .setMode() diff --git a/client/modules/view/index.js b/client/modules/view/index.js index 17a3b1fa..e78d507b 100644 --- a/client/modules/view/index.js +++ b/client/modules/view/index.js @@ -263,8 +263,7 @@ function viewImage(path, prefixURL) { title: encode(basename(path)), }); - const names = Info - .files + const names = Info.files .map(DOM.getCurrentPath) .filter(isSupportedImage); From 9eafa189a801765d5e10cbd84aa4ab67b2ac7413 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 4 Jul 2025 13:33:37 +0300 Subject: [PATCH 135/327] feature: cloudcmd: http-auth v4.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fc54a917..ef209655 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "for-each-key": "^2.0.0", "format-io": "^2.0.0", "fullstore": "^3.0.0", - "http-auth": "4.1.2 || > 4.1.3", + "http-auth": "^4.2.1", "inly": "^5.0.0", "jaguar": "^6.0.0", "jju": "^1.3.0", From a54caa1d7cdb2b6d51ea979170614ef66a2f0c6c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 4 Jul 2025 13:41:12 +0300 Subject: [PATCH 136/327] chore: lint --- .putout.json | 3 ++- eslint.config.mjs | 3 +++ package.json | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.putout.json b/.putout.json index 1afdcf8b..239eb08d 100644 --- a/.putout.json +++ b/.putout.json @@ -4,7 +4,8 @@ "html", "fixture*", "app.json", - "fontello.json" + "fontello.json", + "*.md" ], "match": { "base64": { diff --git a/eslint.config.mjs b/eslint.config.mjs index d445c4a9..ad22cf4a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -19,6 +19,9 @@ export const match = { 'bin/cloudcmd.js': { 'no-console': 'off', }, + 'cssnano.config.js': { + 'n/no-extraneous-require': 'off', + }, }; export default defineConfig([ safeAlign, { diff --git a/package.json b/package.json index ef209655..631104b7 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,6 @@ }, "subdomain": "cloudcmd", "dependencies": { - "@babel/core": "^8.0.0-beta.1", "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", "@cloudcmd/fileop": "^8.0.0", @@ -152,6 +151,7 @@ "yargs-parser": "^22.0.0" }, "devDependencies": { + "@babel/core": "^7.22.5", "@babel/code-frame": "^7.22.5", "@babel/preset-env": "^7.0.0", "@cloudcmd/clipboard": "^2.0.0", @@ -172,7 +172,6 @@ "codegen.macro": "^4.0.0", "css-loader": "^3.0.0", "css-modules-require-hook": "^4.2.3", - "cssnano-preset-default": "^7.0.7", "domtokenlist-shim": "^1.2.0", "emitify": "^4.0.1", "eslint": "^9.23.0", From ef423308487cf4ced7fd06d7b4d04378a0868055 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 4 Jul 2025 13:41:56 +0300 Subject: [PATCH 137/327] chore: cloudcmd: v18.6.1 --- ChangeLog | 9 +++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index d916b549..f92a26ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2025.07.04, v18.6.1 + +feature: +- 9eafa189 cloudcmd: http-auth v4.2.1 +- e99d0847 cloudcmd: montag v1.2.1 +- b77e9c91 cloudcmd: pipe-io v4.0.1 +- 4b476a6d cloudcmd: globals v16.3.0 +- 2057065d cloudcmd: @putout/eslint-flat v3.0.1 + 2025.07.02, v18.6.0 feature: diff --git a/HELP.md b/HELP.md index fe68d6c2..7116cc2b 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.6.0 +# Cloud Commander v18.6.1 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1098,6 +1098,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2025.07.04*, **[v18.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.6.1)** - *2025.07.02*, **[v18.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.6.0)** - *2025.04.10*, **[v18.5.2](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.2)** - *2025.02.03*, **[v18.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.5.1)** diff --git a/README.md b/README.md index 8ef53740..7c46ac5c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v18.6.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v18.6.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 631104b7..737665b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "18.6.0", + "version": "18.6.1", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From ddc94adbf135de8988513a4dd327ad53971f6ffb Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 4 Jul 2025 14:23:05 +0300 Subject: [PATCH 138/327] feature: cloudcmd: eslint-plugin-putout v28.0.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 737665b7..1d69fc33 100644 --- a/package.json +++ b/package.json @@ -151,8 +151,8 @@ "yargs-parser": "^22.0.0" }, "devDependencies": { - "@babel/core": "^7.22.5", "@babel/code-frame": "^7.22.5", + "@babel/core": "^7.22.5", "@babel/preset-env": "^7.0.0", "@cloudcmd/clipboard": "^2.0.0", "@cloudcmd/create-element": "^2.0.0", @@ -176,7 +176,7 @@ "emitify": "^4.0.1", "eslint": "^9.23.0", "eslint-plugin-n": "^17.0.0-4", - "eslint-plugin-putout": "^27.2.1", + "eslint-plugin-putout": "^28.0.0", "extract-text-webpack-plugin": "^4.0.0-alpha.0", "globals": "^16.3.0", "gritty": "^8.0.0", From c93803190bd3afe38991a424b5399d81847da74f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 3 Jul 2025 23:05:16 +0300 Subject: [PATCH 139/327] feature: webpack 5 --- .madrun.mjs | 2 + .webpack/cp.mjs | 17 ++++++++ .webpack/css.js | 74 +++++++++------------------------- .webpack/js.js | 59 +++++++++++++++++++++++---- client/client.js | 7 ---- client/cloudcmd.js | 2 +- client/css.js | 8 ---- client/modules/config/index.js | 4 +- css/main.css | 2 +- html/index.html | 2 +- package.json | 4 +- server/columns.mjs | 2 +- server/theme.mjs | 6 ++- 13 files changed, 99 insertions(+), 90 deletions(-) create mode 100644 .webpack/cp.mjs delete mode 100644 client/css.js diff --git a/.madrun.mjs b/.madrun.mjs index 0cc7a5ec..391eb946 100644 --- a/.madrun.mjs +++ b/.madrun.mjs @@ -16,6 +16,7 @@ const is20 = process.version.startsWith('v2'); // https://stackoverflow.com/a/69746937/4536327 const buildEnv = (is17 || is20) && { NODE_OPTIONS: '--openssl-legacy-provider', + NODE_ENV: 'production', }; export default { @@ -56,6 +57,7 @@ export default { 'watch:test:server': async () => `nodemon -w client -w test/client -x ${await run('test:server')}`, 'watch:coverage': async () => [testEnv, `nodemon -w server -w test -w common -x ${await cutEnv('coverage')}`], 'build': async () => run('6to5:*'), + 'postbuild': () => 'node .webpack/cp.mjs', 'build:dev': async () => run('build:client:dev'), 'build:client': () => run('6to5:client'), 'build:client:dev': () => run('6to5:client:dev'), diff --git a/.webpack/cp.mjs b/.webpack/cp.mjs new file mode 100644 index 00000000..1dacb044 --- /dev/null +++ b/.webpack/cp.mjs @@ -0,0 +1,17 @@ +import {cpSync} from 'node:fs'; + +cpSync('./css/columns', './dist-dev/columns', { + recursive: true, +}); + +cpSync('./css/themes', './dist-dev/themes', { + recursive: true, +}); + +cpSync('./css/columns', './dist/columns', { + recursive: true, +}); + +cpSync('./css/themes', './dist/themes', { + recursive: true, +}); diff --git a/.webpack/css.js b/.webpack/css.js index e1d6552d..7b4486e1 100644 --- a/.webpack/css.js +++ b/.webpack/css.js @@ -1,77 +1,39 @@ 'use strict'; -const {env} = require('node:process'); -const fs = require('node:fs'); -const { - basename, - extname, - join, -} = require('node:path'); +const {env} = require('node:process') -const ExtractTextPlugin = require('extract-text-webpack-plugin'); const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const isDev = env.NODE_ENV === 'development'; -const extractCSS = (a) => new ExtractTextPlugin(`${a}.css`); -const extractMain = extractCSS('[name]'); - -const cssNames = [ - 'nojs', - 'view', - 'config', - 'terminal', - 'user-menu', - ...getCSSList('columns'), - ...getCSSList('themes'), -]; - -const cssPlugins = cssNames.map(extractCSS); const clean = (a) => a.filter(Boolean); const plugins = clean([ - ...cssPlugins, - extractMain, + new MiniCssExtractPlugin({ + filename: '[name].css', + }), !isDev && new OptimizeCssAssetsPlugin(), ]); const rules = [{ - test: /\.css$/, - exclude: /css\/(nojs|view|config|terminal|user-menu|columns.*|themes.*)\.css/, - use: extractMain.extract(['css-loader']), -}, ...cssPlugins.map(extract), { - test: /\.(png|gif|svg|woff|woff2|eot|ttf)$/, - use: { - loader: 'url-loader', + test: /\.css$/i, + use: [MiniCssExtractPlugin.loader, { + loader: "css-loader", options: { - limit: 100_000, + url: true, }, - }, -}]; + }], + }, { + test: /\.(png|gif|svg|woff|woff2|eot|ttf)$/, + type: 'asset/inline', +}] + module.exports = { plugins, - module: { - rules, - }, + module: { + rules, + }, }; -function getCSSList(dir) { - const base = (a) => basename(a, extname(a)); - const addDir = (name) => `${dir}/${name}`; - const rootDir = join(__dirname, '..'); - - return fs - .readdirSync(`${rootDir}/css/${dir}`) - .map(base) - .map(addDir); -} - -function extract(extractPlugin) { - const {filename} = extractPlugin; - - return { - test: RegExp(`css/${filename}`), - use: extractPlugin.extract(['css-loader']), - }; -} diff --git a/.webpack/js.js b/.webpack/js.js index d41f9941..1efe48b1 100644 --- a/.webpack/js.js +++ b/.webpack/js.js @@ -7,13 +7,17 @@ const { } = require('node:path'); const {env} = require('node:process'); -const {EnvironmentPlugin} = require('webpack'); +const { + EnvironmentPlugin, + NormalModuleReplacementPlugin, +} = require('webpack'); const WebpackBar = require('webpackbar'); -const ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin'); - const modules = './modules'; const dirModules = './client/modules'; +const dirCss = './css'; +const dirThemes = `${dirCss}/themes`; +const dirColumns = `${dirCss}/columns`; const dir = './client'; const {NODE_ENV} = env; const isDev = NODE_ENV === 'development'; @@ -46,19 +50,43 @@ const rules = clean([ ]); const plugins = [ + new NormalModuleReplacementPlugin(/^node:/, (resource) => { + resource.request = resource.request.replace(/^node:/, ''); + }), new EnvironmentPlugin({ NODE_ENV, }), - new ServiceWorkerWebpackPlugin({ - entry: join(__dirname, '..', 'client', 'sw', 'sw.js'), - excludes: ['*'], - }), new WebpackBar(), ]; const splitChunks = { - name: 'cloudcmd.common', chunks: 'all', + cacheGroups: { + abcCommon: { + name: 'cloudcmd.common', + chunks: (chunk) => { + const lazyChunks = [ + 'nojs', + 'view', + 'edit', + 'terminal', + 'config', + 'user-menu', + 'help', + 'themes/dark', + 'themes/light', + 'columns/name-size', + 'columns/name-size-date', + ]; + + return !lazyChunks.includes(chunk.name); + }, + minChunks: 1, + enforce: true, + priority: -1, + reuseExistingChunk: true, + }, + }, }; module.exports = { @@ -68,12 +96,27 @@ module.exports = { 'node:process': 'process', 'node:path': 'path', }, + fallback: { + 'path': require.resolve('path-browserify'), + 'process': require.resolve('process/browser'), + }, }, devtool, optimization: { splitChunks, }, entry: { + 'themes/dark': `${dirThemes}/dark.css`, + 'themes/light': `${dirThemes}/light.css`, + 'columns/name-size': `${dirColumns}/name-size.css`, + 'columns/name-size-date': `${dirColumns}/name-size-date.css`, + 'nojs': `${dirCss}/nojs.css`, + help: `${dirCss}/help.css`, + view: `${dirCss}/view.css`, + config: `${dirCss}/config.css`, + terminal: `${dirCss}/terminal.css`, + 'user-menu': `${dirCss}/user-menu.css`, + sw: `${dir}/sw/sw.js`, cloudcmd: `${dir}/cloudcmd.js`, [`${modules}/edit`]: `${dirModules}/edit.js`, [`${modules}/edit-file`]: `${dirModules}/edit-file.js`, diff --git a/client/client.js b/client/client.js index 4d53c634..ee164763 100644 --- a/client/client.js +++ b/client/client.js @@ -138,17 +138,10 @@ function CloudCmdProto(DOM) { await initModules(); await baseInit(); - await loadStyle(); CloudCmd.route(location.hash); }; - async function loadStyle() { - const {prefix} = CloudCmd; - const name = `${prefix}/dist/cloudcmd.common.css`; - - await load.css(name); - } this.route = (path) => { const query = path.split('/'); diff --git a/client/cloudcmd.js b/client/cloudcmd.js index 47019e55..9703c6b6 100644 --- a/client/cloudcmd.js +++ b/client/cloudcmd.js @@ -1,7 +1,7 @@ 'use strict'; const process = require('node:process'); -require('./css'); +require('../css/main.css'); const wraptile = require('wraptile'); const load = require('load.js'); diff --git a/client/css.js b/client/css.js deleted file mode 100644 index e404bf94..00000000 --- a/client/css.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -require('../css/main.css'); -require('../css/nojs.css'); -require('../css/columns/name-size-date.css'); -require('../css/columns/name-size.css'); -require('../css/themes/light.css'); -require('../css/themes/dark.css'); diff --git a/client/modules/config/index.js b/client/modules/config/index.js index 0ec5b100..f8f3e4f3 100644 --- a/client/modules/config/index.js +++ b/client/modules/config/index.js @@ -52,12 +52,12 @@ module.exports.init = async () => { showLoad(); - const {prefix} = CloudCmd; + const {DIR_DIST} = CloudCmd; [Template] = await Promise.all([ Files.get('config-tmpl'), loadSocket(), - loadCSS(`${prefix}/dist/config.css`), + loadCSS(`${DIR_DIST}/config.css`), CloudCmd.View(), ]); diff --git a/css/main.css b/css/main.css index b30c0ed3..6b901a8e 100644 --- a/css/main.css +++ b/css/main.css @@ -1,5 +1,5 @@ -@import url(./urls.css); @import url(./reset.css); +@import url(./urls.css); @import url(./style.css); @import url(./icons.css); @import url(./help.css); diff --git a/html/index.html b/html/index.html index 0c374b9c..4c4f3ebf 100644 --- a/html/index.html +++ b/html/index.html @@ -8,7 +8,7 @@ - +
  • +
  • + +
  • From c963ffefeec0d87635d5f20d147530b02bea7c37 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 14 Sep 2025 22:10:54 +0300 Subject: [PATCH 215/327] chore: cloudcmd: v19.0.1 --- ChangeLog | 8 ++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1ceaa937..11c4b5b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2025.09.14, v19.0.1 + +fix: +- fc6304a1 tmpl: config: aleman, supermenu + +feature: +- a05ecdb4 cloudcmd: aleman v1.10.0 + 2025.09.14, v19.0.0 feature: diff --git a/HELP.md b/HELP.md index 3ea1adcc..4ab8fc6d 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.0.0 +# Cloud Commander v19.0.1 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1111,6 +1111,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2025.09.14*, **[v19.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.1)** - *2025.09.14*, **[v19.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.0)** - *2025.09.14*, **[v18.8.11](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.11)** - *2025.09.14*, **[v18.8.10](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.10)** diff --git a/README.md b/README.md index 406eec50..bf5cfd4b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.0.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.0.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index 87e7aae4..835266f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.0.0", + "version": "19.0.1", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 511347d3ef9803e05ef422b503af0fb0ac35fe6a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 14 Sep 2025 22:22:04 +0300 Subject: [PATCH 216/327] feature: cloudcmd: aleman v1.11.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 835266f5..b3d66bcb 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", "@putout/cli-validate-args": "^2.0.0", - "aleman": "^1.10.0", + "aleman": "^1.11.0", "apart": "^2.0.0", "chalk": "^5.3.0", "compression": "^1.7.4", From 1537fa73fc6d038aa6e24ac2017c91f331d7dbc9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 14 Sep 2025 22:22:41 +0300 Subject: [PATCH 217/327] chore: cloudcmd: v19.0.2 --- ChangeLog | 5 +++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 11c4b5b9..f7d41318 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2025.09.14, v19.0.2 + +feature: +- 511347d3 cloudcmd: aleman v1.11.0 + 2025.09.14, v19.0.1 fix: diff --git a/HELP.md b/HELP.md index 4ab8fc6d..392387e6 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.0.1 +# Cloud Commander v19.0.2 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1111,6 +1111,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2025.09.14*, **[v19.0.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.2)** - *2025.09.14*, **[v19.0.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.1)** - *2025.09.14*, **[v19.0.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.0.0)** - *2025.09.14*, **[v18.8.11](//github.com/coderaiser/cloudcmd/releases/tag/v18.8.11)** diff --git a/README.md b/README.md index bf5cfd4b..4873d9c3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.0.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.0.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] diff --git a/package.json b/package.json index b3d66bcb..0e15731c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.0.1", + "version": "19.0.2", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From c5aed16f630d48cac71517802da7e89842b2ba35 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 15 Sep 2025 17:48:40 +0300 Subject: [PATCH 218/327] feature: cloudcmd: aleman v1.12.2 --- html/index.html | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/html/index.html b/html/index.html index b2a735cb..439d4634 100644 --- a/html/index.html +++ b/html/index.html @@ -45,7 +45,7 @@