From 2a0feac7e03055826bcfbd624b09c810f68c7877 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 30 Jan 2026 21:01:09 +0200 Subject: [PATCH 001/390] feature: cloudcmd: @cloudcmd/modal v4.0.0 --- .madrun.mjs | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.madrun.mjs b/.madrun.mjs index 733499f3..af6d06d2 100644 --- a/.madrun.mjs +++ b/.madrun.mjs @@ -3,6 +3,7 @@ import {run, cutEnv} from 'madrun'; const testEnv = { SUPERTAPE_TIMEOUT: 7000, + NODE_OPTIONS: '"--import supertape/css"', }; const is17 = /^v1[789]/.test(process.version); diff --git a/package.json b/package.json index b16867a1..d933ddf0 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "@babel/preset-env": "^7.0.0", "@cloudcmd/clipboard": "^2.0.0", "@cloudcmd/create-element": "^2.0.0", - "@cloudcmd/modal": "^3.0.0", + "@cloudcmd/modal": "^4.0.0", "@cloudcmd/olark": "^3.0.2", "@cloudcmd/stub": "^5.0.0", "@iocmd/wait": "^2.1.0", From 5e742c5b82efe82cec82cefb45bca5148106e13a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 30 Jan 2026 21:04:48 +0200 Subject: [PATCH 002/390] chore: cloudcmd: v19.1.19 --- 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 e87bb209..61955793 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.01.30, v19.1.19 + +feature: +- 2a0feac7 cloudcmd: @cloudcmd/modal v4.0.0 + 2026.01.30, v19.1.18 feature: diff --git a/HELP.md b/HELP.md index 0831dcb6..d5aeb73b 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.1.18 +# Cloud Commander v19.1.19 ### [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 +- *2026.01.30*, **[v19.1.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.19)** - *2026.01.30*, **[v19.1.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.18)** - *2026.01.29*, **[v19.1.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.17)** - *2026.01.28*, **[v19.1.16](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.16)** diff --git a/README.md b/README.md index 5d91496b..151fdcab 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.1.18 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.1.19 [![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 d933ddf0..9509f071 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.1.18", + "version": "19.1.19", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From c0988590a7cb53534a14a6e9ad6da8d05fd0398b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 30 Jan 2026 21:43:39 +0200 Subject: [PATCH 003/390] chore: lint --- .madrun.mjs | 13 +++++++------ client/dom/events/event-store.spec.js | 2 +- client/dom/io/send-request.spec.js | 2 +- client/modules/view/index.spec.js | 4 ++-- common/datetime.spec.js | 2 +- common/entity.spec.js | 2 +- common/try-to-promise-all.spec.js | 2 +- rules/split-autoglobals-with-tape.mjs | 8 ++++++++ server/env.spec.js | 2 +- server/prefixer.spec.js | 2 +- server/rest/index.spec.js | 2 +- static/user-menu.spec.js | 7 +++---- test/common/cloudfunc.js | 2 +- test/server/env.js | 2 +- test/server/show-config.js | 2 +- 15 files changed, 31 insertions(+), 23 deletions(-) create mode 100644 rules/split-autoglobals-with-tape.mjs diff --git a/.madrun.mjs b/.madrun.mjs index af6d06d2..ade83fa8 100644 --- a/.madrun.mjs +++ b/.madrun.mjs @@ -1,10 +1,11 @@ import process from 'node:process'; import {run, cutEnv} from 'madrun'; +import {defineEnv} from 'supertape/env'; -const testEnv = { - SUPERTAPE_TIMEOUT: 7000, - NODE_OPTIONS: '"--import supertape/css"', -}; +const testEnv = defineEnv({ + timeout: 7000, + css: true, +}); const is17 = /^v1[789]/.test(process.version); const is20 = process.version.startsWith('v2'); @@ -27,12 +28,12 @@ export default { 'build:start': () => run(['build:client', 'start']), 'build:start:dev': () => run(['build:client:dev', 'start:dev']), 'lint:all': () => run('lint:progress'), - 'lint': () => 'redlint scan; putout .', + 'lint': () => 'redlint scan; putout . --rulesdir rules', 'lint:progress': () => run('lint', '-f progress'), 'watch:lint': () => 'nodemon -w client -w server -w test -w common -w .webpack -x "putout -s"', 'fresh:lint': () => run('lint', '--fresh'), 'lint:fresh': () => run('lint', '--fresh'), - 'fix:lint': async () => `putout --fix . && redlint fix`, + 'fix:lint': async () => `putout --rulesdir rules --fix . && redlint fix`, 'lint:stream': () => run('lint', '-f stream'), 'test': () => [testEnv, `tape 'test/**/*.{js,mjs}' '{client,static,common,server}/**/*.spec.{js,mjs}' -f fail`], 'test:client': () => `tape 'test/client/**/*.js'`, diff --git a/client/dom/events/event-store.spec.js b/client/dom/events/event-store.spec.js index 82e6752a..7907a52c 100644 --- a/client/dom/events/event-store.spec.js +++ b/client/dom/events/event-store.spec.js @@ -1,6 +1,6 @@ 'use strict'; -const test = require('supertape'); +const {test} = require('supertape'); const eventStore = require('./event-store'); test('event-store: get', (t) => { diff --git a/client/dom/io/send-request.spec.js b/client/dom/io/send-request.spec.js index e8d0449a..d0c7aa88 100644 --- a/client/dom/io/send-request.spec.js +++ b/client/dom/io/send-request.spec.js @@ -1,6 +1,6 @@ 'use strict'; -const test = require('supertape'); +const {test} = require('supertape'); const {_replaceHash} = require('./send-request'); test('cloudcmd: client: io: replaceHash', (t) => { diff --git a/client/modules/view/index.spec.js b/client/modules/view/index.spec.js index cc46d07d..54dac8aa 100644 --- a/client/modules/view/index.spec.js +++ b/client/modules/view/index.spec.js @@ -4,8 +4,8 @@ require('css-modules-require-hook/preset'); const autoGlobals = require('auto-globals'); const {stub} = require('@cloudcmd/stub'); - -const test = autoGlobals(require('supertape')); +const {test: tape} = require('supertape'); +const test = autoGlobals(tape); const { _initConfig, _viewHtml, diff --git a/common/datetime.spec.js b/common/datetime.spec.js index cc321d8a..6da5fad2 100644 --- a/common/datetime.spec.js +++ b/common/datetime.spec.js @@ -1,6 +1,6 @@ 'use strict'; -const test = require('supertape'); +const {test} = require('supertape'); const {tryCatch} = require('try-catch'); const datetime = require('./datetime'); diff --git a/common/entity.spec.js b/common/entity.spec.js index e83b75df..e555cc0d 100644 --- a/common/entity.spec.js +++ b/common/entity.spec.js @@ -1,6 +1,6 @@ 'use strict'; -const test = require('supertape'); +const {test} = require('supertape'); const entity = require('./entity'); test('cloudcmd: entity: encode', (t) => { diff --git a/common/try-to-promise-all.spec.js b/common/try-to-promise-all.spec.js index 6a7e3b81..e86772fd 100644 --- a/common/try-to-promise-all.spec.js +++ b/common/try-to-promise-all.spec.js @@ -1,6 +1,6 @@ 'use strict'; -const test = require('supertape'); +const {test} = require('supertape'); const tryToPromiseAll = require('./try-to-promise-all'); const resolve = Promise.resolve.bind(Promise); diff --git a/rules/split-autoglobals-with-tape.mjs b/rules/split-autoglobals-with-tape.mjs new file mode 100644 index 00000000..5c3c3eb2 --- /dev/null +++ b/rules/split-autoglobals-with-tape.mjs @@ -0,0 +1,8 @@ +export const report = () => `Use 'if condition' instead of 'ternary expression'`; + +export const replace = () => ({ + 'const test = autoGlobals(require("supertape"))': `{ + const {test: tape} = require('supertape'); + const test = autoGlobals(tape); + }`, +}); diff --git a/server/env.spec.js b/server/env.spec.js index d8f3faf6..f92273e5 100644 --- a/server/env.spec.js +++ b/server/env.spec.js @@ -1,7 +1,7 @@ 'use strict'; const process = require('node:process'); -const test = require('supertape'); +const {test} = require('supertape'); const env = require('./env.mjs'); test('cloudcmd: server: env: bool: upper case first', (t) => { diff --git a/server/prefixer.spec.js b/server/prefixer.spec.js index b858e546..2cc5b2d8 100644 --- a/server/prefixer.spec.js +++ b/server/prefixer.spec.js @@ -1,6 +1,6 @@ 'use strict'; -const test = require('supertape'); +const {test} = require('supertape'); const prefixer = require('./prefixer'); diff --git a/server/rest/index.spec.js b/server/rest/index.spec.js index 540356ad..ab7ed78b 100644 --- a/server/rest/index.spec.js +++ b/server/rest/index.spec.js @@ -1,6 +1,6 @@ 'use strict'; -const test = require('supertape'); +const {test} = require('supertape'); const {tryToCatch} = require('try-to-catch'); const { diff --git a/static/user-menu.spec.js b/static/user-menu.spec.js index d46d4374..b5f6c43c 100644 --- a/static/user-menu.spec.js +++ b/static/user-menu.spec.js @@ -1,13 +1,12 @@ 'use strict'; -const autoGlobals = require('auto-globals'); const {stub} = require('@cloudcmd/stub'); const {tryToCatch} = require('try-to-catch'); const wraptile = require('wraptile'); +const {test: tape} = require('supertape'); +const autoGlobals = require('auto-globals'); const defaultMenu = require('./user-menu'); - -const test = autoGlobals(require('supertape')); - +const test = autoGlobals(tape); const {create} = autoGlobals; const {_data} = defaultMenu; diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index d0c70026..41844cf0 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -3,7 +3,7 @@ const fs = require('node:fs'); const {tryCatch} = require('try-catch'); -const test = require('supertape'); +const {test} = require('supertape'); const readFilesSync = require('@cloudcmd/read-files-sync'); const {time, timeEnd} = require(`../../common/util.mjs`); diff --git a/test/server/env.js b/test/server/env.js index 52f54b45..ce12e0df 100644 --- a/test/server/env.js +++ b/test/server/env.js @@ -1,7 +1,7 @@ 'use strict'; const process = require('node:process'); -const test = require('supertape'); +const {test} = require('supertape'); const env = require('../../server/env.mjs'); test('env: small', (t) => { diff --git a/test/server/show-config.js b/test/server/show-config.js index d0f3c8f6..d0ff8480 100644 --- a/test/server/show-config.js +++ b/test/server/show-config.js @@ -1,6 +1,6 @@ 'use strict'; -const test = require('supertape'); +const {test} = require('supertape'); const {tryCatch} = require('try-catch'); const showConfig = require('../../server/show-config'); From 6addb29f7fc6b1b3495470c3ee379efe165d0acd Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 31 Jan 2026 22:28:28 +0200 Subject: [PATCH 004/390] feature: cloudcmd: redzip v4.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9509f071..06d02d74 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^41.0.0", - "redzip": "^3.0.0", + "redzip": "^4.0.0", "rendy": "^4.1.3", "restafary": "^12.0.0", "restbox": "^4.0.0", From 2e486f8bed0ce24cf5cfb7cc7e034344fbdb95ce Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 31 Jan 2026 22:45:48 +0200 Subject: [PATCH 005/390] feature: cloudcmd: restafary v13.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 06d02d74..9fc6fe57 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "putout": "^41.0.0", "redzip": "^4.0.0", "rendy": "^4.1.3", - "restafary": "^12.0.0", + "restafary": "^13.0.0", "restbox": "^4.0.0", "shortdate": "^2.0.0", "simport": "^1.0.1", From c1014c9cc027f3a9f80f557c792838ea386a6ae8 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 31 Jan 2026 22:47:52 +0200 Subject: [PATCH 006/390] feature: client: dom: operations: rename-current: migrate to ESM --- client/dom/index.mjs | 2 +- .../{rename-current.js => rename-current.mjs} | 16 ++++++---------- ...e-current.spec.js => rename-current.spec.mjs} | 8 +++----- 3 files changed, 10 insertions(+), 16 deletions(-) rename client/dom/operations/{rename-current.js => rename-current.mjs} (81%) rename client/dom/operations/{rename-current.spec.js => rename-current.spec.mjs} (94%) diff --git a/client/dom/index.mjs b/client/dom/index.mjs index 471f3b7c..8a65d85c 100644 --- a/client/dom/index.mjs +++ b/client/dom/index.mjs @@ -7,7 +7,7 @@ import {getExt} from '#common/util'; import * as Storage from '#dom/storage'; import * as RESTful from '#dom/rest'; import * as Images from './images.mjs'; -import renameCurrent from './operations/rename-current.js'; +import renameCurrent from './operations/rename-current.mjs'; import * as CurrentFile from './current-file.mjs'; import * as DOMTree from './dom-tree.mjs'; import * as Cmd from './cmd.mjs'; diff --git a/client/dom/operations/rename-current.js b/client/dom/operations/rename-current.mjs similarity index 81% rename from client/dom/operations/rename-current.js rename to client/dom/operations/rename-current.mjs index e8d29987..e446f5ca 100644 --- a/client/dom/operations/rename-current.js +++ b/client/dom/operations/rename-current.mjs @@ -1,15 +1,11 @@ -'use strict'; - /* global CloudCmd */ -const capitalize = require('just-capitalize'); +import capitalize from 'just-capitalize'; +import * as _Dialog from '#dom/dialog'; +import * as Storage from '#dom/storage'; +import * as RESTful from '#dom/rest'; +import * as _currentFile from '../current-file.mjs'; -const _Dialog = require('#dom/dialog'); -const Storage = require('#dom/storage'); -const RESTful = require('#dom/rest'); - -const _currentFile = require('../current-file.mjs'); - -module.exports = async (current, overrides = {}) => { +export default async (current, overrides = {}) => { const { refresh = CloudCmd.refresh, Dialog = _Dialog, diff --git a/client/dom/operations/rename-current.spec.js b/client/dom/operations/rename-current.spec.mjs similarity index 94% rename from client/dom/operations/rename-current.spec.js rename to client/dom/operations/rename-current.spec.mjs index 4a3c7fec..0d3483d1 100644 --- a/client/dom/operations/rename-current.spec.js +++ b/client/dom/operations/rename-current.spec.mjs @@ -1,8 +1,5 @@ -'use strict'; - -const {test, stub} = require('supertape'); - -const renameCurrent = require('./rename-current'); +import {test, stub} from 'supertape'; +import renameCurrent from './rename-current.mjs'; test('cloudcmd: client: dom: renameCurrent: isCurrentFile', async (t) => { const current = {}; @@ -87,3 +84,4 @@ const stubCurrentFile = (fns = {}) => { setCurrentName, }; }; + From dae57c3d2035472a1546537369ea49cbadfea9e7 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 31 Jan 2026 22:48:38 +0200 Subject: [PATCH 007/390] chore: cloudcmd: v19.1.20 --- 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 61955793..383cce3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2026.01.31, v19.1.20 + +feature: +- c1014c9c client: dom: operations: rename-current: migrate to ESM +- 2e486f8b cloudcmd: restafary v13.0.0 +- 6addb29f cloudcmd: redzip v4.0.0 + 2026.01.30, v19.1.19 feature: diff --git a/HELP.md b/HELP.md index d5aeb73b..674ab19b 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.1.19 +# Cloud Commander v19.1.20 ### [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 +- *2026.01.31*, **[v19.1.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.20)** - *2026.01.30*, **[v19.1.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.19)** - *2026.01.30*, **[v19.1.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.18)** - *2026.01.29*, **[v19.1.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.17)** diff --git a/README.md b/README.md index 151fdcab..7818baea 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.1.19 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.1.20 [![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 9fc6fe57..2c475545 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.1.19", + "version": "19.1.20", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 0d7b037ac2d7ae0bfa5dc0f8d47e895645ee0835 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 1 Feb 2026 23:30:49 +0200 Subject: [PATCH 008/390] client: modules: command-line: migrate to ESM --- .webpack/js.mjs | 2 +- client/dom/index.mjs | 5 ++++- client/dom/operations/rename-current.spec.mjs | 1 - .../{command-line.js => command-line.mjs} | 21 ++++++++----------- client/modules/view/index.spec.js | 1 + 5 files changed, 15 insertions(+), 15 deletions(-) rename client/modules/{command-line.js => command-line.mjs} (72%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index f2901384..2b03fd6a 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -138,7 +138,7 @@ export default { [`${modules}/cloud`]: `${dirModules}/cloud.mjs`, [`${modules}/user-menu`]: `${dirModules}/user-menu/index.mjs`, [`${modules}/polyfill`]: `${dirModules}/polyfill.js`, - [`${modules}/command-line`]: `${dirModules}/command-line.js`, + [`${modules}/command-line`]: `${dirModules}/command-line.mjs`, }, output: { filename: '[name].js', diff --git a/client/dom/index.mjs b/client/dom/index.mjs index 8a65d85c..6611f6fe 100644 --- a/client/dom/index.mjs +++ b/client/dom/index.mjs @@ -705,7 +705,10 @@ export function getPackerExt(type) { export async function goToDirectory(overrides = {}) { const {Dialog} = DOM; - const {prompt = Dialog.prompt, changeDir = CloudCmd.changeDir} = overrides; + const { + prompt = Dialog.prompt, + changeDir = CloudCmd.changeDir, + } = overrides; const msg = 'Go to directory:'; const {dirPath} = CurrentInfo; diff --git a/client/dom/operations/rename-current.spec.mjs b/client/dom/operations/rename-current.spec.mjs index 0d3483d1..b0aa30fa 100644 --- a/client/dom/operations/rename-current.spec.mjs +++ b/client/dom/operations/rename-current.spec.mjs @@ -84,4 +84,3 @@ const stubCurrentFile = (fns = {}) => { setCurrentName, }; }; - diff --git a/client/modules/command-line.js b/client/modules/command-line.mjs similarity index 72% rename from client/modules/command-line.js rename to client/modules/command-line.mjs index 89a562fa..bf3b071b 100644 --- a/client/modules/command-line.js +++ b/client/modules/command-line.mjs @@ -1,18 +1,15 @@ -'use strict'; - /* global CloudCmd */ -CloudCmd.CommandLine = exports; +import * as Dialog from '#dom/dialog'; -const Dialog = require('#dom/dialog'); +export const init = () => {}; -const noop = () => {}; +CloudCmd.CommandLine = { + init, + show, + hide, +}; -module.exports.init = noop; - -module.exports.show = show; -module.exports.hide = hide; - -async function show() { +export async function show() { const [, cmd] = await Dialog.prompt('Command Line', ''); const TERMINAL = '^(t|terminal)'; @@ -32,4 +29,4 @@ async function show() { } } -function hide() {} +export function hide() {} diff --git a/client/modules/view/index.spec.js b/client/modules/view/index.spec.js index 54dac8aa..673214c9 100644 --- a/client/modules/view/index.spec.js +++ b/client/modules/view/index.spec.js @@ -6,6 +6,7 @@ const autoGlobals = require('auto-globals'); const {stub} = require('@cloudcmd/stub'); const {test: tape} = require('supertape'); const test = autoGlobals(tape); + const { _initConfig, _viewHtml, From 7173f6cb1887e5887c96be5ee20ae746a150cb90 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 2 Feb 2026 19:04:05 +0200 Subject: [PATCH 009/390] feature: cloudcmd: smalltalk v5.0.0 --- client/dom/dialog.mjs | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/dom/dialog.mjs b/client/dom/dialog.mjs index 0a1e449c..b1791d92 100644 --- a/client/dom/dialog.mjs +++ b/client/dom/dialog.mjs @@ -1,5 +1,5 @@ import {tryToCatch} from 'try-to-catch'; -import smalltalk from 'smalltalk'; +import * as smalltalk from 'smalltalk'; const title = 'Cloud Commander'; diff --git a/package.json b/package.json index 2c475545..f388737a 100644 --- a/package.json +++ b/package.json @@ -206,7 +206,7 @@ "rimraf": "^6.0.1", "scroll-into-view-if-needed": "^3.0.4", "serve-once": "^3.0.1", - "smalltalk": "^4.0.0", + "smalltalk": "^5.0.0", "style-loader": "^4.0.0", "supermenu": "^4.0.1", "supertape": "^12.0.0", From 1f174870ab3d6a13b6e8afaf884a1c7d749fb362 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 2 Feb 2026 19:07:05 +0200 Subject: [PATCH 010/390] feature: client: view: migrate to ESM --- .webpack/js.mjs | 2 +- .../view/{get-type.js => get-type.mjs} | 5 +- client/modules/view/{index.js => index.mjs} | 73 +++++++++---------- .../view/{index.spec.js => index.spec.mjs} | 18 ++--- client/modules/view/{types.js => types.mjs} | 18 ++--- .../view/{types.spec.js => types.spec.mjs} | 6 +- 6 files changed, 54 insertions(+), 68 deletions(-) rename client/modules/view/{get-type.js => get-type.mjs} (92%) rename client/modules/view/{index.js => index.mjs} (87%) rename client/modules/view/{index.spec.js => index.spec.mjs} (89%) rename client/modules/view/{types.js => types.mjs} (79%) rename client/modules/view/{types.spec.js => types.spec.mjs} (89%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index 2b03fd6a..434a397c 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -125,7 +125,7 @@ export default { [`${modules}/edit-names`]: `${dirModules}/edit-names.js`, [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.js`, [`${modules}/menu`]: `${dirModules}/menu/index.mjs`, - [`${modules}/view`]: `${dirModules}/view/index.js`, + [`${modules}/view`]: `${dirModules}/view/index.mjs`, [`${modules}/help`]: `${dirModules}/help.js`, [`${modules}/markdown`]: `${dirModules}/markdown.js`, [`${modules}/config`]: `${dirModules}/config/index.mjs`, diff --git a/client/modules/view/get-type.js b/client/modules/view/get-type.mjs similarity index 92% rename from client/modules/view/get-type.js rename to client/modules/view/get-type.mjs index 9fc1df1d..a061399f 100644 --- a/client/modules/view/get-type.js +++ b/client/modules/view/get-type.mjs @@ -1,6 +1,5 @@ -'use strict'; +import currify from 'currify'; -const currify = require('currify'); const testRegExp = currify((name, reg) => reg.test(name)); const getRegExp = (ext) => RegExp(`\\.${ext}$`, 'i'); @@ -8,7 +7,7 @@ const isPDF = (a) => /\.pdf$/i.test(a); const isHTML = (a) => a.endsWith('.html'); const isMarkdown = (a) => /.\.md$/.test(a); -module.exports = (name) => { +export default (name) => { if (isPDF(name)) return 'pdf'; diff --git a/client/modules/view/index.js b/client/modules/view/index.mjs similarity index 87% rename from client/modules/view/index.js rename to client/modules/view/index.mjs index 47724798..91d9caf6 100644 --- a/client/modules/view/index.js +++ b/client/modules/view/index.mjs @@ -1,35 +1,26 @@ /* global CloudCmd, DOM */ - -'use strict'; - -const CloudCmd = globalThis.CloudCmd || {}; -const DOM = globalThis.DOM || {}; - -require('../../../css/view.css'); - -const rendy = require('rendy'); -const currify = require('currify'); -const wraptile = require('wraptile'); -const {tryToCatch} = require('try-to-catch'); -const load = require('load.js'); - -const _modal = require('@cloudcmd/modal'); -const _createElement = require('@cloudcmd/create-element'); - -const {time} = require('#common/util'); -const {FS} = require('../../../common/cloudfunc.mjs'); - -const { +import rendy from 'rendy'; +import currify from 'currify'; +import wraptile from 'wraptile'; +import {tryToCatch} from 'try-to-catch'; +import load from 'load.js'; +import * as _modal from '@cloudcmd/modal'; +import _createElement from '@cloudcmd/create-element'; +import {time} from '#common/util'; +import * as Files from '#dom/files'; +import * as Events from '#dom/events'; +import '../../../css/view.css'; +import {FS} from '../../../common/cloudfunc.mjs'; +import { isImage, isAudio, getType, -} = require('./types'); +} from './types.mjs'; +import * as Images from '../../dom/images.mjs'; +import {encode} from '../../../common/entity.js'; -const Files = require('#dom/files'); -const Events = require('#dom/events'); -const Images = require('../../dom/images.mjs'); - -const {encode} = require('../../../common/entity'); +const CloudCmd = globalThis.CloudCmd || {}; +const DOM = globalThis.DOM || {}; const isString = (a) => typeof a === 'string'; const {assign} = Object; const {isArray} = Array; @@ -47,14 +38,15 @@ const addEvent = lifo(Events.add); const loadCSS = load.css; -module.exports.show = show; -module.exports.hide = hide; - let Loading = false; const Name = 'View'; -CloudCmd[Name] = module.exports; +CloudCmd[Name] = { + init, + show, + hide, +}; const Info = DOM.CurrentInfo; const {Key} = CloudCmd; @@ -91,9 +83,9 @@ const Config = { }, }; -module.exports._Config = Config; +export const _Config = Config; -module.exports.init = async () => { +export async function init() { await loadAll(); const events = [ @@ -105,9 +97,9 @@ module.exports.init = async () => { Overlay, onOverlayClick, )); -}; +} -async function show(data, options = {}) { +export async function show(data, options = {}) { const prefixURL = CloudCmd.prefixURL + FS; if (Loading) @@ -159,7 +151,8 @@ async function show(data, options = {}) { } } -module.exports._createIframe = createIframe; +export const _createIframe = createIframe; + function createIframe(src, overrides = {}) { const { createElement = _createElement, @@ -178,7 +171,8 @@ function createIframe(src, overrides = {}) { return element; } -module.exports._viewHtml = viewHtml; +export const _viewHtml = viewHtml; + function viewHtml(src, overrides = {}) { const {modal = _modal} = overrides; modal.open(createIframe(src), Config); @@ -234,7 +228,8 @@ async function viewFile() { const copy = (a) => assign({}, a); -module.exports._initConfig = initConfig; +export const _initConfig = initConfig; + function initConfig(options) { const config = copy(Config); @@ -260,7 +255,7 @@ function initConfig(options) { return config; } -function hide() { +export function hide() { _modal.close(); } diff --git a/client/modules/view/index.spec.js b/client/modules/view/index.spec.mjs similarity index 89% rename from client/modules/view/index.spec.js rename to client/modules/view/index.spec.mjs index 673214c9..585ac3e2 100644 --- a/client/modules/view/index.spec.js +++ b/client/modules/view/index.spec.mjs @@ -1,18 +1,14 @@ -'use strict'; - -require('css-modules-require-hook/preset'); - -const autoGlobals = require('auto-globals'); -const {stub} = require('@cloudcmd/stub'); -const {test: tape} = require('supertape'); -const test = autoGlobals(tape); - -const { +import autoGlobals from 'auto-globals'; +import {stub} from '@cloudcmd/stub'; +import {test as tape} from 'supertape'; +import { _initConfig, _viewHtml, _Config, _createIframe, -} = require('.'); +} from './index.mjs'; + +const test = autoGlobals(tape); test('cloudcmd: client: view: initConfig', (t) => { let config; diff --git a/client/modules/view/types.js b/client/modules/view/types.mjs similarity index 79% rename from client/modules/view/types.js rename to client/modules/view/types.mjs index d94dd971..2e001fe1 100644 --- a/client/modules/view/types.js +++ b/client/modules/view/types.mjs @@ -1,8 +1,8 @@ -'use strict'; +import {extname} from 'node:path'; +import currify from 'currify'; + +export const isAudio = (name) => /\.(mp3|ogg|m4a)$/i.test(name); -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'); @@ -10,7 +10,7 @@ const isPDF = (a) => /\.pdf$/i.test(a); const isHTML = (a) => a.endsWith('.html'); const isMarkdown = (a) => /.\.md$/.test(a); -module.exports.getType = async (path) => { +export const getType = async (path) => { const ext = extname(path); if (!ext) @@ -32,8 +32,7 @@ module.exports.getType = async (path) => { return 'markdown'; }; -module.exports.isImage = isImage; -function isImage(name) { +export function isImage(name) { const images = [ 'jp(e|g|eg)', 'gif', @@ -53,13 +52,12 @@ function isMedia(name) { return isAudio(name) || isVideo(name); } -module.exports.isAudio = isAudio; - function isVideo(name) { return /\.(mp4|avi|webm)$/i.test(name); } -module.exports._detectType = detectType; +export const _detectType = detectType; + async function detectType(path) { const {headers} = await fetch(path, { method: 'HEAD', diff --git a/client/modules/view/types.spec.js b/client/modules/view/types.spec.mjs similarity index 89% rename from client/modules/view/types.spec.js rename to client/modules/view/types.spec.mjs index d8004f9e..58a06672 100644 --- a/client/modules/view/types.spec.js +++ b/client/modules/view/types.spec.mjs @@ -1,7 +1,5 @@ -'use strict'; - -const {test, stub} = require('supertape'); -const {isAudio, _detectType} = require('./types'); +import {test, stub} from 'supertape'; +import {isAudio, _detectType} from './types.mjs'; test('cloudcmd: client: view: types: isAudio', (t) => { const result = isAudio('hello.mp3'); From 8cad7514e7dbc8f296865906812698731fb7c3d1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 2 Feb 2026 19:16:16 +0200 Subject: [PATCH 011/390] feature: common: cloudfunc -> #common/cloudfunc --- client/client.mjs | 2 +- client/cloudcmd.mjs | 2 +- client/dom/current-file.mjs | 2 +- client/dom/directory.mjs | 2 +- client/dom/io/index.js | 2 +- client/dom/upload-files.mjs | 2 +- client/listeners/index.mjs | 2 +- client/modules/config/index.mjs | 2 +- client/modules/edit.js | 2 +- client/modules/menu/index.mjs | 2 +- client/modules/view/index.mjs | 5 ++--- common/cloudfunc.spec.mjs | 2 +- package.json | 4 +++- server/cloudcmd.mjs | 2 +- server/config.spec.mjs | 2 +- server/rest/index.mjs | 2 +- server/route.mjs | 2 +- test/common/cloudfunc.js | 19 ++++++++++--------- 18 files changed, 30 insertions(+), 28 deletions(-) diff --git a/client/client.mjs b/client/client.mjs index b2f55b36..d1bb9737 100644 --- a/client/client.mjs +++ b/client/client.mjs @@ -17,7 +17,7 @@ import { apiURL, formatMsg, buildFromJSON, -} from '../common/cloudfunc.mjs'; +} from '#common/cloudfunc'; import {loadModule} from './load-module.mjs'; const noJS = (a) => a.replace(/.js$/, ''); diff --git a/client/cloudcmd.mjs b/client/cloudcmd.mjs index 5a207f8a..ab6bf282 100644 --- a/client/cloudcmd.mjs +++ b/client/cloudcmd.mjs @@ -5,7 +5,7 @@ import * as Util from '#common/util'; import '../css/main.css'; import {registerSW, listenSW} from './sw/register.mjs'; import {initSortPanel, sortPanel} from './sort.mjs'; -import * as CloudFunc from '../common/cloudfunc.mjs'; +import * as CloudFunc from '#common/cloudfunc'; import DOM from './dom/index.mjs'; import {createCloudCmd} from './client.mjs'; import * as Listeners from './listeners/index.mjs'; diff --git a/client/dom/current-file.mjs b/client/dom/current-file.mjs index 124c1e62..e5120f7d 100644 --- a/client/dom/current-file.mjs +++ b/client/dom/current-file.mjs @@ -2,7 +2,7 @@ /* global CloudCmd */ import createElement from '@cloudcmd/create-element'; import {encode, decode} from '../../common/entity.js'; -import {getTitle, FS} from '../../common/cloudfunc.mjs'; +import {getTitle, FS} from '#common/cloudfunc'; let Title; diff --git a/client/dom/directory.mjs b/client/dom/directory.mjs index e0cabab7..5189836f 100644 --- a/client/dom/directory.mjs +++ b/client/dom/directory.mjs @@ -2,7 +2,7 @@ import philip from 'philip'; import * as Dialog from '#dom/dialog'; import * as Images from './images.mjs'; -import {FS} from '../../common/cloudfunc.mjs'; +import {FS} from '#common/cloudfunc'; export const uploadDirectory = (items) => { if (items.length) diff --git a/client/dom/io/index.js b/client/dom/io/index.js index a17360ae..d69d31af 100644 --- a/client/dom/io/index.js +++ b/client/dom/io/index.js @@ -1,6 +1,6 @@ 'use strict'; -const {FS} = require('../../../common/cloudfunc.mjs'); +const {FS} = require('#common/cloudfunc'); const _sendRequest = require('./send-request'); const imgPosition = { diff --git a/client/dom/upload-files.mjs b/client/dom/upload-files.mjs index 908c402b..4254354c 100644 --- a/client/dom/upload-files.mjs +++ b/client/dom/upload-files.mjs @@ -4,7 +4,7 @@ import wraptile from 'wraptile'; import * as load from '#dom/load'; import {alert} from '#dom/dialog'; import * as Images from './images.mjs'; -import {FS} from '../../common/cloudfunc.mjs'; +import {FS} from '#common/cloudfunc'; import {getCurrentDirPath} from './current-file.mjs'; const loadFile = wraptile(_loadFile); diff --git a/client/listeners/index.mjs b/client/listeners/index.mjs index 99514b98..f320a397 100644 --- a/client/listeners/index.mjs +++ b/client/listeners/index.mjs @@ -7,7 +7,7 @@ import clipboard from '@cloudcmd/clipboard'; import * as Events from '#dom/events'; import {uploadFiles} from '#dom/upload-files'; import {getRange} from './get-range.mjs'; -import {FS} from '../../common/cloudfunc.mjs'; +import {FS} from '#common/cloudfunc'; import {getIndex} from './get-index.mjs'; const NBSP_REG = RegExp(String.fromCharCode(160), 'g'); diff --git a/client/modules/config/index.mjs b/client/modules/config/index.mjs index ad7b2acb..ac8db4d5 100644 --- a/client/modules/config/index.mjs +++ b/client/modules/config/index.mjs @@ -12,7 +12,7 @@ import * as Files from '#dom/files'; import '../../../css/config.css'; import * as input from './input.mjs'; import * as Images from '../../dom/images.mjs'; -import {getTitle} from '../../../common/cloudfunc.mjs'; +import {getTitle} from '#common/cloudfunc'; const {Dialog, setTitle} = DOM; diff --git a/client/modules/edit.js b/client/modules/edit.js index 7aa6715c..55ec0465 100644 --- a/client/modules/edit.js +++ b/client/modules/edit.js @@ -8,7 +8,7 @@ const {promisify} = require('es6-promisify'); const {tryToCatch} = require('try-to-catch'); const createElement = require('@cloudcmd/create-element'); const load = require('load.js'); -const {MAX_FILE_SIZE: maxSize} = require('../../common/cloudfunc.mjs'); +const {MAX_FILE_SIZE: maxSize} = require('#common/cloudfunc'); const {time, timeEnd} = require('#common/util'); const getEditor = () => editor; diff --git a/client/modules/menu/index.mjs b/client/modules/menu/index.mjs index a8c7d0df..3d3f4412 100644 --- a/client/modules/menu/index.mjs +++ b/client/modules/menu/index.mjs @@ -4,7 +4,7 @@ import wrap from 'wraptile'; import createElement from '@cloudcmd/create-element'; import {getIdBySrc} from '#dom/load'; import * as RESTful from '#dom/rest'; -import {FS} from '../../../common/cloudfunc.mjs'; +import {FS} from '#common/cloudfunc'; const {config, Key} = CloudCmd; diff --git a/client/modules/view/index.mjs b/client/modules/view/index.mjs index 91d9caf6..713ab5db 100644 --- a/client/modules/view/index.mjs +++ b/client/modules/view/index.mjs @@ -1,4 +1,4 @@ -/* global CloudCmd, DOM */ +import '#css/view.css'; import rendy from 'rendy'; import currify from 'currify'; import wraptile from 'wraptile'; @@ -9,8 +9,7 @@ import _createElement from '@cloudcmd/create-element'; import {time} from '#common/util'; import * as Files from '#dom/files'; import * as Events from '#dom/events'; -import '../../../css/view.css'; -import {FS} from '../../../common/cloudfunc.mjs'; +import {FS} from '#common/cloudfunc'; import { isImage, isAudio, diff --git a/common/cloudfunc.spec.mjs b/common/cloudfunc.spec.mjs index 79ddfedf..6f4ff9fe 100644 --- a/common/cloudfunc.spec.mjs +++ b/common/cloudfunc.spec.mjs @@ -7,7 +7,7 @@ import { getPathLink, buildFromJSON, _getDataName, -} from './cloudfunc.mjs'; +} from '#common/cloudfunc'; const templatePath = new URL('../tmpl/fs', import.meta.url).pathname; diff --git a/package.json b/package.json index f388737a..5f72bf99 100644 --- a/package.json +++ b/package.json @@ -220,6 +220,7 @@ "webpackbar": "^7.0.0" }, "imports": { + "#css/": "./css/", "#dom/events": "./client/dom/events/index.mjs", "#dom/load": "./client/dom/load.mjs", "#dom/dialog": "./client/dom/dialog.mjs", @@ -227,7 +228,8 @@ "#dom/upload-files": "./client/dom/upload-files.mjs", "#dom/storage": "./client/dom/storage.mjs", "#dom/rest": "./client/dom/rest.mjs", - "#common/util": "./common/util.mjs" + "#common/util": "./common/util.mjs", + "#common/cloudfunc": "./common/cloudfunc.mjs" }, "engines": { "node": ">=22" diff --git a/server/cloudcmd.mjs b/server/cloudcmd.mjs index 936e72c3..3afb544c 100644 --- a/server/cloudcmd.mjs +++ b/server/cloudcmd.mjs @@ -14,7 +14,7 @@ import dword from 'dword'; import deepword from 'deepword'; import nomine from 'nomine'; import fileop from '@cloudcmd/fileop'; -import * as cloudfunc from '../common/cloudfunc.mjs'; +import * as cloudfunc from '#common/cloudfunc'; import authentication from './auth.js'; import {createConfig, configPath} from './config.mjs'; import modulas from './modulas.mjs'; diff --git a/server/config.spec.mjs b/server/config.spec.mjs index 3c6bbbc0..fc36fb1b 100644 --- a/server/config.spec.mjs +++ b/server/config.spec.mjs @@ -1,7 +1,7 @@ import {createRequire} from 'node:module'; import {test, stub} from 'supertape'; import {createConfig, _cryptoPass} from './config.mjs'; -import {apiURL} from '../common/cloudfunc.mjs'; +import {apiURL} from '#common/cloudfunc'; import {connect} from '../test/before.mjs'; const require = createRequire(import.meta.url); diff --git a/server/rest/index.mjs b/server/rest/index.mjs index f5e6c8da..dae04761 100644 --- a/server/rest/index.mjs +++ b/server/rest/index.mjs @@ -12,7 +12,7 @@ import ponse from 'ponse'; import copymitter from 'copymitter'; import _moveFiles from '@cloudcmd/move-files'; import root from '../root.js'; -import * as CloudFunc from '../../common/cloudfunc.mjs'; +import * as CloudFunc from '#common/cloudfunc'; import markdown from '../markdown/index.js'; import info from './info.js'; diff --git a/server/route.mjs b/server/route.mjs index fabde3fb..952f2bda 100644 --- a/server/route.mjs +++ b/server/route.mjs @@ -12,7 +12,7 @@ import pipe from 'pipe-io'; import {contentType} from 'mime-types'; import root from './root.js'; import prefixer from './prefixer.js'; -import * as CloudFunc from '../common/cloudfunc.mjs'; +import * as CloudFunc from '#common/cloudfunc'; import Template from './template.js'; import {getColumns} from './columns.mjs'; import {getThemes} from './theme.mjs'; diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index 41844cf0..44ca9e14 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -7,7 +7,7 @@ const {test} = require('supertape'); const readFilesSync = require('@cloudcmd/read-files-sync'); const {time, timeEnd} = require(`../../common/util.mjs`); -const CloudFunc = require('../../common/cloudfunc.mjs'); +const CloudFunc = require('#common/cloudfunc'); const DIR = `${__dirname}/../../`; @@ -43,7 +43,8 @@ const data = { }], }; -let Expect = '
' + +let Expect = + '
' + '' + '' + @@ -73,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 c3b71653bb284359ae88a974d2edbae183b813c9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 2 Feb 2026 19:18:08 +0200 Subject: [PATCH 012/390] feature: client: dom: images -> #images --- client/client.mjs | 10 ++++------ client/cloudcmd.mjs | 4 ++-- client/dom/current-file.mjs | 2 +- client/dom/directory.mjs | 2 +- client/dom/index.mjs | 2 +- client/dom/io/send-request.js | 2 +- client/dom/load.mjs | 2 +- client/dom/rest.mjs | 2 +- client/dom/upload-files.mjs | 2 +- client/listeners/index.mjs | 2 +- client/modules/cloud.mjs | 2 +- client/modules/config/index.mjs | 6 +++--- client/modules/contact.js | 2 +- client/modules/help.js | 2 +- client/modules/konsole.js | 2 +- client/modules/markdown.js | 2 +- client/modules/terminal-run.js | 2 +- client/modules/terminal.js | 2 +- client/modules/upload.mjs | 2 +- client/modules/user-menu/index.mjs | 2 +- client/modules/view/index.mjs | 2 +- package.json | 1 + server/config.spec.mjs | 2 +- server/rest/index.mjs | 2 +- server/route.mjs | 2 +- test/common/cloudfunc.js | 19 +++++++++---------- 26 files changed, 40 insertions(+), 42 deletions(-) diff --git a/client/client.mjs b/client/client.mjs index d1bb9737..5c5584de 100644 --- a/client/client.mjs +++ b/client/client.mjs @@ -1,6 +1,4 @@ import process from 'node:process'; - -/* global DOM */ import Emitify from 'emitify'; import inherits from 'inherits'; import rendy from 'rendy'; @@ -9,15 +7,15 @@ import {tryToCatch} from 'try-to-catch'; import {addSlashToEnd} from 'format-io'; import pascalCase from 'just-pascal-case'; import currify from 'currify'; -import * as Images from './dom/images.mjs'; -import {unregisterSW} from './sw/register.mjs'; -import {getJsonFromFileTable} from './get-json-from-file-table.mjs'; -import {Key} from './key/index.mjs'; import { apiURL, formatMsg, buildFromJSON, } from '#common/cloudfunc'; +import * as Images from '#dom/images'; +import {unregisterSW} from './sw/register.mjs'; +import {getJsonFromFileTable} from './get-json-from-file-table.mjs'; +import {Key} from './key/index.mjs'; import {loadModule} from './load-module.mjs'; const noJS = (a) => a.replace(/.js$/, ''); diff --git a/client/cloudcmd.mjs b/client/cloudcmd.mjs index ab6bf282..de7d3a93 100644 --- a/client/cloudcmd.mjs +++ b/client/cloudcmd.mjs @@ -1,11 +1,11 @@ +import '../css/main.css'; import process from 'node:process'; import wraptile from 'wraptile'; import load from 'load.js'; import * as Util from '#common/util'; -import '../css/main.css'; +import * as CloudFunc from '#common/cloudfunc'; import {registerSW, listenSW} from './sw/register.mjs'; import {initSortPanel, sortPanel} from './sort.mjs'; -import * as CloudFunc from '#common/cloudfunc'; import DOM from './dom/index.mjs'; import {createCloudCmd} from './client.mjs'; import * as Listeners from './listeners/index.mjs'; diff --git a/client/dom/current-file.mjs b/client/dom/current-file.mjs index e5120f7d..9c84a7ff 100644 --- a/client/dom/current-file.mjs +++ b/client/dom/current-file.mjs @@ -1,8 +1,8 @@ /* global DOM */ /* global CloudCmd */ import createElement from '@cloudcmd/create-element'; -import {encode, decode} from '../../common/entity.js'; import {getTitle, FS} from '#common/cloudfunc'; +import {encode, decode} from '../../common/entity.js'; let Title; diff --git a/client/dom/directory.mjs b/client/dom/directory.mjs index 5189836f..efbca119 100644 --- a/client/dom/directory.mjs +++ b/client/dom/directory.mjs @@ -1,8 +1,8 @@ /* global DOM, CloudCmd */ import philip from 'philip'; import * as Dialog from '#dom/dialog'; -import * as Images from './images.mjs'; import {FS} from '#common/cloudfunc'; +import * as Images from '#dom/images'; export const uploadDirectory = (items) => { if (items.length) diff --git a/client/dom/index.mjs b/client/dom/index.mjs index 6611f6fe..456571e2 100644 --- a/client/dom/index.mjs +++ b/client/dom/index.mjs @@ -6,7 +6,7 @@ import * as Events from '#dom/events'; import {getExt} from '#common/util'; import * as Storage from '#dom/storage'; import * as RESTful from '#dom/rest'; -import * as Images from './images.mjs'; +import * as Images from '#dom/images'; import renameCurrent from './operations/rename-current.mjs'; import * as CurrentFile from './current-file.mjs'; import * as DOMTree from './dom-tree.mjs'; diff --git a/client/dom/io/send-request.js b/client/dom/io/send-request.js index 8f9197b5..e32edc56 100644 --- a/client/dom/io/send-request.js +++ b/client/dom/io/send-request.js @@ -3,7 +3,7 @@ /* global CloudCmd */ const {promisify} = require('es6-promisify'); -const Images = require('../images.mjs'); +const Images = require('#dom/images'); const load = require('#dom/load'); module.exports = promisify((params, callback) => { diff --git a/client/dom/load.mjs b/client/dom/load.mjs index 02158a83..8c7011c1 100644 --- a/client/dom/load.mjs +++ b/client/dom/load.mjs @@ -2,7 +2,7 @@ import itype from 'itype'; import jonny from 'jonny'; import Emitify from 'emitify'; import exec from 'execon'; -import * as Images from './images.mjs'; +import * as Images from '#dom/images'; /** * Function gets id by src diff --git a/client/dom/rest.mjs b/client/dom/rest.mjs index 092096df..2912621b 100644 --- a/client/dom/rest.mjs +++ b/client/dom/rest.mjs @@ -1,7 +1,7 @@ import {tryToCatch} from 'try-to-catch'; import * as Dialog from '#dom/dialog'; import {encode} from '../../common/entity.js'; -import * as Images from './images.mjs'; +import * as Images from '#dom/images'; import IO from './io/index.js'; const handleError = (promise) => async (...args) => { diff --git a/client/dom/upload-files.mjs b/client/dom/upload-files.mjs index 4254354c..aafb38d3 100644 --- a/client/dom/upload-files.mjs +++ b/client/dom/upload-files.mjs @@ -3,8 +3,8 @@ import {eachSeries} from 'execon'; import wraptile from 'wraptile'; import * as load from '#dom/load'; import {alert} from '#dom/dialog'; -import * as Images from './images.mjs'; import {FS} from '#common/cloudfunc'; +import * as Images from '#dom/images'; import {getCurrentDirPath} from './current-file.mjs'; const loadFile = wraptile(_loadFile); diff --git a/client/listeners/index.mjs b/client/listeners/index.mjs index f320a397..98add90d 100644 --- a/client/listeners/index.mjs +++ b/client/listeners/index.mjs @@ -6,8 +6,8 @@ import {tryToCatch} from 'try-to-catch'; import clipboard from '@cloudcmd/clipboard'; import * as Events from '#dom/events'; import {uploadFiles} from '#dom/upload-files'; -import {getRange} from './get-range.mjs'; import {FS} from '#common/cloudfunc'; +import {getRange} from './get-range.mjs'; import {getIndex} from './get-index.mjs'; const NBSP_REG = RegExp(String.fromCharCode(160), 'g'); diff --git a/client/modules/cloud.mjs b/client/modules/cloud.mjs index f0fbb31e..cfe0d708 100644 --- a/client/modules/cloud.mjs +++ b/client/modules/cloud.mjs @@ -4,7 +4,7 @@ import currify from 'currify'; import load from 'load.js'; import {ajax} from '#dom/load'; import * as Files from '#dom/files'; -import * as Images from '../dom/images.mjs'; +import * as Images from '#dom/images'; const {log} = CloudCmd; diff --git a/client/modules/config/index.mjs b/client/modules/config/index.mjs index ac8db4d5..33af1d44 100644 --- a/client/modules/config/index.mjs +++ b/client/modules/config/index.mjs @@ -1,4 +1,5 @@ /* global CloudCmd, DOM, io */ +import '../../../css/config.css'; import rendy from 'rendy'; import currify from 'currify'; import wraptile from 'wraptile'; @@ -9,10 +10,9 @@ import load from 'load.js'; import createElement from '@cloudcmd/create-element'; import * as Events from '#dom/events'; import * as Files from '#dom/files'; -import '../../../css/config.css'; -import * as input from './input.mjs'; -import * as Images from '../../dom/images.mjs'; import {getTitle} from '#common/cloudfunc'; +import * as input from './input.mjs'; +import * as Images from '#dom/images'; const {Dialog, setTitle} = DOM; diff --git a/client/modules/contact.js b/client/modules/contact.js index c6266de0..8b3994d6 100644 --- a/client/modules/contact.js +++ b/client/modules/contact.js @@ -6,7 +6,7 @@ CloudCmd.Contact = exports; const olark = require('@cloudcmd/olark'); -const Images = require('../dom/images.mjs'); +const Images = require('#dom/images'); const {Events} = DOM; const {Key} = CloudCmd; diff --git a/client/modules/help.js b/client/modules/help.js index 242b7c16..b916fcb9 100644 --- a/client/modules/help.js +++ b/client/modules/help.js @@ -3,7 +3,7 @@ /* global CloudCmd */ CloudCmd.Help = exports; -const Images = require('../dom/images.mjs'); +const Images = require('#dom/images'); module.exports.init = () => { Images.show.load('top'); diff --git a/client/modules/konsole.js b/client/modules/konsole.js index ae5bc42c..80b019d2 100644 --- a/client/modules/konsole.js +++ b/client/modules/konsole.js @@ -12,7 +12,7 @@ const {tryToCatch} = require('try-to-catch'); const loadJS = require('load.js').js; const createElement = require('@cloudcmd/create-element'); -const Images = require('../dom/images.mjs'); +const Images = require('#dom/images'); const {Dialog, CurrentInfo: Info} = DOM; const rmLastSlash = (a) => a.replace(/\/$/, '') || '/'; diff --git a/client/modules/markdown.js b/client/modules/markdown.js index 3ccd5805..a4fafbb2 100644 --- a/client/modules/markdown.js +++ b/client/modules/markdown.js @@ -5,7 +5,7 @@ CloudCmd.Markdown = exports; const createElement = require('@cloudcmd/create-element'); -const Images = require('../dom/images.mjs'); +const Images = require('#dom/images'); const {Markdown} = require('#dom/rest'); const {alert} = require('#dom/dialog'); diff --git a/client/modules/terminal-run.js b/client/modules/terminal-run.js index 8b24fd2a..6daf3fd6 100644 --- a/client/modules/terminal-run.js +++ b/client/modules/terminal-run.js @@ -10,7 +10,7 @@ require('../../css/terminal.css'); const exec = require('execon'); const load = require('load.js'); const DOM = require('../dom/index.mjs'); -const Images = require('../dom/images.mjs'); +const Images = require('#dom/images'); const {Dialog} = DOM; const {Key, config} = CloudCmd; diff --git a/client/modules/terminal.js b/client/modules/terminal.js index b5850526..a57c9145 100644 --- a/client/modules/terminal.js +++ b/client/modules/terminal.js @@ -9,7 +9,7 @@ require('../../css/terminal.css'); const exec = require('execon'); const load = require('load.js'); const DOM = require('../dom/index.mjs'); -const Images = require('../dom/images.mjs'); +const Images = require('#dom/images'); const loadParallel = load.parallel; diff --git a/client/modules/upload.mjs b/client/modules/upload.mjs index 152f8b97..8433fbf5 100644 --- a/client/modules/upload.mjs +++ b/client/modules/upload.mjs @@ -2,7 +2,7 @@ import createElement from '@cloudcmd/create-element'; import * as Files from '#dom/files'; import {uploadFiles} from '#dom/upload-files'; -import * as Images from '../dom/images.mjs'; +import * as Images from '#dom/images'; CloudCmd.Upload = { init, diff --git a/client/modules/user-menu/index.mjs b/client/modules/user-menu/index.mjs index 9b85612c..8cb50905 100644 --- a/client/modules/user-menu/index.mjs +++ b/client/modules/user-menu/index.mjs @@ -9,7 +9,7 @@ import {tryToCatch} from 'try-to-catch'; import {codeFrameColumns} from '@babel/code-frame'; import * as Dialog from '#dom/dialog'; import '../../../css/user-menu.css'; -import * as Images from '../../dom/images.mjs'; +import * as Images from '#dom/images'; import {getUserMenu} from './get-user-menu.mjs'; import {navigate} from './navigate.mjs'; import {parseError} from './parse-error.mjs'; diff --git a/client/modules/view/index.mjs b/client/modules/view/index.mjs index 713ab5db..aa0f6f3d 100644 --- a/client/modules/view/index.mjs +++ b/client/modules/view/index.mjs @@ -15,7 +15,7 @@ import { isAudio, getType, } from './types.mjs'; -import * as Images from '../../dom/images.mjs'; +import * as Images from '#dom/images'; import {encode} from '../../../common/entity.js'; const CloudCmd = globalThis.CloudCmd || {}; diff --git a/package.json b/package.json index 5f72bf99..9a937adc 100644 --- a/package.json +++ b/package.json @@ -224,6 +224,7 @@ "#dom/events": "./client/dom/events/index.mjs", "#dom/load": "./client/dom/load.mjs", "#dom/dialog": "./client/dom/dialog.mjs", + "#dom/images": "./client/dom/images.mjs", "#dom/files": "./client/dom/files.mjs", "#dom/upload-files": "./client/dom/upload-files.mjs", "#dom/storage": "./client/dom/storage.mjs", diff --git a/server/config.spec.mjs b/server/config.spec.mjs index fc36fb1b..4a750e51 100644 --- a/server/config.spec.mjs +++ b/server/config.spec.mjs @@ -1,7 +1,7 @@ import {createRequire} from 'node:module'; import {test, stub} from 'supertape'; -import {createConfig, _cryptoPass} from './config.mjs'; import {apiURL} from '#common/cloudfunc'; +import {createConfig, _cryptoPass} from './config.mjs'; import {connect} from '../test/before.mjs'; const require = createRequire(import.meta.url); diff --git a/server/rest/index.mjs b/server/rest/index.mjs index dae04761..e166873f 100644 --- a/server/rest/index.mjs +++ b/server/rest/index.mjs @@ -11,8 +11,8 @@ import json from 'jonny'; import ponse from 'ponse'; import copymitter from 'copymitter'; import _moveFiles from '@cloudcmd/move-files'; -import root from '../root.js'; import * as CloudFunc from '#common/cloudfunc'; +import root from '../root.js'; import markdown from '../markdown/index.js'; import info from './info.js'; diff --git a/server/route.mjs b/server/route.mjs index 952f2bda..4ff0304c 100644 --- a/server/route.mjs +++ b/server/route.mjs @@ -10,9 +10,9 @@ import {tryToCatch} from 'try-to-catch'; import once from 'once'; import pipe from 'pipe-io'; import {contentType} from 'mime-types'; +import * as CloudFunc from '#common/cloudfunc'; import root from './root.js'; import prefixer from './prefixer.js'; -import * as CloudFunc from '#common/cloudfunc'; import Template from './template.js'; import {getColumns} from './columns.mjs'; import {getThemes} from './theme.mjs'; diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index 44ca9e14..19d35cb7 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -6,8 +6,8 @@ const {tryCatch} = require('try-catch'); const {test} = require('supertape'); const readFilesSync = require('@cloudcmd/read-files-sync'); -const {time, timeEnd} = require(`../../common/util.mjs`); const CloudFunc = require('#common/cloudfunc'); +const {time, timeEnd} = require(`../../common/util.mjs`); const DIR = `${__dirname}/../../`; @@ -43,8 +43,7 @@ const data = { }], }; -let Expect = - '
' + +let Expect = '
' + '' + '' + @@ -74,13 +73,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 ebabad948f7a6dff127572e06d23d8da71b945db Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 2 Feb 2026 22:21:24 +0200 Subject: [PATCH 013/390] feature: common: entity: migrate to ESM --- client/dom/current-file.mjs | 2 +- client/dom/rest.mjs | 2 +- client/modules/config/index.mjs | 2 +- client/modules/operation/index.mjs | 26 ++++---- client/modules/user-menu/index.mjs | 2 +- client/modules/view/index.mjs | 4 +- common/cloudfunc.mjs | 73 +++++++++++----------- common/{entity.js => entity.mjs} | 7 +-- common/{entity.spec.js => entity.spec.mjs} | 6 +- package.json | 3 +- 10 files changed, 61 insertions(+), 66 deletions(-) rename common/{entity.js => entity.mjs} (81%) rename common/{entity.spec.js => entity.spec.mjs} (87%) diff --git a/client/dom/current-file.mjs b/client/dom/current-file.mjs index 9c84a7ff..2239c991 100644 --- a/client/dom/current-file.mjs +++ b/client/dom/current-file.mjs @@ -2,7 +2,7 @@ /* global CloudCmd */ import createElement from '@cloudcmd/create-element'; import {getTitle, FS} from '#common/cloudfunc'; -import {encode, decode} from '../../common/entity.js'; +import {encode, decode} from '#common/entity'; let Title; diff --git a/client/dom/rest.mjs b/client/dom/rest.mjs index 2912621b..75562419 100644 --- a/client/dom/rest.mjs +++ b/client/dom/rest.mjs @@ -1,7 +1,7 @@ import {tryToCatch} from 'try-to-catch'; import * as Dialog from '#dom/dialog'; -import {encode} from '../../common/entity.js'; import * as Images from '#dom/images'; +import {encode} from '#common/entity'; import IO from './io/index.js'; const handleError = (promise) => async (...args) => { diff --git a/client/modules/config/index.mjs b/client/modules/config/index.mjs index 33af1d44..115e477e 100644 --- a/client/modules/config/index.mjs +++ b/client/modules/config/index.mjs @@ -11,8 +11,8 @@ import createElement from '@cloudcmd/create-element'; import * as Events from '#dom/events'; import * as Files from '#dom/files'; import {getTitle} from '#common/cloudfunc'; -import * as input from './input.mjs'; import * as Images from '#dom/images'; +import * as input from './input.mjs'; const {Dialog, setTitle} = DOM; diff --git a/client/modules/operation/index.mjs b/client/modules/operation/index.mjs index a2e7c0e7..4ee9f6f8 100644 --- a/client/modules/operation/index.mjs +++ b/client/modules/operation/index.mjs @@ -4,7 +4,7 @@ import {promisify} from 'es6-promisify'; import exec from 'execon'; import load from 'load.js'; import {tryToCatch} from 'try-to-catch'; -import {encode} from '../../../common/entity.js'; +import {encode} from '#common/entity'; import {removeExtension} from './remove-extension.mjs'; import {setListeners} from './set-listeners.mjs'; import {getNextCurrentName} from './get-next-current-name.mjs'; @@ -51,19 +51,19 @@ export const 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/index.mjs b/client/modules/user-menu/index.mjs index 8cb50905..0be4d123 100644 --- a/client/modules/user-menu/index.mjs +++ b/client/modules/user-menu/index.mjs @@ -1,4 +1,5 @@ /* global CloudCmd, DOM */ +import '../../../css/user-menu.css'; import currify from 'currify'; import wraptile from 'wraptile'; import {fullstore} from 'fullstore'; @@ -8,7 +9,6 @@ import {tryCatch} from 'try-catch'; import {tryToCatch} from 'try-to-catch'; import {codeFrameColumns} from '@babel/code-frame'; import * as Dialog from '#dom/dialog'; -import '../../../css/user-menu.css'; import * as Images from '#dom/images'; import {getUserMenu} from './get-user-menu.mjs'; import {navigate} from './navigate.mjs'; diff --git a/client/modules/view/index.mjs b/client/modules/view/index.mjs index aa0f6f3d..c843765c 100644 --- a/client/modules/view/index.mjs +++ b/client/modules/view/index.mjs @@ -10,13 +10,13 @@ import {time} from '#common/util'; import * as Files from '#dom/files'; import * as Events from '#dom/events'; import {FS} from '#common/cloudfunc'; +import * as Images from '#dom/images'; import { isImage, isAudio, getType, } from './types.mjs'; -import * as Images from '#dom/images'; -import {encode} from '../../../common/entity.js'; +import {encode} from '#common/entity'; const CloudCmd = globalThis.CloudCmd || {}; const DOM = globalThis.DOM || {}; diff --git a/common/cloudfunc.mjs b/common/cloudfunc.mjs index 00a48360..fa1ca806 100644 --- a/common/cloudfunc.mjs +++ b/common/cloudfunc.mjs @@ -1,7 +1,7 @@ import rendy from 'rendy'; import currify from 'currify'; import store from 'fullstore'; -import {encode} from './entity.js'; +import {encode} from '#common/entity'; export const getHeaderField = currify(_getHeaderField); @@ -168,7 +168,6 @@ export const buildFromJSON = (params) => { Path(path); fileTable += `${header}
    `; - /* Если мы не в корне */ if (path !== '/') { const dotDot = getDotDot(path); @@ -199,43 +198,43 @@ export const 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/common/entity.js b/common/entity.mjs similarity index 81% rename from common/entity.js rename to common/entity.mjs index d6eeaa23..d8f4a214 100644 --- a/common/entity.js +++ b/common/entity.mjs @@ -1,7 +1,4 @@ -'use strict'; - const Entities = { - // ' ': ' ', '<': '<', '>': '>', '"': '"', @@ -9,7 +6,7 @@ const Entities = { const keys = Object.keys(Entities); -module.exports.encode = (str) => { +export const encode = (str) => { for (const code of keys) { const char = Entities[code]; const reg = RegExp(char, 'g'); @@ -20,7 +17,7 @@ module.exports.encode = (str) => { return str; }; -module.exports.decode = (str) => { +export const decode = (str) => { for (const code of keys) { const char = Entities[code]; const reg = RegExp(code, 'g'); diff --git a/common/entity.spec.js b/common/entity.spec.mjs similarity index 87% rename from common/entity.spec.js rename to common/entity.spec.mjs index e555cc0d..ca62d705 100644 --- a/common/entity.spec.js +++ b/common/entity.spec.mjs @@ -1,7 +1,5 @@ -'use strict'; - -const {test} = require('supertape'); -const entity = require('./entity'); +import {test} from 'supertape'; +import * as entity from '#common/entity'; test('cloudcmd: entity: encode', (t) => { const result = entity.encode(' '); diff --git a/package.json b/package.json index 9a937adc..e941fbc0 100644 --- a/package.json +++ b/package.json @@ -230,7 +230,8 @@ "#dom/storage": "./client/dom/storage.mjs", "#dom/rest": "./client/dom/rest.mjs", "#common/util": "./common/util.mjs", - "#common/cloudfunc": "./common/cloudfunc.mjs" + "#common/cloudfunc": "./common/cloudfunc.mjs", + "#common/entity": "./common/entity.mjs" }, "engines": { "node": ">=22" From 983fd9af3d70758d1934eefb4c783d5109f604c2 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 2 Feb 2026 22:36:19 +0200 Subject: [PATCH 014/390] feature: client: edit: migrate to ESM --- .webpack/js.mjs | 2 +- client/modules/{edit.js => edit.mjs} | 47 ++++++++++-------- client/modules/operation/index.mjs | 24 +++++----- client/modules/view/index.mjs | 2 +- common/cloudfunc.mjs | 71 ++++++++++++++-------------- 5 files changed, 76 insertions(+), 70 deletions(-) rename client/modules/{edit.js => edit.mjs} (76%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index 434a397c..50cf4caa 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -119,7 +119,7 @@ export default { 'user-menu': `${dirCss}/user-menu.css`, 'sw': `${dir}/sw/sw.mjs`, 'cloudcmd': `${dir}/cloudcmd.mjs`, - [`${modules}/edit`]: `${dirModules}/edit.js`, + [`${modules}/edit`]: `${dirModules}/edit.mjs`, [`${modules}/edit-file`]: `${dirModules}/edit-file.js`, [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.js`, [`${modules}/edit-names`]: `${dirModules}/edit-names.js`, diff --git a/client/modules/edit.js b/client/modules/edit.mjs similarity index 76% rename from client/modules/edit.js rename to client/modules/edit.mjs index 55ec0465..1b726284 100644 --- a/client/modules/edit.js +++ b/client/modules/edit.mjs @@ -1,23 +1,28 @@ /* global CloudCmd */ +import montag from 'montag'; +import {promisify} from 'es6-promisify'; +import {tryToCatch} from 'try-to-catch'; +import createElement from '@cloudcmd/create-element'; +import load from 'load.js'; +import {MAX_FILE_SIZE as maxSize} from '#common/cloudfunc'; +import {time, timeEnd} from '#common/util'; -'use strict'; +export function getEditor() { + return editor; +} -const montag = require('montag'); - -const {promisify} = require('es6-promisify'); -const {tryToCatch} = require('try-to-catch'); -const createElement = require('@cloudcmd/create-element'); -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; const Name = 'Edit'; -CloudCmd[Name] = exports; +CloudCmd[Name] = { + init, + show, + hide, + getEditor, + getElement, +}; const EditorName = CloudCmd.config('editor'); @@ -33,12 +38,12 @@ const ConfigView = { }, }; -module.exports.init = async () => { +export async function init() { const element = create(); await CloudCmd.View(); await loadFiles(element); -}; +} function create() { const element = createElement('div', { @@ -79,7 +84,7 @@ function initConfig(options = {}) { return config; } -module.exports.show = (options) => { +export function show(options) { if (Loading) return; @@ -88,15 +93,15 @@ module.exports.show = (options) => { getEditor().setOptions({ fontSize: 16, }); -}; +} -module.exports.getEditor = getEditor; +export function getElement() { + return Element; +} -module.exports.getElement = () => Element; - -module.exports.hide = () => { +export function hide() { CloudCmd.View.hide(); -}; +} const loadFiles = async (element) => { const prefix = `${CloudCmd.prefix}/${EditorName}`; diff --git a/client/modules/operation/index.mjs b/client/modules/operation/index.mjs index 4ee9f6f8..1243a3d4 100644 --- a/client/modules/operation/index.mjs +++ b/client/modules/operation/index.mjs @@ -51,19 +51,19 @@ export const 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/view/index.mjs b/client/modules/view/index.mjs index c843765c..da19f542 100644 --- a/client/modules/view/index.mjs +++ b/client/modules/view/index.mjs @@ -11,12 +11,12 @@ import * as Files from '#dom/files'; import * as Events from '#dom/events'; import {FS} from '#common/cloudfunc'; import * as Images from '#dom/images'; +import {encode} from '#common/entity'; import { isImage, isAudio, getType, } from './types.mjs'; -import {encode} from '#common/entity'; const CloudCmd = globalThis.CloudCmd || {}; const DOM = globalThis.DOM || {}; diff --git a/common/cloudfunc.mjs b/common/cloudfunc.mjs index fa1ca806..3a9f61ba 100644 --- a/common/cloudfunc.mjs +++ b/common/cloudfunc.mjs @@ -168,6 +168,7 @@ export const buildFromJSON = (params) => { Path(path); fileTable += `${header}
    `; + /* Если мы не в корне */ if (path !== '/') { const dotDot = getDotDot(path); @@ -198,43 +199,43 @@ export const 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 += '
'; From e3ad330ebc52c60d1a674280aa9491b3beca54cb Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 2 Feb 2026 22:38:53 +0200 Subject: [PATCH 015/390] feature: client: konsole: migrate to ESM --- .webpack/js.mjs | 2 +- client/modules/{konsole.js => konsole.mjs} | 34 ++++++++++++---------- 2 files changed, 19 insertions(+), 17 deletions(-) rename client/modules/{konsole.js => konsole.mjs} (86%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index 50cf4caa..52352df7 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -132,7 +132,7 @@ export default { [`${modules}/contact`]: `${dirModules}/contact.js`, [`${modules}/upload`]: `${dirModules}/upload.mjs`, [`${modules}/operation`]: `${dirModules}/operation/index.mjs`, - [`${modules}/konsole`]: `${dirModules}/konsole.js`, + [`${modules}/konsole`]: `${dirModules}/konsole.mjs`, [`${modules}/terminal`]: `${dirModules}/terminal.js`, [`${modules}/terminal-run`]: `${dirModules}/terminal-run.js`, [`${modules}/cloud`]: `${dirModules}/cloud.mjs`, diff --git a/client/modules/konsole.js b/client/modules/konsole.mjs similarity index 86% rename from client/modules/konsole.js rename to client/modules/konsole.mjs index 80b019d2..e9a465af 100644 --- a/client/modules/konsole.js +++ b/client/modules/konsole.mjs @@ -1,18 +1,20 @@ -'use strict'; - /* global CloudCmd */ /* global Util */ /* global DOM */ /* global Console */ -CloudCmd.Konsole = exports; +import exec from 'execon'; +import currify from 'currify'; +import {tryToCatch} from 'try-to-catch'; +import {js as loadJS} from 'load.js'; +import createElement from '@cloudcmd/create-element'; +import * as Images from '#dom/images'; -const exec = require('execon'); -const currify = require('currify'); -const {tryToCatch} = require('try-to-catch'); -const loadJS = require('load.js').js; -const createElement = require('@cloudcmd/create-element'); +CloudCmd.Konsole = { + init, + show, + hide, +}; -const Images = require('#dom/images'); const {Dialog, CurrentInfo: Info} = DOM; const rmLastSlash = (a) => a.replace(/\/$/, '') || '/'; @@ -27,7 +29,7 @@ const Name = 'Konsole'; let Element; let Loaded; -module.exports.init = async () => { +export async function init() { if (!config('console')) return; @@ -36,13 +38,13 @@ module.exports.init = async () => { await CloudCmd.View(); await load(); await create(); -}; +} -module.exports.hide = () => { +export function hide() { CloudCmd.View.hide(); -}; +} -module.exports.clear = () => { +export const clear = () => { konsole.clear(); }; @@ -109,7 +111,7 @@ function authCheck(konsole) { }); } -module.exports.show = (callback) => { +export function show(callback) { if (!Loaded) return; @@ -122,7 +124,7 @@ module.exports.show = (callback) => { exec(callback); }, }); -}; +} const load = async () => { Util.time(`${Name} load`); From bf5055091150d2cc92a2ffedd062b7fae787a1b0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 2 Feb 2026 22:39:21 +0200 Subject: [PATCH 016/390] chore: cloudcmd: v19.1.21 --- ChangeLog | 11 +++++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 383cce3a..cc3b53b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2026.02.02, v19.1.21 + +feature: +- e3ad330e client: konsole: migrate to ESM +- 983fd9af client: edit: migrate to ESM +- ebabad94 common: entity: migrate to ESM +- c3b71653 client: dom: images -> #images +- 8cad7514 common: cloudfunc -> #common/cloudfunc +- 1f174870 client: view: migrate to ESM +- 7173f6cb cloudcmd: smalltalk v5.0.0 + 2026.01.31, v19.1.20 feature: diff --git a/HELP.md b/HELP.md index 674ab19b..13fb7a8d 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.1.20 +# Cloud Commander v19.1.21 ### [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 +- *2026.02.02*, **[v19.1.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.21)** - *2026.01.31*, **[v19.1.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.20)** - *2026.01.30*, **[v19.1.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.19)** - *2026.01.30*, **[v19.1.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.18)** diff --git a/README.md b/README.md index 7818baea..5b61432a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.1.20 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.1.21 [![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 e941fbc0..3fd81953 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.1.20", + "version": "19.1.21", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From dfcbfd632e0c91f09a88484572c999974e525e2f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 00:36:00 +0200 Subject: [PATCH 017/390] feature: client: modules: terminal: migrate to ESM --- .webpack/js.mjs | 2 +- client/cloudcmd.mjs | 2 +- client/dom/index.spec.mjs | 2 +- client/modules/terminal-run.js | 2 +- client/modules/{terminal.js => terminal.mjs} | 43 +++++++++----------- client/sort.mjs | 2 +- package.json | 1 + 7 files changed, 26 insertions(+), 28 deletions(-) rename client/modules/{terminal.js => terminal.mjs} (78%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index 52352df7..ee5a29f6 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -133,7 +133,7 @@ export default { [`${modules}/upload`]: `${dirModules}/upload.mjs`, [`${modules}/operation`]: `${dirModules}/operation/index.mjs`, [`${modules}/konsole`]: `${dirModules}/konsole.mjs`, - [`${modules}/terminal`]: `${dirModules}/terminal.js`, + [`${modules}/terminal`]: `${dirModules}/terminal.mjs`, [`${modules}/terminal-run`]: `${dirModules}/terminal-run.js`, [`${modules}/cloud`]: `${dirModules}/cloud.mjs`, [`${modules}/user-menu`]: `${dirModules}/user-menu/index.mjs`, diff --git a/client/cloudcmd.mjs b/client/cloudcmd.mjs index de7d3a93..746f7e74 100644 --- a/client/cloudcmd.mjs +++ b/client/cloudcmd.mjs @@ -6,7 +6,7 @@ import * as Util from '#common/util'; import * as CloudFunc from '#common/cloudfunc'; import {registerSW, listenSW} from './sw/register.mjs'; import {initSortPanel, sortPanel} from './sort.mjs'; -import DOM from './dom/index.mjs'; +import DOM from '#dom'; import {createCloudCmd} from './client.mjs'; import * as Listeners from './listeners/index.mjs'; diff --git a/client/dom/index.spec.mjs b/client/dom/index.spec.mjs index fb4de9e4..268efe5f 100644 --- a/client/dom/index.spec.mjs +++ b/client/dom/index.spec.mjs @@ -1,5 +1,5 @@ import {test, stub} from 'supertape'; -import {getCSSVar, goToDirectory} from './index.mjs'; +import {getCSSVar, goToDirectory} from '#dom'; globalThis.CloudCmd = {}; diff --git a/client/modules/terminal-run.js b/client/modules/terminal-run.js index 6daf3fd6..0f96c20c 100644 --- a/client/modules/terminal-run.js +++ b/client/modules/terminal-run.js @@ -9,7 +9,7 @@ require('../../css/terminal.css'); const exec = require('execon'); const load = require('load.js'); -const DOM = require('../dom/index.mjs'); +const DOM = require('#dom'); const Images = require('#dom/images'); const {Dialog} = DOM; diff --git a/client/modules/terminal.js b/client/modules/terminal.mjs similarity index 78% rename from client/modules/terminal.js rename to client/modules/terminal.mjs index a57c9145..186ee0b2 100644 --- a/client/modules/terminal.js +++ b/client/modules/terminal.mjs @@ -1,22 +1,22 @@ -'use strict'; - -/* global CloudCmd */ -/* global gritty */ -const {tryToCatch} = require('try-to-catch'); - -require('../../css/terminal.css'); - -const exec = require('execon'); -const load = require('load.js'); -const DOM = require('../dom/index.mjs'); -const Images = require('#dom/images'); +import '#css/terminal.css'; +import {tryToCatch} from 'try-to-catch'; +import exec from 'execon'; +import load from 'load.js'; +import * as Images from '#dom/images'; +import DOM from '#dom'; const loadParallel = load.parallel; -const {Dialog} = DOM; -const {Key, config} = CloudCmd; +const {CloudCmd} = globalThis; -CloudCmd.Terminal = exports; +const {Dialog} = DOM; +const {Key, config} = globalThis.CloudCmd; + +CloudCmd.Terminal = { + init, + show, + hide, +}; let Loaded; let Terminal; @@ -39,7 +39,7 @@ const loadAll = async () => { Loaded = true; }; -module.exports.init = async () => { +export async function init() { if (!config('terminal')) return; @@ -48,12 +48,9 @@ module.exports.init = async () => { await CloudCmd.View(); await loadAll(); create(); -}; +} -module.exports.show = show; -module.exports.hide = hide; - -function hide() { +export function hide() { CloudCmd.View.hide(); } @@ -78,7 +75,7 @@ function create() { fontFamily: 'Droid Sans Mono', }; - const {socket, terminal} = gritty(document.body, options); + const {socket, terminal} = globalThis.gritty(document.body, options); Socket = socket; Terminal = terminal; @@ -101,7 +98,7 @@ function authCheck(spawn) { }); } -function show() { +export function show() { if (!Loaded) return; diff --git a/client/sort.mjs b/client/sort.mjs index 8ac12452..ed0971f3 100644 --- a/client/sort.mjs +++ b/client/sort.mjs @@ -1,6 +1,6 @@ /* global CloudCmd */ import {fullstore} from 'fullstore'; -import DOM from './dom/index.mjs'; +import DOM from '#dom'; const sortPrevious = fullstore(); diff --git a/package.json b/package.json index 3fd81953..b2e28692 100644 --- a/package.json +++ b/package.json @@ -221,6 +221,7 @@ }, "imports": { "#css/": "./css/", + "#dom": "./client/dom/index.mjs", "#dom/events": "./client/dom/events/index.mjs", "#dom/load": "./client/dom/load.mjs", "#dom/dialog": "./client/dom/dialog.mjs", From 3cd3695be6b709f140e8b74311ecaad410aed9bc Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 00:56:05 +0200 Subject: [PATCH 018/390] feature: client: modules: edit-names-vim: migrate to ESM --- .webpack/js.mjs | 2 +- .../{edit-names-vim.js => edit-names-vim.mjs} | 24 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) rename client/modules/{edit-names-vim.js => edit-names-vim.mjs} (70%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index ee5a29f6..a9471871 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -123,7 +123,7 @@ export default { [`${modules}/edit-file`]: `${dirModules}/edit-file.js`, [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.js`, [`${modules}/edit-names`]: `${dirModules}/edit-names.js`, - [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.js`, + [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.mjs`, [`${modules}/menu`]: `${dirModules}/menu/index.mjs`, [`${modules}/view`]: `${dirModules}/view/index.mjs`, [`${modules}/help`]: `${dirModules}/help.js`, diff --git a/client/modules/edit-names-vim.js b/client/modules/edit-names-vim.mjs similarity index 70% rename from client/modules/edit-names-vim.js rename to client/modules/edit-names-vim.mjs index 0dbd92b2..75121b7e 100644 --- a/client/modules/edit-names-vim.js +++ b/client/modules/edit-names-vim.mjs @@ -1,9 +1,12 @@ -'use strict'; +import Events from '#dom/events'; -/* global CloudCmd */ -CloudCmd.EditNamesVim = exports; +const {CloudCmd} = globalThis; -const Events = require('#dom/events'); +CloudCmd.EditNamesVim = { + init, + show, + hide, +}; const {Key} = CloudCmd; const ConfigView = { @@ -14,22 +17,20 @@ const ConfigView = { }, }; -module.exports.init = async () => { +export async function init() { await CloudCmd.EditNames(); -}; +} -module.exports.show = () => { +export function show() { Events.addKey(listener); CloudCmd.EditNames .show(ConfigView) .getEditor() .setKeyMap('vim'); -}; +} -module.exports.hide = hide; - -function hide() { +export function hide() { CloudCmd.Edit.hide(); } @@ -41,3 +42,4 @@ function listener(event) { hide(); } } + From dc34ee87146b04d82b85c43c53c32723863f9dde Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 00:56:39 +0200 Subject: [PATCH 019/390] feature: cloudcmd: @putout/plugin-cloudcmd v5.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b2e28692..d9ce8f67 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "@cloudcmd/stub": "^5.0.0", "@iocmd/wait": "^2.1.0", "@putout/eslint-flat": "^4.0.0", - "@putout/plugin-cloudcmd": "^4.0.0", + "@putout/plugin-cloudcmd": "^5.0.0", "@types/node-fetch": "^2.6.11", "auto-globals": "^4.0.0", "babel-loader": "^10.0.0", From 327ac9dee6c5f0cee841a34cd18e441af3baad74 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 00:58:16 +0200 Subject: [PATCH 020/390] feature: client: modules: help: migrate to ESM --- .webpack/js.mjs | 2 +- client/modules/edit-names-vim.mjs | 3 +-- client/modules/help.js | 27 --------------------------- client/modules/help.mjs | 28 ++++++++++++++++++++++++++++ 4 files changed, 30 insertions(+), 30 deletions(-) delete mode 100644 client/modules/help.js create mode 100644 client/modules/help.mjs diff --git a/.webpack/js.mjs b/.webpack/js.mjs index a9471871..2c17834b 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -126,7 +126,7 @@ export default { [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.mjs`, [`${modules}/menu`]: `${dirModules}/menu/index.mjs`, [`${modules}/view`]: `${dirModules}/view/index.mjs`, - [`${modules}/help`]: `${dirModules}/help.js`, + [`${modules}/help`]: `${dirModules}/help.mjs`, [`${modules}/markdown`]: `${dirModules}/markdown.js`, [`${modules}/config`]: `${dirModules}/config/index.mjs`, [`${modules}/contact`]: `${dirModules}/contact.js`, diff --git a/client/modules/edit-names-vim.mjs b/client/modules/edit-names-vim.mjs index 75121b7e..8b3b2f89 100644 --- a/client/modules/edit-names-vim.mjs +++ b/client/modules/edit-names-vim.mjs @@ -1,4 +1,4 @@ -import Events from '#dom/events'; +import * as Events from '#dom/events'; const {CloudCmd} = globalThis; @@ -42,4 +42,3 @@ function listener(event) { hide(); } } - diff --git a/client/modules/help.js b/client/modules/help.js deleted file mode 100644 index b916fcb9..00000000 --- a/client/modules/help.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -/* global CloudCmd */ -CloudCmd.Help = exports; - -const Images = require('#dom/images'); - -module.exports.init = () => { - Images.show.load('top'); -}; - -module.exports.show = show; -module.exports.hide = hide; - -function show() { - const positionLoad = 'top'; - const relative = true; - - CloudCmd.Markdown.show('/HELP.md', { - positionLoad, - relative, - }); -} - -function hide() { - CloudCmd.View.hide(); -} diff --git a/client/modules/help.mjs b/client/modules/help.mjs new file mode 100644 index 00000000..c418bdf1 --- /dev/null +++ b/client/modules/help.mjs @@ -0,0 +1,28 @@ +import * as Images from '#dom/images'; + +const {CloudCmd} = globalThis; + +CloudCmd.Help = { + init, + show, + hide, +}; + +export function init() { + Images.show.load('top'); +} + +export function show() { + const positionLoad = 'top'; + const relative = true; + + CloudCmd.Markdown.show('/HELP.md', { + positionLoad, + relative, + }); +} + +export function hide() { + CloudCmd.View.hide(); +} + From c9f57c5f207ff696158f231c4473f9678810a95b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 01:07:24 +0200 Subject: [PATCH 021/390] feature: client: modules: edit-file-vim: migrate to ESM --- .webpack/js.mjs | 2 +- .../{edit-file-vim.js => edit-file-vim.mjs} | 23 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) rename client/modules/{edit-file-vim.js => edit-file-vim.mjs} (71%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index 2c17834b..a6936636 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -121,7 +121,7 @@ export default { 'cloudcmd': `${dir}/cloudcmd.mjs`, [`${modules}/edit`]: `${dirModules}/edit.mjs`, [`${modules}/edit-file`]: `${dirModules}/edit-file.js`, - [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.js`, + [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.mjs`, [`${modules}/edit-names`]: `${dirModules}/edit-names.js`, [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.mjs`, [`${modules}/menu`]: `${dirModules}/menu/index.mjs`, diff --git a/client/modules/edit-file-vim.js b/client/modules/edit-file-vim.mjs similarity index 71% rename from client/modules/edit-file-vim.js rename to client/modules/edit-file-vim.mjs index 0edd203b..16d557ae 100644 --- a/client/modules/edit-file-vim.js +++ b/client/modules/edit-file-vim.mjs @@ -1,9 +1,12 @@ -'use strict'; +import * as Events from '#dom/events'; -/* global CloudCmd */ -CloudCmd.EditFileVim = exports; +const {CloudCmd} = globalThis; -const Events = require('#dom/events'); +CloudCmd.EditFileVim = { + init, + show, + hide, +}; const {Key} = CloudCmd; @@ -15,11 +18,11 @@ const ConfigView = { }, }; -module.exports.init = async () => { +export async function init() { await CloudCmd.EditFile(); -}; +} -module.exports.show = async () => { +export async function show() { Events.addKey(listener); const editFile = await CloudCmd.EditFile.show(ConfigView); @@ -27,11 +30,9 @@ module.exports.show = async () => { editFile .getEditor() .setKeyMap('vim'); -}; +} -module.exports.hide = hide; - -function hide() { +export function hide() { CloudCmd.Edit.hide(); } From 2c2ca8eb39fd69608028007f841cee2a38eb56e3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 12:20:47 +0200 Subject: [PATCH 022/390] feature: client: edit-file: migrate to ESM --- .webpack/js.mjs | 2 +- client/cloudcmd.mjs | 2 +- .../modules/{edit-file.js => edit-file.mjs} | 33 +++++++++---------- 3 files changed, 18 insertions(+), 19 deletions(-) rename client/modules/{edit-file.js => edit-file.mjs} (89%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index a6936636..ac70fc6f 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -120,7 +120,7 @@ export default { 'sw': `${dir}/sw/sw.mjs`, 'cloudcmd': `${dir}/cloudcmd.mjs`, [`${modules}/edit`]: `${dirModules}/edit.mjs`, - [`${modules}/edit-file`]: `${dirModules}/edit-file.js`, + [`${modules}/edit-file`]: `${dirModules}/edit-file.mjs`, [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.mjs`, [`${modules}/edit-names`]: `${dirModules}/edit-names.js`, [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.mjs`, diff --git a/client/cloudcmd.mjs b/client/cloudcmd.mjs index 746f7e74..d72d7bff 100644 --- a/client/cloudcmd.mjs +++ b/client/cloudcmd.mjs @@ -4,9 +4,9 @@ import wraptile from 'wraptile'; import load from 'load.js'; import * as Util from '#common/util'; import * as CloudFunc from '#common/cloudfunc'; +import DOM from '#dom'; import {registerSW, listenSW} from './sw/register.mjs'; import {initSortPanel, sortPanel} from './sort.mjs'; -import DOM from '#dom'; import {createCloudCmd} from './client.mjs'; import * as Listeners from './listeners/index.mjs'; diff --git a/client/modules/edit-file.js b/client/modules/edit-file.mjs similarity index 89% rename from client/modules/edit-file.js rename to client/modules/edit-file.mjs index 59050a3c..f8cd21c5 100644 --- a/client/modules/edit-file.js +++ b/client/modules/edit-file.mjs @@ -1,12 +1,15 @@ -'use strict'; - /* global CloudCmd, DOM*/ -CloudCmd.EditFile = exports; +import Format from 'format-io'; +import {fullstore} from 'fullstore'; +import exec from 'execon'; +import supermenu from 'supermenu'; -const Format = require('format-io'); -const {fullstore} = require('fullstore'); -const exec = require('execon'); -const supermenu = require('supermenu'); +CloudCmd.EditFile = { + init, + show, + hide, + isChanged, +}; const Info = DOM.CurrentInfo; @@ -26,7 +29,7 @@ const ConfigView = { }, }; -module.exports.init = async () => { +export async function init() { isLoading(true); await CloudCmd.Edit(); @@ -36,7 +39,7 @@ module.exports.init = async () => { setListeners(editor); isLoading(false); -}; +} function getName() { const {name, isDir} = Info; @@ -47,7 +50,7 @@ function getName() { return name; } -module.exports.show = async (options) => { +export async function show(options) { if (isLoading()) return; @@ -86,11 +89,9 @@ module.exports.show = async (options) => { CloudCmd.Edit.show(optionsEdit); return CloudCmd.Edit; -}; +} -module.exports.hide = hide; - -function hide() { +export function hide() { CloudCmd.Edit.hide(); } @@ -176,9 +177,7 @@ function setMsgChanged(name) { MSG_CHANGED = `Do you want to save changes to ${name}?`; } -module.exports.isChanged = isChanged; - -async function isChanged() { +export async function isChanged() { const editor = CloudCmd.Edit.getEditor(); const is = editor.isChanged(); From 5b704d06841f1960b3b4b8ea972314ccb78becad Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 12:22:49 +0200 Subject: [PATCH 023/390] feature: client: edit-names: migrate to ESM --- .webpack/js.mjs | 2 +- .../modules/{edit-names.js => edit-names.mjs} | 36 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) rename client/modules/{edit-names.js => edit-names.mjs} (91%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index ac70fc6f..4d07237d 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -122,7 +122,7 @@ export default { [`${modules}/edit`]: `${dirModules}/edit.mjs`, [`${modules}/edit-file`]: `${dirModules}/edit-file.mjs`, [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.mjs`, - [`${modules}/edit-names`]: `${dirModules}/edit-names.js`, + [`${modules}/edit-names`]: `${dirModules}/edit-names.mjs`, [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.mjs`, [`${modules}/menu`]: `${dirModules}/menu/index.mjs`, [`${modules}/view`]: `${dirModules}/view/index.mjs`, diff --git a/client/modules/edit-names.js b/client/modules/edit-names.mjs similarity index 91% rename from client/modules/edit-names.js rename to client/modules/edit-names.mjs index 710ed7ea..d2ffc0b9 100644 --- a/client/modules/edit-names.js +++ b/client/modules/edit-names.mjs @@ -1,13 +1,16 @@ -'use strict'; +import {tryToCatch} from 'try-to-catch'; +import exec from 'execon'; +import supermenu from 'supermenu'; +import {multiRename} from 'multi-rename'; -const {tryToCatch} = require('try-to-catch'); +const {CloudCmd, DOM} = globalThis; -/* global CloudCmd, DOM */ -CloudCmd.EditNames = exports; - -const exec = require('execon'); -const supermenu = require('supermenu'); -const {multiRename} = require('multi-rename'); +CloudCmd.EditNames = { + init, + show, + hide, + isChanged, +}; const Info = DOM.CurrentInfo; const {Dialog} = DOM; @@ -22,13 +25,13 @@ const ConfigView = { }, }; -module.exports.init = async () => { +export async function init() { await CloudCmd.Edit(); setListeners(); -}; +} -module.exports.show = (options) => { +export function show(options) { const names = getActiveNames().join('\n'); const config = { ...ConfigView, @@ -50,7 +53,7 @@ module.exports.show = (options) => { CloudCmd.Edit.show(config); return CloudCmd.Edit; -}; +} async function keyListener(event) { const ctrl = event.ctrlKey; @@ -77,9 +80,7 @@ function getActiveNames() { return DOM.getFilenames(DOM.getActiveFiles()); } -module.exports.hide = hide; - -function hide() { +export function hide() { CloudCmd.Edit.hide(); } @@ -201,9 +202,7 @@ function setMenu(event) { Menu.show(position.x, position.y); } -module.exports.isChanged = isChanged; - -async function isChanged() { +export async function isChanged() { const editor = CloudCmd.Edit.getEditor(); const msg = 'Apply new names?'; @@ -214,3 +213,4 @@ async function isChanged() { !cancel && await applyNames(); } + From 9d6cffafdcf6ddb1fec6ab57156d2a54941594ba Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 13:27:16 +0200 Subject: [PATCH 024/390] feature: client: polifyll: migrate to ESM --- client/modules/edit-names.mjs | 1 - client/modules/{polyfill.js => polyfill.mjs} | 9 ++------ client/modules/polyfill.spec.js | 22 -------------------- client/modules/polyfill.spec.mjs | 20 ++++++++++++++++++ 4 files changed, 22 insertions(+), 30 deletions(-) rename client/modules/{polyfill.js => polyfill.mjs} (50%) delete mode 100644 client/modules/polyfill.spec.js create mode 100644 client/modules/polyfill.spec.mjs diff --git a/client/modules/edit-names.mjs b/client/modules/edit-names.mjs index d2ffc0b9..7ea3b4b6 100644 --- a/client/modules/edit-names.mjs +++ b/client/modules/edit-names.mjs @@ -213,4 +213,3 @@ export async function isChanged() { !cancel && await applyNames(); } - diff --git a/client/modules/polyfill.js b/client/modules/polyfill.mjs similarity index 50% rename from client/modules/polyfill.js rename to client/modules/polyfill.mjs index ff0e59c5..90b62689 100644 --- a/client/modules/polyfill.js +++ b/client/modules/polyfill.mjs @@ -1,12 +1,8 @@ -'use strict'; - -require('domtokenlist-shim'); - -const _scrollIntoViewIfNeeded = require('scroll-into-view-if-needed'); +import _scrollIntoViewIfNeeded from 'scroll-into-view-if-needed'; globalThis.DOM = globalThis.DOM || {}; -const scrollIntoViewIfNeeded = (el, overrides = {}) => { +export const scrollIntoViewIfNeeded = (el, overrides = {}) => { const { scroll = _scrollIntoViewIfNeeded, } = overrides; @@ -17,4 +13,3 @@ const scrollIntoViewIfNeeded = (el, overrides = {}) => { }; globalThis.DOM.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded; -module.exports.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded; diff --git a/client/modules/polyfill.spec.js b/client/modules/polyfill.spec.js deleted file mode 100644 index 79d9dfda..00000000 --- a/client/modules/polyfill.spec.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -const {test, stub} = require('supertape'); -const {scrollIntoViewIfNeeded} = require('./polyfill'); - -test('cloudcmd: client: polyfill: scrollIntoViewIfNeaded', (t) => { - const scroll = stub(); - const el = {}; - - scrollIntoViewIfNeeded(el, { - scroll, - }); - - const args = [ - el, { - block: 'nearest', - }, - ]; - - t.calledWith(scroll, args, 'should call scrollIntoViewIfNeaded'); - t.end(); -}); diff --git a/client/modules/polyfill.spec.mjs b/client/modules/polyfill.spec.mjs new file mode 100644 index 00000000..f595be64 --- /dev/null +++ b/client/modules/polyfill.spec.mjs @@ -0,0 +1,20 @@ +import {test, stub} from 'supertape'; +import {scrollIntoViewIfNeeded} from './polyfill.mjs'; + +test('cloudcmd: client: polyfill: scrollIntoViewIfNeeded', (t) => { + const scroll = stub(); + const el = {}; + + scrollIntoViewIfNeeded(el, { + scroll, + }); + + const args = [ + el, { + block: 'nearest', + }, + ]; + + t.calledWith(scroll, args, 'should call scrollIntoViewIfNeeded'); + t.end(); +}); From f8a941bdd9b38387fc25cb95ad749f8dcac7ba28 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 13:29:12 +0200 Subject: [PATCH 025/390] feature: client: modules: markdown: migrate to ESM --- .webpack/js.mjs | 4 +-- client/modules/{markdown.js => markdown.mjs} | 31 ++++++++++---------- 2 files changed, 17 insertions(+), 18 deletions(-) rename client/modules/{markdown.js => markdown.mjs} (59%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index 4d07237d..05ac1c30 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -127,7 +127,7 @@ export default { [`${modules}/menu`]: `${dirModules}/menu/index.mjs`, [`${modules}/view`]: `${dirModules}/view/index.mjs`, [`${modules}/help`]: `${dirModules}/help.mjs`, - [`${modules}/markdown`]: `${dirModules}/markdown.js`, + [`${modules}/markdown`]: `${dirModules}/markdown.mjs`, [`${modules}/config`]: `${dirModules}/config/index.mjs`, [`${modules}/contact`]: `${dirModules}/contact.js`, [`${modules}/upload`]: `${dirModules}/upload.mjs`, @@ -137,7 +137,7 @@ export default { [`${modules}/terminal-run`]: `${dirModules}/terminal-run.js`, [`${modules}/cloud`]: `${dirModules}/cloud.mjs`, [`${modules}/user-menu`]: `${dirModules}/user-menu/index.mjs`, - [`${modules}/polyfill`]: `${dirModules}/polyfill.js`, + [`${modules}/polyfill`]: `${dirModules}/polyfill.mjs`, [`${modules}/command-line`]: `${dirModules}/command-line.mjs`, }, output: { diff --git a/client/modules/markdown.js b/client/modules/markdown.mjs similarity index 59% rename from client/modules/markdown.js rename to client/modules/markdown.mjs index a4fafbb2..b125717a 100644 --- a/client/modules/markdown.js +++ b/client/modules/markdown.mjs @@ -1,26 +1,25 @@ -'use strict'; +import createElement from '@cloudcmd/create-element'; +import * as Images from '#dom/images'; +import {Markdown} from '#dom/rest'; +import {alert} from '#dom/dialog'; -/* global CloudCmd */ -CloudCmd.Markdown = exports; +const {CloudCmd} = globalThis; +CloudCmd.Markdown = { + init, + show, + hide, +}; -const createElement = require('@cloudcmd/create-element'); - -const Images = require('#dom/images'); -const {Markdown} = require('#dom/rest'); -const {alert} = require('#dom/dialog'); - -module.exports.init = async () => { +export async function init() { Images.show.load('top'); await CloudCmd.View(); -}; +} -module.exports.show = show; - -module.exports.hide = () => { +export function hide() { CloudCmd.View.hide(); -}; +} -async function show(name, options = {}) { +export async function show(name, options = {}) { const {positionLoad, relative} = options; Images.show.load(positionLoad); From 457c83dba9dfe51f4cd1a69712ee25030371636c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 13:35:24 +0200 Subject: [PATCH 026/390] feature: client: migrate to ESM --- client/dom/index.mjs | 2 +- client/dom/io/{index.js => index.mjs} | 30 +++++++++---------- .../dom/io/{index.spec.js => index.spec.mjs} | 6 ++-- .../io/{send-request.js => send-request.mjs} | 14 ++++----- ...-request.spec.js => send-request.spec.mjs} | 6 ++-- client/dom/rest.mjs | 4 +-- client/modules/markdown.mjs | 1 + 7 files changed, 28 insertions(+), 35 deletions(-) rename client/dom/io/{index.js => index.mjs} (78%) rename client/dom/io/{index.spec.js => index.spec.mjs} (80%) rename client/dom/io/{send-request.js => send-request.mjs} (80%) rename client/dom/io/{send-request.spec.js => send-request.spec.mjs} (69%) diff --git a/client/dom/index.mjs b/client/dom/index.mjs index 456571e2..d19c8009 100644 --- a/client/dom/index.mjs +++ b/client/dom/index.mjs @@ -11,7 +11,7 @@ import renameCurrent from './operations/rename-current.mjs'; import * as CurrentFile from './current-file.mjs'; import * as DOMTree from './dom-tree.mjs'; import * as Cmd from './cmd.mjs'; -import IO from './io/index.js'; +import * as IO from './io/index.mjs'; import {uploadDirectory} from './directory.mjs'; import * as Buffer from './buffer.mjs'; import {loadRemote as _loadRemote} from './load-remote.mjs'; diff --git a/client/dom/io/index.js b/client/dom/io/index.mjs similarity index 78% rename from client/dom/io/index.js rename to client/dom/io/index.mjs index d69d31af..b0c55e0a 100644 --- a/client/dom/io/index.js +++ b/client/dom/io/index.mjs @@ -1,13 +1,11 @@ -'use strict'; - -const {FS} = require('#common/cloudfunc'); -const _sendRequest = require('./send-request'); +import {FS} from '#common/cloudfunc'; +import {sendRequest as _sendRequest} from './send-request.mjs'; const imgPosition = { top: true, }; -module.exports.delete = async (url, data) => { +export const remove = async (url, data) => { return await _sendRequest({ method: 'DELETE', url: FS + url, @@ -18,7 +16,7 @@ module.exports.delete = async (url, data) => { }); }; -module.exports.patch = async (url, data) => { +export const patch = async (url, data) => { return await _sendRequest({ method: 'PATCH', url: FS + url, @@ -27,7 +25,7 @@ module.exports.patch = async (url, data) => { }); }; -module.exports.write = async (url, data) => { +export const write = async (url, data) => { return await _sendRequest({ method: 'PUT', url: FS + url, @@ -36,7 +34,7 @@ module.exports.write = async (url, data) => { }); }; -module.exports.createDirectory = async (url, overrides = {}) => { +export const createDirectory = async (url, overrides = {}) => { const { sendRequest = _sendRequest, } = overrides; @@ -48,7 +46,7 @@ module.exports.createDirectory = async (url, overrides = {}) => { }); }; -module.exports.read = async (url, dataType = 'text') => { +export const read = async (url, dataType = 'text') => { const notLog = !url.includes('?'); return await _sendRequest({ @@ -59,7 +57,7 @@ module.exports.read = async (url, dataType = 'text') => { }); }; -module.exports.copy = async (from, to, names) => { +export const copy = async (from, to, names) => { return await _sendRequest({ method: 'PUT', url: '/copy', @@ -72,7 +70,7 @@ module.exports.copy = async (from, to, names) => { }); }; -module.exports.pack = async (data) => { +export const pack = async (data) => { return await _sendRequest({ method: 'PUT', url: '/pack', @@ -80,7 +78,7 @@ module.exports.pack = async (data) => { }); }; -module.exports.extract = async (data) => { +export const extract = async (data) => { return await _sendRequest({ method: 'PUT', url: '/extract', @@ -88,7 +86,7 @@ module.exports.extract = async (data) => { }); }; -module.exports.move = async (from, to, names) => { +export const move = async (from, to, names) => { return await _sendRequest({ method: 'PUT', url: '/move', @@ -101,7 +99,7 @@ module.exports.move = async (from, to, names) => { }); }; -module.exports.rename = async (from, to) => { +export const rename = async (from, to) => { return await _sendRequest({ method: 'PUT', url: '/rename', @@ -113,7 +111,7 @@ module.exports.rename = async (from, to) => { }); }; -module.exports.Config = { +export const Config = { read: async () => { return await _sendRequest({ method: 'GET', @@ -133,7 +131,7 @@ module.exports.Config = { }, }; -module.exports.Markdown = { +export const Markdown = { read: async (url) => { return await _sendRequest({ method: 'GET', diff --git a/client/dom/io/index.spec.js b/client/dom/io/index.spec.mjs similarity index 80% rename from client/dom/io/index.spec.js rename to client/dom/io/index.spec.mjs index 19ebe5bd..ec2f0dfc 100644 --- a/client/dom/io/index.spec.js +++ b/client/dom/io/index.spec.mjs @@ -1,7 +1,5 @@ -'use strict'; - -const {test, stub} = require('supertape'); -const io = require('.'); +import {test, stub} from 'supertape'; +import * as io from './index.mjs'; test('client: dom: io', (t) => { const sendRequest = stub(); diff --git a/client/dom/io/send-request.js b/client/dom/io/send-request.mjs similarity index 80% rename from client/dom/io/send-request.js rename to client/dom/io/send-request.mjs index e32edc56..177d34b5 100644 --- a/client/dom/io/send-request.js +++ b/client/dom/io/send-request.mjs @@ -1,12 +1,9 @@ -'use strict'; - /* global CloudCmd */ -const {promisify} = require('es6-promisify'); +import {promisify} from 'es6-promisify'; +import * as Images from '#dom/images'; +import * as load from '#dom/load'; -const Images = require('#dom/images'); -const load = require('#dom/load'); - -module.exports = promisify((params, callback) => { +export const sendRequest = promisify((params, callback) => { const p = params; const {prefixURL} = CloudCmd; @@ -40,7 +37,8 @@ module.exports = promisify((params, callback) => { }); }); -module.exports._replaceHash = replaceHash; +export const _replaceHash = replaceHash; + function replaceHash(url) { /* * if we send ajax request - diff --git a/client/dom/io/send-request.spec.js b/client/dom/io/send-request.spec.mjs similarity index 69% rename from client/dom/io/send-request.spec.js rename to client/dom/io/send-request.spec.mjs index d0c7aa88..9b151a3c 100644 --- a/client/dom/io/send-request.spec.js +++ b/client/dom/io/send-request.spec.mjs @@ -1,7 +1,5 @@ -'use strict'; - -const {test} = require('supertape'); -const {_replaceHash} = require('./send-request'); +import {test} from 'supertape'; +import {_replaceHash} from './send-request.mjs'; test('cloudcmd: client: io: replaceHash', (t) => { const url = '/hello/####world'; diff --git a/client/dom/rest.mjs b/client/dom/rest.mjs index 75562419..99504cb6 100644 --- a/client/dom/rest.mjs +++ b/client/dom/rest.mjs @@ -2,7 +2,7 @@ import {tryToCatch} from 'try-to-catch'; import * as Dialog from '#dom/dialog'; import * as Images from '#dom/images'; import {encode} from '#common/entity'; -import IO from './io/index.js'; +import * as IO from './io/index.mjs'; const handleError = (promise) => async (...args) => { const [e, data] = await tryToCatch(promise, ...args); @@ -18,7 +18,7 @@ const handleError = (promise) => async (...args) => { return [e, data]; }; -export const remove = handleError(IO.delete); +export const remove = handleError(IO.remove); export const patch = handleError(IO.patch); export const write = handleError(IO.write); export const createDirectory = handleError(IO.createDirectory); diff --git a/client/modules/markdown.mjs b/client/modules/markdown.mjs index b125717a..c94c64e8 100644 --- a/client/modules/markdown.mjs +++ b/client/modules/markdown.mjs @@ -4,6 +4,7 @@ import {Markdown} from '#dom/rest'; import {alert} from '#dom/dialog'; const {CloudCmd} = globalThis; + CloudCmd.Markdown = { init, show, From bb32f7c4485cd44ea69aed31431b4d29f8917acd Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 14:05:11 +0200 Subject: [PATCH 027/390] feature: client: dom: migrate to ESM --- client/dom/io/index.mjs | 21 +++++++++++++++---- client/dom/io/index.spec.mjs | 40 ++++++++++++++++++++++++++++++++++++ package.json | 2 +- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/client/dom/io/index.mjs b/client/dom/io/index.mjs index b0c55e0a..d46c78f0 100644 --- a/client/dom/io/index.mjs +++ b/client/dom/io/index.mjs @@ -1,19 +1,32 @@ import {FS} from '#common/cloudfunc'; import {sendRequest as _sendRequest} from './send-request.mjs'; +const {assign} = Object; + const imgPosition = { top: true, }; -export const remove = async (url, data) => { - return await _sendRequest({ +export const remove = async (url, data, overrides = {}) => { + const { + sendRequest = _sendRequest, + } = overrides; + + const request = { method: 'DELETE', url: FS + url, - data, imgPosition: { top: Boolean(data), }, - }); + }; + + if (data) + assign(request, { + data, + url: `${request.url}?files`, + }); + + return await sendRequest(request); }; export const patch = async (url, data) => { diff --git a/client/dom/io/index.spec.mjs b/client/dom/io/index.spec.mjs index ec2f0dfc..e7d87cc2 100644 --- a/client/dom/io/index.spec.mjs +++ b/client/dom/io/index.spec.mjs @@ -19,3 +19,43 @@ test('client: dom: io', (t) => { t.calledWith(sendRequest, [expected]); t.end(); }); + +test('client: dom: io: remove: no files', async (t) => { + const sendRequest = stub(); + + await io.remove('/hello', null, { + sendRequest, + }); + + const expected = { + imgPosition: { + top: false, + }, + method: 'DELETE', + url: '/fs/hello', + }; + + t.calledWith(sendRequest, [expected]); + t.end(); +}); + +test('client: dom: io: remove: files', async (t) => { + const sendRequest = stub(); + const files = ['world']; + + await io.remove('/hello', files, { + sendRequest, + }); + + const expected = { + imgPosition: { + top: true, + }, + data: ['world'], + method: 'DELETE', + url: '/fs/hello?files', + }; + + t.calledWith(sendRequest, [expected]); + t.end(); +}); diff --git a/package.json b/package.json index d9ce8f67..bf18523c 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "@cloudcmd/stub": "^5.0.0", "@iocmd/wait": "^2.1.0", "@putout/eslint-flat": "^4.0.0", - "@putout/plugin-cloudcmd": "^5.0.0", + "@putout/plugin-cloudcmd": "^5.2.0", "@types/node-fetch": "^2.6.11", "auto-globals": "^4.0.0", "babel-loader": "^10.0.0", From 1db64d7324c1ee5b13643884095b55fff4e12747 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 14:06:43 +0200 Subject: [PATCH 028/390] chore: cloudcmd: v19.2.0 --- ChangeLog | 15 +++++++++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index cc3b53b9..4a1c9f7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2026.02.03, v19.2.0 + +feature: +- bb32f7c4 client: dom: migrate to ESM +- 457c83db client: migrate to ESM +- f8a941bd client: modules: markdown: migrate to ESM +- 9d6cffaf client: polifyll: migrate to ESM +- 5b704d06 client: edit-names: migrate to ESM +- 2c2ca8eb client: edit-file: migrate to ESM +- c9f57c5f client: modules: edit-file-vim: migrate to ESM +- 327ac9de client: modules: help: migrate to ESM +- dc34ee87 cloudcmd: @putout/plugin-cloudcmd v5.0.0 +- 3cd3695b client: modules: edit-names-vim: migrate to ESM +- dfcbfd63 client: modules: terminal: migrate to ESM + 2026.02.02, v19.1.21 feature: diff --git a/HELP.md b/HELP.md index 13fb7a8d..50e246b8 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.1.21 +# Cloud Commander v19.2.0 ### [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 +- *2026.02.03*, **[v19.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.2.0)** - *2026.02.02*, **[v19.1.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.21)** - *2026.01.31*, **[v19.1.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.20)** - *2026.01.30*, **[v19.1.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.19)** diff --git a/README.md b/README.md index 5b61432a..2d0fb524 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.1.21 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.2.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 bf18523c..6501ca82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.1.21", + "version": "19.2.0", "type": "commonjs", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 071141bc5a83fa9de73ce484fd9aa8bdf463be6c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 14:11:52 +0200 Subject: [PATCH 029/390] feature: client: terminal-run: migrate to ESM --- .webpack/js.mjs | 2 +- .../{terminal-run.js => terminal-run.mjs} | 44 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) rename client/modules/{terminal-run.js => terminal-run.mjs} (81%) diff --git a/.webpack/js.mjs b/.webpack/js.mjs index 05ac1c30..08ddfc94 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.mjs @@ -134,7 +134,7 @@ export default { [`${modules}/operation`]: `${dirModules}/operation/index.mjs`, [`${modules}/konsole`]: `${dirModules}/konsole.mjs`, [`${modules}/terminal`]: `${dirModules}/terminal.mjs`, - [`${modules}/terminal-run`]: `${dirModules}/terminal-run.js`, + [`${modules}/terminal-run`]: `${dirModules}/terminal-run.mjs`, [`${modules}/cloud`]: `${dirModules}/cloud.mjs`, [`${modules}/user-menu`]: `${dirModules}/user-menu/index.mjs`, [`${modules}/polyfill`]: `${dirModules}/polyfill.mjs`, diff --git a/client/modules/terminal-run.js b/client/modules/terminal-run.mjs similarity index 81% rename from client/modules/terminal-run.js rename to client/modules/terminal-run.mjs index 0f96c20c..c7dbf9c2 100644 --- a/client/modules/terminal-run.js +++ b/client/modules/terminal-run.mjs @@ -1,21 +1,21 @@ -'use strict'; - -/* global CloudCmd, gritty */ -const {promisify} = require('es6-promisify'); -const {tryToCatch} = require('try-to-catch'); -const {fullstore} = require('fullstore'); - -require('../../css/terminal.css'); - -const exec = require('execon'); -const load = require('load.js'); -const DOM = require('#dom'); -const Images = require('#dom/images'); +import '../../css/terminal.css'; +import {promisify} from 'es6-promisify'; +import {tryToCatch} from 'try-to-catch'; +import {fullstore} from 'fullstore'; +import exec from 'execon'; +import load from 'load.js'; +import DOM from '#dom'; +import * as Images from '#dom/images'; const {Dialog} = DOM; +const {CloudCmd} = globalThis; const {Key, config} = CloudCmd; -CloudCmd.TerminalRun = exports; +CloudCmd.TerminalRun = { + init, + show, + hide, +}; let Loaded; let Terminal; @@ -40,7 +40,7 @@ const loadAll = async () => { Loaded = true; }; -module.exports.init = async () => { +export async function init() { if (!config('terminal')) return; @@ -48,9 +48,13 @@ module.exports.init = async () => { await CloudCmd.View(); await loadAll(); -}; +} -module.exports.show = promisify((options = {}, fn) => { +export async function show(options = {}) { + await runTerminal(options); +} + +const runTerminal = promisify((options, fn) => { if (!Loaded) return fn(null, -1); @@ -69,9 +73,7 @@ module.exports.show = promisify((options = {}, fn) => { }); }); -module.exports.hide = hide; - -function hide() { +export function hide() { CloudCmd.View.hide(); } @@ -108,7 +110,7 @@ function create(createOptions) { let commandExit = false; - const {socket, terminal} = gritty(document.body, options); + const {socket, terminal} = globalThis.gritty(document.body, options); Socket = socket; Terminal = terminal; From e8a81c49eaa5a0a1b670a1d3e740b42ae2b00ffa Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 14:19:16 +0200 Subject: [PATCH 030/390] feature: client: dom: events: migrate to ESM --- client/dom/events/event-store.js | 17 ----------------- client/dom/events/event-store.mjs | 15 +++++++++++++++ ...event-store.spec.js => event-store.spec.mjs} | 6 ++---- client/dom/events/index.mjs | 2 +- 4 files changed, 18 insertions(+), 22 deletions(-) delete mode 100644 client/dom/events/event-store.js create mode 100644 client/dom/events/event-store.mjs rename client/dom/events/{event-store.spec.js => event-store.spec.mjs} (86%) diff --git a/client/dom/events/event-store.js b/client/dom/events/event-store.js deleted file mode 100644 index ae9ad90a..00000000 --- a/client/dom/events/event-store.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -let list = []; - -module.exports.add = (el, name, fn) => { - list.push([ - el, - name, - fn, - ]); -}; - -module.exports.clear = () => { - list = []; -}; - -module.exports.get = () => list; diff --git a/client/dom/events/event-store.mjs b/client/dom/events/event-store.mjs new file mode 100644 index 00000000..1cbfe7a4 --- /dev/null +++ b/client/dom/events/event-store.mjs @@ -0,0 +1,15 @@ +let list = []; + +export const add = (el, name, fn) => { + list.push([ + el, + name, + fn, + ]); +}; + +export const clear = () => { + list = []; +}; + +export const get = () => list; diff --git a/client/dom/events/event-store.spec.js b/client/dom/events/event-store.spec.mjs similarity index 86% rename from client/dom/events/event-store.spec.js rename to client/dom/events/event-store.spec.mjs index 7907a52c..c543fa3b 100644 --- a/client/dom/events/event-store.spec.js +++ b/client/dom/events/event-store.spec.mjs @@ -1,7 +1,5 @@ -'use strict'; - -const {test} = require('supertape'); -const eventStore = require('./event-store'); +import {test} from 'supertape'; +import * as eventStore from './event-store.mjs'; test('event-store: get', (t) => { const el = {}; diff --git a/client/dom/events/index.mjs b/client/dom/events/index.mjs index 0762d560..2c3bfb76 100644 --- a/client/dom/events/index.mjs +++ b/client/dom/events/index.mjs @@ -1,5 +1,5 @@ import itype from 'itype'; -import EventStore from './event-store.js'; +import * as EventStore from './event-store.mjs'; /** * safe add event listener From 4533a25c6fa5bc9b6fc30d3852e46906d8b90559 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 15:03:49 +0200 Subject: [PATCH 031/390] feature: cloudcmd: migrate to ESM --- .cloudcmd.menu.js | 4 +- .madrun.mjs => .madrun.js | 4 +- .npmignore | 2 +- .putout.json | 3 +- .webpack/{css.mjs => css.js} | 0 .webpack/{html.mjs => html.js} | 0 .webpack/{js.mjs => js.js} | 42 +++++++++---------- bin/{cloudcmd.mjs => cloudcmd.js} | 10 ++--- bin/{release.mjs => release.js} | 2 - client/{client.mjs => client.js} | 8 ++-- client/{cloudcmd.mjs => cloudcmd.js} | 8 ++-- client/dom/{buffer.mjs => buffer.js} | 0 client/dom/{cmd.mjs => cmd.js} | 0 .../dom/{current-file.mjs => current-file.js} | 0 ...ent-file.spec.mjs => current-file.spec.js} | 2 +- client/dom/{dialog.mjs => dialog.js} | 0 client/dom/{directory.mjs => directory.js} | 0 client/dom/{dom-tree.mjs => dom-tree.js} | 0 .../{dom-tree.spec.mjs => dom-tree.spec.js} | 2 +- .../{event-store.mjs => event-store.js} | 0 ...ent-store.spec.mjs => event-store.spec.js} | 2 +- client/dom/events/{index.mjs => index.js} | 2 +- client/dom/{files.mjs => files.js} | 0 client/dom/{images.mjs => images.js} | 4 +- client/dom/{index.mjs => index.js} | 18 ++++---- client/dom/{index.spec.mjs => index.spec.js} | 0 client/dom/io/{index.mjs => index.js} | 2 +- .../dom/io/{index.spec.mjs => index.spec.js} | 2 +- .../io/{send-request.mjs => send-request.js} | 0 ...-request.spec.mjs => send-request.spec.js} | 2 +- .../dom/{load-remote.mjs => load-remote.js} | 2 +- client/dom/{load.mjs => load.js} | 0 .../{rename-current.mjs => rename-current.js} | 2 +- ...urrent.spec.mjs => rename-current.spec.js} | 2 +- client/dom/{rest.mjs => rest.js} | 2 +- ...ct-by-pattern.mjs => select-by-pattern.js} | 4 +- client/dom/{storage.mjs => storage.js} | 0 .../dom/{storage.spec.mjs => storage.spec.js} | 0 .../dom/{upload-files.mjs => upload-files.js} | 2 +- ...-table.mjs => get-json-from-file-table.js} | 0 client/key/{binder.mjs => binder.js} | 0 client/key/{index.mjs => index.js} | 10 ++--- client/key/{index.spec.mjs => index.spec.js} | 6 +-- client/key/{key.mjs => key.js} | 0 ...ent-by-char.mjs => set-current-by-char.js} | 0 client/key/vim/{find.mjs => find.js} | 0 .../key/vim/{find.spec.mjs => find.spec.js} | 4 +- ...globals.fixture.mjs => globals.fixture.js} | 0 client/key/vim/{index.mjs => index.js} | 6 +-- .../key/vim/{index.spec.mjs => index.spec.js} | 4 +- .../vim/{set-current.mjs => set-current.js} | 0 client/key/vim/{vim.mjs => vim.js} | 0 client/key/vim/{vim.spec.mjs => vim.spec.js} | 2 +- .../listeners/{get-index.mjs => get-index.js} | 0 .../{get-index.spec.mjs => get-index.spec.js} | 2 +- .../listeners/{get-range.mjs => get-range.js} | 0 .../{get-range.spec.mjs => get-range.spec.js} | 2 +- client/listeners/{index.mjs => index.js} | 8 ++-- client/{load-module.mjs => load-module.js} | 0 client/modules/{cloud.mjs => cloud.js} | 0 .../{command-line.mjs => command-line.js} | 3 +- client/modules/config/{index.mjs => index.js} | 6 +-- client/modules/config/{input.mjs => input.js} | 0 client/modules/contact.js | 24 +++++------ .../{edit-file-vim.mjs => edit-file-vim.js} | 0 .../modules/{edit-file.mjs => edit-file.js} | 0 .../{edit-names-vim.mjs => edit-names-vim.js} | 0 .../modules/{edit-names.mjs => edit-names.js} | 0 client/modules/{edit.mjs => edit.js} | 0 client/modules/{help.mjs => help.js} | 1 - client/modules/{konsole.mjs => konsole.js} | 0 client/modules/{markdown.mjs => markdown.js} | 0 .../menu/{cloudmenu.mjs => cloudmenu.js} | 0 client/modules/menu/{index.mjs => index.js} | 2 +- .../operation/{format.mjs => format.js} | 0 ...rent-name.mjs => get-next-current-name.js} | 0 .../modules/operation/{index.mjs => index.js} | 14 +++---- ...move-extension.mjs => remove-extension.js} | 0 ...sion.spec.mjs => remove-extension.spec.js} | 2 +- .../{set-listeners.mjs => set-listeners.js} | 2 +- client/modules/{polyfill.mjs => polyfill.js} | 0 .../{polyfill.spec.mjs => polyfill.spec.js} | 2 +- .../{terminal-run.mjs => terminal-run.js} | 0 client/modules/{terminal.mjs => terminal.js} | 0 client/modules/{upload.mjs => upload.js} | 0 .../{get-user-menu.mjs => get-user-menu.js} | 0 ...er-menu.spec.mjs => get-user-menu.spec.js} | 2 +- .../modules/user-menu/{index.mjs => index.js} | 10 ++--- .../user-menu/{navigate.mjs => navigate.js} | 2 +- .../{navigate.spec.mjs => navigate.spec.js} | 4 +- .../{parse-error.mjs => parse-error.js} | 0 ...rse-error.spec.mjs => parse-error.spec.js} | 2 +- ...parse-user-menu.mjs => parse-user-menu.js} | 0 ...-menu.spec.mjs => parse-user-menu.spec.js} | 2 +- client/modules/user-menu/{run.mjs => run.js} | 0 .../user-menu/{run.spec.mjs => run.spec.js} | 2 +- .../view/{get-type.mjs => get-type.js} | 0 client/modules/view/{index.mjs => index.js} | 2 +- .../view/{index.spec.mjs => index.spec.js} | 2 +- client/modules/view/{types.mjs => types.js} | 0 .../view/{types.spec.mjs => types.spec.js} | 2 +- client/{sort.mjs => sort.js} | 0 client/sw/{register.mjs => register.js} | 2 +- .../{register.spec.mjs => register.spec.js} | 2 +- client/sw/{sw.mjs => sw.js} | 0 common/callbackify.js | 4 +- common/callbackify.spec.js | 12 ++---- common/{cloudfunc.mjs => cloudfunc.js} | 0 .../{cloudfunc.spec.mjs => cloudfunc.spec.js} | 0 common/datetime.js | 6 +-- common/datetime.spec.js | 9 ++-- common/{entity.mjs => entity.js} | 0 common/{entity.spec.mjs => entity.spec.js} | 0 common/try-to-promise-all.js | 5 +-- common/try-to-promise-all.spec.js | 6 +-- common/{util.mjs => util.js} | 0 common/{util.spec.mjs => util.spec.js} | 0 cssnano.config.mjs => cssnano.config.js | 0 docker/Dockerfile | 2 +- docker/Dockerfile.alpine | 2 +- eslint.config.mjs => eslint.config.js | 0 package.json | 30 ++++++------- ...ape.mjs => split-autoglobals-with-tape.js} | 0 server/auth.js | 9 ++-- server/{cloudcmd.mjs => cloudcmd.js} | 14 +++---- .../{cloudcmd.spec.mjs => cloudcmd.spec.js} | 2 +- server/{columns.mjs => columns.js} | 0 server/{columns.spec.mjs => columns.spec.js} | 2 +- server/{config.mjs => config.js} | 40 +++++++----------- server/{config.spec.mjs => config.spec.js} | 4 +- server/depstore.js | 4 +- server/distribute/{export.mjs => export.js} | 2 +- .../{export.spec.mjs => export.spec.js} | 4 +- server/distribute/{import.mjs => import.js} | 4 +- .../{import.spec.mjs => import.spec.js} | 6 +-- server/distribute/{log.mjs => log.js} | 0 .../distribute/{log.spec.mjs => log.spec.js} | 4 +- server/{env.mjs => env.js} | 0 server/env.spec.js | 8 ++-- server/exit.js | 5 +-- server/exit.spec.js | 9 ++-- server/markdown/index.js | 22 +++++----- .../{index.spec.mjs => index.spec.js} | 2 +- server/markdown/worker.js | 6 +-- server/{modulas.mjs => modulas.js} | 0 server/prefixer.js | 4 +- server/prefixer.spec.js | 7 +--- server/repl.js | 10 ++--- server/rest/{index.mjs => index.js} | 0 server/rest/index.spec.js | 11 ++--- server/rest/info.js | 13 +++--- server/rest/info.spec.js | 9 ++-- server/root.js | 6 +-- server/root.spec.js | 7 +--- server/{route.mjs => route.js} | 4 +- server/{route.spec.mjs => route.spec.js} | 4 +- server/{server.mjs => server.js} | 2 +- server/show-config.js | 8 ++-- .../show-config.spec.js | 9 ++-- server/template.js | 10 +++-- server/terminal.js | 7 ++-- .../{terminal.spec.mjs => terminal.spec.js} | 2 +- server/{theme.mjs => theme.js} | 0 server/{themes.spec.mjs => themes.spec.js} | 2 +- server/{user-menu.mjs => user-menu.js} | 0 .../{user-menu.spec.mjs => user-menu.spec.js} | 17 +++++++- server/{validate.mjs => validate.js} | 4 +- .../{validate.spec.mjs => validate.spec.js} | 4 +- static/user-menu.js | 10 ++--- static/user-menu.spec.js | 16 +++---- test/{before.mjs => before.js} | 2 +- test/common/cloudfunc.js | 19 +++++---- test/rest/{config.mjs => config.js} | 2 +- test/rest/{copy.mjs => copy.js} | 2 +- test/rest/{fs.mjs => fs.js} | 2 +- test/rest/{move.mjs => move.js} | 2 +- test/rest/{pack.mjs => pack.js} | 2 +- test/rest/{rename.mjs => rename.js} | 2 +- test/server/{console.mjs => console.js} | 4 +- test/server/env.js | 8 ++-- test/server/{modulas.mjs => modulas.js} | 4 +- test/{static.mjs => static.js} | 2 +- webpack.config.js | 10 +++++ webpack.config.mjs | 10 ----- 184 files changed, 339 insertions(+), 388 deletions(-) rename .madrun.mjs => .madrun.js (97%) rename .webpack/{css.mjs => css.js} (100%) rename .webpack/{html.mjs => html.js} (100%) rename .webpack/{js.mjs => js.js} (82%) rename bin/{cloudcmd.mjs => cloudcmd.js} (97%) rename bin/{release.mjs => release.js} (98%) rename client/{client.mjs => client.js} (98%) rename client/{cloudcmd.mjs => cloudcmd.js} (89%) rename client/dom/{buffer.mjs => buffer.js} (100%) rename client/dom/{cmd.mjs => cmd.js} (100%) rename client/dom/{current-file.mjs => current-file.js} (100%) rename client/dom/{current-file.spec.mjs => current-file.spec.js} (99%) rename client/dom/{dialog.mjs => dialog.js} (100%) rename client/dom/{directory.mjs => directory.js} (100%) rename client/dom/{dom-tree.mjs => dom-tree.js} (100%) rename client/dom/{dom-tree.spec.mjs => dom-tree.spec.js} (95%) rename client/dom/events/{event-store.mjs => event-store.js} (100%) rename client/dom/events/{event-store.spec.mjs => event-store.spec.js} (93%) rename client/dom/events/{index.mjs => index.js} (98%) rename client/dom/{files.mjs => files.js} (100%) rename client/dom/{images.mjs => images.js} (99%) rename client/dom/{index.mjs => index.js} (97%) rename client/dom/{index.spec.mjs => index.spec.js} (100%) rename client/dom/io/{index.mjs => index.js} (98%) rename client/dom/io/{index.spec.mjs => index.spec.js} (97%) rename client/dom/io/{send-request.mjs => send-request.js} (100%) rename client/dom/io/{send-request.spec.mjs => send-request.spec.js} (84%) rename client/dom/{load-remote.mjs => load-remote.js} (97%) rename client/dom/{load.mjs => load.js} (100%) rename client/dom/operations/{rename-current.mjs => rename-current.js} (96%) rename client/dom/operations/{rename-current.spec.mjs => rename-current.spec.js} (97%) rename client/dom/{rest.mjs => rest.js} (96%) rename client/dom/{select-by-pattern.mjs => select-by-pattern.js} (93%) rename client/dom/{storage.mjs => storage.js} (100%) rename client/dom/{storage.spec.mjs => storage.spec.js} (100%) rename client/dom/{upload-files.mjs => upload-files.js} (96%) rename client/{get-json-from-file-table.mjs => get-json-from-file-table.js} (100%) rename client/key/{binder.mjs => binder.js} (100%) rename client/key/{index.mjs => index.js} (98%) rename client/key/{index.spec.mjs => index.spec.js} (88%) rename client/key/{key.mjs => key.js} (100%) rename client/key/{set-current-by-char.mjs => set-current-by-char.js} (100%) rename client/key/vim/{find.mjs => find.js} (100%) rename client/key/vim/{find.spec.mjs => find.spec.js} (79%) rename client/key/vim/{globals.fixture.mjs => globals.fixture.js} (100%) rename client/key/vim/{index.mjs => index.js} (97%) rename client/key/vim/{index.spec.mjs => index.spec.js} (99%) rename client/key/vim/{set-current.mjs => set-current.js} (100%) rename client/key/vim/{vim.mjs => vim.js} (100%) rename client/key/vim/{vim.spec.mjs => vim.spec.js} (97%) rename client/listeners/{get-index.mjs => get-index.js} (100%) rename client/listeners/{get-index.spec.mjs => get-index.spec.js} (90%) rename client/listeners/{get-range.mjs => get-range.js} (100%) rename client/listeners/{get-range.spec.mjs => get-range.spec.js} (96%) rename client/listeners/{index.mjs => index.js} (99%) rename client/{load-module.mjs => load-module.js} (100%) rename client/modules/{cloud.mjs => cloud.js} (100%) rename client/modules/{command-line.mjs => command-line.js} (96%) rename client/modules/config/{index.mjs => index.js} (98%) rename client/modules/config/{input.mjs => input.js} (100%) rename client/modules/{edit-file-vim.mjs => edit-file-vim.js} (100%) rename client/modules/{edit-file.mjs => edit-file.js} (100%) rename client/modules/{edit-names-vim.mjs => edit-names-vim.js} (100%) rename client/modules/{edit-names.mjs => edit-names.js} (100%) rename client/modules/{edit.mjs => edit.js} (100%) rename client/modules/{help.mjs => help.js} (99%) rename client/modules/{konsole.mjs => konsole.js} (100%) rename client/modules/{markdown.mjs => markdown.js} (100%) rename client/modules/menu/{cloudmenu.mjs => cloudmenu.js} (100%) rename client/modules/menu/{index.mjs => index.js} (99%) rename client/modules/operation/{format.mjs => format.js} (100%) rename client/modules/operation/{get-next-current-name.mjs => get-next-current-name.js} (100%) rename client/modules/operation/{index.mjs => index.js} (97%) rename client/modules/operation/{remove-extension.mjs => remove-extension.js} (100%) rename client/modules/operation/{remove-extension.spec.mjs => remove-extension.spec.js} (92%) rename client/modules/operation/{set-listeners.mjs => set-listeners.js} (98%) rename client/modules/{polyfill.mjs => polyfill.js} (100%) rename client/modules/{polyfill.spec.mjs => polyfill.spec.js} (87%) rename client/modules/{terminal-run.mjs => terminal-run.js} (100%) rename client/modules/{terminal.mjs => terminal.js} (100%) rename client/modules/{upload.mjs => upload.js} (100%) rename client/modules/user-menu/{get-user-menu.mjs => get-user-menu.js} (100%) rename client/modules/user-menu/{get-user-menu.spec.mjs => get-user-menu.spec.js} (89%) rename client/modules/user-menu/{index.mjs => index.js} (94%) rename client/modules/user-menu/{navigate.mjs => navigate.js} (97%) rename client/modules/user-menu/{navigate.spec.mjs => navigate.spec.js} (97%) rename client/modules/user-menu/{parse-error.mjs => parse-error.js} (100%) rename client/modules/user-menu/{parse-error.spec.mjs => parse-error.spec.js} (94%) rename client/modules/user-menu/{parse-user-menu.mjs => parse-user-menu.js} (100%) rename client/modules/user-menu/{parse-user-menu.spec.mjs => parse-user-menu.spec.js} (91%) rename client/modules/user-menu/{run.mjs => run.js} (100%) rename client/modules/user-menu/{run.spec.mjs => run.spec.js} (89%) rename client/modules/view/{get-type.mjs => get-type.js} (100%) rename client/modules/view/{index.mjs => index.js} (99%) rename client/modules/view/{index.spec.mjs => index.spec.js} (98%) rename client/modules/view/{types.mjs => types.js} (100%) rename client/modules/view/{types.spec.mjs => types.spec.js} (94%) rename client/{sort.mjs => sort.js} (100%) rename client/sw/{register.mjs => register.js} (90%) rename client/sw/{register.spec.mjs => register.spec.js} (99%) rename client/sw/{sw.mjs => sw.js} (100%) rename common/{cloudfunc.mjs => cloudfunc.js} (100%) rename common/{cloudfunc.spec.mjs => cloudfunc.spec.js} (100%) rename common/{entity.mjs => entity.js} (100%) rename common/{entity.spec.mjs => entity.spec.js} (100%) rename common/{util.mjs => util.js} (100%) rename common/{util.spec.mjs => util.spec.js} (100%) rename cssnano.config.mjs => cssnano.config.js (100%) rename eslint.config.mjs => eslint.config.js (100%) rename rules/{split-autoglobals-with-tape.mjs => split-autoglobals-with-tape.js} (100%) rename server/{cloudcmd.mjs => cloudcmd.js} (95%) rename server/{cloudcmd.spec.mjs => cloudcmd.spec.js} (99%) rename server/{columns.mjs => columns.js} (100%) rename server/{columns.spec.mjs => columns.spec.js} (95%) rename server/{config.mjs => config.js} (88%) rename server/{config.spec.mjs => config.spec.js} (95%) rename server/distribute/{export.mjs => export.js} (99%) rename server/distribute/{export.spec.mjs => export.spec.js} (94%) rename server/distribute/{import.mjs => import.js} (98%) rename server/distribute/{import.spec.mjs => import.spec.js} (97%) rename server/distribute/{log.mjs => log.js} (100%) rename server/distribute/{log.spec.mjs => log.spec.js} (89%) rename server/{env.mjs => env.js} (100%) rename server/markdown/{index.spec.mjs => index.spec.js} (98%) rename server/{modulas.mjs => modulas.js} (100%) rename server/rest/{index.mjs => index.js} (100%) rename server/{route.mjs => route.js} (98%) rename server/{route.spec.mjs => route.spec.js} (99%) rename server/{server.mjs => server.js} (98%) rename test/server/show-config.js => server/show-config.spec.js (86%) rename server/{terminal.spec.mjs => terminal.spec.js} (97%) rename server/{theme.mjs => theme.js} (100%) rename server/{themes.spec.mjs => themes.spec.js} (94%) rename server/{user-menu.mjs => user-menu.js} (100%) rename server/{user-menu.spec.mjs => user-menu.spec.js} (83%) rename server/{validate.mjs => validate.js} (95%) rename server/{validate.spec.mjs => validate.spec.js} (97%) rename test/{before.mjs => before.js} (97%) rename test/rest/{config.mjs => config.js} (97%) rename test/rest/{copy.mjs => copy.js} (95%) rename test/rest/{fs.mjs => fs.js} (92%) rename test/rest/{move.mjs => move.js} (97%) rename test/rest/{pack.mjs => pack.js} (99%) rename test/rest/{rename.mjs => rename.js} (97%) rename test/server/{console.mjs => console.js} (92%) rename test/server/{modulas.mjs => modulas.js} (94%) rename test/{static.mjs => static.js} (98%) create mode 100644 webpack.config.js delete mode 100644 webpack.config.mjs diff --git a/.cloudcmd.menu.js b/.cloudcmd.menu.js index 6c808d18..08637d80 100644 --- a/.cloudcmd.menu.js +++ b/.cloudcmd.menu.js @@ -1,6 +1,4 @@ -'use strict'; - -module.exports = { +export default { 'F2 - Rename file': async ({DOM}) => { await DOM.renameCurrent(); }, diff --git a/.madrun.mjs b/.madrun.js similarity index 97% rename from .madrun.mjs rename to .madrun.js index ade83fa8..16571812 100644 --- a/.madrun.mjs +++ b/.madrun.js @@ -21,7 +21,7 @@ const buildEnv = (is17 || is20) && { }; export default { - 'start': () => 'node bin/cloudcmd.mjs', + 'start': () => 'node bin/cloudcmd.js', 'start:dev': async () => await run('start', null, { NODE_ENV: 'development', }), @@ -41,7 +41,7 @@ export default { 'wisdom': async () => await run(['lint:all', 'build', 'test'], null, { CI: 1, }), - 'wisdom:type': () => 'bin/release.mjs', + 'wisdom:type': () => 'bin/release.js', 'coverage': async () => [testEnv, `c8 ${await cutEnv('test')}`], 'coverage:report': () => 'c8 report --reporter=lcov', 'report': () => 'c8 report --reporter=lcov', diff --git a/.npmignore b/.npmignore index b668cf7f..ceb649e8 100644 --- a/.npmignore +++ b/.npmignore @@ -20,7 +20,7 @@ bower.json manifest.yml deno.json -bin/release.mjs +bin/release.* client img/logo/cloudcmd-hq.png diff --git a/.putout.json b/.putout.json index 800cdeab..3482fdb7 100644 --- a/.putout.json +++ b/.putout.json @@ -8,7 +8,8 @@ "*.md" ], "rules": { - "package-json/add-type": "off" + "package-json/add-type": "off", + "esm/add-index-to-import": "off" }, "match": { ".filesystem.json": { diff --git a/.webpack/css.mjs b/.webpack/css.js similarity index 100% rename from .webpack/css.mjs rename to .webpack/css.js diff --git a/.webpack/html.mjs b/.webpack/html.js similarity index 100% rename from .webpack/html.mjs rename to .webpack/html.js diff --git a/.webpack/js.mjs b/.webpack/js.js similarity index 82% rename from .webpack/js.mjs rename to .webpack/js.js index 08ddfc94..4759741e 100644 --- a/.webpack/js.mjs +++ b/.webpack/js.js @@ -117,28 +117,28 @@ export default { 'config': `${dirCss}/config.css`, 'terminal': `${dirCss}/terminal.css`, 'user-menu': `${dirCss}/user-menu.css`, - 'sw': `${dir}/sw/sw.mjs`, - 'cloudcmd': `${dir}/cloudcmd.mjs`, - [`${modules}/edit`]: `${dirModules}/edit.mjs`, - [`${modules}/edit-file`]: `${dirModules}/edit-file.mjs`, - [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.mjs`, - [`${modules}/edit-names`]: `${dirModules}/edit-names.mjs`, - [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.mjs`, - [`${modules}/menu`]: `${dirModules}/menu/index.mjs`, - [`${modules}/view`]: `${dirModules}/view/index.mjs`, - [`${modules}/help`]: `${dirModules}/help.mjs`, - [`${modules}/markdown`]: `${dirModules}/markdown.mjs`, - [`${modules}/config`]: `${dirModules}/config/index.mjs`, + 'sw': `${dir}/sw/sw.js`, + 'cloudcmd': `${dir}/cloudcmd.js`, + [`${modules}/edit`]: `${dirModules}/edit.js`, + [`${modules}/edit-file`]: `${dirModules}/edit-file.js`, + [`${modules}/edit-file-vim`]: `${dirModules}/edit-file-vim.js`, + [`${modules}/edit-names`]: `${dirModules}/edit-names.js`, + [`${modules}/edit-names-vim`]: `${dirModules}/edit-names-vim.js`, + [`${modules}/menu`]: `${dirModules}/menu/index.js`, + [`${modules}/view`]: `${dirModules}/view/index.js`, + [`${modules}/help`]: `${dirModules}/help.js`, + [`${modules}/markdown`]: `${dirModules}/markdown.js`, + [`${modules}/config`]: `${dirModules}/config/index.js`, [`${modules}/contact`]: `${dirModules}/contact.js`, - [`${modules}/upload`]: `${dirModules}/upload.mjs`, - [`${modules}/operation`]: `${dirModules}/operation/index.mjs`, - [`${modules}/konsole`]: `${dirModules}/konsole.mjs`, - [`${modules}/terminal`]: `${dirModules}/terminal.mjs`, - [`${modules}/terminal-run`]: `${dirModules}/terminal-run.mjs`, - [`${modules}/cloud`]: `${dirModules}/cloud.mjs`, - [`${modules}/user-menu`]: `${dirModules}/user-menu/index.mjs`, - [`${modules}/polyfill`]: `${dirModules}/polyfill.mjs`, - [`${modules}/command-line`]: `${dirModules}/command-line.mjs`, + [`${modules}/upload`]: `${dirModules}/upload.js`, + [`${modules}/operation`]: `${dirModules}/operation/index.js`, + [`${modules}/konsole`]: `${dirModules}/konsole.js`, + [`${modules}/terminal`]: `${dirModules}/terminal.js`, + [`${modules}/terminal-run`]: `${dirModules}/terminal-run.js`, + [`${modules}/cloud`]: `${dirModules}/cloud.js`, + [`${modules}/user-menu`]: `${dirModules}/user-menu/index.js`, + [`${modules}/polyfill`]: `${dirModules}/polyfill.js`, + [`${modules}/command-line`]: `${dirModules}/command-line.js`, }, output: { filename: '[name].js', diff --git a/bin/cloudcmd.mjs b/bin/cloudcmd.js similarity index 97% rename from bin/cloudcmd.mjs rename to bin/cloudcmd.js index e1c358ed..63806aab 100755 --- a/bin/cloudcmd.mjs +++ b/bin/cloudcmd.js @@ -7,10 +7,10 @@ import {tryToCatch} from 'try-to-catch'; import {createSimport} from 'simport'; import parse from 'yargs-parser'; import exit from '../server/exit.js'; -import {createConfig, configPath} from '../server/config.mjs'; -import * as env from '../server/env.mjs'; +import {createConfig, configPath} from '../server/config.js'; +import * as env from '../server/env.js'; import prefixer from '../server/prefixer.js'; -import * as validate from '../server/validate.mjs'; +import * as validate from '../server/validate.js'; process.on('unhandledRejection', exit); @@ -248,7 +248,7 @@ async function main() { if (args.showConfig) await showConfig(); - const {distributeImport} = await simport('../server/distribute/import.mjs'); + const {distributeImport} = await simport('../server/distribute/import.js'); const importConfig = promisify(distributeImport); await start(options, config); @@ -279,7 +279,7 @@ function version() { } async function start(options, config) { - const SERVER = `${DIR_SERVER}server.mjs`; + const SERVER = `../server/server.js`; if (!args.server) return; diff --git a/bin/release.mjs b/bin/release.js similarity index 98% rename from bin/release.mjs rename to bin/release.js index 004b908e..1c1a487c 100755 --- a/bin/release.mjs +++ b/bin/release.js @@ -1,5 +1,3 @@ -#!/usr/bin/env node - import {promisify} from 'node:util'; import process from 'node:process'; import {tryToCatch} from 'try-to-catch'; diff --git a/client/client.mjs b/client/client.js similarity index 98% rename from client/client.mjs rename to client/client.js index 5c5584de..f84547db 100644 --- a/client/client.mjs +++ b/client/client.js @@ -13,10 +13,10 @@ import { buildFromJSON, } from '#common/cloudfunc'; import * as Images from '#dom/images'; -import {unregisterSW} from './sw/register.mjs'; -import {getJsonFromFileTable} from './get-json-from-file-table.mjs'; -import {Key} from './key/index.mjs'; -import {loadModule} from './load-module.mjs'; +import {unregisterSW} from './sw/register.js'; +import {getJsonFromFileTable} from './get-json-from-file-table.js'; +import {Key} from './key/index.js'; +import {loadModule} from './load-module.js'; const noJS = (a) => a.replace(/.js$/, ''); diff --git a/client/cloudcmd.mjs b/client/cloudcmd.js similarity index 89% rename from client/cloudcmd.mjs rename to client/cloudcmd.js index d72d7bff..688d97b7 100644 --- a/client/cloudcmd.mjs +++ b/client/cloudcmd.js @@ -5,10 +5,10 @@ import load from 'load.js'; import * as Util from '#common/util'; import * as CloudFunc from '#common/cloudfunc'; import DOM from '#dom'; -import {registerSW, listenSW} from './sw/register.mjs'; -import {initSortPanel, sortPanel} from './sort.mjs'; -import {createCloudCmd} from './client.mjs'; -import * as Listeners from './listeners/index.mjs'; +import {registerSW, listenSW} from './sw/register.js'; +import {initSortPanel, sortPanel} from './sort.js'; +import {createCloudCmd} from './client.js'; +import * as Listeners from './listeners/index.js'; const isDev = process.env.NODE_ENV === 'development'; diff --git a/client/dom/buffer.mjs b/client/dom/buffer.js similarity index 100% rename from client/dom/buffer.mjs rename to client/dom/buffer.js diff --git a/client/dom/cmd.mjs b/client/dom/cmd.js similarity index 100% rename from client/dom/cmd.mjs rename to client/dom/cmd.js diff --git a/client/dom/current-file.mjs b/client/dom/current-file.js similarity index 100% rename from client/dom/current-file.mjs rename to client/dom/current-file.js diff --git a/client/dom/current-file.spec.mjs b/client/dom/current-file.spec.js similarity index 99% rename from client/dom/current-file.spec.mjs rename to client/dom/current-file.spec.js index 2a576dce..99294fde 100644 --- a/client/dom/current-file.spec.mjs +++ b/client/dom/current-file.spec.js @@ -1,7 +1,7 @@ import {test, stub} from 'supertape'; import {create} from 'auto-globals'; import wraptile from 'wraptile'; -import * as currentFile from './current-file.mjs'; +import * as currentFile from './current-file.js'; const id = (a) => a; diff --git a/client/dom/dialog.mjs b/client/dom/dialog.js similarity index 100% rename from client/dom/dialog.mjs rename to client/dom/dialog.js diff --git a/client/dom/directory.mjs b/client/dom/directory.js similarity index 100% rename from client/dom/directory.mjs rename to client/dom/directory.js diff --git a/client/dom/dom-tree.mjs b/client/dom/dom-tree.js similarity index 100% rename from client/dom/dom-tree.mjs rename to client/dom/dom-tree.js diff --git a/client/dom/dom-tree.spec.mjs b/client/dom/dom-tree.spec.js similarity index 95% rename from client/dom/dom-tree.spec.mjs rename to client/dom/dom-tree.spec.js index a711dcb6..13f56f6d 100644 --- a/client/dom/dom-tree.spec.mjs +++ b/client/dom/dom-tree.spec.js @@ -1,7 +1,7 @@ import test from 'supertape'; import {create} from 'auto-globals'; import {tryCatch} from 'try-catch'; -import {isContainClass} from './dom-tree.mjs'; +import {isContainClass} from './dom-tree.js'; test('dom: isContainClass: no element', (t) => { const [e] = tryCatch(isContainClass); diff --git a/client/dom/events/event-store.mjs b/client/dom/events/event-store.js similarity index 100% rename from client/dom/events/event-store.mjs rename to client/dom/events/event-store.js diff --git a/client/dom/events/event-store.spec.mjs b/client/dom/events/event-store.spec.js similarity index 93% rename from client/dom/events/event-store.spec.mjs rename to client/dom/events/event-store.spec.js index c543fa3b..6a623939 100644 --- a/client/dom/events/event-store.spec.mjs +++ b/client/dom/events/event-store.spec.js @@ -1,5 +1,5 @@ import {test} from 'supertape'; -import * as eventStore from './event-store.mjs'; +import * as eventStore from './event-store.js'; test('event-store: get', (t) => { const el = {}; diff --git a/client/dom/events/index.mjs b/client/dom/events/index.js similarity index 98% rename from client/dom/events/index.mjs rename to client/dom/events/index.js index 2c3bfb76..c49d2333 100644 --- a/client/dom/events/index.mjs +++ b/client/dom/events/index.js @@ -1,5 +1,5 @@ import itype from 'itype'; -import * as EventStore from './event-store.mjs'; +import * as EventStore from './event-store.js'; /** * safe add event listener diff --git a/client/dom/files.mjs b/client/dom/files.js similarity index 100% rename from client/dom/files.mjs rename to client/dom/files.js diff --git a/client/dom/images.mjs b/client/dom/images.js similarity index 99% rename from client/dom/images.mjs rename to client/dom/images.js index 9682e666..75663e72 100644 --- a/client/dom/images.mjs +++ b/client/dom/images.js @@ -102,13 +102,13 @@ export function show(position, panel) { /** * hide load image */ -export const hide = () => { +export function hide() { const element = Images.get(); DOM.hide(element); return Images; -}; +} export const setProgress = (value, title) => { const DATA = 'data-progress'; diff --git a/client/dom/index.mjs b/client/dom/index.js similarity index 97% rename from client/dom/index.mjs rename to client/dom/index.js index d19c8009..f6ce6bc7 100644 --- a/client/dom/index.mjs +++ b/client/dom/index.js @@ -7,15 +7,15 @@ import {getExt} from '#common/util'; import * as Storage from '#dom/storage'; import * as RESTful from '#dom/rest'; import * as Images from '#dom/images'; -import renameCurrent from './operations/rename-current.mjs'; -import * as CurrentFile from './current-file.mjs'; -import * as DOMTree from './dom-tree.mjs'; -import * as Cmd from './cmd.mjs'; -import * as IO from './io/index.mjs'; -import {uploadDirectory} from './directory.mjs'; -import * as Buffer from './buffer.mjs'; -import {loadRemote as _loadRemote} from './load-remote.mjs'; -import {selectByPattern} from './select-by-pattern.mjs'; +import renameCurrent from './operations/rename-current.js'; +import * as CurrentFile from './current-file.js'; +import * as DOMTree from './dom-tree.js'; +import * as Cmd from './cmd.js'; +import * as IO from './io/index.js'; +import {uploadDirectory} from './directory.js'; +import * as Buffer from './buffer.js'; +import {loadRemote as _loadRemote} from './load-remote.js'; +import {selectByPattern} from './select-by-pattern.js'; const {assign} = Object; diff --git a/client/dom/index.spec.mjs b/client/dom/index.spec.js similarity index 100% rename from client/dom/index.spec.mjs rename to client/dom/index.spec.js diff --git a/client/dom/io/index.mjs b/client/dom/io/index.js similarity index 98% rename from client/dom/io/index.mjs rename to client/dom/io/index.js index d46c78f0..192769e6 100644 --- a/client/dom/io/index.mjs +++ b/client/dom/io/index.js @@ -1,5 +1,5 @@ import {FS} from '#common/cloudfunc'; -import {sendRequest as _sendRequest} from './send-request.mjs'; +import {sendRequest as _sendRequest} from './send-request.js'; const {assign} = Object; diff --git a/client/dom/io/index.spec.mjs b/client/dom/io/index.spec.js similarity index 97% rename from client/dom/io/index.spec.mjs rename to client/dom/io/index.spec.js index e7d87cc2..8e9e2d08 100644 --- a/client/dom/io/index.spec.mjs +++ b/client/dom/io/index.spec.js @@ -1,5 +1,5 @@ import {test, stub} from 'supertape'; -import * as io from './index.mjs'; +import * as io from './index.js'; test('client: dom: io', (t) => { const sendRequest = stub(); diff --git a/client/dom/io/send-request.mjs b/client/dom/io/send-request.js similarity index 100% rename from client/dom/io/send-request.mjs rename to client/dom/io/send-request.js diff --git a/client/dom/io/send-request.spec.mjs b/client/dom/io/send-request.spec.js similarity index 84% rename from client/dom/io/send-request.spec.mjs rename to client/dom/io/send-request.spec.js index 9b151a3c..f8a960d8 100644 --- a/client/dom/io/send-request.spec.mjs +++ b/client/dom/io/send-request.spec.js @@ -1,5 +1,5 @@ import {test} from 'supertape'; -import {_replaceHash} from './send-request.mjs'; +import {_replaceHash} from './send-request.js'; test('cloudcmd: client: io: replaceHash', (t) => { const url = '/hello/####world'; diff --git a/client/dom/load-remote.mjs b/client/dom/load-remote.js similarity index 97% rename from client/dom/load-remote.mjs rename to client/dom/load-remote.js index 974763e0..ff8fb189 100644 --- a/client/dom/load-remote.mjs +++ b/client/dom/load-remote.js @@ -2,7 +2,7 @@ import {callbackify} from 'node:util'; import rendy from 'rendy'; import itype from 'itype'; -import load from 'load.js'; +import * as load from 'load.js'; import {tryToCatch} from 'try-to-catch'; import {findObjByNameInArr} from '#common/util'; import * as Files from '#dom/files'; diff --git a/client/dom/load.mjs b/client/dom/load.js similarity index 100% rename from client/dom/load.mjs rename to client/dom/load.js diff --git a/client/dom/operations/rename-current.mjs b/client/dom/operations/rename-current.js similarity index 96% rename from client/dom/operations/rename-current.mjs rename to client/dom/operations/rename-current.js index e446f5ca..8b6536d3 100644 --- a/client/dom/operations/rename-current.mjs +++ b/client/dom/operations/rename-current.js @@ -3,7 +3,7 @@ import capitalize from 'just-capitalize'; import * as _Dialog from '#dom/dialog'; import * as Storage from '#dom/storage'; import * as RESTful from '#dom/rest'; -import * as _currentFile from '../current-file.mjs'; +import * as _currentFile from '../current-file.js'; export default async (current, overrides = {}) => { const { diff --git a/client/dom/operations/rename-current.spec.mjs b/client/dom/operations/rename-current.spec.js similarity index 97% rename from client/dom/operations/rename-current.spec.mjs rename to client/dom/operations/rename-current.spec.js index b0aa30fa..a5ebb415 100644 --- a/client/dom/operations/rename-current.spec.mjs +++ b/client/dom/operations/rename-current.spec.js @@ -1,5 +1,5 @@ import {test, stub} from 'supertape'; -import renameCurrent from './rename-current.mjs'; +import renameCurrent from './rename-current.js'; test('cloudcmd: client: dom: renameCurrent: isCurrentFile', async (t) => { const current = {}; diff --git a/client/dom/rest.mjs b/client/dom/rest.js similarity index 96% rename from client/dom/rest.mjs rename to client/dom/rest.js index 99504cb6..3cf2fb66 100644 --- a/client/dom/rest.mjs +++ b/client/dom/rest.js @@ -2,7 +2,7 @@ import {tryToCatch} from 'try-to-catch'; import * as Dialog from '#dom/dialog'; import * as Images from '#dom/images'; import {encode} from '#common/entity'; -import * as IO from './io/index.mjs'; +import * as IO from './io/index.js'; const handleError = (promise) => async (...args) => { const [e, data] = await tryToCatch(promise, ...args); diff --git a/client/dom/select-by-pattern.mjs b/client/dom/select-by-pattern.js similarity index 93% rename from client/dom/select-by-pattern.mjs rename to client/dom/select-by-pattern.js index be992878..0bada6ef 100644 --- a/client/dom/select-by-pattern.mjs +++ b/client/dom/select-by-pattern.js @@ -1,10 +1,10 @@ import {alert, prompt} from '#dom/dialog'; import {getRegExp} from '#common/util'; -import {getCurrentName} from './current-file.mjs'; +import {getCurrentName} from './current-file.js'; import { isSelected, toggleSelectedFile, -} from './cmd.mjs'; +} from './cmd.js'; let SelectType = '*.*'; diff --git a/client/dom/storage.mjs b/client/dom/storage.js similarity index 100% rename from client/dom/storage.mjs rename to client/dom/storage.js diff --git a/client/dom/storage.spec.mjs b/client/dom/storage.spec.js similarity index 100% rename from client/dom/storage.spec.mjs rename to client/dom/storage.spec.js diff --git a/client/dom/upload-files.mjs b/client/dom/upload-files.js similarity index 96% rename from client/dom/upload-files.mjs rename to client/dom/upload-files.js index aafb38d3..1c37fe1b 100644 --- a/client/dom/upload-files.mjs +++ b/client/dom/upload-files.js @@ -5,7 +5,7 @@ import * as load from '#dom/load'; import {alert} from '#dom/dialog'; import {FS} from '#common/cloudfunc'; import * as Images from '#dom/images'; -import {getCurrentDirPath} from './current-file.mjs'; +import {getCurrentDirPath} from './current-file.js'; const loadFile = wraptile(_loadFile); const onEnd = wraptile(_onEnd); diff --git a/client/get-json-from-file-table.mjs b/client/get-json-from-file-table.js similarity index 100% rename from client/get-json-from-file-table.mjs rename to client/get-json-from-file-table.js diff --git a/client/key/binder.mjs b/client/key/binder.js similarity index 100% rename from client/key/binder.mjs rename to client/key/binder.js diff --git a/client/key/index.mjs b/client/key/index.js similarity index 98% rename from client/key/index.mjs rename to client/key/index.js index 06de23c8..6b4234a0 100644 --- a/client/key/index.mjs +++ b/client/key/index.js @@ -2,11 +2,11 @@ import clipboard from '@cloudcmd/clipboard'; import {fullstore} from 'fullstore'; import * as Events from '#dom/events'; -import * as Buffer from '../dom/buffer.mjs'; -import * as KEY from './key.mjs'; -import _vim from './vim/index.mjs'; -import setCurrentByChar from './set-current-by-char.mjs'; -import {createBinder} from './binder.mjs'; +import * as Buffer from '../dom/buffer.js'; +import * as KEY from './key.js'; +import _vim from './vim/index.js'; +import setCurrentByChar from './set-current-by-char.js'; +import {createBinder} from './binder.js'; const Chars = fullstore(); diff --git a/client/key/index.spec.mjs b/client/key/index.spec.js similarity index 88% rename from client/key/index.spec.mjs rename to client/key/index.spec.js index ad4753fb..62fbff4d 100644 --- a/client/key/index.spec.mjs +++ b/client/key/index.spec.js @@ -1,8 +1,8 @@ import autoGlobals from 'auto-globals'; import supertape from 'supertape'; -import {ESC} from './key.mjs'; -import {Key, _listener} from './index.mjs'; -import {getDOM, getCloudCmd} from './vim/globals.fixture.mjs'; +import {ESC} from './key.js'; +import {Key, _listener} from './index.js'; +import {getDOM, getCloudCmd} from './vim/globals.fixture.js'; const test = autoGlobals(supertape); const {stub} = supertape; diff --git a/client/key/key.mjs b/client/key/key.js similarity index 100% rename from client/key/key.mjs rename to client/key/key.js diff --git a/client/key/set-current-by-char.mjs b/client/key/set-current-by-char.js similarity index 100% rename from client/key/set-current-by-char.mjs rename to client/key/set-current-by-char.js diff --git a/client/key/vim/find.mjs b/client/key/vim/find.js similarity index 100% rename from client/key/vim/find.mjs rename to client/key/vim/find.js diff --git a/client/key/vim/find.spec.mjs b/client/key/vim/find.spec.js similarity index 79% rename from client/key/vim/find.spec.mjs rename to client/key/vim/find.spec.js index ee9a9458..59c9a249 100644 --- a/client/key/vim/find.spec.mjs +++ b/client/key/vim/find.spec.js @@ -1,6 +1,6 @@ import test from 'supertape'; -import {getDOM} from './globals.fixture.mjs'; -import {_next, _previous} from './find.mjs'; +import {getDOM} from './globals.fixture.js'; +import {_next, _previous} from './find.js'; globalThis.DOM = getDOM(); diff --git a/client/key/vim/globals.fixture.mjs b/client/key/vim/globals.fixture.js similarity index 100% rename from client/key/vim/globals.fixture.mjs rename to client/key/vim/globals.fixture.js diff --git a/client/key/vim/index.mjs b/client/key/vim/index.js similarity index 97% rename from client/key/vim/index.mjs rename to client/key/vim/index.js index 2bff53ee..dd9cd026 100644 --- a/client/key/vim/index.mjs +++ b/client/key/vim/index.js @@ -1,11 +1,11 @@ /* global CloudCmd */ /* global DOM */ -import vim from './vim.mjs'; -import * as finder from './find.mjs'; +import vim from './vim.js'; +import * as finder from './find.js'; import { setCurrent, selectFileNotParent, -} from './set-current.mjs'; +} from './set-current.js'; export default (key, event, overrides = {}) => { const defaults = { diff --git a/client/key/vim/index.spec.mjs b/client/key/vim/index.spec.js similarity index 99% rename from client/key/vim/index.spec.mjs rename to client/key/vim/index.spec.js index 10392c32..f187dea2 100644 --- a/client/key/vim/index.spec.mjs +++ b/client/key/vim/index.spec.js @@ -1,6 +1,6 @@ import {test, stub} from 'supertape'; -import {getDOM, getCloudCmd} from './globals.fixture.mjs'; -import vim, {selectFile as vimSelectFile} from './index.mjs'; +import {getDOM, getCloudCmd} from './globals.fixture.js'; +import vim, {selectFile as vimSelectFile} from './index.js'; globalThis.DOM = getDOM(); globalThis.CloudCmd = getCloudCmd(); diff --git a/client/key/vim/set-current.mjs b/client/key/vim/set-current.js similarity index 100% rename from client/key/vim/set-current.mjs rename to client/key/vim/set-current.js diff --git a/client/key/vim/vim.mjs b/client/key/vim/vim.js similarity index 100% rename from client/key/vim/vim.mjs rename to client/key/vim/vim.js diff --git a/client/key/vim/vim.spec.mjs b/client/key/vim/vim.spec.js similarity index 97% rename from client/key/vim/vim.spec.mjs rename to client/key/vim/vim.spec.js index 180f114f..88cdd89e 100644 --- a/client/key/vim/vim.spec.mjs +++ b/client/key/vim/vim.spec.js @@ -1,5 +1,5 @@ import {test, stub} from 'supertape'; -import vim from './vim.mjs'; +import vim from './vim.js'; test('vim: no operations', (t) => { const result = vim('hello', {}); diff --git a/client/listeners/get-index.mjs b/client/listeners/get-index.js similarity index 100% rename from client/listeners/get-index.mjs rename to client/listeners/get-index.js diff --git a/client/listeners/get-index.spec.mjs b/client/listeners/get-index.spec.js similarity index 90% rename from client/listeners/get-index.spec.mjs rename to client/listeners/get-index.spec.js index ae05159f..0380cdc1 100644 --- a/client/listeners/get-index.spec.mjs +++ b/client/listeners/get-index.spec.js @@ -1,5 +1,5 @@ import test from 'supertape'; -import {getIndex} from './get-index.mjs'; +import {getIndex} from './get-index.js'; test('cloudcmd: client: listeners: getIndex: not found', (t) => { const array = ['hello']; diff --git a/client/listeners/get-range.mjs b/client/listeners/get-range.js similarity index 100% rename from client/listeners/get-range.mjs rename to client/listeners/get-range.js diff --git a/client/listeners/get-range.spec.mjs b/client/listeners/get-range.spec.js similarity index 96% rename from client/listeners/get-range.spec.mjs rename to client/listeners/get-range.spec.js index 38b8ab32..77c950f4 100644 --- a/client/listeners/get-range.spec.mjs +++ b/client/listeners/get-range.spec.js @@ -1,5 +1,5 @@ import test from 'supertape'; -import {getRange} from './get-range.mjs'; +import {getRange} from './get-range.js'; test('cloudcmd: client: listeners: getRange: direct', (t) => { const expected = [ diff --git a/client/listeners/index.mjs b/client/listeners/index.js similarity index 99% rename from client/listeners/index.mjs rename to client/listeners/index.js index 98add90d..117a6a40 100644 --- a/client/listeners/index.mjs +++ b/client/listeners/index.js @@ -7,13 +7,13 @@ import clipboard from '@cloudcmd/clipboard'; import * as Events from '#dom/events'; import {uploadFiles} from '#dom/upload-files'; import {FS} from '#common/cloudfunc'; -import {getRange} from './get-range.mjs'; -import {getIndex} from './get-index.mjs'; +import {getRange} from './get-range.js'; +import {getIndex} from './get-index.js'; const NBSP_REG = RegExp(String.fromCharCode(160), 'g'); const SPACE = ' '; -export const init = async () => { +export async function init() { contextMenu(); dragndrop(); unload(); @@ -21,7 +21,7 @@ export const init = async () => { resize(); header(); await config(); -}; +} const unselect = (event) => { const isMac = /Mac/.test(globalThis.navigator.platform); diff --git a/client/load-module.mjs b/client/load-module.js similarity index 100% rename from client/load-module.mjs rename to client/load-module.js diff --git a/client/modules/cloud.mjs b/client/modules/cloud.js similarity index 100% rename from client/modules/cloud.mjs rename to client/modules/cloud.js diff --git a/client/modules/command-line.mjs b/client/modules/command-line.js similarity index 96% rename from client/modules/command-line.mjs rename to client/modules/command-line.js index bf3b071b..7a1c3993 100644 --- a/client/modules/command-line.mjs +++ b/client/modules/command-line.js @@ -1,8 +1,7 @@ /* global CloudCmd */ import * as Dialog from '#dom/dialog'; -export const init = () => {}; - +export function init() {} CloudCmd.CommandLine = { init, show, diff --git a/client/modules/config/index.mjs b/client/modules/config/index.js similarity index 98% rename from client/modules/config/index.mjs rename to client/modules/config/index.js index 115e477e..e58c4f30 100644 --- a/client/modules/config/index.mjs +++ b/client/modules/config/index.js @@ -12,7 +12,7 @@ import * as Events from '#dom/events'; import * as Files from '#dom/files'; import {getTitle} from '#common/cloudfunc'; import * as Images from '#dom/images'; -import * as input from './input.mjs'; +import * as input from './input.js'; const {Dialog, setTitle} = DOM; @@ -40,7 +40,7 @@ let Template; const loadCSS = load.css; -export const init = async () => { +export async function init() { if (!CloudCmd.config('configDialog')) return; @@ -56,7 +56,7 @@ export const init = async () => { ]); initSocket(); -}; +} const {config, Key} = CloudCmd; diff --git a/client/modules/config/input.mjs b/client/modules/config/input.js similarity index 100% rename from client/modules/config/input.mjs rename to client/modules/config/input.js diff --git a/client/modules/contact.js b/client/modules/contact.js index 8b3994d6..48c7bd19 100644 --- a/client/modules/contact.js +++ b/client/modules/contact.js @@ -1,36 +1,34 @@ /* global CloudCmd */ /* global DOM */ +import olark from '@cloudcmd/olark'; +import * as Images from '#dom/images'; -'use strict'; - -CloudCmd.Contact = exports; - -const olark = require('@cloudcmd/olark'); -const Images = require('#dom/images'); +CloudCmd.Contact = { + init, + show, + hide, +}; const {Events} = DOM; const {Key} = CloudCmd; -module.exports.show = show; -module.exports.hide = hide; - -module.exports.init = () => { +export function init() { Events.addKey(onKey); olark.identify('6216-545-10-4223'); olark('api.box.onExpand', show); olark('api.box.onShow', show); olark('api.box.onShrink', hide); -}; +} -function show() { +export function show() { Key.unsetBind(); Images.hide(); olark('api.box.expand'); } -function hide() { +export function hide() { Key.setBind(); olark('api.box.hide'); } diff --git a/client/modules/edit-file-vim.mjs b/client/modules/edit-file-vim.js similarity index 100% rename from client/modules/edit-file-vim.mjs rename to client/modules/edit-file-vim.js diff --git a/client/modules/edit-file.mjs b/client/modules/edit-file.js similarity index 100% rename from client/modules/edit-file.mjs rename to client/modules/edit-file.js diff --git a/client/modules/edit-names-vim.mjs b/client/modules/edit-names-vim.js similarity index 100% rename from client/modules/edit-names-vim.mjs rename to client/modules/edit-names-vim.js diff --git a/client/modules/edit-names.mjs b/client/modules/edit-names.js similarity index 100% rename from client/modules/edit-names.mjs rename to client/modules/edit-names.js diff --git a/client/modules/edit.mjs b/client/modules/edit.js similarity index 100% rename from client/modules/edit.mjs rename to client/modules/edit.js diff --git a/client/modules/help.mjs b/client/modules/help.js similarity index 99% rename from client/modules/help.mjs rename to client/modules/help.js index c418bdf1..74657a90 100644 --- a/client/modules/help.mjs +++ b/client/modules/help.js @@ -25,4 +25,3 @@ export function show() { export function hide() { CloudCmd.View.hide(); } - diff --git a/client/modules/konsole.mjs b/client/modules/konsole.js similarity index 100% rename from client/modules/konsole.mjs rename to client/modules/konsole.js diff --git a/client/modules/markdown.mjs b/client/modules/markdown.js similarity index 100% rename from client/modules/markdown.mjs rename to client/modules/markdown.js diff --git a/client/modules/menu/cloudmenu.mjs b/client/modules/menu/cloudmenu.js similarity index 100% rename from client/modules/menu/cloudmenu.mjs rename to client/modules/menu/cloudmenu.js diff --git a/client/modules/menu/index.mjs b/client/modules/menu/index.js similarity index 99% rename from client/modules/menu/index.mjs rename to client/modules/menu/index.js index 3d3f4412..249e755c 100644 --- a/client/modules/menu/index.mjs +++ b/client/modules/menu/index.js @@ -45,7 +45,7 @@ export async function init() { type: 'file', }); - const {createCloudMenu} = await import('./cloudmenu.mjs'); + const {createCloudMenu} = await import('./cloudmenu.js'); const {name} = fm.dataset; diff --git a/client/modules/operation/format.mjs b/client/modules/operation/format.js similarity index 100% rename from client/modules/operation/format.mjs rename to client/modules/operation/format.js diff --git a/client/modules/operation/get-next-current-name.mjs b/client/modules/operation/get-next-current-name.js similarity index 100% rename from client/modules/operation/get-next-current-name.mjs rename to client/modules/operation/get-next-current-name.js diff --git a/client/modules/operation/index.mjs b/client/modules/operation/index.js similarity index 97% rename from client/modules/operation/index.mjs rename to client/modules/operation/index.js index 1243a3d4..f349f7d8 100644 --- a/client/modules/operation/index.mjs +++ b/client/modules/operation/index.js @@ -5,9 +5,9 @@ import exec from 'execon'; import load from 'load.js'; import {tryToCatch} from 'try-to-catch'; import {encode} from '#common/entity'; -import {removeExtension} from './remove-extension.mjs'; -import {setListeners} from './set-listeners.mjs'; -import {getNextCurrentName} from './get-next-current-name.mjs'; +import {removeExtension} from './remove-extension.js'; +import {setListeners} from './set-listeners.js'; +import {getNextCurrentName} from './get-next-current-name.js'; const {DOM, CloudCmd} = globalThis; @@ -190,11 +190,11 @@ function getPacker(type) { return packTarFn; } -export const hide = () => { +export function hide() { CloudCmd.View.hide(); -}; +} -export const show = (operation, data) => { +export function show(operation, data) { if (!Loaded) return; @@ -215,7 +215,7 @@ export const show = (operation, data) => { if (operation === 'extract') return Operation.extract(); -}; +} Operation.copy = processFiles({ type: 'copy', diff --git a/client/modules/operation/remove-extension.mjs b/client/modules/operation/remove-extension.js similarity index 100% rename from client/modules/operation/remove-extension.mjs rename to client/modules/operation/remove-extension.js diff --git a/client/modules/operation/remove-extension.spec.mjs b/client/modules/operation/remove-extension.spec.js similarity index 92% rename from client/modules/operation/remove-extension.spec.mjs rename to client/modules/operation/remove-extension.spec.js index 8dbacb61..fa11e9e2 100644 --- a/client/modules/operation/remove-extension.spec.mjs +++ b/client/modules/operation/remove-extension.spec.js @@ -1,5 +1,5 @@ import test from 'supertape'; -import {removeExtension} from './remove-extension.mjs'; +import {removeExtension} from './remove-extension.js'; test('cloudcmd: client: modules: operation: removeExtension: .tar.gz', (t) => { const name = 'hello'; diff --git a/client/modules/operation/set-listeners.mjs b/client/modules/operation/set-listeners.js similarity index 98% rename from client/modules/operation/set-listeners.mjs rename to client/modules/operation/set-listeners.js index 355aee79..431c7791 100644 --- a/client/modules/operation/set-listeners.mjs +++ b/client/modules/operation/set-listeners.js @@ -1,7 +1,7 @@ /* global DOM */ import forEachKey from 'for-each-key'; import wraptile from 'wraptile'; -import {format} from './format.mjs'; +import {format} from './format.js'; const {Dialog, Images} = DOM; diff --git a/client/modules/polyfill.mjs b/client/modules/polyfill.js similarity index 100% rename from client/modules/polyfill.mjs rename to client/modules/polyfill.js diff --git a/client/modules/polyfill.spec.mjs b/client/modules/polyfill.spec.js similarity index 87% rename from client/modules/polyfill.spec.mjs rename to client/modules/polyfill.spec.js index f595be64..740947eb 100644 --- a/client/modules/polyfill.spec.mjs +++ b/client/modules/polyfill.spec.js @@ -1,5 +1,5 @@ import {test, stub} from 'supertape'; -import {scrollIntoViewIfNeeded} from './polyfill.mjs'; +import {scrollIntoViewIfNeeded} from './polyfill.js'; test('cloudcmd: client: polyfill: scrollIntoViewIfNeeded', (t) => { const scroll = stub(); diff --git a/client/modules/terminal-run.mjs b/client/modules/terminal-run.js similarity index 100% rename from client/modules/terminal-run.mjs rename to client/modules/terminal-run.js diff --git a/client/modules/terminal.mjs b/client/modules/terminal.js similarity index 100% rename from client/modules/terminal.mjs rename to client/modules/terminal.js diff --git a/client/modules/upload.mjs b/client/modules/upload.js similarity index 100% rename from client/modules/upload.mjs rename to client/modules/upload.js diff --git a/client/modules/user-menu/get-user-menu.mjs b/client/modules/user-menu/get-user-menu.js similarity index 100% rename from client/modules/user-menu/get-user-menu.mjs rename to client/modules/user-menu/get-user-menu.js diff --git a/client/modules/user-menu/get-user-menu.spec.mjs b/client/modules/user-menu/get-user-menu.spec.js similarity index 89% rename from client/modules/user-menu/get-user-menu.spec.mjs rename to client/modules/user-menu/get-user-menu.spec.js index aae42909..606eb820 100644 --- a/client/modules/user-menu/get-user-menu.spec.mjs +++ b/client/modules/user-menu/get-user-menu.spec.js @@ -1,5 +1,5 @@ import test from 'supertape'; -import {getUserMenu} from './get-user-menu.mjs'; +import {getUserMenu} from './get-user-menu.js'; test('user-menu: getUserMenu', (t) => { const menu = `module.exports = { diff --git a/client/modules/user-menu/index.mjs b/client/modules/user-menu/index.js similarity index 94% rename from client/modules/user-menu/index.mjs rename to client/modules/user-menu/index.js index 0be4d123..51931ac1 100644 --- a/client/modules/user-menu/index.mjs +++ b/client/modules/user-menu/index.js @@ -10,11 +10,11 @@ import {tryToCatch} from 'try-to-catch'; import {codeFrameColumns} from '@babel/code-frame'; import * as Dialog from '#dom/dialog'; import * as Images from '#dom/images'; -import {getUserMenu} from './get-user-menu.mjs'; -import {navigate} from './navigate.mjs'; -import {parseError} from './parse-error.mjs'; -import {parseUserMenu} from './parse-user-menu.mjs'; -import {runSelected} from './run.mjs'; +import {getUserMenu} from './get-user-menu.js'; +import {navigate} from './navigate.js'; +import {parseError} from './parse-error.js'; +import {parseUserMenu} from './parse-user-menu.js'; +import {runSelected} from './run.js'; const loadCSS = load.css; const sourceStore = fullstore(); diff --git a/client/modules/user-menu/navigate.mjs b/client/modules/user-menu/navigate.js similarity index 97% rename from client/modules/user-menu/navigate.mjs rename to client/modules/user-menu/navigate.js index 2ebebd17..0fa4d672 100644 --- a/client/modules/user-menu/navigate.mjs +++ b/client/modules/user-menu/navigate.js @@ -4,7 +4,7 @@ import { K, UP, DOWN, -} from '../../key/key.mjs'; +} from '../../key/key.js'; const store = fullstore(1); const isDigit = (a) => /^\d+$/.test(a); diff --git a/client/modules/user-menu/navigate.spec.mjs b/client/modules/user-menu/navigate.spec.js similarity index 97% rename from client/modules/user-menu/navigate.spec.mjs rename to client/modules/user-menu/navigate.spec.js index a2de328b..6539c8e9 100644 --- a/client/modules/user-menu/navigate.spec.mjs +++ b/client/modules/user-menu/navigate.spec.js @@ -1,11 +1,11 @@ import test from 'supertape'; -import {navigate} from './navigate.mjs'; +import {navigate} from './navigate.js'; import { UP, DOWN, J, K, -} from '../../key/key.mjs'; +} from '../../key/key.js'; test('cloudcmd: user-menu: navigate: DOWN', (t) => { const el = { diff --git a/client/modules/user-menu/parse-error.mjs b/client/modules/user-menu/parse-error.js similarity index 100% rename from client/modules/user-menu/parse-error.mjs rename to client/modules/user-menu/parse-error.js diff --git a/client/modules/user-menu/parse-error.spec.mjs b/client/modules/user-menu/parse-error.spec.js similarity index 94% rename from client/modules/user-menu/parse-error.spec.mjs rename to client/modules/user-menu/parse-error.spec.js index cef3ae55..5ec8da45 100644 --- a/client/modules/user-menu/parse-error.spec.mjs +++ b/client/modules/user-menu/parse-error.spec.js @@ -1,5 +1,5 @@ import test from 'supertape'; -import {parseError} from './parse-error.mjs'; +import {parseError} from './parse-error.js'; test('user-menu: parse-error', (t) => { const result = parseError({ diff --git a/client/modules/user-menu/parse-user-menu.mjs b/client/modules/user-menu/parse-user-menu.js similarity index 100% rename from client/modules/user-menu/parse-user-menu.mjs rename to client/modules/user-menu/parse-user-menu.js diff --git a/client/modules/user-menu/parse-user-menu.spec.mjs b/client/modules/user-menu/parse-user-menu.spec.js similarity index 91% rename from client/modules/user-menu/parse-user-menu.spec.mjs rename to client/modules/user-menu/parse-user-menu.spec.js index a7914152..0a9dc02c 100644 --- a/client/modules/user-menu/parse-user-menu.spec.mjs +++ b/client/modules/user-menu/parse-user-menu.spec.js @@ -1,5 +1,5 @@ import {test, stub} from 'supertape'; -import {parseUserMenu} from './parse-user-menu.mjs'; +import {parseUserMenu} from './parse-user-menu.js'; test('cloudcmd: user menu: parse', (t) => { const fn = stub(); diff --git a/client/modules/user-menu/run.mjs b/client/modules/user-menu/run.js similarity index 100% rename from client/modules/user-menu/run.mjs rename to client/modules/user-menu/run.js diff --git a/client/modules/user-menu/run.spec.mjs b/client/modules/user-menu/run.spec.js similarity index 89% rename from client/modules/user-menu/run.spec.mjs rename to client/modules/user-menu/run.spec.js index 8cac782d..86738712 100644 --- a/client/modules/user-menu/run.spec.mjs +++ b/client/modules/user-menu/run.spec.js @@ -1,5 +1,5 @@ import {test, stub} from 'supertape'; -import {runSelected} from './run.mjs'; +import {runSelected} from './run.js'; test('cloudcmd: client: user menu: run', async (t) => { const runUserMenu = stub(); diff --git a/client/modules/view/get-type.mjs b/client/modules/view/get-type.js similarity index 100% rename from client/modules/view/get-type.mjs rename to client/modules/view/get-type.js diff --git a/client/modules/view/index.mjs b/client/modules/view/index.js similarity index 99% rename from client/modules/view/index.mjs rename to client/modules/view/index.js index da19f542..2fac8964 100644 --- a/client/modules/view/index.mjs +++ b/client/modules/view/index.js @@ -16,7 +16,7 @@ import { isImage, isAudio, getType, -} from './types.mjs'; +} from './types.js'; const CloudCmd = globalThis.CloudCmd || {}; const DOM = globalThis.DOM || {}; diff --git a/client/modules/view/index.spec.mjs b/client/modules/view/index.spec.js similarity index 98% rename from client/modules/view/index.spec.mjs rename to client/modules/view/index.spec.js index 585ac3e2..8d184548 100644 --- a/client/modules/view/index.spec.mjs +++ b/client/modules/view/index.spec.js @@ -6,7 +6,7 @@ import { _viewHtml, _Config, _createIframe, -} from './index.mjs'; +} from './index.js'; const test = autoGlobals(tape); diff --git a/client/modules/view/types.mjs b/client/modules/view/types.js similarity index 100% rename from client/modules/view/types.mjs rename to client/modules/view/types.js diff --git a/client/modules/view/types.spec.mjs b/client/modules/view/types.spec.js similarity index 94% rename from client/modules/view/types.spec.mjs rename to client/modules/view/types.spec.js index 58a06672..7ed159f4 100644 --- a/client/modules/view/types.spec.mjs +++ b/client/modules/view/types.spec.js @@ -1,5 +1,5 @@ import {test, stub} from 'supertape'; -import {isAudio, _detectType} from './types.mjs'; +import {isAudio, _detectType} from './types.js'; test('cloudcmd: client: view: types: isAudio', (t) => { const result = isAudio('hello.mp3'); diff --git a/client/sort.mjs b/client/sort.js similarity index 100% rename from client/sort.mjs rename to client/sort.js diff --git a/client/sw/register.mjs b/client/sw/register.js similarity index 90% rename from client/sw/register.mjs rename to client/sw/register.js index da3ff0f2..928d63c9 100644 --- a/client/sw/register.mjs +++ b/client/sw/register.js @@ -16,7 +16,7 @@ export async function registerSW(prefix) { const {serviceWorker} = navigator; const register = serviceWorker.register.bind(serviceWorker); - const [e, sw] = await tryToCatch(register, `${prefix}/sw.mjs`); + const [e, sw] = await tryToCatch(register, `${prefix}/sw.js`); if (e) return null; diff --git a/client/sw/register.spec.mjs b/client/sw/register.spec.js similarity index 99% rename from client/sw/register.spec.mjs rename to client/sw/register.spec.js index 5734a130..5cb98049 100644 --- a/client/sw/register.spec.mjs +++ b/client/sw/register.spec.js @@ -6,7 +6,7 @@ import { listenSW, registerSW, unregisterSW, -} from './register.mjs'; +} from './register.js'; const test = autoGlobals(tape); diff --git a/client/sw/sw.mjs b/client/sw/sw.js similarity index 100% rename from client/sw/sw.mjs rename to client/sw/sw.js diff --git a/common/callbackify.js b/common/callbackify.js index c2040a3d..71160ac7 100644 --- a/common/callbackify.js +++ b/common/callbackify.js @@ -1,8 +1,6 @@ -'use strict'; - const success = (f) => (data) => f(null, data); -module.exports = (promise) => (...a) => { +export default (promise) => (...a) => { const fn = a.pop(); promise(...a) diff --git a/common/callbackify.spec.js b/common/callbackify.spec.js index 0a46d9e9..d1586d5a 100644 --- a/common/callbackify.spec.js +++ b/common/callbackify.spec.js @@ -1,11 +1,7 @@ -'use strict'; - -const {promisify} = require('node:util'); -const {tryToCatch} = require('try-to-catch'); - -const {test, stub} = require('supertape'); - -const callbackify = require('./callbackify'); +import {promisify} from 'node:util'; +import {tryToCatch} from 'try-to-catch'; +import {test, stub} from 'supertape'; +import callbackify from './callbackify.js'; test('cloudcmd: common: callbackify: error', async (t) => { const promise = stub().rejects(Error('hello')); diff --git a/common/cloudfunc.mjs b/common/cloudfunc.js similarity index 100% rename from common/cloudfunc.mjs rename to common/cloudfunc.js diff --git a/common/cloudfunc.spec.mjs b/common/cloudfunc.spec.js similarity index 100% rename from common/cloudfunc.spec.mjs rename to common/cloudfunc.spec.js diff --git a/common/datetime.js b/common/datetime.js index 131c27fb..d7982ab4 100644 --- a/common/datetime.js +++ b/common/datetime.js @@ -1,8 +1,6 @@ -'use strict'; +import shortdate from 'shortdate'; -const shortdate = require('shortdate'); - -module.exports = (date) => { +export default (date) => { date = date || new Date(); check(date); diff --git a/common/datetime.spec.js b/common/datetime.spec.js index 6da5fad2..e3edb2ef 100644 --- a/common/datetime.spec.js +++ b/common/datetime.spec.js @@ -1,9 +1,6 @@ -'use strict'; - -const {test} = require('supertape'); -const {tryCatch} = require('try-catch'); - -const datetime = require('./datetime'); +import {test} from 'supertape'; +import {tryCatch} from 'try-catch'; +import datetime from './datetime.js'; test('common: datetime', (t) => { const dateStr = 'Fri, 17 Aug 2018 10:56:48'; diff --git a/common/entity.mjs b/common/entity.js similarity index 100% rename from common/entity.mjs rename to common/entity.js diff --git a/common/entity.spec.mjs b/common/entity.spec.js similarity index 100% rename from common/entity.spec.mjs rename to common/entity.spec.js diff --git a/common/try-to-promise-all.js b/common/try-to-promise-all.js index e839d27e..1dcfa3a8 100644 --- a/common/try-to-promise-all.js +++ b/common/try-to-promise-all.js @@ -1,9 +1,8 @@ -'use strict'; +import {tryToCatch} from 'try-to-catch'; -const {tryToCatch} = require('try-to-catch'); const all = Promise.all.bind(Promise); -module.exports = async (a) => { +export default async (a) => { const [e, result = []] = await tryToCatch(all, a); return [ diff --git a/common/try-to-promise-all.spec.js b/common/try-to-promise-all.spec.js index e86772fd..eafb036c 100644 --- a/common/try-to-promise-all.spec.js +++ b/common/try-to-promise-all.spec.js @@ -1,7 +1,5 @@ -'use strict'; - -const {test} = require('supertape'); -const tryToPromiseAll = require('./try-to-promise-all'); +import {test} from 'supertape'; +import tryToPromiseAll from './try-to-promise-all.js'; const resolve = Promise.resolve.bind(Promise); const reject = Promise.reject.bind(Promise); diff --git a/common/util.mjs b/common/util.js similarity index 100% rename from common/util.mjs rename to common/util.js diff --git a/common/util.spec.mjs b/common/util.spec.js similarity index 100% rename from common/util.spec.mjs rename to common/util.spec.js diff --git a/cssnano.config.mjs b/cssnano.config.js similarity index 100% rename from cssnano.config.mjs rename to cssnano.config.js diff --git a/docker/Dockerfile b/docker/Dockerfile index 39312e00..1549b724 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -22,4 +22,4 @@ ENV cloudcmd_open=false EXPOSE 8000 -ENTRYPOINT ["/usr/src/app/bin/cloudcmd.mjs"] +ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index b8cc6e3e..b873c341 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -26,5 +26,5 @@ ENV cloudcmd_open false EXPOSE 8000 -ENTRYPOINT ["/usr/src/app/bin/cloudcmd.mjs"] +ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] diff --git a/eslint.config.mjs b/eslint.config.js similarity index 100% rename from eslint.config.mjs rename to eslint.config.js diff --git a/package.json b/package.json index 6501ca82..ffa02dde 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "cloudcmd", "version": "19.2.0", - "type": "commonjs", + "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", "homepage": "http://cloudcmd.io", @@ -10,7 +10,7 @@ "type": "git", "url": "git+https://github.com/coderaiser/cloudcmd.git" }, - "main": "server/cloudcmd.mjs", + "main": "server/cloudcmd.js", "keywords": [ "console", "terminal", @@ -39,7 +39,7 @@ "server" ], "bin": { - "cloudcmd": "bin/cloudcmd.mjs" + "cloudcmd": "bin/cloudcmd.js" }, "scripts": { "start": "madrun start", @@ -221,18 +221,18 @@ }, "imports": { "#css/": "./css/", - "#dom": "./client/dom/index.mjs", - "#dom/events": "./client/dom/events/index.mjs", - "#dom/load": "./client/dom/load.mjs", - "#dom/dialog": "./client/dom/dialog.mjs", - "#dom/images": "./client/dom/images.mjs", - "#dom/files": "./client/dom/files.mjs", - "#dom/upload-files": "./client/dom/upload-files.mjs", - "#dom/storage": "./client/dom/storage.mjs", - "#dom/rest": "./client/dom/rest.mjs", - "#common/util": "./common/util.mjs", - "#common/cloudfunc": "./common/cloudfunc.mjs", - "#common/entity": "./common/entity.mjs" + "#dom": "./client/dom/index.js", + "#dom/events": "./client/dom/events/index.js", + "#dom/load": "./client/dom/load.js", + "#dom/dialog": "./client/dom/dialog.js", + "#dom/images": "./client/dom/images.js", + "#dom/files": "./client/dom/files.js", + "#dom/upload-files": "./client/dom/upload-files.js", + "#dom/storage": "./client/dom/storage.js", + "#dom/rest": "./client/dom/rest.js", + "#common/util": "./common/util.js", + "#common/cloudfunc": "./common/cloudfunc.js", + "#common/entity": "./common/entity.js" }, "engines": { "node": ">=22" diff --git a/rules/split-autoglobals-with-tape.mjs b/rules/split-autoglobals-with-tape.js similarity index 100% rename from rules/split-autoglobals-with-tape.mjs rename to rules/split-autoglobals-with-tape.js diff --git a/server/auth.js b/server/auth.js index e0e40961..09da0c2a 100644 --- a/server/auth.js +++ b/server/auth.js @@ -1,12 +1,11 @@ -'use strict'; +import httpAuth from 'http-auth'; +import criton from 'criton'; +import currify from 'currify'; -const httpAuth = require('http-auth'); -const criton = require('criton'); -const currify = require('currify'); const middle = currify(_middle); const check = currify(_check); -module.exports = (config) => { +export default (config) => { const auth = httpAuth.basic({ realm: 'Cloud Commander', }, check(config)); diff --git a/server/cloudcmd.mjs b/server/cloudcmd.js similarity index 95% rename from server/cloudcmd.mjs rename to server/cloudcmd.js index 3afb544c..996ac5d4 100644 --- a/server/cloudcmd.mjs +++ b/server/cloudcmd.js @@ -16,15 +16,15 @@ import nomine from 'nomine'; import fileop from '@cloudcmd/fileop'; import * as cloudfunc from '#common/cloudfunc'; import authentication from './auth.js'; -import {createConfig, configPath} from './config.mjs'; -import modulas from './modulas.mjs'; -import userMenu from './user-menu.mjs'; -import rest from './rest/index.mjs'; -import route from './route.mjs'; -import * as validate from './validate.mjs'; +import {createConfig, configPath} from './config.js'; +import modulas from './modulas.js'; +import userMenu from './user-menu.js'; +import rest from './rest/index.js'; +import route from './route.js'; +import * as validate from './validate.js'; import prefixer from './prefixer.js'; import terminal from './terminal.js'; -import {distributeExport} from './distribute/export.mjs'; +import {distributeExport} from './distribute/export.js'; import {createDepStore} from './depstore.js'; const __filename = fileURLToPath(import.meta.url); diff --git a/server/cloudcmd.spec.mjs b/server/cloudcmd.spec.js similarity index 99% rename from server/cloudcmd.spec.mjs rename to server/cloudcmd.spec.js index 263e2e15..65344534 100644 --- a/server/cloudcmd.spec.mjs +++ b/server/cloudcmd.spec.js @@ -9,7 +9,7 @@ import cloudcmd, { _getPrefix, _initAuth, _getIndexPath, -} from './cloudcmd.mjs'; +} from './cloudcmd.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/server/columns.mjs b/server/columns.js similarity index 100% rename from server/columns.mjs rename to server/columns.js diff --git a/server/columns.spec.mjs b/server/columns.spec.js similarity index 95% rename from server/columns.spec.mjs rename to server/columns.spec.js index 76d80254..533cfe75 100644 --- a/server/columns.spec.mjs +++ b/server/columns.spec.js @@ -2,7 +2,7 @@ import {dirname} from 'node:path'; import {fileURLToPath} from 'node:url'; import fs from 'node:fs'; import test from 'supertape'; -import {getColumns, isDev} from './columns.mjs'; +import {getColumns, isDev} from './columns.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/server/config.mjs b/server/config.js similarity index 88% rename from server/config.mjs rename to server/config.js index 3ec5bee8..d52088ab 100644 --- a/server/config.mjs +++ b/server/config.js @@ -1,32 +1,24 @@ +import path, {dirname} from 'node:path'; +import fs from 'node:fs'; +import Emitter from 'node:events'; +import {homedir} from 'node:os'; import {fileURLToPath} from 'node:url'; -import {dirname} from 'node:path'; -import {createRequire} from 'node:module'; +import currify from 'currify'; +import wraptile from 'wraptile'; +import {tryToCatch} from 'try-to-catch'; +import pullout from 'pullout'; +import ponse from 'ponse'; +import jonny from 'jonny'; +import jju from 'jju'; +import writejson from 'writejson'; +import {tryCatch} from 'try-catch'; +import criton from 'criton'; +import * as CloudFunc from '#common/cloudfunc'; +import exit from './exit.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); -const require = createRequire(import.meta.url); const DIR_SERVER = `${__dirname}/`; - -const path = require('node:path'); - -const fs = require('node:fs'); -const Emitter = require('node:events'); -const {homedir} = require('node:os'); - -const currify = require('currify'); - -const wraptile = require('wraptile'); -const {tryToCatch} = require('try-to-catch'); -const pullout = require('pullout'); -const ponse = require('ponse'); -const jonny = require('jonny'); -const jju = require('jju'); -const writejson = require('writejson'); -const {tryCatch} = require('try-catch'); -const criton = require('criton'); -const exit = require(`${DIR_SERVER}exit`); - -const CloudFunc = require('../common/cloudfunc.mjs'); const isUndefined = (a) => typeof a === 'undefined'; const DIR = `${DIR_SERVER}../`; const HOME = homedir(); diff --git a/server/config.spec.mjs b/server/config.spec.js similarity index 95% rename from server/config.spec.mjs rename to server/config.spec.js index 4a750e51..92b0646c 100644 --- a/server/config.spec.mjs +++ b/server/config.spec.js @@ -1,8 +1,8 @@ import {createRequire} from 'node:module'; import {test, stub} from 'supertape'; import {apiURL} from '#common/cloudfunc'; -import {createConfig, _cryptoPass} from './config.mjs'; -import {connect} from '../test/before.mjs'; +import {createConfig, _cryptoPass} from './config.js'; +import {connect} from '../test/before.js'; const require = createRequire(import.meta.url); const fixture = require('./config.fixture.json'); diff --git a/server/depstore.js b/server/depstore.js index 0d8653d7..c5fefaa9 100644 --- a/server/depstore.js +++ b/server/depstore.js @@ -1,6 +1,4 @@ -'use strict'; - -module.exports.createDepStore = () => { +export const createDepStore = () => { const deps = {}; return (name, value) => { diff --git a/server/distribute/export.mjs b/server/distribute/export.js similarity index 99% rename from server/distribute/export.mjs rename to server/distribute/export.js index aa0dbc1e..3803ca2a 100644 --- a/server/distribute/export.mjs +++ b/server/distribute/export.js @@ -11,7 +11,7 @@ import log, { getMessage, getDescription, logWrapped, -} from './log.mjs'; +} from './log.js'; const omitList = [ 'auth', diff --git a/server/distribute/export.spec.mjs b/server/distribute/export.spec.js similarity index 94% rename from server/distribute/export.spec.mjs rename to server/distribute/export.spec.js index f234c8e7..ca6155a8 100644 --- a/server/distribute/export.spec.mjs +++ b/server/distribute/export.spec.js @@ -1,8 +1,8 @@ import {once} from 'node:events'; import test from 'supertape'; import io from 'socket.io-client'; -import * as Config from '../config.mjs'; -import {connect} from '../../test/before.mjs'; +import * as Config from '../config.js'; +import {connect} from '../../test/before.js'; const config = Config.createConfig(); diff --git a/server/distribute/import.mjs b/server/distribute/import.js similarity index 98% rename from server/distribute/import.mjs rename to server/distribute/import.js index 4f503425..57745c51 100644 --- a/server/distribute/import.mjs +++ b/server/distribute/import.js @@ -4,8 +4,8 @@ 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 * as env from '../env.mjs'; +import log from './log.js'; +import * as env from '../env.js'; const noop = () => {}; const forEachKey = currify(_forEachKey); diff --git a/server/distribute/import.spec.mjs b/server/distribute/import.spec.js similarity index 97% rename from server/distribute/import.spec.mjs rename to server/distribute/import.spec.js index 35b0dd6c..f5e2539c 100644 --- a/server/distribute/import.spec.mjs +++ b/server/distribute/import.spec.js @@ -2,9 +2,9 @@ import process from 'node:process'; 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'; -import {distributeImport} from './import.mjs'; +import {connect} from '../../test/before.js'; +import {createConfigManager} from '../cloudcmd.js'; +import {distributeImport} from './import.js'; const distribute = { import: promisify(distributeImport), diff --git a/server/distribute/log.mjs b/server/distribute/log.js similarity index 100% rename from server/distribute/log.mjs rename to server/distribute/log.js diff --git a/server/distribute/log.spec.mjs b/server/distribute/log.spec.js similarity index 89% rename from server/distribute/log.spec.mjs rename to server/distribute/log.spec.js index eef535e3..be50dcc3 100644 --- a/server/distribute/log.spec.mjs +++ b/server/distribute/log.spec.js @@ -1,6 +1,6 @@ import test from 'supertape'; -import log from './log.mjs'; -import {createConfig} from '../config.mjs'; +import log from './log.js'; +import {createConfig} from '../config.js'; test('distribute: log: getMessage', (t) => { const e = 'hello'; diff --git a/server/env.mjs b/server/env.js similarity index 100% rename from server/env.mjs rename to server/env.js diff --git a/server/env.spec.js b/server/env.spec.js index f92273e5..d8065b2c 100644 --- a/server/env.spec.js +++ b/server/env.spec.js @@ -1,8 +1,6 @@ -'use strict'; - -const process = require('node:process'); -const {test} = require('supertape'); -const env = require('./env.mjs'); +import process from 'node:process'; +import {test} from 'supertape'; +import * as env from './env.js'; test('cloudcmd: server: env: bool: upper case first', (t) => { const { diff --git a/server/exit.js b/server/exit.js index e7dabfb9..ebe5ad8f 100644 --- a/server/exit.js +++ b/server/exit.js @@ -1,9 +1,8 @@ -'use strict'; +import process from 'node:process'; -const process = require('node:process'); const getMessage = (a) => a?.message || a; -module.exports = (...args) => { +export default (...args) => { const messages = args.map(getMessage); console.error(...messages); diff --git a/server/exit.spec.js b/server/exit.spec.js index db081e0e..3b454818 100644 --- a/server/exit.spec.js +++ b/server/exit.spec.js @@ -1,9 +1,6 @@ -'use strict'; - -const process = require('node:process'); -const {test, stub} = require('supertape'); - -const exit = require('./exit'); +import process from 'node:process'; +import {test, stub} from 'supertape'; +import exit from './exit.js'; test('cloudcmd: exit: process.exit', (t) => { const {exit: exitOriginal} = process; diff --git a/server/markdown/index.js b/server/markdown/index.js index 639e219d..d95cb62c 100644 --- a/server/markdown/index.js +++ b/server/markdown/index.js @@ -1,14 +1,14 @@ -'use strict'; +import {callbackify} from 'node:util'; +import {fileURLToPath} from 'node:url'; +import {dirname} from 'node:path'; +import pullout from 'pullout'; +import ponse from 'ponse'; +import {read} from 'redzip'; +import root from '../root.js'; +import parse from './worker.js'; -const {callbackify} = require('node:util'); - -const pullout = require('pullout'); -const ponse = require('ponse'); -const {read} = require('redzip'); - -const root = require('../root'); - -const parse = require('./worker'); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); const isString = (a) => typeof a === 'string'; // warm up @@ -16,7 +16,7 @@ parse(''); const DIR_ROOT = `${__dirname}/../../`; -module.exports = callbackify(async (name, rootDir, request) => { +export default callbackify(async (name, rootDir, request) => { check(name, request); const {method} = request; diff --git a/server/markdown/index.spec.mjs b/server/markdown/index.spec.js similarity index 98% rename from server/markdown/index.spec.mjs rename to server/markdown/index.spec.js index 563442af..f0f425ba 100644 --- a/server/markdown/index.spec.mjs +++ b/server/markdown/index.spec.js @@ -5,7 +5,7 @@ import {tryToCatch} from 'try-to-catch'; import test from 'supertape'; import serveOnce from 'serve-once'; import markdown from './index.js'; -import cloudcmd from '../cloudcmd.mjs'; +import cloudcmd from '../cloudcmd.js'; const config = { auth: false, diff --git a/server/markdown/worker.js b/server/markdown/worker.js index ba885661..ccac2aee 100644 --- a/server/markdown/worker.js +++ b/server/markdown/worker.js @@ -1,5 +1,5 @@ -'use strict'; +import createMarkdownIt from 'markdown-it'; -const markdownIt = require('markdown-it')(); +const markdownIt = createMarkdownIt(); -module.exports = (a) => markdownIt.render(a); +export default (a) => markdownIt.render(a); diff --git a/server/modulas.mjs b/server/modulas.js similarity index 100% rename from server/modulas.mjs rename to server/modulas.js diff --git a/server/prefixer.js b/server/prefixer.js index 238d67fd..87a83411 100644 --- a/server/prefixer.js +++ b/server/prefixer.js @@ -1,8 +1,6 @@ -'use strict'; - const isString = (a) => typeof a === 'string'; -module.exports = (value) => { +export default (value) => { if (!isString(value)) return ''; diff --git a/server/prefixer.spec.js b/server/prefixer.spec.js index 2cc5b2d8..3ea77dfb 100644 --- a/server/prefixer.spec.js +++ b/server/prefixer.spec.js @@ -1,8 +1,5 @@ -'use strict'; - -const {test} = require('supertape'); - -const prefixer = require('./prefixer'); +import {test} from 'supertape'; +import prefixer from './prefixer.js'; test('prefixer: prefix without a slash', (t) => { t.equal(prefixer('hello'), '/hello', 'should add slash'); diff --git a/server/repl.js b/server/repl.js index 0c4d5279..46d58a15 100644 --- a/server/repl.js +++ b/server/repl.js @@ -1,10 +1,8 @@ -'use strict'; +import process from 'node:process'; +import net from 'node:net'; +import repl from 'node:repl'; -const process = require('node:process'); -const net = require('node:net'); -const repl = require('node:repl'); - -module.exports = net +export default net .createServer((socket) => { const {pid} = process; const addr = socket.remoteAddress; diff --git a/server/rest/index.mjs b/server/rest/index.js similarity index 100% rename from server/rest/index.mjs rename to server/rest/index.js diff --git a/server/rest/index.spec.js b/server/rest/index.spec.js index ab7ed78b..0fd64d7c 100644 --- a/server/rest/index.spec.js +++ b/server/rest/index.spec.js @@ -1,15 +1,12 @@ -'use strict'; - -const {test} = require('supertape'); -const {tryToCatch} = require('try-to-catch'); - -const { +import {test} from 'supertape'; +import {tryToCatch} from 'try-to-catch'; +import { _formatMsg, _getWin32RootMsg, _isRootWin32, _isRootAll, _onPUT, -} = require('./index.mjs'); +} from './index.js'; test('rest: formatMsg', (t) => { const result = _formatMsg('hello', 'world'); diff --git a/server/rest/info.js b/server/rest/info.js index 6b4fb2ec..8cf0e1d7 100644 --- a/server/rest/info.js +++ b/server/rest/info.js @@ -1,16 +1,17 @@ -'use strict'; +import process from 'node:process'; +import format from 'format-io'; +import info from '../../package.json' with { + type: 'json', +}; -const process = require('node:process'); -const format = require('format-io'); - -const {version} = require('../../package'); +const {version} = info; const getMemory = () => { const {rss} = process.memoryUsage(); return format.size(rss); }; -module.exports = (prefix) => ({ +export default (prefix) => ({ version, prefix, memory: getMemory(), diff --git a/server/rest/info.spec.js b/server/rest/info.spec.js index 7f3a6935..cac19e53 100644 --- a/server/rest/info.spec.js +++ b/server/rest/info.spec.js @@ -1,9 +1,6 @@ -'use strict'; - -const process = require('node:process'); -const {test, stub} = require('supertape'); - -const info = require('./info'); +import process from 'node:process'; +import {test, stub} from 'supertape'; +import info from './info.js'; test('cloudcmd: rest: info', (t) => { const {memoryUsage} = process; diff --git a/server/root.js b/server/root.js index 0d405d3c..b563d77d 100644 --- a/server/root.js +++ b/server/root.js @@ -1,7 +1,5 @@ -'use strict'; +import mellow from 'mellow'; -const mellow = require('mellow'); - -module.exports = (dir, root, {webToWin = mellow.webToWin} = {}) => { +export default (dir, root, {webToWin = mellow.webToWin} = {}) => { return webToWin(dir, root || '/'); }; diff --git a/server/root.spec.js b/server/root.spec.js index 6bbd5ff6..2d9dd768 100644 --- a/server/root.spec.js +++ b/server/root.spec.js @@ -1,8 +1,5 @@ -'use strict'; - -const {test, stub} = require('supertape'); - -const root = require('./root'); +import {test, stub} from 'supertape'; +import root from './root.js'; test('cloudcmd: root: mellow', (t) => { const webToWin = stub(); diff --git a/server/route.mjs b/server/route.js similarity index 98% rename from server/route.mjs rename to server/route.js index 4ff0304c..4334a194 100644 --- a/server/route.mjs +++ b/server/route.js @@ -14,8 +14,8 @@ import * as CloudFunc from '#common/cloudfunc'; import root from './root.js'; import prefixer from './prefixer.js'; import Template from './template.js'; -import {getColumns} from './columns.mjs'; -import {getThemes} from './theme.mjs'; +import {getColumns} from './columns.js'; +import {getThemes} from './theme.js'; const require = createRequire(import.meta.url); const {stringify} = JSON; diff --git a/server/route.spec.mjs b/server/route.spec.js similarity index 99% rename from server/route.spec.mjs rename to server/route.spec.js index bee216a8..fcf2f58b 100644 --- a/server/route.spec.mjs +++ b/server/route.spec.js @@ -5,8 +5,8 @@ import fs from 'node:fs'; import {tryToCatch} from 'try-to-catch'; import {test, stub} from 'supertape'; import serveOnce from 'serve-once'; -import cloudcmd from './cloudcmd.mjs'; -import {_getReadDir} from './route.mjs'; +import cloudcmd from './cloudcmd.js'; +import {_getReadDir} from './route.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/server/server.mjs b/server/server.js similarity index 98% rename from server/server.mjs rename to server/server.js index dc61f522..00a4ee5b 100644 --- a/server/server.mjs +++ b/server/server.js @@ -11,7 +11,7 @@ import tryRequire from 'tryrequire'; import wraptile from 'wraptile'; import compression from 'compression'; import exit from './exit.js'; -import cloudcmd from './cloudcmd.mjs'; +import cloudcmd from './cloudcmd.js'; const bind = (f, self) => f.bind(self); diff --git a/server/show-config.js b/server/show-config.js index 065fd7dd..f151dd10 100644 --- a/server/show-config.js +++ b/server/show-config.js @@ -1,11 +1,9 @@ -'use strict'; - -const { +import { table, getBorderCharacters, -} = require('table'); +} from 'table'; -module.exports = (config) => { +export const showConfig = (config) => { check(config); const data = Object diff --git a/test/server/show-config.js b/server/show-config.spec.js similarity index 86% rename from test/server/show-config.js rename to server/show-config.spec.js index d0ff8480..b25e56a2 100644 --- a/test/server/show-config.js +++ b/server/show-config.spec.js @@ -1,9 +1,6 @@ -'use strict'; - -const {test} = require('supertape'); -const {tryCatch} = require('try-catch'); - -const showConfig = require('../../server/show-config'); +import {test} from 'supertape'; +import {tryCatch} from 'try-catch'; +import {showConfig} from './show-config.js'; test('cloudcmd: show-config: no arguments', (t) => { const [error] = tryCatch(showConfig); diff --git a/server/template.js b/server/template.js index 4a888ef0..0e705e79 100644 --- a/server/template.js +++ b/server/template.js @@ -1,7 +1,9 @@ -'use strict'; +import path, {dirname} from 'node:path'; +import {fileURLToPath} from 'node:url'; +import readFilesSync from '@cloudcmd/read-files-sync'; -const path = require('node:path'); -const readFilesSync = require('@cloudcmd/read-files-sync'); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); const templatePath = path.join(__dirname, '..', 'tmpl/fs'); -module.exports = readFilesSync(templatePath, 'utf8'); +export default readFilesSync(templatePath, 'utf8'); diff --git a/server/terminal.js b/server/terminal.js index 918ad1c4..4436e292 100644 --- a/server/terminal.js +++ b/server/terminal.js @@ -1,6 +1,7 @@ -'use strict'; +import {createRequire} from 'node:module'; +import {tryCatch} from 'try-catch'; -const {tryCatch} = require('try-catch'); +const require = createRequire(import.meta.url); const noop = (req, res, next) => { next && next(); @@ -10,7 +11,7 @@ noop.listen = noop; const _getModule = (a) => require(a); -module.exports = (config, arg, overrides = {}) => { +export default (config, arg, overrides = {}) => { const { getModule = _getModule, } = overrides; diff --git a/server/terminal.spec.mjs b/server/terminal.spec.js similarity index 97% rename from server/terminal.spec.mjs rename to server/terminal.spec.js index 50292234..9b933488 100644 --- a/server/terminal.spec.mjs +++ b/server/terminal.spec.js @@ -1,6 +1,6 @@ import {test, stub} from 'supertape'; import terminal from './terminal.js'; -import {createConfigManager} from './cloudcmd.mjs'; +import {createConfigManager} from './cloudcmd.js'; test('cloudcmd: terminal: disabled', (t) => { const config = createConfigManager(); diff --git a/server/theme.mjs b/server/theme.js similarity index 100% rename from server/theme.mjs rename to server/theme.js diff --git a/server/themes.spec.mjs b/server/themes.spec.js similarity index 94% rename from server/themes.spec.mjs rename to server/themes.spec.js index ecb99e97..1fc95ec8 100644 --- a/server/themes.spec.mjs +++ b/server/themes.spec.js @@ -2,7 +2,7 @@ import {dirname} from 'node:path'; import {fileURLToPath} from 'node:url'; import fs from 'node:fs'; import test from 'supertape'; -import {getThemes, isDev} from './theme.mjs'; +import {getThemes, isDev} from './theme.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/server/user-menu.mjs b/server/user-menu.js similarity index 100% rename from server/user-menu.mjs rename to server/user-menu.js diff --git a/server/user-menu.spec.mjs b/server/user-menu.spec.js similarity index 83% rename from server/user-menu.spec.mjs rename to server/user-menu.spec.js index 635c7746..976eebd9 100644 --- a/server/user-menu.spec.mjs +++ b/server/user-menu.spec.js @@ -3,14 +3,14 @@ import {fileURLToPath} from 'node:url'; import {readFileSync} from 'node:fs'; import {test, stub} from 'supertape'; import serveOnce from 'serve-once'; -import userMenu from './user-menu.mjs'; +import {putout} from 'putout'; +import userMenu from './user-menu.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const {request} = serveOnce(userMenu); const userMenuPath = join(__dirname, '..', '.cloudcmd.menu.js'); -const userMenuFile = readFileSync(userMenuPath, 'utf8'); const fixtureDir = new URL('fixture-user-menu', import.meta.url).pathname; const fixtureMoveName = join(fixtureDir, 'io-mv.js'); @@ -24,6 +24,7 @@ const fixtureCopy = readFileSync(fixtureCopyName, 'utf8'); const fixtureCopyFix = readFileSync(fixtureCopyFixName, 'utf8'); test('cloudcmd: user menu', async (t) => { + const userMenuFile = getUserMenuFile(); const options = { menuName: '.cloudcmd.menu.js', }; @@ -69,3 +70,15 @@ test('cloudcmd: user menu: io.cp', async (t) => { t.equal(body, fixtureCopyFix); t.end(); }); + +function getUserMenuFile() { + const userMenuFile = readFileSync(userMenuPath, 'utf8'); + const {code} = putout(userMenuFile, { + rules: { + 'nodejs/convert-esm-to-commonjs': 'on', + }, + plugins: ['nodejs'], + }); + + return code; +} diff --git a/server/validate.mjs b/server/validate.js similarity index 95% rename from server/validate.mjs rename to server/validate.js index 3699d081..61b3a31d 100644 --- a/server/validate.mjs +++ b/server/validate.js @@ -1,8 +1,8 @@ import {statSync as _statSync} from 'node:fs'; import {tryCatch} from 'try-catch'; import _exit from './exit.js'; -import {getColumns as _getColumns} from './columns.mjs'; -import {getThemes as _getThemes} from './theme.mjs'; +import {getColumns as _getColumns} from './columns.js'; +import {getThemes as _getThemes} from './theme.js'; const isString = (a) => typeof a === 'string'; diff --git a/server/validate.spec.mjs b/server/validate.spec.js similarity index 97% rename from server/validate.spec.mjs rename to server/validate.spec.js index 568e55c2..ca12d409 100644 --- a/server/validate.spec.mjs +++ b/server/validate.spec.js @@ -1,7 +1,7 @@ import {test, stub} from 'supertape'; import {tryCatch} from 'try-catch'; -import * as validate from './validate.mjs'; -import cloudcmd from './cloudcmd.mjs'; +import * as validate from './validate.js'; +import cloudcmd from './cloudcmd.js'; test('validate: root: bad', (t) => { const config = { diff --git a/static/user-menu.js b/static/user-menu.js index c8645d51..85cf0ad9 100644 --- a/static/user-menu.js +++ b/static/user-menu.js @@ -1,9 +1,7 @@ -'use strict'; - const RENAME_FILE = 'Rename file'; const CDN = 'https://cdn.jsdelivr.net/gh/cloudcmd/user-menu@1.2.4'; -module.exports = { +export default { '__settings': { select: [RENAME_FILE], run: false, @@ -135,7 +133,8 @@ async function readDefaultMenu({prefix}) { return await res.text(); } -module.exports._selectNames = selectNames; +export const _selectNames = selectNames; + function selectNames(names, panel, {selectFile, getCurrentByName}) { for (const name of names) { const file = getCurrentByName(name, panel); @@ -143,7 +142,8 @@ function selectNames(names, panel, {selectFile, getCurrentByName}) { } } -module.exports._compare = compare; +export const _compare = compare; + function compare(a, b) { const result = []; diff --git a/static/user-menu.spec.js b/static/user-menu.spec.js index b5f6c43c..dd2e362e 100644 --- a/static/user-menu.spec.js +++ b/static/user-menu.spec.js @@ -1,11 +1,10 @@ -'use strict'; +import {stub} from '@cloudcmd/stub'; +import {tryToCatch} from 'try-to-catch'; +import wraptile from 'wraptile'; +import {test as tape} from 'supertape'; +import autoGlobals from 'auto-globals'; +import defaultMenu, {_selectNames, _compare} from './user-menu.js'; -const {stub} = require('@cloudcmd/stub'); -const {tryToCatch} = require('try-to-catch'); -const wraptile = require('wraptile'); -const {test: tape} = require('supertape'); -const autoGlobals = require('auto-globals'); -const defaultMenu = require('./user-menu'); const test = autoGlobals(tape); const {create} = autoGlobals; const {_data} = defaultMenu; @@ -261,7 +260,6 @@ test('cloudcmd: static: user menu: compare directories', async (t) => { }); test('cloudcmd: static: user menu: compare directories: select names', (t) => { - const {_selectNames} = defaultMenu; const selectFile = stub(); const file = {}; const getCurrentByName = stub().returns(file); @@ -279,7 +277,6 @@ test('cloudcmd: static: user menu: compare directories: select names', (t) => { }); test('cloudcmd: static: user menu: compare directories: select names: getCurrentByName', (t) => { - const {_selectNames} = defaultMenu; const selectFile = stub(); const getCurrentByName = stub(); @@ -297,7 +294,6 @@ test('cloudcmd: static: user menu: compare directories: select names: getCurrent }); test('cloudcmd: static: user menu: compare directories: select names: compare', (t) => { - const {_compare} = defaultMenu; const a = [1, 2]; const b = [1, 3]; diff --git a/test/before.mjs b/test/before.js similarity index 97% rename from test/before.mjs rename to test/before.js index ccb2399f..e42a840a 100644 --- a/test/before.mjs +++ b/test/before.js @@ -8,7 +8,7 @@ import express from 'express'; import {Server} from 'socket.io'; import writejson from 'writejson'; import readjson from 'readjson'; -import cloudcmd from '../server/cloudcmd.mjs'; +import cloudcmd from '../server/cloudcmd.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index 19d35cb7..1eef2147 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -1,14 +1,15 @@ -'use strict'; +import fs from 'node:fs'; +import {fileURLToPath} from 'node:url'; +import {dirname} from 'node:path'; +import {tryCatch} from 'try-catch'; +import {test} from 'supertape'; +import readFilesSync from '@cloudcmd/read-files-sync'; +import * as CloudFunc from '#common/cloudfunc'; +import {time, timeEnd} from '#common/util'; -const fs = require('node:fs'); - -const {tryCatch} = require('try-catch'); -const {test} = require('supertape'); -const readFilesSync = require('@cloudcmd/read-files-sync'); - -const CloudFunc = require('#common/cloudfunc'); -const {time, timeEnd} = require(`../../common/util.mjs`); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); const DIR = `${__dirname}/../../`; const TMPLDIR = `${DIR}tmpl/`; diff --git a/test/rest/config.mjs b/test/rest/config.js similarity index 97% rename from test/rest/config.mjs rename to test/rest/config.js index b31c65af..e7b7231e 100644 --- a/test/rest/config.mjs +++ b/test/rest/config.js @@ -1,6 +1,6 @@ import serveOnce from 'serve-once'; import test from 'supertape'; -import cloudcmd from '../../server/cloudcmd.mjs'; +import cloudcmd from '../../server/cloudcmd.js'; const configManager = cloudcmd.createConfigManager(); const {request} = serveOnce(cloudcmd, { diff --git a/test/rest/copy.mjs b/test/rest/copy.js similarity index 95% rename from test/rest/copy.mjs rename to test/rest/copy.js index 98e8ea4d..1552124b 100644 --- a/test/rest/copy.mjs +++ b/test/rest/copy.js @@ -4,7 +4,7 @@ import {mkdirSync} from 'node:fs'; import serveOnce from 'serve-once'; import test from 'supertape'; import {rimraf} from 'rimraf'; -import cloudcmd from '../../server/cloudcmd.mjs'; +import cloudcmd from '../../server/cloudcmd.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/rest/fs.mjs b/test/rest/fs.js similarity index 92% rename from test/rest/fs.mjs rename to test/rest/fs.js index 07f4b7f6..00f33e8a 100644 --- a/test/rest/fs.mjs +++ b/test/rest/fs.js @@ -1,6 +1,6 @@ import serveOnce from 'serve-once'; import test from 'supertape'; -import cloudcmd from '../../server/cloudcmd.mjs'; +import cloudcmd from '../../server/cloudcmd.js'; const {request} = serveOnce(cloudcmd, { config: { diff --git a/test/rest/move.mjs b/test/rest/move.js similarity index 97% rename from test/rest/move.mjs rename to test/rest/move.js index e962e5f0..d3effaad 100644 --- a/test/rest/move.mjs +++ b/test/rest/move.js @@ -2,7 +2,7 @@ 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'; +import cloudcmd from '../../server/cloudcmd.js'; test('cloudcmd: rest: move', async (t) => { const move = new EventEmitter(); diff --git a/test/rest/pack.mjs b/test/rest/pack.js similarity index 99% rename from test/rest/pack.mjs rename to test/rest/pack.js index 9aefcb97..76696b7e 100644 --- a/test/rest/pack.mjs +++ b/test/rest/pack.js @@ -7,7 +7,7 @@ import tar from 'tar-stream'; import gunzip from 'gunzip-maybe'; import pullout from 'pullout'; import serveOnce from 'serve-once'; -import cloudcmd from '../../server/cloudcmd.mjs'; +import cloudcmd from '../../server/cloudcmd.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/rest/rename.mjs b/test/rest/rename.js similarity index 97% rename from test/rest/rename.mjs rename to test/rest/rename.js index 1dd14b63..863c87c1 100644 --- a/test/rest/rename.mjs +++ b/test/rest/rename.js @@ -3,7 +3,7 @@ import test from 'supertape'; import {Volume} from 'memfs'; import {ufs} from 'unionfs'; import serveOnce from 'serve-once'; -import cloudcmd from '../../server/cloudcmd.mjs'; +import cloudcmd from '../../server/cloudcmd.js'; test('cloudcmd: rest: rename', async (t) => { const volume = { diff --git a/test/server/console.mjs b/test/server/console.js similarity index 92% rename from test/server/console.mjs rename to test/server/console.js index 72984d50..56d35a3c 100644 --- a/test/server/console.mjs +++ b/test/server/console.js @@ -1,8 +1,8 @@ import {once} from 'node:events'; import test from 'supertape'; import io from 'socket.io-client'; -import {connect} from '../before.mjs'; -import {createConfig} from '../../server/config.mjs'; +import {connect} from '../before.js'; +import {createConfig} from '../../server/config.js'; const configFn = createConfig(); diff --git a/test/server/env.js b/test/server/env.js index ce12e0df..323c0a99 100644 --- a/test/server/env.js +++ b/test/server/env.js @@ -1,8 +1,6 @@ -'use strict'; - -const process = require('node:process'); -const {test} = require('supertape'); -const env = require('../../server/env.mjs'); +import process from 'node:process'; +import {test} from 'supertape'; +import * as env from '../../server/env.js'; test('env: small', (t) => { process.env.cloudcmd_hello = 'world'; diff --git a/test/server/modulas.mjs b/test/server/modulas.js similarity index 94% rename from test/server/modulas.mjs rename to test/server/modulas.js index c6281501..0c359107 100644 --- a/test/server/modulas.mjs +++ b/test/server/modulas.js @@ -3,8 +3,8 @@ import {dirname, join} from 'node:path'; import {fileURLToPath} from 'node:url'; import serveOnce from 'serve-once'; import {test, stub} from 'supertape'; -import cloudcmd from '../../server/cloudcmd.mjs'; -import modulas from '../../server/modulas.mjs'; +import cloudcmd from '../../server/cloudcmd.js'; +import modulas from '../../server/modulas.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/static.mjs b/test/static.js similarity index 98% rename from test/static.mjs rename to test/static.js index 03a57e35..f28fedf5 100644 --- a/test/static.mjs +++ b/test/static.js @@ -2,7 +2,7 @@ import {Buffer} from 'node:buffer'; import serveOnce from 'serve-once'; import test from 'supertape'; import criton from 'criton'; -import cloudcmd from '../server/cloudcmd.mjs'; +import cloudcmd from '../server/cloudcmd.js'; const config = { auth: false, diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..5d684391 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,10 @@ +import {merge} from 'webpack-merge'; +import * as htmlConfig from './.webpack/html.js'; +import cssConfig from './.webpack/css.js'; +import jsConfig from './.webpack/js.js'; + +export default merge([ + jsConfig, + htmlConfig, + cssConfig, +]); diff --git a/webpack.config.mjs b/webpack.config.mjs deleted file mode 100644 index a1eb0da2..00000000 --- a/webpack.config.mjs +++ /dev/null @@ -1,10 +0,0 @@ -import {merge} from 'webpack-merge'; -import * as htmlConfig from './.webpack/html.mjs'; -import cssConfig from './.webpack/css.mjs'; -import jsConfig from './.webpack/js.mjs'; - -export default merge([ - jsConfig, - htmlConfig, - cssConfig, -]); From 3d19f4727a015b6d5cfb79ecf53d52f5ce34ba76 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 15:45:45 +0200 Subject: [PATCH 032/390] test: user-menu: coverage --- client/sw/register.spec.js | 4 ++-- server/cloudcmd.js | 2 +- server/user-menu.js | 27 +++++++++++++++++++-------- server/user-menu.spec.js | 17 ++++++++++++++++- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/client/sw/register.spec.js b/client/sw/register.spec.js index 5cb98049..47420ba7 100644 --- a/client/sw/register.spec.js +++ b/client/sw/register.spec.js @@ -84,7 +84,7 @@ test('sw: register: registerSW', async (t, {location, navigator}) => { const {register} = navigator.serviceWorker; await registerSW('/hello'); - t.calledWith(register, ['/hello/sw.mjs'], 'should call register'); + t.calledWith(register, ['/hello/sw.js'], 'should call register'); t.end(); }); @@ -98,6 +98,6 @@ test('sw: register: unregisterSW', async (t, {location, navigator}) => { await unregisterSW('/hello'); - t.calledWith(register, ['/hello/sw.mjs'], 'should call register'); + t.calledWith(register, ['/hello/sw.js'], 'should call register'); t.end(); }); diff --git a/server/cloudcmd.js b/server/cloudcmd.js index 996ac5d4..a135b14e 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -18,7 +18,7 @@ import * as cloudfunc from '#common/cloudfunc'; import authentication from './auth.js'; import {createConfig, configPath} from './config.js'; import modulas from './modulas.js'; -import userMenu from './user-menu.js'; +import {userMenu} from './user-menu.js'; import rest from './rest/index.js'; import route from './route.js'; import * as validate from './validate.js'; diff --git a/server/user-menu.js b/server/user-menu.js index 4eaa3a8c..4c56ad9f 100644 --- a/server/user-menu.js +++ b/server/user-menu.js @@ -1,6 +1,8 @@ import {homedir} from 'node:os'; import {readFile as _readFile} from 'node:fs/promises'; import {join} from 'node:path'; +import {readFileSync} from 'node:fs'; +// warm up worker cache import montag from 'montag'; import {tryToCatch} from 'try-to-catch'; import currify from 'currify'; @@ -10,9 +12,8 @@ import {putout, codeframe} from 'putout'; transpile(''); const PREFIX = '/api/v1/user-menu'; -const DEFAULT_MENU_PATH = new URL('../static/user-menu.js', import.meta.url).pathname; -export default currify(async ({menuName, readFile = _readFile}, req, res, next) => { +export const userMenu = currify(async ({menuName, readFile = _readFile}, req, res, next) => { if (!req.url.startsWith(PREFIX)) return next(); @@ -34,7 +35,7 @@ async function onGET({req, res, menuName, readFile}) { const url = req.url.replace(PREFIX, ''); if (url === '/default') - return sendDefaultMenu(res); + return await sendDefaultMenu(res); const {findUp} = await import('find-up'); @@ -57,7 +58,7 @@ async function onGET({req, res, menuName, readFile}) { .send(e.message); if (e) - return sendDefaultMenu(res); + return await sendDefaultMenu(res); const [parseError, result] = await transpile(source); @@ -85,10 +86,12 @@ function getError(error, source) { `; } -function sendDefaultMenu(res) { - res.sendFile(DEFAULT_MENU_PATH, { - cacheControl: false, - }); +async function sendDefaultMenu(res) { + const menu = await getDefaultMenu(); + + res + .type('js') + .send(menu); } async function transpile(source) { @@ -102,3 +105,11 @@ async function transpile(source) { ], }); } + +async function getDefaultMenu() { + const DEFAULT_MENU_PATH = new URL('../static/user-menu.js', import.meta.url).pathname; + const menu = readFileSync(DEFAULT_MENU_PATH, 'utf8'); + const [, result] = await transpile(menu); + + return result.code; +} diff --git a/server/user-menu.spec.js b/server/user-menu.spec.js index 976eebd9..b88cb07a 100644 --- a/server/user-menu.spec.js +++ b/server/user-menu.spec.js @@ -4,7 +4,7 @@ import {readFileSync} from 'node:fs'; import {test, stub} from 'supertape'; import serveOnce from 'serve-once'; import {putout} from 'putout'; -import userMenu from './user-menu.js'; +import {userMenu} from './user-menu.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); @@ -54,6 +54,21 @@ test('cloudcmd: user menu: io.mv', async (t) => { t.end(); }); +test('cloudcmd: user menu: default menu', async (t) => { + const options = { + menuName: '111.cloudcmd.menu.js', + }; + + const {request} = serveOnce(userMenu); + + const {body} = await request.get(`/api/v1/user-menu?dir=abcd`, { + options, + }); + + t.match(body, 'module.exports'); + t.end(); +}); + test('cloudcmd: user menu: io.cp', async (t) => { const readFile = stub().returns(fixtureCopy); const options = { From 09601047e527855fb3819ded5e36442e18b59d02 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 15:49:55 +0200 Subject: [PATCH 033/390] chore: cssnano: back to cjs --- cssnano.config.js => cssnano.config.cjs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) rename cssnano.config.js => cssnano.config.cjs (63%) diff --git a/cssnano.config.js b/cssnano.config.cjs similarity index 63% rename from cssnano.config.js rename to cssnano.config.cjs index 44abaeaf..91ae5f81 100644 --- a/cssnano.config.js +++ b/cssnano.config.cjs @@ -1,7 +1,9 @@ -// used by OptimizeCssAssetsPlugin -import defaultPreset from 'cssnano-preset-default'; +'use strict'; -export default defaultPreset({ +// used by OptimizeCssAssetsPlugin +const defaultPreset = require('cssnano-preset-default'); + +module.exports = defaultPreset({ svgo: { plugins: [{ convertPathData: false, From 307583e374840a9304b26099f621d0e6988a6d16 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 15:53:21 +0200 Subject: [PATCH 034/390] chore: lint --- bin/release.js | 2 ++ eslint.config.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/release.js b/bin/release.js index 1c1a487c..004b908e 100755 --- a/bin/release.js +++ b/bin/release.js @@ -1,3 +1,5 @@ +#!/usr/bin/env node + import {promisify} from 'node:util'; import process from 'node:process'; import {tryToCatch} from 'try-to-catch'; diff --git a/eslint.config.js b/eslint.config.js index dc751dca..b38d3e2e 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -5,7 +5,7 @@ import globals from 'globals'; import {matchToFlat} from '@putout/eslint-flat'; export const match = { - 'bin/release.mjs': { + 'bin/release.js': { 'no-console': 'off', 'n/hashbang': 'off', }, From 31570e4fae56a9701ee56c00ec0681b61611807a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 16:10:55 +0200 Subject: [PATCH 035/390] chore: current-file: typo --- client/dom/current-file.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/dom/current-file.js b/client/dom/current-file.js index 2239c991..f52f7a08 100644 --- a/client/dom/current-file.js +++ b/client/dom/current-file.js @@ -153,7 +153,7 @@ export const getCurrentByName = (name, panel = DOM.CurrentInfo.panel) => { }; /** - * private function thet unset currentFile + * private function that unset currentFile * * @currentFile */ From c7095e2570012288457dc4ae1706dcaa0bb0d379 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 15:53:57 +0200 Subject: [PATCH 036/390] chore: cloudcmd: v19.3.0 --- 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 4a1c9f7a..652c2903 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2026.02.03, v19.3.0 + +feature: +- 4533a25c cloudcmd: migrate to ESM +- e8a81c49 client: dom: events: migrate to ESM +- 071141bc client: terminal-run: migrate to ESM + 2026.02.03, v19.2.0 feature: diff --git a/HELP.md b/HELP.md index 50e246b8..1ba244f9 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.2.0 +# Cloud Commander v19.3.0 ### [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 +- *2026.02.03*, **[v19.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.0)** - *2026.02.03*, **[v19.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.2.0)** - *2026.02.02*, **[v19.1.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.21)** - *2026.01.31*, **[v19.1.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.20)** diff --git a/README.md b/README.md index 2d0fb524..05fcaf68 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.2.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.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 ffa02dde..8fc5a025 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.2.0", + "version": "19.3.0", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From e68338a17bd70ecc80632e8d9bf10334a6da6bb4 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 3 Feb 2026 14:16:16 +0000 Subject: [PATCH 037/390] =?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 | 8 ++++---- common/util.js | 2 +- static/user-menu.spec.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/dom/current-file.js b/client/dom/current-file.js index f52f7a08..339376d2 100644 --- a/client/dom/current-file.js +++ b/client/dom/current-file.js @@ -77,7 +77,7 @@ const parseHrefAttribute = (prefix, attribute) => { export const _parseHrefAttribute = parseHrefAttribute; /** - * get current direcotory path + * get current directory path */ export const getCurrentDirPath = (panel = DOM.getPanel()) => { const path = DOM.getByDataName('js-path', panel); @@ -98,7 +98,7 @@ export const getCurrentPath = (currentFile) => { }; /** - * get current direcotory name + * get current directory name */ export const getCurrentDirName = () => { const href = DOM @@ -111,7 +111,7 @@ export const getCurrentDirName = () => { }; /** - * get current direcotory path + * get current directory path */ export const getParentDirPath = (panel) => { const path = DOM.getCurrentDirPath(panel); @@ -125,7 +125,7 @@ export const getParentDirPath = (panel) => { }; /** - * get not current direcotory path + * get not current directory path */ export const getNotCurrentDirPath = () => { const panel = DOM.getPanel({ diff --git a/common/util.js b/common/util.js index 761b6345..422b3c22 100644 --- a/common/util.js +++ b/common/util.js @@ -45,7 +45,7 @@ export const getExt = (name) => { }; /** - * find object by name in arrray + * find object by name in array * * @param array * @param name diff --git a/static/user-menu.spec.js b/static/user-menu.spec.js index dd2e362e..d13a48d6 100644 --- a/static/user-menu.spec.js +++ b/static/user-menu.spec.js @@ -316,7 +316,7 @@ function getDOM() { const CurrentInfo = { dirPath: '/', files: [], - filesPasive: [], + filesPassive: [], panel: create(), panelPassive: create(), }; From 6e3ba27131062ead521801eb6c66782eedd44359 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 16:17:28 +0200 Subject: [PATCH 038/390] fix: Closing X in editor disappeared (#455) --- .webpack/css.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.webpack/css.js b/.webpack/css.js index 3b83715b..338ae91b 100644 --- a/.webpack/css.js +++ b/.webpack/css.js @@ -22,7 +22,7 @@ const rules = [{ }, }], }, { - test: /\.(png|gif|woff|woff2|eot|ttf)$/, + test: /\.(png|gif|svg|woff|woff2|eot|ttf)$/, type: 'asset/inline', }]; From f5cabc7696c69d226a9104a570c9d0e46c01b33f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 16:22:10 +0200 Subject: [PATCH 039/390] test: static: user-menu: compare directories --- static/user-menu.spec.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/static/user-menu.spec.js b/static/user-menu.spec.js index d13a48d6..a9da2257 100644 --- a/static/user-menu.spec.js +++ b/static/user-menu.spec.js @@ -243,17 +243,17 @@ test('cloudcmd: static: user menu: no EditFile.show', async (t) => { t.end(); }); -test('cloudcmd: static: user menu: compare directories', async (t) => { +test('cloudcmd: static: user menu: compare directories', (t) => { const name = 'D - Compare directories'; const DOM = getDOM(); const CloudCmd = getCloudCmd(); - await defaultMenu[name]({ + defaultMenu[name]({ DOM, CloudCmd, }); - const {files} = DOM.CurrentInfo.files; + const {files} = DOM.CurrentInfo; t.calledWith(DOM.getFilenames, [files], 'should call getFilenames'); t.end(); @@ -338,3 +338,4 @@ const getCloudCmd = () => ({ show: stub(), }, }); + From dad4cd1f57235ed4a0aa21607c145de9cae20468 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 16:22:39 +0200 Subject: [PATCH 040/390] chore: cloudcmd: v19.3.1 --- 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 652c2903..d8fd1848 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.03, v19.3.1 + +fix: +- 5661bc4f Closing X in editor disappeared (#455) + 2026.02.03, v19.3.0 feature: diff --git a/HELP.md b/HELP.md index 1ba244f9..06818dce 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.0 +# Cloud Commander v19.3.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 +- *2026.02.03*, **[v19.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.1)** - *2026.02.03*, **[v19.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.0)** - *2026.02.03*, **[v19.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.2.0)** - *2026.02.02*, **[v19.1.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.1.21)** diff --git a/README.md b/README.md index 05fcaf68..ba8f2659 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.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 8fc5a025..fe2b35a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.0", + "version": "19.3.1", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From b61818fe62e798b6eed503b1ab6d5c08b0acc884 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 3 Feb 2026 14:27:37 +0000 Subject: [PATCH 041/390] =?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 --- static/user-menu.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/static/user-menu.spec.js b/static/user-menu.spec.js index a9da2257..47e4a816 100644 --- a/static/user-menu.spec.js +++ b/static/user-menu.spec.js @@ -338,4 +338,3 @@ const getCloudCmd = () => ({ show: stub(), }, }); - From a266c1452c65bee5f86d7ab080a032c41f6df9ce Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 20:08:18 +0200 Subject: [PATCH 042/390] fix: cloudcmd: default -> named --- README.md | 2 +- package.json | 3 ++- server/cloudcmd.js | 4 +--- server/cloudcmd.spec.js | 2 +- server/distribute/import.spec.js | 2 +- server/markdown/index.spec.js | 2 +- server/route.spec.js | 2 +- server/server.js | 2 +- server/terminal.spec.js | 2 +- server/validate.spec.js | 2 +- test/before.js | 2 +- test/rest/config.js | 2 +- test/rest/copy.js | 2 +- test/rest/fs.js | 2 +- test/rest/move.js | 2 +- test/rest/pack.js | 2 +- test/rest/rename.js | 2 +- test/server/modulas.js | 2 +- test/static.js | 2 +- 19 files changed, 20 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index ba8f2659..e10fb628 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ And create `index.js`: ```js import http from 'node:http'; -import cloudcmd from 'cloudcmd'; +import {cloudcmd} from 'cloudcmd'; import {Server} from 'socket.io'; import express from 'express'; diff --git a/package.json b/package.json index fe2b35a5..2acbce91 100644 --- a/package.json +++ b/package.json @@ -232,7 +232,8 @@ "#dom/rest": "./client/dom/rest.js", "#common/util": "./common/util.js", "#common/cloudfunc": "./common/cloudfunc.js", - "#common/entity": "./common/entity.js" + "#common/entity": "./common/entity.js", + "#server/cloudcmd": "./server/cloudcmd.js" }, "engines": { "node": ">=22" diff --git a/server/cloudcmd.js b/server/cloudcmd.js index a135b14e..60637c79 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -46,9 +46,7 @@ const clean = (a) => a.filter(notEmpty); const isUndefined = (a) => typeof a === 'undefined'; const isFn = (a) => typeof a === 'function'; -export default cloudcmd; - -function cloudcmd(params) { +export function cloudcmd(params) { const p = params || {}; const options = p.config || {}; const config = p.configManager || createConfig({ diff --git a/server/cloudcmd.spec.js b/server/cloudcmd.spec.js index 65344534..ace68e25 100644 --- a/server/cloudcmd.spec.js +++ b/server/cloudcmd.spec.js @@ -9,7 +9,7 @@ import cloudcmd, { _getPrefix, _initAuth, _getIndexPath, -} from './cloudcmd.js'; +} from '#server/cloudcmd'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/server/distribute/import.spec.js b/server/distribute/import.spec.js index f5e2539c..10e246be 100644 --- a/server/distribute/import.spec.js +++ b/server/distribute/import.spec.js @@ -2,8 +2,8 @@ import process from 'node:process'; import {promisify} from 'node:util'; import test from 'supertape'; import {tryToCatch} from 'try-to-catch'; +import {createConfigManager} from '#server/cloudcmd'; import {connect} from '../../test/before.js'; -import {createConfigManager} from '../cloudcmd.js'; import {distributeImport} from './import.js'; const distribute = { diff --git a/server/markdown/index.spec.js b/server/markdown/index.spec.js index f0f425ba..5a337bd9 100644 --- a/server/markdown/index.spec.js +++ b/server/markdown/index.spec.js @@ -4,8 +4,8 @@ import {promisify} from 'node:util'; import {tryToCatch} from 'try-to-catch'; import test from 'supertape'; import serveOnce from 'serve-once'; +import {cloudcmd} from '#server/cloudcmd'; import markdown from './index.js'; -import cloudcmd from '../cloudcmd.js'; const config = { auth: false, diff --git a/server/route.spec.js b/server/route.spec.js index fcf2f58b..7087f463 100644 --- a/server/route.spec.js +++ b/server/route.spec.js @@ -5,7 +5,7 @@ import fs from 'node:fs'; import {tryToCatch} from 'try-to-catch'; import {test, stub} from 'supertape'; import serveOnce from 'serve-once'; -import cloudcmd from './cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; import {_getReadDir} from './route.js'; const __filename = fileURLToPath(import.meta.url); diff --git a/server/server.js b/server/server.js index 00a4ee5b..e9ad5145 100644 --- a/server/server.js +++ b/server/server.js @@ -10,8 +10,8 @@ import {Server} from 'socket.io'; import tryRequire from 'tryrequire'; import wraptile from 'wraptile'; import compression from 'compression'; +import {cloudcmd} from '#server/cloudcmd'; import exit from './exit.js'; -import cloudcmd from './cloudcmd.js'; const bind = (f, self) => f.bind(self); diff --git a/server/terminal.spec.js b/server/terminal.spec.js index 9b933488..22f20282 100644 --- a/server/terminal.spec.js +++ b/server/terminal.spec.js @@ -1,6 +1,6 @@ import {test, stub} from 'supertape'; +import {createConfigManager} from '#server/cloudcmd'; import terminal from './terminal.js'; -import {createConfigManager} from './cloudcmd.js'; test('cloudcmd: terminal: disabled', (t) => { const config = createConfigManager(); diff --git a/server/validate.spec.js b/server/validate.spec.js index ca12d409..bb16fae1 100644 --- a/server/validate.spec.js +++ b/server/validate.spec.js @@ -1,7 +1,7 @@ import {test, stub} from 'supertape'; import {tryCatch} from 'try-catch'; +import {cloudcmd} from '#server/cloudcmd'; import * as validate from './validate.js'; -import cloudcmd from './cloudcmd.js'; test('validate: root: bad', (t) => { const config = { diff --git a/test/before.js b/test/before.js index e42a840a..970a4a4f 100644 --- a/test/before.js +++ b/test/before.js @@ -8,7 +8,7 @@ import express from 'express'; import {Server} from 'socket.io'; import writejson from 'writejson'; import readjson from 'readjson'; -import cloudcmd from '../server/cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/rest/config.js b/test/rest/config.js index e7b7231e..737d422e 100644 --- a/test/rest/config.js +++ b/test/rest/config.js @@ -1,6 +1,6 @@ import serveOnce from 'serve-once'; import test from 'supertape'; -import cloudcmd from '../../server/cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; const configManager = cloudcmd.createConfigManager(); const {request} = serveOnce(cloudcmd, { diff --git a/test/rest/copy.js b/test/rest/copy.js index 1552124b..f11ef7d4 100644 --- a/test/rest/copy.js +++ b/test/rest/copy.js @@ -4,7 +4,7 @@ import {mkdirSync} from 'node:fs'; import serveOnce from 'serve-once'; import test from 'supertape'; import {rimraf} from 'rimraf'; -import cloudcmd from '../../server/cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/rest/fs.js b/test/rest/fs.js index 00f33e8a..721320a2 100644 --- a/test/rest/fs.js +++ b/test/rest/fs.js @@ -1,6 +1,6 @@ import serveOnce from 'serve-once'; import test from 'supertape'; -import cloudcmd from '../../server/cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; const {request} = serveOnce(cloudcmd, { config: { diff --git a/test/rest/move.js b/test/rest/move.js index d3effaad..696b36a3 100644 --- a/test/rest/move.js +++ b/test/rest/move.js @@ -2,7 +2,7 @@ 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.js'; +import {cloudcmd} from '#server/cloudcmd'; test('cloudcmd: rest: move', async (t) => { const move = new EventEmitter(); diff --git a/test/rest/pack.js b/test/rest/pack.js index 76696b7e..8a970299 100644 --- a/test/rest/pack.js +++ b/test/rest/pack.js @@ -7,7 +7,7 @@ import tar from 'tar-stream'; import gunzip from 'gunzip-maybe'; import pullout from 'pullout'; import serveOnce from 'serve-once'; -import cloudcmd from '../../server/cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); diff --git a/test/rest/rename.js b/test/rest/rename.js index 863c87c1..8dd8e1f8 100644 --- a/test/rest/rename.js +++ b/test/rest/rename.js @@ -3,7 +3,7 @@ import test from 'supertape'; import {Volume} from 'memfs'; import {ufs} from 'unionfs'; import serveOnce from 'serve-once'; -import cloudcmd from '../../server/cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; test('cloudcmd: rest: rename', async (t) => { const volume = { diff --git a/test/server/modulas.js b/test/server/modulas.js index 0c359107..5c7c6d9e 100644 --- a/test/server/modulas.js +++ b/test/server/modulas.js @@ -3,7 +3,7 @@ import {dirname, join} from 'node:path'; import {fileURLToPath} from 'node:url'; import serveOnce from 'serve-once'; import {test, stub} from 'supertape'; -import cloudcmd from '../../server/cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; import modulas from '../../server/modulas.js'; const __filename = fileURLToPath(import.meta.url); diff --git a/test/static.js b/test/static.js index f28fedf5..1b725955 100644 --- a/test/static.js +++ b/test/static.js @@ -2,7 +2,7 @@ import {Buffer} from 'node:buffer'; import serveOnce from 'serve-once'; import test from 'supertape'; import criton from 'criton'; -import cloudcmd from '../server/cloudcmd.js'; +import {cloudcmd} from '#server/cloudcmd'; const config = { auth: false, From f84ce8534e5b4950101dc56f0dbbf0e9e640124b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 3 Feb 2026 21:30:36 +0200 Subject: [PATCH 043/390] feature: cloudcmd: edward v16.0.0 --- package.json | 2 +- server/cloudcmd.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2acbce91..85efdd88 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "deepmerge": "^4.0.0", "deepword": "^10.0.0", "dword": "^15.0.0", - "edward": "^15.0.0", + "edward": "^16.0.0", "es6-promisify": "^7.0.0", "execon": "^1.2.0", "express": "^5.1.0", diff --git a/server/cloudcmd.js b/server/cloudcmd.js index 60637c79..45ca5996 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -9,7 +9,7 @@ import ponse from 'ponse'; import restafary from 'restafary'; import restbox from 'restbox'; import konsole from 'console-io'; -import edward from 'edward'; +import {edward} from 'edward'; import dword from 'dword'; import deepword from 'deepword'; import nomine from 'nomine'; From 30f42e9495293f815dc36fde0591027930a8c3ee Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 4 Feb 2026 20:50:00 +0200 Subject: [PATCH 044/390] feature: cloudcmd: restafary v13.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 85efdd88..eeab2ab6 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "putout": "^41.0.0", "redzip": "^4.0.0", "rendy": "^4.1.3", - "restafary": "^13.0.0", + "restafary": "^13.0.1", "restbox": "^4.0.0", "shortdate": "^2.0.0", "simport": "^1.0.1", From 99d8435e9dee2c32c10d38bef7618e14fd02e509 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 4 Feb 2026 20:51:08 +0200 Subject: [PATCH 045/390] fix: cloudcmd: exports --- server/cloudcmd.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/cloudcmd.js b/server/cloudcmd.js index 45ca5996..8c636f3c 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -6,7 +6,7 @@ import {fullstore} from 'fullstore'; import currify from 'currify'; import apart from 'apart'; import ponse from 'ponse'; -import restafary from 'restafary'; +import {restafary} from 'restafary'; import restbox from 'restbox'; import konsole from 'console-io'; import {edward} from 'edward'; @@ -46,6 +46,8 @@ const clean = (a) => a.filter(notEmpty); const isUndefined = (a) => typeof a === 'undefined'; const isFn = (a) => typeof a === 'function'; +export default cloudcmd; + export function cloudcmd(params) { const p = params || {}; const options = p.config || {}; From 846dd1bf226e2acee63cd40508cb7715ae241ec1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 4 Feb 2026 20:52:09 +0200 Subject: [PATCH 046/390] chore: cloudcmd: v19.3.2 --- ChangeLog | 11 +++++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index d8fd1848..0828120e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2026.02.04, v19.3.2 + +fix: +- 99d8435e cloudcmd: exports +- a266c145 cloudcmd: default -> named +- 6e3ba271 Closing X in editor disappeared (#455) + +feature: +- 30f42e94 cloudcmd: restafary v13.0.1 +- f84ce853 cloudcmd: edward v16.0.0 + 2026.02.03, v19.3.1 fix: diff --git a/HELP.md b/HELP.md index 06818dce..4a9c3025 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.1 +# Cloud Commander v19.3.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 +- *2026.02.04*, **[v19.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.2)** - *2026.02.03*, **[v19.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.1)** - *2026.02.03*, **[v19.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.0)** - *2026.02.03*, **[v19.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.2.0)** diff --git a/README.md b/README.md index e10fb628..fde442d0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.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 eeab2ab6..38760a9b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.1", + "version": "19.3.2", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 4a5a56f403d2c93001baf72a434c022c693d2293 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 5 Feb 2026 14:21:39 +0200 Subject: [PATCH 047/390] feature: cloudcmd: dword v16.0.0 --- package.json | 2 +- server/cloudcmd.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 38760a9b..21048737 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "currify": "^4.0.0", "deepmerge": "^4.0.0", "deepword": "^10.0.0", - "dword": "^15.0.0", + "dword": "^16.0.0", "edward": "^16.0.0", "es6-promisify": "^7.0.0", "execon": "^1.2.0", diff --git a/server/cloudcmd.js b/server/cloudcmd.js index 8c636f3c..810a3597 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -10,7 +10,7 @@ import {restafary} from 'restafary'; import restbox from 'restbox'; import konsole from 'console-io'; import {edward} from 'edward'; -import dword from 'dword'; +import {dword} from 'dword'; import deepword from 'deepword'; import nomine from 'nomine'; import fileop from '@cloudcmd/fileop'; From f3a0d3a3feb46634867a3e491ff9c744b818b5b6 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 5 Feb 2026 14:22:52 +0200 Subject: [PATCH 048/390] chore: cloudcmd: v19.3.3 --- 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 0828120e..0af802c2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.05, v19.3.3 + +feature: +- 4a5a56f4 cloudcmd: dword v16.0.0 + 2026.02.04, v19.3.2 fix: diff --git a/HELP.md b/HELP.md index 4a9c3025..db36b51a 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.2 +# Cloud Commander v19.3.3 ### [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 +- *2026.02.05*, **[v19.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.3)** - *2026.02.04*, **[v19.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.2)** - *2026.02.03*, **[v19.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.1)** - *2026.02.03*, **[v19.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.0)** diff --git a/README.md b/README.md index fde442d0..2cf1152a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.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 21048737..fb9eba49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.2", + "version": "19.3.3", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 66a08c7f7177dc8007f6d1944a5c535709f7d35f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 6 Feb 2026 21:58:28 +0200 Subject: [PATCH 049/390] feature: cloudcmd: deepword v11.0.0 --- package.json | 2 +- server/cloudcmd.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index fb9eba49..f3c86ba4 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "criton": "^2.0.0", "currify": "^4.0.0", "deepmerge": "^4.0.0", - "deepword": "^10.0.0", + "deepword": "^11.0.0", "dword": "^16.0.0", "edward": "^16.0.0", "es6-promisify": "^7.0.0", diff --git a/server/cloudcmd.js b/server/cloudcmd.js index 810a3597..a5e849bd 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -11,7 +11,7 @@ import restbox from 'restbox'; import konsole from 'console-io'; import {edward} from 'edward'; import {dword} from 'dword'; -import deepword from 'deepword'; +import {deepword} from 'deepword'; import nomine from 'nomine'; import fileop from '@cloudcmd/fileop'; import * as cloudfunc from '#common/cloudfunc'; From d0730e12d9e365f5f8570e4bcaf2a58fa74ed342 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 6 Feb 2026 22:00:21 +0200 Subject: [PATCH 050/390] chore: cloudcmd: v19.3.4 --- 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 0af802c2..b33c1501 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.06, v19.3.4 + +feature: +- 66a08c7f cloudcmd: deepword v11.0.0 + 2026.02.05, v19.3.3 feature: diff --git a/HELP.md b/HELP.md index db36b51a..510afd06 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.3 +# Cloud Commander v19.3.4 ### [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 +- *2026.02.06*, **[v19.3.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.4)** - *2026.02.05*, **[v19.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.3)** - *2026.02.04*, **[v19.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.2)** - *2026.02.03*, **[v19.3.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.1)** diff --git a/README.md b/README.md index 2cf1152a..258ab95e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.3 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.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 f3c86ba4..cf605079 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.3", + "version": "19.3.4", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 76125be9f514c7d86408bbdcbf5465ebe70ea74b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 7 Feb 2026 16:51:36 +0200 Subject: [PATCH 051/390] feature: cloudcmd: eslint v10.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cf605079..e725f547 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ "cssnano-preset-default": "^7.0.10", "domtokenlist-shim": "^1.2.0", "emitify": "^4.0.1", - "eslint": "^9.23.0", + "eslint": "^10.0.0", "eslint-plugin-n": "^17.0.0-4", "eslint-plugin-putout": "^30.0.0", "globals": "^17.0.0", From fb40bd9cec4a277ac5255c6e83d81c89cb2efe8b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 8 Feb 2026 20:39:01 +0200 Subject: [PATCH 052/390] feature: rm cssnano: has no sense for spinner, option disabled by default (https://svgo.dev/docs/plugins/convertPathData/) --- cssnano.config.cjs | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 cssnano.config.cjs diff --git a/cssnano.config.cjs b/cssnano.config.cjs deleted file mode 100644 index 91ae5f81..00000000 --- a/cssnano.config.cjs +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -// used by OptimizeCssAssetsPlugin -const defaultPreset = require('cssnano-preset-default'); - -module.exports = defaultPreset({ - svgo: { - plugins: [{ - convertPathData: false, - }, { - convertShapeToPath: false, - }], - }, -}); From c22916060505fbf26fbaf8d771d491eeca988c05 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 8 Feb 2026 20:41:09 +0200 Subject: [PATCH 053/390] chore: cloudcmd: v19.3.5 --- 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 b33c1501..85abe62b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026.02.08, v19.3.5 + +feature: +- fb40bd9c rm cssnano: has no sense for spinner, option disabled by default (https://svgo.dev/docs/plugins/convertPathData/) +- 76125be9 cloudcmd: eslint v10.0.0 + 2026.02.06, v19.3.4 feature: diff --git a/HELP.md b/HELP.md index 510afd06..d74c1880 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.4 +# Cloud Commander v19.3.5 ### [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 +- *2026.02.08*, **[v19.3.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.5)** - *2026.02.06*, **[v19.3.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.4)** - *2026.02.05*, **[v19.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.3)** - *2026.02.04*, **[v19.3.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.2)** diff --git a/README.md b/README.md index 258ab95e..45145dba 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.4 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.5 [![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 e725f547..f1f3fe38 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.4", + "version": "19.3.5", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 938f9e767494a8fd5473a3723a703126146fa10d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 10 Feb 2026 20:01:56 +0200 Subject: [PATCH 054/390] feature: cloudcmd: console-io v15.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f1f3fe38..69352213 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "apart": "^2.0.0", "chalk": "^5.3.0", "compression": "^1.7.4", - "console-io": "^14.0.0", + "console-io": "^15.0.1", "copymitter": "^9.0.0", "criton": "^2.0.0", "currify": "^4.0.0", From 144e4a34687de0c84d62a14dabecd8de0988ae8b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 12 Feb 2026 13:44:13 +0200 Subject: [PATCH 055/390] feature: cloudcmd: gritty v10.0.0 --- package.json | 2 +- server/terminal.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 69352213..ec6ac311 100644 --- a/package.json +++ b/package.json @@ -178,7 +178,7 @@ "eslint-plugin-n": "^17.0.0-4", "eslint-plugin-putout": "^30.0.0", "globals": "^17.0.0", - "gritty": "^9.0.0", + "gritty": "^10.0.0", "gunzip-maybe": "^1.3.1", "html-webpack-plugin": "^5.6.3", "inherits": "^2.0.3", diff --git a/server/terminal.js b/server/terminal.js index 4436e292..c6d80df9 100644 --- a/server/terminal.js +++ b/server/terminal.js @@ -9,7 +9,8 @@ const noop = (req, res, next) => { noop.listen = noop; -const _getModule = (a) => require(a); +const parseDefault = (a) => a.default || a; +const _getModule = (a) => parseDefault(require(a)); export default (config, arg, overrides = {}) => { const { From ac94eccd90a2c18c5c0fa0500a909b941d96ac43 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 12 Feb 2026 13:48:43 +0200 Subject: [PATCH 056/390] feature: cloudcmd: konsole: named --- server/cloudcmd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/cloudcmd.js b/server/cloudcmd.js index a5e849bd..d36354e7 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -8,7 +8,7 @@ import apart from 'apart'; import ponse from 'ponse'; import {restafary} from 'restafary'; import restbox from 'restbox'; -import konsole from 'console-io'; +import {konsole} from 'console-io'; import {edward} from 'edward'; import {dword} from 'dword'; import {deepword} from 'deepword'; From 3479c3b3f2a324bcf0384a116a193e210a605035 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 12 Feb 2026 14:06:46 +0200 Subject: [PATCH 057/390] test: server: route: console-io -> gritty --- server/route.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/route.spec.js b/server/route.spec.js index 7087f463..c190eefc 100644 --- a/server/route.spec.js +++ b/server/route.spec.js @@ -366,7 +366,7 @@ test('cloudcmd: route: buttons: terminal: can not load', async (t) => { test('cloudcmd: route: buttons: terminal', async (t) => { const config = { terminal: true, - terminalPath: 'console-io', + terminalPath: 'gritty', }; const options = { From 9267f7a28d85250f01ce18adf726af95d74a021e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 12 Feb 2026 14:07:31 +0200 Subject: [PATCH 058/390] chore: cloudcmd: v19.3.6 --- 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 85abe62b..2bfaa911 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2026.02.12, v19.3.6 + +feature: +- ac94eccd cloudcmd: konsole: named +- 144e4a34 cloudcmd: gritty v10.0.0 +- 938f9e76 cloudcmd: console-io v15.0.1 + 2026.02.08, v19.3.5 feature: diff --git a/HELP.md b/HELP.md index d74c1880..d00d32b0 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.5 +# Cloud Commander v19.3.6 ### [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 +- *2026.02.12*, **[v19.3.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.6)** - *2026.02.08*, **[v19.3.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.5)** - *2026.02.06*, **[v19.3.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.4)** - *2026.02.05*, **[v19.3.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.3)** diff --git a/README.md b/README.md index 45145dba..2ef8015b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.5 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.6 [![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 ec6ac311..a2f6c978 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.5", + "version": "19.3.6", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 8fd79a27929e3ec8b73813428d2d0b4781be6d54 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 13 Feb 2026 16:23:45 +0200 Subject: [PATCH 059/390] feature: cloudcmd: win32 v8.0.0 --- package.json | 2 +- server/route.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a2f6c978..626ec67c 100644 --- a/package.json +++ b/package.json @@ -144,7 +144,7 @@ "try-catch": "^4.0.4", "try-to-catch": "^4.0.0", "tryrequire": "^3.0.0", - "win32": "^7.0.0", + "win32": "^8.0.0", "wraptile": "^3.0.0", "writejson": "^3.0.0", "yargs-parser": "^22.0.0" diff --git a/server/route.js b/server/route.js index 4334a194..736ad9b9 100644 --- a/server/route.js +++ b/server/route.js @@ -1,6 +1,6 @@ import {createRequire} from 'node:module'; import {extname} from 'node:path'; -import _win32 from 'win32'; +import * as _win32 from 'win32'; import ponse from 'ponse'; import rendy from 'rendy'; import format from 'format-io'; From 5c9ae0a0deefc5fdf8be073e04f3d5fa3c0aef60 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 13 Feb 2026 16:25:48 +0200 Subject: [PATCH 060/390] chore: cloudcmd: v19.3.7 --- 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 2bfaa911..669752df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.13, v19.3.7 + +feature: +- 8fd79a27 cloudcmd: win32 v8.0.0 + 2026.02.12, v19.3.6 feature: diff --git a/HELP.md b/HELP.md index d00d32b0..0c470f8b 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.6 +# Cloud Commander v19.3.7 ### [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 +- *2026.02.13*, **[v19.3.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.7)** - *2026.02.12*, **[v19.3.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.6)** - *2026.02.08*, **[v19.3.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.5)** - *2026.02.06*, **[v19.3.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.4)** diff --git a/README.md b/README.md index 2ef8015b..ccd49483 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.6 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.7 [![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 626ec67c..c35e9b1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.6", + "version": "19.3.7", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From d274a2b3dbf9700e52467a59de1332fa58f6a468 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 15 Feb 2026 22:24:34 +0200 Subject: [PATCH 061/390] fix: spinner (#456) --- .webpack/css.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.webpack/css.js b/.webpack/css.js index 338ae91b..56af6eca 100644 --- a/.webpack/css.js +++ b/.webpack/css.js @@ -1,6 +1,6 @@ import {env} from 'node:process'; -import OptimizeCssAssetsPlugin from 'optimize-css-assets-webpack-plugin'; import MiniCssExtractPlugin from 'mini-css-extract-plugin'; +import cssnano from 'cssnano'; const isDev = env.NODE_ENV === 'development'; @@ -10,7 +10,6 @@ const plugins = clean([ new MiniCssExtractPlugin({ filename: '[name].css', }), - !isDev && new OptimizeCssAssetsPlugin(), ]); const rules = [{ From e969b3c2b370f561d9f532889269076ea1794bbf Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sun, 15 Feb 2026 20:25:32 +0000 Subject: [PATCH 062/390] =?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 --- .gitignore | 24 +++++++++++------------- .npmignore | 42 ++++++++++++++++++++---------------------- .putout.json | 6 +++--- .webpack/css.js | 4 ---- 4 files changed, 34 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index e6d5d021..6aa86aa9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,17 @@ -package-lock.json -yarn.lock -yarn-error.log -node_modules -npm-debug.log* -coverage - -modules/execon -modules/emitify +*.swp +*.log +*.lock .nyc_output - -*.swp .DS_Store +.idea +package-lock.json +npm-debug.log* + +node_modules +coverage +modules/execon +modules/emitify dist dist-dev - -.idea diff --git a/.npmignore b/.npmignore index ceb649e8..62747573 100644 --- a/.npmignore +++ b/.npmignore @@ -1,34 +1,32 @@ -.* *.spec.* *.config.* *.fixture.js* +*.ai +*.cdr +*.eps +*.config.* +*.log +*.loc + +.* + manifest.yml -docker docker-compose.yml +yarn.lock +now.json +app.json +bower.json +manifest.yml +deno.json +bin/release.* +img/logo/cloudcmd-hq.png +webpack.config.js + +docker test fixture fixture-* coverage css html -yarn-error.log -yarn.lock -now.json - -app.json -bower.json -manifest.yml -deno.json - -bin/release.* - client -img/logo/cloudcmd-hq.png - -webpack.config.js - -*.ai -*.cdr -*.eps - -*.config.* diff --git a/.putout.json b/.putout.json index 3482fdb7..7c6ef070 100644 --- a/.putout.json +++ b/.putout.json @@ -1,11 +1,11 @@ { "plugins": ["cloudcmd"], "ignore": [ - "html", - "fixture*", + "*.md", "app.json", "fontello.json", - "*.md" + "html", + "fixture*" ], "rules": { "package-json/add-type": "off", diff --git a/.webpack/css.js b/.webpack/css.js index 56af6eca..001d0dfc 100644 --- a/.webpack/css.js +++ b/.webpack/css.js @@ -1,8 +1,4 @@ -import {env} from 'node:process'; import MiniCssExtractPlugin from 'mini-css-extract-plugin'; -import cssnano from 'cssnano'; - -const isDev = env.NODE_ENV === 'development'; const clean = (a) => a.filter(Boolean); From 3438a0c6a11f657dbce9d90f339972dc0233b069 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 15 Feb 2026 22:30:22 +0200 Subject: [PATCH 063/390] chore: webpack: add css minification --- .webpack/css.js | 16 ++++++++++++++++ package.json | 1 + 2 files changed, 17 insertions(+) diff --git a/.webpack/css.js b/.webpack/css.js index 001d0dfc..311290cc 100644 --- a/.webpack/css.js +++ b/.webpack/css.js @@ -1,5 +1,8 @@ +import {env} from 'node:process'; +import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'; import MiniCssExtractPlugin from 'mini-css-extract-plugin'; +const isDev = env.NODE_ENV === 'development'; const clean = (a) => a.filter(Boolean); const plugins = clean([ @@ -22,8 +25,21 @@ const rules = [{ }]; export default { + mode: isDev ? 'development' : 'production', plugins, module: { rules, }, + optimization: { + minimize: !isDev, + minimizer: [ + new CssMinimizerPlugin({ + minimizerOptions: { + preset: ['default', { + svgo: false, + }], + }, + }), + ], + }, }; diff --git a/package.json b/package.json index c35e9b1a..88274ff6 100644 --- a/package.json +++ b/package.json @@ -170,6 +170,7 @@ "clean-css-loader": "^4.2.1", "codegen.macro": "^4.0.0", "css-loader": "^7.1.2", + "css-minimizer-webpack-plugin": "^7.0.4", "css-modules-require-hook": "^4.2.3", "cssnano-preset-default": "^7.0.10", "domtokenlist-shim": "^1.2.0", From a9105e67975f9cc26d1e7d86226931cdf0f5977e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 15 Feb 2026 22:35:16 +0200 Subject: [PATCH 064/390] chore: cloudcmd: v19.3.8 --- 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 669752df..4df96fea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.15, v19.3.8 + +fix: +- d274a2b3 spinner (#456) + 2026.02.13, v19.3.7 feature: diff --git a/HELP.md b/HELP.md index 0c470f8b..f03d1182 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.7 +# Cloud Commander v19.3.8 ### [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 +- *2026.02.15*, **[v19.3.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.8)** - *2026.02.13*, **[v19.3.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.7)** - *2026.02.12*, **[v19.3.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.6)** - *2026.02.08*, **[v19.3.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.5)** diff --git a/README.md b/README.md index ccd49483..55ac3122 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.7 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.8 [![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 88274ff6..68670bac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.7", + "version": "19.3.8", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 9ffe3ef137bcd389ba9f6e256b6380b9754204ab Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 15 Feb 2026 23:41:57 +0200 Subject: [PATCH 065/390] feature: cloudcmd: copymitter v10.0.0 (#457) --- package.json | 2 +- server/rest/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 68670bac..9559fa2b 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "chalk": "^5.3.0", "compression": "^1.7.4", "console-io": "^15.0.1", - "copymitter": "^9.0.0", + "copymitter": "^10.0.0", "criton": "^2.0.0", "currify": "^4.0.0", "deepmerge": "^4.0.0", diff --git a/server/rest/index.js b/server/rest/index.js index e166873f..37aa7d9e 100644 --- a/server/rest/index.js +++ b/server/rest/index.js @@ -9,7 +9,7 @@ import currify from 'currify'; import pullout from 'pullout'; import json from 'jonny'; import ponse from 'ponse'; -import copymitter from 'copymitter'; +import {copymitter} from 'copymitter'; import _moveFiles from '@cloudcmd/move-files'; import * as CloudFunc from '#common/cloudfunc'; import root from '../root.js'; From 9fc3c389bf4e3e0651c0761698fc971729a44d49 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 15 Feb 2026 23:46:59 +0200 Subject: [PATCH 066/390] chore: cloudcmd: v19.3.9 --- 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 4df96fea..e4e034b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.15, v19.3.9 + +feature: +- 9ffe3ef1 cloudcmd: copymitter v10.0.0 (#457) + 2026.02.15, v19.3.8 fix: diff --git a/HELP.md b/HELP.md index f03d1182..a7e2ce55 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.8 +# Cloud Commander v19.3.9 ### [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 +- *2026.02.15*, **[v19.3.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.9)** - *2026.02.15*, **[v19.3.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.8)** - *2026.02.13*, **[v19.3.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.7)** - *2026.02.12*, **[v19.3.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.6)** diff --git a/README.md b/README.md index 55ac3122..3ecc203b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.8 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.3.9 [![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 9559fa2b..93f073a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.8", + "version": "19.3.9", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 4424749978ddab29ac9f1a8a4c5809fe9fd03568 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:04:17 +0200 Subject: [PATCH 067/390] feature: cloudcmd: eslint-plugin-putout v31.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93f073a5..cf570e2e 100644 --- a/package.json +++ b/package.json @@ -177,7 +177,7 @@ "emitify": "^4.0.1", "eslint": "^10.0.0", "eslint-plugin-n": "^17.0.0-4", - "eslint-plugin-putout": "^30.0.0", + "eslint-plugin-putout": "^31.0.0", "globals": "^17.0.0", "gritty": "^10.0.0", "gunzip-maybe": "^1.3.1", From 525c17d4bd29326535b1c627528c431138653c6d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:04:17 +0200 Subject: [PATCH 068/390] feature: cloudcmd: madrun v13.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cf570e2e..7590e9f4 100644 --- a/package.json +++ b/package.json @@ -188,7 +188,7 @@ "just-pascal-case": "^3.2.0", "limier": "^3.0.0", "load.js": "^3.0.0", - "madrun": "^12.1.0", + "madrun": "^13.0.0", "memfs": "^4.2.0", "mini-css-extract-plugin": "^2.9.2", "minor": "^1.2.2", From 800ed012bad7fae18b936de6b43ee1ba97c41939 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:04:18 +0200 Subject: [PATCH 069/390] feature: cloudcmd: putout v42.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7590e9f4..b024e23e 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "pipe-io": "^4.0.1", "ponse": "^7.0.0", "pullout": "^5.0.0", - "putout": "^41.0.0", + "putout": "^42.0.5", "redzip": "^4.0.0", "rendy": "^4.1.3", "restafary": "^13.0.1", From 3e647290fd1e03085504d4f97434ab27dbefcbff Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:04:19 +0200 Subject: [PATCH 070/390] feature: cloudcmd: redlint v6.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b024e23e..e0f287ca 100644 --- a/package.json +++ b/package.json @@ -202,7 +202,7 @@ "postcss": "^8.5.3", "process": "^0.11.10", "readjson": "^2.0.1", - "redlint": "^5.0.0", + "redlint": "^6.0.0", "request": "^2.76.0", "rimraf": "^6.0.1", "scroll-into-view-if-needed": "^3.0.4", From 45cf9bafcddf69c5473cf4d3b5d225daa1a83515 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:09:30 +0200 Subject: [PATCH 071/390] fix: menu: prefix (#456) --- client/modules/menu/cloudmenu.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/modules/menu/cloudmenu.js b/client/modules/menu/cloudmenu.js index 1fbe5165..42fd3f54 100644 --- a/client/modules/menu/cloudmenu.js +++ b/client/modules/menu/cloudmenu.js @@ -14,8 +14,9 @@ export const createCloudMenu = async (fm, options, menuData) => { async function loadMenu() { if (CloudCmd.config('menu') === 'aleman') { + const {prefix} = CloudCmd; const {host, protocol} = globalThis.location; - const url = `${protocol}//${host}/node_modules/aleman/menu/menu.js`; + const url = `${protocol}//${host}${prefix}/node_modules/aleman/menu/menu.js`; const {createMenu} = await import(/* webpackIgnore: true */url); return createMenu; From ff9fcb1189a5ea1a94c9e1fb83c7477ea68a7695 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:15:22 +0200 Subject: [PATCH 072/390] chore: lint --- .nycrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nycrc.json b/.nycrc.json index 2a772159..36d6b4cb 100644 --- a/.nycrc.json +++ b/.nycrc.json @@ -3,9 +3,9 @@ "all": false, "exclude": [ "**/*.spec.js", - "**/fixture", "**/*.*.js", "**/*.config.*", + "**/fixture", "**/test/**" ], "branches": 100, From 8836d816d5d8525865b0815d17a9a3016ff03aca Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:16:01 +0200 Subject: [PATCH 073/390] chore: cloudcmd: v19.4.0 --- ChangeLog | 11 +++++++++++ HELP.md | 3 ++- README.md | 2 +- package.json | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e4e034b7..e3a714da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2026.02.18, v19.4.0 + +fix: +- 45cf9baf menu: prefix (#456) + +feature: +- 3e647290 cloudcmd: redlint v6.0.0 +- 800ed012 cloudcmd: putout v42.0.5 +- 525c17d4 cloudcmd: madrun v13.0.0 +- 44247499 cloudcmd: eslint-plugin-putout v31.0.0 + 2026.02.15, v19.3.9 feature: diff --git a/HELP.md b/HELP.md index a7e2ce55..c73170b3 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.9 +# Cloud Commander v19.4.0 ### [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 +- *2026.02.18*, **[v19.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.0)** - *2026.02.15*, **[v19.3.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.9)** - *2026.02.15*, **[v19.3.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.8)** - *2026.02.13*, **[v19.3.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.7)** diff --git a/README.md b/README.md index 3ecc203b..dc9367c5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.3.9 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.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 e0f287ca..3d87ad44 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.3.9", + "version": "19.4.0", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 1e18d5134235b86d102e15489c4f5927acf0fc6c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:54:24 +0200 Subject: [PATCH 074/390] feature: cloudcmd: @cloudcmd/fileop v9.0.0 --- package.json | 2 +- server/cloudcmd.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3d87ad44..a04a7f69 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "dependencies": { "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", - "@cloudcmd/fileop": "^8.0.0", + "@cloudcmd/fileop": "^9.0.0", "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", "@putout/cli-validate-args": "^2.0.0", diff --git a/server/cloudcmd.js b/server/cloudcmd.js index d36354e7..8a071c81 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -13,7 +13,7 @@ import {edward} from 'edward'; import {dword} from 'dword'; import {deepword} from 'deepword'; import nomine from 'nomine'; -import fileop from '@cloudcmd/fileop'; +import {fileop} from '@cloudcmd/fileop'; import * as cloudfunc from '#common/cloudfunc'; import authentication from './auth.js'; import {createConfig, configPath} from './config.js'; From cdeb40d19104cceae6438e11f8c0e8c1640564df Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 14:55:46 +0200 Subject: [PATCH 075/390] chore: cloudcmd: v19.4.1 --- 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 e3a714da..a0f6cad7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.18, v19.4.1 + +feature: +- 1e18d513 cloudcmd: @cloudcmd/fileop v9.0.0 + 2026.02.18, v19.4.0 fix: diff --git a/HELP.md b/HELP.md index c73170b3..053acd87 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.4.0 +# Cloud Commander v19.4.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 +- *2026.02.18*, **[v19.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.1)** - *2026.02.18*, **[v19.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.0)** - *2026.02.15*, **[v19.3.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.9)** - *2026.02.15*, **[v19.3.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.8)** diff --git a/README.md b/README.md index dc9367c5..d01da0ca 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.4.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.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 a04a7f69..c220f786 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.4.0", + "version": "19.4.1", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 7ef134f46f927273feb7c1e983da9d03b52ad96d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 19:21:47 +0200 Subject: [PATCH 076/390] feature: cloudcmd: rendy v5.0.0 --- bin/release.js | 2 +- client/client.js | 2 +- client/dom/load-remote.js | 2 +- client/modules/config/index.js | 2 +- client/modules/view/index.js | 2 +- common/cloudfunc.js | 3 +-- common/cloudfunc.spec.js | 33 +++++++++++++++++++++++++++++++++ package.json | 2 +- server/route.js | 2 +- 9 files changed, 41 insertions(+), 9 deletions(-) diff --git a/bin/release.js b/bin/release.js index 004b908e..a5eb39e2 100755 --- a/bin/release.js +++ b/bin/release.js @@ -6,7 +6,7 @@ import {tryToCatch} from 'try-to-catch'; import {createSimport} from 'simport'; import minor from 'minor'; import _place from 'place'; -import rendy from 'rendy'; +import {rendy} from 'rendy'; import shortdate from 'shortdate'; const simport = createSimport(import.meta.url); diff --git a/client/client.js b/client/client.js index f84547db..1c6d2008 100644 --- a/client/client.js +++ b/client/client.js @@ -1,7 +1,7 @@ import process from 'node:process'; import Emitify from 'emitify'; import inherits from 'inherits'; -import rendy from 'rendy'; +import {rendy} from 'rendy'; import load from 'load.js'; import {tryToCatch} from 'try-to-catch'; import {addSlashToEnd} from 'format-io'; diff --git a/client/dom/load-remote.js b/client/dom/load-remote.js index ff8fb189..43af0cf5 100644 --- a/client/dom/load-remote.js +++ b/client/dom/load-remote.js @@ -1,6 +1,6 @@ /* global CloudCmd */ import {callbackify} from 'node:util'; -import rendy from 'rendy'; +import {rendy} from 'rendy'; import itype from 'itype'; import * as load from 'load.js'; import {tryToCatch} from 'try-to-catch'; diff --git a/client/modules/config/index.js b/client/modules/config/index.js index e58c4f30..4f3965c3 100644 --- a/client/modules/config/index.js +++ b/client/modules/config/index.js @@ -1,6 +1,6 @@ /* global CloudCmd, DOM, io */ import '../../../css/config.css'; -import rendy from 'rendy'; +import {rendy} from 'rendy'; import currify from 'currify'; import wraptile from 'wraptile'; import squad from 'squad'; diff --git a/client/modules/view/index.js b/client/modules/view/index.js index 2fac8964..6626f1aa 100644 --- a/client/modules/view/index.js +++ b/client/modules/view/index.js @@ -1,5 +1,5 @@ import '#css/view.css'; -import rendy from 'rendy'; +import {rendy} from 'rendy'; import currify from 'currify'; import wraptile from 'wraptile'; import {tryToCatch} from 'try-to-catch'; diff --git a/common/cloudfunc.js b/common/cloudfunc.js index 3a9f61ba..a7df97df 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -1,4 +1,4 @@ -import rendy from 'rendy'; +import {rendy} from 'rendy'; import currify from 'currify'; import store from 'fullstore'; import {encode} from '#common/entity'; @@ -128,7 +128,6 @@ export const buildFromJSON = (params) => { const json = params.data; const path = encode(json.path); - const {files} = json; /* diff --git a/common/cloudfunc.spec.js b/common/cloudfunc.spec.js index 6f4ff9fe..4df48712 100644 --- a/common/cloudfunc.spec.js +++ b/common/cloudfunc.spec.js @@ -172,6 +172,39 @@ test('cloudfunc: buildFromJSON: showDotFiles: false', (t) => { t.end(); }); +test('cloudfunc: buildFromJSON: showDotFiles: false', (t) => { + const data = { + path: '/media/', + files: [{ + date: '30.08.2016', + mode: 'rwx rwx rwx', + name: '{{}}', + owner: 'root', + size: '7b', + type: 'file', + }], + }; + + const html = buildFromJSON({ + prefix: '', + template, + data, + showDotFiles: false, + }); + + const $ = cheerio.load(html); + const el = $('[data-name="js-file-JTdCJTdCJTdEJTdE"]'); + + const result = el + .find('[data-name="js-name"]') + .text(); + + const expected = '{{}}'; + + t.equal(result, expected); + t.end(); +}); + test('cloudfunc: _getDataName', (t) => { const result = _getDataName('s'); const expected = 'data-name="js-file-cw==" '; diff --git a/package.json b/package.json index c220f786..fe990df4 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "pullout": "^5.0.0", "putout": "^42.0.5", "redzip": "^4.0.0", - "rendy": "^4.1.3", + "rendy": "^5.0.0", "restafary": "^13.0.1", "restbox": "^4.0.0", "shortdate": "^2.0.0", diff --git a/server/route.js b/server/route.js index 736ad9b9..3b764b81 100644 --- a/server/route.js +++ b/server/route.js @@ -2,7 +2,7 @@ import {createRequire} from 'node:module'; import {extname} from 'node:path'; import * as _win32 from 'win32'; import ponse from 'ponse'; -import rendy from 'rendy'; +import {rendy} from 'rendy'; import format from 'format-io'; import currify from 'currify'; import wraptile from 'wraptile'; From b20539ef2b5b1c71cacf2dfa587785409158a43a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 19:40:55 +0200 Subject: [PATCH 077/390] feature: common: entity: encode {,} --- common/cloudfunc.spec.js | 2 +- common/entity.js | 2 ++ common/entity.spec.js | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common/cloudfunc.spec.js b/common/cloudfunc.spec.js index 4df48712..ec991f16 100644 --- a/common/cloudfunc.spec.js +++ b/common/cloudfunc.spec.js @@ -172,7 +172,7 @@ test('cloudfunc: buildFromJSON: showDotFiles: false', (t) => { t.end(); }); -test('cloudfunc: buildFromJSON: showDotFiles: false', (t) => { +test('cloudfunc: buildFromJSON: name: {{ }}', (t) => { const data = { path: '/media/', files: [{ diff --git a/common/entity.js b/common/entity.js index d8f4a214..690bbd7a 100644 --- a/common/entity.js +++ b/common/entity.js @@ -2,6 +2,8 @@ const Entities = { '<': '<', '>': '>', '"': '"', + '{': '{', + '}': '}', }; const keys = Object.keys(Entities); diff --git a/common/entity.spec.js b/common/entity.spec.js index ca62d705..a9f2e7d1 100644 --- a/common/entity.spec.js +++ b/common/entity.spec.js @@ -9,6 +9,14 @@ test('cloudcmd: entity: encode', (t) => { t.end(); }); +test('cloudcmd: entity: {{}}', (t) => { + const result = entity.encode('{{}}'); + const expected = '{{}}'; + + t.equal(result, expected, 'should encode entity'); + t.end(); +}); + test('cloudcmd: entity: decode', (t) => { const result = entity.decode('<hello> '); const expected = ' '; From 957fbc6533da3b0d28afc701edd17fb2710567e6 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 18 Feb 2026 17:41:57 +0000 Subject: [PATCH 078/390] =?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 --- common/entity.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/entity.spec.js b/common/entity.spec.js index a9f2e7d1..79313f7c 100644 --- a/common/entity.spec.js +++ b/common/entity.spec.js @@ -12,7 +12,7 @@ test('cloudcmd: entity: encode', (t) => { test('cloudcmd: entity: {{}}', (t) => { const result = entity.encode('{{}}'); const expected = '{{}}'; - + t.equal(result, expected, 'should encode entity'); t.end(); }); From 3aed798ff10b34f06137e44a6a932d11183863c1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 19:46:35 +0200 Subject: [PATCH 079/390] chore: cloudcmd: v19.5.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 a0f6cad7..fbb90136 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026.02.18, v19.5.0 + +feature: +- b20539ef common: entity: encode {,} +- 7ef134f4 cloudcmd: rendy v5.0.0 + 2026.02.18, v19.4.1 feature: diff --git a/HELP.md b/HELP.md index 053acd87..fdc16f36 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.4.1 +# Cloud Commander v19.5.0 ### [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 +- *2026.02.18*, **[v19.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.0)** - *2026.02.18*, **[v19.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.1)** - *2026.02.18*, **[v19.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.0)** - *2026.02.15*, **[v19.3.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.3.9)** diff --git a/README.md b/README.md index d01da0ca..8e3bbdeb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.4.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.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 fe990df4..3b24d513 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.4.1", + "version": "19.5.0", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 6e1cf4ef52ee4de1eb2a70139072a02921bdfae8 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 19:53:06 +0200 Subject: [PATCH 080/390] feature: cloudcmd: supermenu v5.0.0 --- client/modules/edit-file.js | 2 +- client/modules/edit-names.js | 2 +- client/modules/menu/cloudmenu.js | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/modules/edit-file.js b/client/modules/edit-file.js index f8cd21c5..83a07e36 100644 --- a/client/modules/edit-file.js +++ b/client/modules/edit-file.js @@ -2,7 +2,7 @@ import Format from 'format-io'; import {fullstore} from 'fullstore'; import exec from 'execon'; -import supermenu from 'supermenu'; +import {supermenu} from 'supermenu'; CloudCmd.EditFile = { init, diff --git a/client/modules/edit-names.js b/client/modules/edit-names.js index 7ea3b4b6..45a0cf16 100644 --- a/client/modules/edit-names.js +++ b/client/modules/edit-names.js @@ -1,6 +1,6 @@ import {tryToCatch} from 'try-to-catch'; import exec from 'execon'; -import supermenu from 'supermenu'; +import {supermenu} from 'supermenu'; import {multiRename} from 'multi-rename'; const {CloudCmd, DOM} = globalThis; diff --git a/client/modules/menu/cloudmenu.js b/client/modules/menu/cloudmenu.js index 42fd3f54..8f7c1e68 100644 --- a/client/modules/menu/cloudmenu.js +++ b/client/modules/menu/cloudmenu.js @@ -1,4 +1,4 @@ -import supermenu from 'supermenu'; +import {supermenu} from 'supermenu'; const noop = () => {}; const {CloudCmd} = globalThis; diff --git a/package.json b/package.json index 3b24d513..992a91f0 100644 --- a/package.json +++ b/package.json @@ -209,7 +209,7 @@ "serve-once": "^3.0.1", "smalltalk": "^5.0.0", "style-loader": "^4.0.0", - "supermenu": "^4.0.1", + "supermenu": "^5.0.0", "supertape": "^12.0.0", "tar-stream": "^3.0.0", "unionfs": "^4.0.0", From d7214aba7099e518cdcf961c03f1a8ae7b67665c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Feb 2026 19:57:27 +0200 Subject: [PATCH 081/390] chore: cloudcmd: v19.5.1 --- 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 fbb90136..cb8c6ffe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.18, v19.5.1 + +feature: +- 6e1cf4ef cloudcmd: supermenu v5.0.0 + 2026.02.18, v19.5.0 feature: diff --git a/HELP.md b/HELP.md index fdc16f36..d995ec2f 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.5.0 +# Cloud Commander v19.5.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 +- *2026.02.18*, **[v19.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.1)** - *2026.02.18*, **[v19.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.0)** - *2026.02.18*, **[v19.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.1)** - *2026.02.18*, **[v19.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.0)** diff --git a/README.md b/README.md index 8e3bbdeb..d83f0317 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.5.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.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 992a91f0..304c2573 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.5.0", + "version": "19.5.1", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 6d19bf2e1469de2e7d47a4c9da68fb4a0b0e0a71 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 21 Feb 2026 17:33:20 +0200 Subject: [PATCH 082/390] feature: common: object.omit -> omit --- .putout.json | 3 +-- common/omit.js | 12 ++++++++++++ common/omit.spec.js | 18 ++++++++++++++++++ package.json | 2 +- server/distribute/export.js | 2 +- 5 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 common/omit.js create mode 100644 common/omit.spec.js diff --git a/.putout.json b/.putout.json index 7c6ef070..7154775a 100644 --- a/.putout.json +++ b/.putout.json @@ -8,8 +8,7 @@ "fixture*" ], "rules": { - "package-json/add-type": "off", - "esm/add-index-to-import": "off" + "package-json/add-type": "off" }, "match": { ".filesystem.json": { diff --git a/common/omit.js b/common/omit.js new file mode 100644 index 00000000..284c2f5b --- /dev/null +++ b/common/omit.js @@ -0,0 +1,12 @@ +const difference = (a, b) => new Set(a).difference(new Set(b)); +const {keys} = Object; + +export const omit = (a, list) => { + const result = {}; + + for (const key of difference(keys(a), list)) { + result[key] = a[key]; + } + + return result; +}; diff --git a/common/omit.spec.js b/common/omit.spec.js new file mode 100644 index 00000000..ff70541c --- /dev/null +++ b/common/omit.spec.js @@ -0,0 +1,18 @@ +import {test} from 'supertape'; +import {omit} from '#common/omit'; + +test('cloudcmd: common: omit', (t) => { + const a = { + hello: 1, + world: 2, + }; + + const result = omit(a, ['world']); + + const expected = { + hello: 1, + }; + + t.deepEqual(result, expected); + t.end(); +}); diff --git a/package.json b/package.json index 304c2573..0e19e567 100644 --- a/package.json +++ b/package.json @@ -122,7 +122,6 @@ "montag": "^1.2.1", "nano-memoize": "^3.0.16", "nomine": "^4.0.0", - "object.omit": "^3.0.0", "once": "^1.4.0", "onezip": "^6.0.1", "open": "^11.0.0", @@ -232,6 +231,7 @@ "#dom/storage": "./client/dom/storage.js", "#dom/rest": "./client/dom/rest.js", "#common/util": "./common/util.js", + "#common/omit": "./common/omit.js", "#common/cloudfunc": "./common/cloudfunc.js", "#common/entity": "./common/entity.js", "#server/cloudcmd": "./server/cloudcmd.js" diff --git a/server/distribute/export.js b/server/distribute/export.js index 3803ca2a..5e1b54d4 100644 --- a/server/distribute/export.js +++ b/server/distribute/export.js @@ -1,7 +1,7 @@ import currify from 'currify'; import wraptile from 'wraptile'; import squad from 'squad'; -import omit from 'object.omit'; +import {omit} from '#common/omit'; import log, { exportStr, connectedStr, From 52023c82cb439c47095b2e4a4a2fb51707fccf2b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 21 Feb 2026 17:34:43 +0200 Subject: [PATCH 083/390] chore: cloudcmd: v19.6.0 --- 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 cb8c6ffe..697296e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.21, v19.6.0 + +feature: +- 6d19bf2e common: object.omit -> omit + 2026.02.18, v19.5.1 feature: diff --git a/HELP.md b/HELP.md index d995ec2f..9b917772 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.5.1 +# Cloud Commander v19.6.0 ### [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 +- *2026.02.21*, **[v19.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.0)** - *2026.02.18*, **[v19.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.1)** - *2026.02.18*, **[v19.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.0)** - *2026.02.18*, **[v19.4.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.4.1)** diff --git a/README.md b/README.md index d83f0317..d70e0ab9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.5.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.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 0e19e567..8e8e71b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.5.1", + "version": "19.6.0", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 37ecb3d7aca3f3588631c978bca5b1b3331bde96 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 21 Feb 2026 17:36:59 +0200 Subject: [PATCH 084/390] docs: readme: import: default -> named --- HELP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HELP.md b/HELP.md index 9b917772..8de06087 100644 --- a/HELP.md +++ b/HELP.md @@ -688,7 +688,7 @@ And create `index.js`: ```js import http from 'node:http'; -import cloudcmd from 'cloudcmd'; +import {cloudcmd} from 'cloudcmd'; import {Server} from 'socket.io'; import express from 'express'; From 7c5ac408e51024247f1846e3d8d655eff189880a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Feb 2026 15:11:02 +0200 Subject: [PATCH 085/390] feature: cloudcmd: @cloudcmd/fileop v9.0.1 (#457) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e8e71b2..31bf1710 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "dependencies": { "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", - "@cloudcmd/fileop": "^9.0.0", + "@cloudcmd/fileop": "^9.0.1", "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", "@putout/cli-validate-args": "^2.0.0", From feb6eb246872bdca1a6182dd858c492ba59d3e34 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Feb 2026 15:12:26 +0200 Subject: [PATCH 086/390] chore: cloudcmd: v19.6.1 --- 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 697296e0..47156bc8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.24, v19.6.1 + +feature: +- 7c5ac408 cloudcmd: @cloudcmd/fileop v9.0.1 (#457) + 2026.02.21, v19.6.0 feature: diff --git a/HELP.md b/HELP.md index 8de06087..b061aef3 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.0 +# Cloud Commander v19.6.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 +- *2026.02.24*, **[v19.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.1)** - *2026.02.21*, **[v19.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.0)** - *2026.02.18*, **[v19.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.1)** - *2026.02.18*, **[v19.5.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.0)** diff --git a/README.md b/README.md index d70e0ab9..d01e8e46 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.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 31bf1710..2cadb764 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.0", + "version": "19.6.1", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 321a54dd59f810bbbf9481cbbe01c173893d047f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Feb 2026 21:23:31 +0200 Subject: [PATCH 087/390] feature: cloudcmd: @cloudcmd/fileop v9.0.2 (#457) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2cadb764..c530aa5a 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "dependencies": { "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", - "@cloudcmd/fileop": "^9.0.1", + "@cloudcmd/fileop": "^9.0.2", "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", "@putout/cli-validate-args": "^2.0.0", From 3d2e5feda2be744890449e4ed64b39014d00eb64 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Feb 2026 21:24:15 +0200 Subject: [PATCH 088/390] chore: lint --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 1b392900..8f3c99ce 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -11,7 +11,7 @@ jobs: node-version: - 22.x - 24.x - - 25.x + - 25.6.1 steps: - uses: actions/checkout@v5 - uses: oven-sh/setup-bun@v2 From 5aba36cca0260b630f80908ff5423b59280386ab Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Feb 2026 21:26:52 +0200 Subject: [PATCH 089/390] chore: cloudcmd: v19.6.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 47156bc8..19ea6c2b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.24, v19.6.2 + +feature: +- 321a54dd cloudcmd: @cloudcmd/fileop v9.0.2 (#457) + 2026.02.24, v19.6.1 feature: diff --git a/HELP.md b/HELP.md index b061aef3..f63423ed 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.1 +# Cloud Commander v19.6.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 +- *2026.02.24*, **[v19.6.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.2)** - *2026.02.24*, **[v19.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.1)** - *2026.02.21*, **[v19.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.0)** - *2026.02.18*, **[v19.5.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.5.1)** diff --git a/README.md b/README.md index d01e8e46..fec8289e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.6.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 c530aa5a..abdfd3cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.1", + "version": "19.6.2", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 0857711f612e1624e3201fa2816dea7bbd2b9df2 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Feb 2026 23:18:22 +0200 Subject: [PATCH 090/390] feature: cloudcmd: redzip v4.2.0 (#457) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index abdfd3cc..d9a9af0e 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^42.0.5", - "redzip": "^4.0.0", + "redzip": "^4.2.0", "rendy": "^5.0.0", "restafary": "^13.0.1", "restbox": "^4.0.0", From 394939e0d59731468464da813faad091e46c1391 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Feb 2026 23:20:14 +0200 Subject: [PATCH 091/390] chore: cloudcmd: v19.6.3 --- 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 19ea6c2b..e3671f4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.24, v19.6.3 + +feature: +- 2234f1b4 cloudcmd: redzip v4.2.0 (#475) + 2026.02.24, v19.6.2 feature: diff --git a/HELP.md b/HELP.md index f63423ed..8b093d29 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.2 +# Cloud Commander v19.6.3 ### [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 +- *2026.02.24*, **[v19.6.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.3)** - *2026.02.24*, **[v19.6.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.2)** - *2026.02.24*, **[v19.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.1)** - *2026.02.21*, **[v19.6.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.0)** diff --git a/README.md b/README.md index fec8289e..2c95adeb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.6.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 d9a9af0e..a49c086e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.2", + "version": "19.6.3", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 4340533acfbb007444bda6031e9313427a033e0e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 25 Feb 2026 16:59:12 +0200 Subject: [PATCH 092/390] feature: cloudcmd: c8 v11.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a49c086e..599d31a7 100644 --- a/package.json +++ b/package.json @@ -164,7 +164,7 @@ "auto-globals": "^4.0.0", "babel-loader": "^10.0.0", "babel-plugin-macros": "^3.0.0", - "c8": "^10.1.2", + "c8": "^11.0.0", "cheerio": "^1.0.0-rc.5", "clean-css-loader": "^4.2.1", "codegen.macro": "^4.0.0", From a66eeda37e06bc11b0c7416d469dcd9099e78463 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 25 Feb 2026 16:59:17 +0200 Subject: [PATCH 093/390] feature: cloudcmd: copymitter v10.2.0 (coderaiser/cloudcmd#457) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 599d31a7..8fc38659 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "chalk": "^5.3.0", "compression": "^1.7.4", "console-io": "^15.0.1", - "copymitter": "^10.0.0", + "copymitter": "^10.2.0", "criton": "^2.0.0", "currify": "^4.0.0", "deepmerge": "^4.0.0", From 07bc9e2782d4d92e6ff5e419c61158c2fef096c6 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 25 Feb 2026 17:00:54 +0200 Subject: [PATCH 094/390] chore: cloudcmd: v19.6.4 --- 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 e3671f4e..58fb8fcd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2026.02.25, v19.6.4 + +feature: +- a66eeda3 cloudcmd: copymitter v10.2.0 (coderaiser/cloudcmd#457) +- 4340533a cloudcmd: c8 v11.0.0 +- 0857711f cloudcmd: redzip v4.2.0 (#457) + 2026.02.24, v19.6.3 feature: diff --git a/HELP.md b/HELP.md index 8b093d29..3dcb1fc0 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.3 +# Cloud Commander v19.6.4 ### [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 +- *2026.02.25*, **[v19.6.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.4)** - *2026.02.24*, **[v19.6.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.3)** - *2026.02.24*, **[v19.6.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.2)** - *2026.02.24*, **[v19.6.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.1)** diff --git a/README.md b/README.md index 2c95adeb..e0bdbe91 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.3 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.6.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 8fc38659..d5014cf0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.3", + "version": "19.6.4", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 061ab38b24f779c3737781eefd997f57b7526e41 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 25 Feb 2026 17:02:22 +0200 Subject: [PATCH 095/390] chore: madrun: simplify --- .madrun.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/.madrun.js b/.madrun.js index 16571812..25b65d7c 100644 --- a/.madrun.js +++ b/.madrun.js @@ -7,16 +7,7 @@ const testEnv = defineEnv({ css: true, }); -const is17 = /^v1[789]/.test(process.version); -const is20 = process.version.startsWith('v2'); - -// fix for ERR_OSSL_EVP_UNSUPPORTED on node v17 -// flag '--openssl-legacy-provider' not supported -// on earlier version of node.js -// -// https://stackoverflow.com/a/69746937/4536327 -const buildEnv = (is17 || is20) && { - NODE_OPTIONS: '--openssl-legacy-provider', +const buildEnv = { NODE_ENV: 'production', }; From 9ead35242a0cc30696020d6b244aacf972c223b0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 25 Feb 2026 17:03:22 +0200 Subject: [PATCH 096/390] chore: lint: scan -> fix --- .madrun.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.madrun.js b/.madrun.js index 25b65d7c..ddd8365c 100644 --- a/.madrun.js +++ b/.madrun.js @@ -19,7 +19,7 @@ export default { 'build:start': () => run(['build:client', 'start']), 'build:start:dev': () => run(['build:client:dev', 'start:dev']), 'lint:all': () => run('lint:progress'), - 'lint': () => 'redlint scan; putout . --rulesdir rules', + 'lint': () => 'redlint fix; putout . --rulesdir rules', 'lint:progress': () => run('lint', '-f progress'), 'watch:lint': () => 'nodemon -w client -w server -w test -w common -w .webpack -x "putout -s"', 'fresh:lint': () => run('lint', '--fresh'), From ff4e02c2108e386ca60c79f3a1bffa5c4bbf4a96 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Wed, 25 Feb 2026 15:04:30 +0000 Subject: [PATCH 097/390] =?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.js | 1 - 1 file changed, 1 deletion(-) diff --git a/.madrun.js b/.madrun.js index ddd8365c..ffcee54e 100644 --- a/.madrun.js +++ b/.madrun.js @@ -1,4 +1,3 @@ -import process from 'node:process'; import {run, cutEnv} from 'madrun'; import {defineEnv} from 'supertape/env'; From 964ae989f2f5e889aa98319ee961022e60c2b69a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Feb 2026 16:05:45 +0200 Subject: [PATCH 098/390] feature: cloudcmd: redzip v4.5.0 (#457) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d5014cf0..b89bcad8 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^42.0.5", - "redzip": "^4.2.0", + "redzip": "^4.5.0", "rendy": "^5.0.0", "restafary": "^13.0.1", "restbox": "^4.0.0", From 559b7424b6ffbc80d45a8f0f9c88e513890dd093 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Feb 2026 16:06:55 +0200 Subject: [PATCH 099/390] chore: cloudcmd: v19.6.5 --- 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 58fb8fcd..0933e99e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.26, v19.6.5 + +feature: +- 964ae989 cloudcmd: redzip v4.5.0 (#457) + 2026.02.25, v19.6.4 feature: diff --git a/HELP.md b/HELP.md index 3dcb1fc0..fc7151a3 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.4 +# Cloud Commander v19.6.5 ### [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 +- *2026.02.26*, **[v19.6.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.5)** - *2026.02.25*, **[v19.6.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.4)** - *2026.02.24*, **[v19.6.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.3)** - *2026.02.24*, **[v19.6.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.2)** diff --git a/README.md b/README.md index e0bdbe91..04e63e7e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.4 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.6.5 [![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 b89bcad8..34000542 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.4", + "version": "19.6.5", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 3987cc82c13fae7c488e047cf339fdeb8814da9a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Feb 2026 19:23:11 +0200 Subject: [PATCH 100/390] feature: cloudcmd: redzip v4.5.1 (#457) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34000542..8d075bc0 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^42.0.5", - "redzip": "^4.5.0", + "redzip": "^4.5.1", "rendy": "^5.0.0", "restafary": "^13.0.1", "restbox": "^4.0.0", From bfbaae9ec0b1a05314de0aa5f6432bacc9e4d289 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Feb 2026 19:24:05 +0200 Subject: [PATCH 101/390] chore: cloudcmd: v19.6.6 --- 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 0933e99e..0bf929c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.26, v19.6.6 + +feature: +- 3987cc82 cloudcmd: redzip v4.5.1 (#457) + 2026.02.26, v19.6.5 feature: diff --git a/HELP.md b/HELP.md index fc7151a3..790cd01f 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.5 +# Cloud Commander v19.6.6 ### [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 +- *2026.02.26*, **[v19.6.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.6)** - *2026.02.26*, **[v19.6.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.5)** - *2026.02.25*, **[v19.6.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.4)** - *2026.02.24*, **[v19.6.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.3)** diff --git a/README.md b/README.md index 04e63e7e..fbbc05d9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.5 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.6.6 [![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 8d075bc0..ffa4ae7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.5", + "version": "19.6.6", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 68c7d0be3b52b4cef82d61549cd257e3dab5923a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Feb 2026 20:01:14 +0200 Subject: [PATCH 102/390] feature: cloudcmd: onezip v7.0.0 --- package.json | 2 +- server/rest/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ffa4ae7b..42c164f7 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,7 @@ "nano-memoize": "^3.0.16", "nomine": "^4.0.0", "once": "^1.4.0", - "onezip": "^6.0.1", + "onezip": "^7.0.0", "open": "^11.0.0", "package-json": "^10.0.0", "pipe-io": "^4.0.1", diff --git a/server/rest/index.js b/server/rest/index.js index 37aa7d9e..bd9a0d2f 100644 --- a/server/rest/index.js +++ b/server/rest/index.js @@ -2,7 +2,7 @@ import path from 'node:path'; import _fs from 'node:fs'; import process from 'node:process'; import jaguar from 'jaguar'; -import onezip from 'onezip'; +import {onezip} from 'onezip'; import inly from 'inly'; import wraptile from 'wraptile'; import currify from 'currify'; From d2801ca8960021823bd7b7024708b05d26735659 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Feb 2026 20:18:27 +0200 Subject: [PATCH 103/390] chore: cloudcmd: v19.6.7 --- 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 0bf929c5..76b6032f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.26, v19.6.7 + +feature: +- 68c7d0be cloudcmd: onezip v7.0.0 + 2026.02.26, v19.6.6 feature: diff --git a/HELP.md b/HELP.md index 790cd01f..233e95ee 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.6 +# Cloud Commander v19.6.7 ### [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 +- *2026.02.26*, **[v19.6.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.7)** - *2026.02.26*, **[v19.6.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.6)** - *2026.02.26*, **[v19.6.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.5)** - *2026.02.25*, **[v19.6.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.4)** diff --git a/README.md b/README.md index fbbc05d9..e9ce17a3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.6 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.6.7 [![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 42c164f7..b998a28e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.6", + "version": "19.6.7", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 15fab5142f4ffd6946ec16a0e1db2f20bd891ba3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 27 Feb 2026 01:13:13 +0200 Subject: [PATCH 104/390] feature: cloudcmd: copymitter v10.3.0 (#458) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b998a28e..8045577c 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "chalk": "^5.3.0", "compression": "^1.7.4", "console-io": "^15.0.1", - "copymitter": "^10.2.0", + "copymitter": "^10.3.0", "criton": "^2.0.0", "currify": "^4.0.0", "deepmerge": "^4.0.0", From dd5f392293353d97a0d5c85e7a7a7aef2e78b50d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 27 Feb 2026 01:14:17 +0200 Subject: [PATCH 105/390] chore: cloudcmd: v19.6.8 --- 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 76b6032f..deccacf0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.02.27, v19.6.8 + +feature: +- 15fab514 cloudcmd: copymitter v10.3.0 (#458) + 2026.02.26, v19.6.7 feature: diff --git a/HELP.md b/HELP.md index 233e95ee..806cd2e6 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.7 +# Cloud Commander v19.6.8 ### [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 +- *2026.02.27*, **[v19.6.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.8)** - *2026.02.26*, **[v19.6.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.7)** - *2026.02.26*, **[v19.6.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.6)** - *2026.02.26*, **[v19.6.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.5)** diff --git a/README.md b/README.md index e9ce17a3..7ce8a9df 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.7 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.6.8 [![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 8045577c..c41cc563 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.7", + "version": "19.6.8", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 37cb83f2cfae01a8a29c12719bb3d28415f5075a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 28 Feb 2026 15:50:27 +0200 Subject: [PATCH 106/390] feature: cloudcmd: redzip v4.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c41cc563..1284b60c 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^42.0.5", - "redzip": "^4.5.1", + "redzip": "^4.6.0", "rendy": "^5.0.0", "restafary": "^13.0.1", "restbox": "^4.0.0", From 5976da81dfde00d4518e48951dff5b56166bd23f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 28 Feb 2026 15:50:32 +0200 Subject: [PATCH 107/390] feature: cloudcmd: @cloudcmd/fileop v9.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1284b60c..a5eaa4ad 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "dependencies": { "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", - "@cloudcmd/fileop": "^9.0.2", + "@cloudcmd/fileop": "^9.0.5", "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", "@putout/cli-validate-args": "^2.0.0", From 15dcae5c5eb43a605e1dcb9d67f698737c259470 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 17 Mar 2026 20:41:15 +0200 Subject: [PATCH 108/390] feature: cloudcmd: webpack-cli v7.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a5eaa4ad..2d3dac2a 100644 --- a/package.json +++ b/package.json @@ -215,7 +215,7 @@ "url-loader": "^4.0.0", "util": "^0.12.5", "webpack": "^5.99.9", - "webpack-cli": "^6.0.1", + "webpack-cli": "^7.0.2", "webpack-merge": "^6.0.1", "webpackbar": "^7.0.0" }, From 43c5a01102bd501552d9528fe7445b7152b2b739 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 17 Mar 2026 20:41:21 +0200 Subject: [PATCH 109/390] feature: cloudcmd: css-minimizer-webpack-plugin v8.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2d3dac2a..e0c0a2fe 100644 --- a/package.json +++ b/package.json @@ -169,7 +169,7 @@ "clean-css-loader": "^4.2.1", "codegen.macro": "^4.0.0", "css-loader": "^7.1.2", - "css-minimizer-webpack-plugin": "^7.0.4", + "css-minimizer-webpack-plugin": "^8.0.0", "css-modules-require-hook": "^4.2.3", "cssnano-preset-default": "^7.0.10", "domtokenlist-shim": "^1.2.0", From b28a070a288047b22c34f06b8862082b478c2f4b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 17 Mar 2026 20:41:28 +0200 Subject: [PATCH 110/390] feature: cloudcmd: redzip v4.6.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e0c0a2fe..a9708437 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^42.0.5", - "redzip": "^4.6.0", + "redzip": "^4.6.1", "rendy": "^5.0.0", "restafary": "^13.0.1", "restbox": "^4.0.0", From 5c19ddba61e2b8868fe884c95589e46b5c54ee1a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 17 Mar 2026 20:43:43 +0200 Subject: [PATCH 111/390] chore: lint --- .github/workflows/nodejs.yml | 4 ++-- bin/release.js | 13 ++++++++----- client/modules/edit-names.js | 5 ++++- common/cloudfunc.spec.js | 7 +++++++ common/util.spec.js | 1 + server/cloudcmd.js | 1 + server/columns.js | 1 + server/config.js | 1 + server/route.js | 1 + server/route.spec.js | 2 ++ server/theme.js | 1 + server/validate.js | 2 ++ static/user-menu.spec.js | 1 + test/static.js | 1 + 14 files changed, 33 insertions(+), 8 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 8f3c99ce..0080488a 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -11,7 +11,7 @@ jobs: node-version: - 22.x - 24.x - - 25.6.1 + - 25.x steps: - uses: actions/checkout@v5 - uses: oven-sh/setup-bun@v2 @@ -27,7 +27,7 @@ jobs: run: bun i --no-save - name: Lint run: redrun fix:lint - - uses: actions/cache@v4 + - uses: actions/cache@v5 with: path: | ~/.cargo/bin/ diff --git a/bin/release.js b/bin/release.js index a5eb39e2..fbc08e35 100755 --- a/bin/release.js +++ b/bin/release.js @@ -19,10 +19,12 @@ await main(); async function main() { const history = '## Version history\n\n'; const link = '//github.com/coderaiser/cloudcmd/releases/tag/'; + const template = '- ' + '*{{ date }}*, ' + '**[v{{ version }}]' + - '(' + link + + '(' + + link + 'v{{ version }})**\n'; const {version} = Info; @@ -35,10 +37,11 @@ async function main() { await replaceVersion('README.md', version, versionNew); await replaceVersion('HELP.md', version, versionNew); - const historyNew = history + rendy(template, { - date: shortdate(), - version: versionNew, - }); + const historyNew = history + + rendy(template, { + date: shortdate(), + version: versionNew, + }); await replaceVersion('HELP.md', history, historyNew); } diff --git a/client/modules/edit-names.js b/client/modules/edit-names.js index 45a0cf16..7bc29054 100644 --- a/client/modules/edit-names.js +++ b/client/modules/edit-names.js @@ -63,7 +63,10 @@ async function keyListener(event) { if (ctrlMeta && event.keyCode === Key.S) { hide(); - } else if (ctrlMeta && event.keyCode === Key.P) { + return; + } + + if (ctrlMeta && event.keyCode === Key.P) { const [, pattern] = await Dialog.prompt('Apply pattern:', '[n][e]'); pattern && applyPattern(pattern); } diff --git a/common/cloudfunc.spec.js b/common/cloudfunc.spec.js index ec991f16..aa50a9f9 100644 --- a/common/cloudfunc.spec.js +++ b/common/cloudfunc.spec.js @@ -53,6 +53,7 @@ test('cloudfunc: buildFromJSON: ..', (t) => { test('cloudfunc: getPathLink: /', (t) => { const {pathLink} = template; const result = getPathLink('/', '', pathLink); + const expected = montag` / `; @@ -64,6 +65,7 @@ test('cloudfunc: getPathLink: /', (t) => { test('cloudfunc: getPathLink: /hello/world', (t) => { const {pathLink} = template; const result = getPathLink('/hello/world', '', pathLink); + const expected = montag` /hello/ `; @@ -75,6 +77,7 @@ test('cloudfunc: getPathLink: /hello/world', (t) => { test('cloudfunc: getPathLink: prefix', (t) => { const {pathLink} = template; const result = getPathLink('/hello/world', '/cloudcmd', pathLink); + const expected = montag` /hello/ `; @@ -86,6 +89,7 @@ test('cloudfunc: getPathLink: prefix', (t) => { test('cloudfunc: getSize: dir', (t) => { const type = 'directory'; const size = 0; + const result = _getSize({ type, size, @@ -100,6 +104,7 @@ test('cloudfunc: getSize: dir', (t) => { test('cloudfunc: getSize: link: dir', (t) => { const type = 'directory-link'; const size = 0; + const result = _getSize({ type, size, @@ -114,6 +119,7 @@ test('cloudfunc: getSize: link: dir', (t) => { test('cloudfunc: getSize: link: file', (t) => { const type = 'file-link'; const size = 0; + const result = _getSize({ type, size, @@ -128,6 +134,7 @@ test('cloudfunc: getSize: link: file', (t) => { test('cloudfunc: getSize: file', (t) => { const type = 'file'; const size = '100.00kb'; + const result = _getSize({ type, size, diff --git a/common/util.spec.js b/common/util.spec.js index 870e55e8..6a32848c 100644 --- a/common/util.spec.js +++ b/common/util.spec.js @@ -63,6 +63,7 @@ test('util: findObjByNameInArr: object', (t) => { test('util: findObjByNameInArr: array', (t) => { const name = 'hello'; const data = 'abc'; + const item = { name, data, diff --git a/server/cloudcmd.js b/server/cloudcmd.js index 8a071c81..319cc4ae 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -51,6 +51,7 @@ export default cloudcmd; export function cloudcmd(params) { const p = params || {}; const options = p.config || {}; + const config = p.configManager || createConfig({ configPath, }); diff --git a/server/columns.js b/server/columns.js index 570fe642..eff63957 100644 --- a/server/columns.js +++ b/server/columns.js @@ -35,6 +35,7 @@ export const getColumns = ({isDev = _isDev()} = {}) => { const readFilesSyncMemo = nanomemoize((isDev) => { const dist = getDist(isDev); const columnsDir = path.join(__dirname, '..', dist, 'columns'); + const names = fs .readdirSync(columnsDir) .filter(not(isMap)); diff --git a/server/config.js b/server/config.js index d52088ab..0977b8a4 100644 --- a/server/config.js +++ b/server/config.js @@ -197,6 +197,7 @@ function get(manage, request, response) { async function patch(manage, request, response) { const name = 'config.json'; const cache = false; + const options = { name, request, diff --git a/server/route.js b/server/route.js index 3b764b81..1d887874 100644 --- a/server/route.js +++ b/server/route.js @@ -65,6 +65,7 @@ export const _getReadDir = getReadDir; async function route({config, options, request, response}) { const name = ponse.getPathName(request); const gzip = true; + const p = { request, response, diff --git a/server/route.spec.js b/server/route.spec.js index c190eefc..7387a9fc 100644 --- a/server/route.spec.js +++ b/server/route.spec.js @@ -243,6 +243,7 @@ test('cloudcmd: route: sendIndex: encode', async (t) => { test('cloudcmd: route: sendIndex: encode: not encoded', async (t) => { const name = '">'; const path = '/'; + const files = [{ name, }]; @@ -276,6 +277,7 @@ test('cloudcmd: route: sendIndex: encode: not encoded', async (t) => { test('cloudcmd: route: sendIndex: ddos: render', async (t) => { const name = `$$$'"`; const path = '/'; + const files = [{ name, }]; diff --git a/server/theme.js b/server/theme.js index 7e1f2da4..d66623b5 100644 --- a/server/theme.js +++ b/server/theme.js @@ -24,6 +24,7 @@ export const getThemes = ({isDev = _isDev()} = {}) => { const readFilesSyncMemo = nanomemoize((isDev) => { const dist = getDist(isDev); const themesDir = path.join(__dirname, '..', dist, 'themes'); + const names = fs .readdirSync(themesDir) .filter(not(isMap)); diff --git a/server/validate.js b/server/validate.js index 61b3a31d..233aebcd 100644 --- a/server/validate.js +++ b/server/validate.js @@ -55,6 +55,7 @@ export const columns = (type, overrides = {}) => { } = overrides; const addQuotes = (a) => `"${a}"`; + const all = Object .keys(getColumns()) .concat(''); @@ -75,6 +76,7 @@ export const theme = (type, overrides = {}) => { } = overrides; const addQuotes = (a) => `"${a}"`; + const all = Object .keys(getThemes()) .concat(''); diff --git a/static/user-menu.spec.js b/static/user-menu.spec.js index 47e4a816..e1543608 100644 --- a/static/user-menu.spec.js +++ b/static/user-menu.spec.js @@ -30,6 +30,7 @@ test('cloudcmd: static: user menu: Rename', async (t) => { test('cloudcmd: static: user menu: R', (t) => { const name = 'R - cd /'; const changeDir = stub(); + const CloudCmd = { changeDir, }; diff --git a/test/static.js b/test/static.js index 1b725955..cdb6b9e7 100644 --- a/test/static.js +++ b/test/static.js @@ -83,6 +83,7 @@ test('cloudcmd: /cloudcmd.js: auth: access denied', async (t) => { test('cloudcmd: /cloudcmd.js: auth: no password', async (t) => { const name = 'cloudcmd.js'; const username = 'hello'; + const config = { auth: true, username, From c9b27bb514822eddd141b3040f8fbd7a0dac7973 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 17 Mar 2026 20:44:05 +0200 Subject: [PATCH 112/390] chore: cloudcmd: v19.6.9 --- 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 deccacf0..035ae391 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2026.03.17, v19.6.9 + +feature: +- b28a070a cloudcmd: redzip v4.6.1 +- 43c5a011 cloudcmd: css-minimizer-webpack-plugin v8.0.0 +- 15dcae5c cloudcmd: webpack-cli v7.0.2 +- 5976da81 cloudcmd: @cloudcmd/fileop v9.0.5 +- 37cb83f2 cloudcmd: redzip v4.6.0 + 2026.02.27, v19.6.8 feature: diff --git a/HELP.md b/HELP.md index 806cd2e6..db305dac 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.8 +# Cloud Commander v19.6.9 ### [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 +- *2026.03.17*, **[v19.6.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.9)** - *2026.02.27*, **[v19.6.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.8)** - *2026.02.26*, **[v19.6.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.7)** - *2026.02.26*, **[v19.6.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.6)** diff --git a/README.md b/README.md index 7ce8a9df..878cbcf8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.8 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.6.9 [![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 a9708437..3c3cc896 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.8", + "version": "19.6.9", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 170b4da211051bf03cb0e258857528f80909bcba Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 17 Mar 2026 18:45:13 +0000 Subject: [PATCH 113/390] =?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.js | 5 ++++- client/dom/current-file.js | 1 + client/key/index.spec.js | 1 + client/key/vim/index.spec.js | 3 +++ client/listeners/index.js | 9 +++++++-- client/modules/user-menu/parse-user-menu.spec.js | 1 + server/markdown/index.spec.js | 2 ++ 7 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.madrun.js b/.madrun.js index ffcee54e..b10c47ac 100644 --- a/.madrun.js +++ b/.madrun.js @@ -16,7 +16,10 @@ export default { NODE_ENV: 'development', }), 'build:start': () => run(['build:client', 'start']), - 'build:start:dev': () => run(['build:client:dev', 'start:dev']), + 'build:start:dev': () => run([ + 'build:client:dev', + 'start:dev', + ]), 'lint:all': () => run('lint:progress'), 'lint': () => 'redlint fix; putout . --rulesdir rules', 'lint:progress': () => run('lint', '-f progress'), diff --git a/client/dom/current-file.js b/client/dom/current-file.js index 339376d2..b8113054 100644 --- a/client/dom/current-file.js +++ b/client/dom/current-file.js @@ -302,6 +302,7 @@ export const isCurrentIsDir = (currentFile) => { export const getCurrentType = (currentFile) => { const current = currentFile || DOM.getCurrentFile(); const el = DOM.getByDataName('js-type', current); + const type = el.className .split(' ') .pop(); diff --git a/client/key/index.spec.js b/client/key/index.spec.js index 62fbff4d..bec92b31 100644 --- a/client/key/index.spec.js +++ b/client/key/index.spec.js @@ -37,6 +37,7 @@ test('cloudcmd: client: key: enable vim', async (t) => { test('cloudcmd: client: key: disable vim', async (t) => { const _config = stub(); const config = stub(); + const event = { keyCode: ESC, key: 'Escape', diff --git a/client/key/vim/index.spec.js b/client/key/vim/index.spec.js index f187dea2..b31e3d60 100644 --- a/client/key/vim/index.spec.js +++ b/client/key/vim/index.spec.js @@ -447,6 +447,7 @@ test('cloudcmd: client: key: set first file current: ^', async (t) => { test('cloudcmd: client: key: visual', (t) => { const element = {}; const toggleSelectedFile = stub(); + const Info = { element, }; @@ -463,6 +464,7 @@ test('cloudcmd: client: key: visual', (t) => { test('cloudcmd: client: key: ESC', (t) => { const element = {}; const unselectFiles = stub(); + const Info = { element, }; @@ -508,6 +510,7 @@ test('cloudcmd: client: key: Enter', async (t) => { test('cloudcmd: client: key: /', (t) => { const preventDefault = stub(); const element = {}; + const Info = { element, files: [], diff --git a/client/listeners/index.js b/client/listeners/index.js index 117a6a40..babc1e0d 100644 --- a/client/listeners/index.js +++ b/client/listeners/index.js @@ -55,6 +55,7 @@ let EXT; function header() { const fm = DOM.getFM(); const isDataset = (el) => el.dataset; + const isPanel = (el) => { return /^js-(left|right)$/.test(el.dataset.name); }; @@ -309,8 +310,12 @@ function onDragStart(event) { link.href = prefixURL + '/pack' + Info.path + EXT; } - event.dataTransfer.setData('DownloadURL', 'application/octet-stream' + ':' + name + - ':' + link); + event.dataTransfer.setData( + 'DownloadURL', + 'application/octet-stream' + ':' + name + + ':' + + link, + ); } function getLIElement(element) { diff --git a/client/modules/user-menu/parse-user-menu.spec.js b/client/modules/user-menu/parse-user-menu.spec.js index 0a9dc02c..fb763209 100644 --- a/client/modules/user-menu/parse-user-menu.spec.js +++ b/client/modules/user-menu/parse-user-menu.spec.js @@ -4,6 +4,7 @@ import {parseUserMenu} from './parse-user-menu.js'; test('cloudcmd: user menu: parse', (t) => { const fn = stub(); const __settings = {}; + const result = parseUserMenu({ __settings, 'F2 - Rename file': fn, diff --git a/server/markdown/index.spec.js b/server/markdown/index.spec.js index 5a337bd9..466271bd 100644 --- a/server/markdown/index.spec.js +++ b/server/markdown/index.spec.js @@ -90,6 +90,7 @@ test('cloudcmd: markdown: no request', async (t) => { test('cloudcmd: markdown', async (t) => { const configManager = cloudcmd.createConfigManager(); const fixtureDir = new URL('fixture', import.meta.url).pathname; + const config = { auth: false, root: fixtureDir, @@ -109,6 +110,7 @@ test('cloudcmd: markdown', async (t) => { test('cloudcmd: markdown: zip', async (t) => { const configManager = cloudcmd.createConfigManager(); const fixtureDir = new URL('fixture', import.meta.url).pathname; + const config = { auth: false, root: fixtureDir, From daf83875162389abd37a3c5df12f1a562efa8522 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 17 Mar 2026 21:09:20 +0200 Subject: [PATCH 114/390] feature: cloudfunc: override date format (#459) --- client/modules/user-menu/index.js | 7 ++++- common/cloudfunc.js | 15 ++++++---- common/cloudfunc.spec.js | 47 +++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 6 deletions(-) diff --git a/client/modules/user-menu/index.js b/client/modules/user-menu/index.js index 51931ac1..afc220bd 100644 --- a/client/modules/user-menu/index.js +++ b/client/modules/user-menu/index.js @@ -1,4 +1,3 @@ -/* global CloudCmd, DOM */ import '../../../css/user-menu.css'; import currify from 'currify'; import wraptile from 'wraptile'; @@ -19,6 +18,11 @@ import {runSelected} from './run.js'; const loadCSS = load.css; const sourceStore = fullstore(); +const { + CloudCmd, + DOM, + CloudFunc, +} = globalThis; const Name = 'UserMenu'; CloudCmd[Name] = { @@ -146,6 +150,7 @@ const runUserMenu = async (fn) => { const [error] = await tryToCatch(fn, { DOM, CloudCmd, + CloudFunc, tryToCatch, }); diff --git a/common/cloudfunc.js b/common/cloudfunc.js index a7df97df..0d61cc88 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -1,17 +1,19 @@ import {rendy} from 'rendy'; import currify from 'currify'; -import store from 'fullstore'; +import {fullstore} from 'fullstore'; import {encode} from '#common/entity'; +const id = (a) => a; + +export const dateFormatter = fullstore(id); + export const getHeaderField = currify(_getHeaderField); -/* КОНСТАНТЫ (общие для клиента и сервера)*/ -/* название программы */ const NAME = 'Cloud Commander'; export const FS = '/fs'; -const Path = store(); +const Path = fullstore(); Path('/'); @@ -123,6 +125,8 @@ export const buildFromJSON = (params) => { showDotFiles, } = params; + const formatDate = dateFormatter(); + const templateFile = template.file; const templateLink = template.link; const json = params.data; @@ -230,7 +234,7 @@ export const buildFromJSON = (params) => { type, name: linkResult, size, - date, + date: formatDate(date), owner, mode, }); @@ -290,3 +294,4 @@ export function getDotDot(path) { return dotDot; } + diff --git a/common/cloudfunc.spec.js b/common/cloudfunc.spec.js index aa50a9f9..c3d3634d 100644 --- a/common/cloudfunc.spec.js +++ b/common/cloudfunc.spec.js @@ -7,6 +7,7 @@ import { getPathLink, buildFromJSON, _getDataName, + dateFormatter, } from '#common/cloudfunc'; const templatePath = new URL('../tmpl/fs', import.meta.url).pathname; @@ -219,3 +220,49 @@ test('cloudfunc: _getDataName', (t) => { t.equal(result, expected); t.end(); }); + +test('cloudfunc: buildFromJSON: formatDate', (t) => { + const data = { + path: '/media/', + files: [{ + date: '30.08.2016', + mode: 'rwx rwx rwx', + name: '{{}}', + owner: 'root', + size: '7b', + type: 'file', + }], + }; + + const oldFormatter = dateFormatter(); + + const formatDate = (str) => { + const [day, month, year] = str.split('.'); + const date = new Date(year, month - 1, day); + + return date.toLocaleDateString(); + }; + + dateFormatter(formatDate); + + const html = buildFromJSON({ + prefix: '', + template, + data, + showDotFiles: false, + }); + + dateFormatter(oldFormatter); + + const $ = cheerio.load(html); + const el = $('[data-name="js-file-JTdCJTdCJTdEJTdE"]'); + + const result = el + .find('[data-name="js-date"]') + .text(); + + const expected = '8/30/2016'; + + t.equal(result, expected); + t.end(); +}); From 289f67e0d38c9e5164285fdc5deb76625184c947 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 17 Mar 2026 21:11:22 +0200 Subject: [PATCH 115/390] chore: cloudcmd: v19.7.0 --- 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 035ae391..4357db30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.17, v19.7.0 + +feature: +- daf83875 cloudfunc: override date format (#459) + 2026.03.17, v19.6.9 feature: diff --git a/HELP.md b/HELP.md index db305dac..17dd7a91 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.9 +# Cloud Commander v19.7.0 ### [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 +- *2026.03.17*, **[v19.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.0)** - *2026.03.17*, **[v19.6.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.9)** - *2026.02.27*, **[v19.6.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.8)** - *2026.02.26*, **[v19.6.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.7)** diff --git a/README.md b/README.md index 878cbcf8..4b57e4c1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.6.9 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.7.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 3c3cc896..8e57b1f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.6.9", + "version": "19.7.0", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 10b225a33750d4939483224781829309d27581b2 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 17 Mar 2026 19:12:28 +0000 Subject: [PATCH 116/390] =?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/modules/user-menu/index.js | 1 + common/cloudfunc.js | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/client/modules/user-menu/index.js b/client/modules/user-menu/index.js index afc220bd..60d32d95 100644 --- a/client/modules/user-menu/index.js +++ b/client/modules/user-menu/index.js @@ -23,6 +23,7 @@ const { DOM, CloudFunc, } = globalThis; + const Name = 'UserMenu'; CloudCmd[Name] = { diff --git a/common/cloudfunc.js b/common/cloudfunc.js index 0d61cc88..9ea55133 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -294,4 +294,3 @@ export function getDotDot(path) { return dotDot; } - From b0c1d36c816df65b89da8f13f34aa1f47a402ca2 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Mar 2026 12:43:06 +0200 Subject: [PATCH 117/390] feature: cloudcmd: @cloudcmd/fileop v9.0.7 (#460) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e57b1f0..45f1aaf7 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "dependencies": { "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", - "@cloudcmd/fileop": "^9.0.5", + "@cloudcmd/fileop": "^9.0.7", "@cloudcmd/move-files": "^8.0.0", "@cloudcmd/read-files-sync": "^2.0.0", "@putout/cli-validate-args": "^2.0.0", From 144455086589804198fa85466f60ab0c365d8b4c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 18 Mar 2026 12:46:21 +0200 Subject: [PATCH 118/390] chore: cloudcmd: v19.7.1 --- 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 4357db30..8ff40851 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.18, v19.7.1 + +feature: +- b0c1d36c cloudcmd: @cloudcmd/fileop v9.0.7 (#460) + 2026.03.17, v19.7.0 feature: diff --git a/HELP.md b/HELP.md index 17dd7a91..65cfcedf 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.7.0 +# Cloud Commander v19.7.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 +- *2026.03.18*, **[v19.7.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.1)** - *2026.03.17*, **[v19.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.0)** - *2026.03.17*, **[v19.6.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.9)** - *2026.02.27*, **[v19.6.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.8)** diff --git a/README.md b/README.md index 4b57e4c1..7ba2b0bd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.7.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.7.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 45f1aaf7..9e2e48f1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.7.0", + "version": "19.7.1", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 59037f2c18376a5ee4ff46de99084a3013b28398 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 20 Mar 2026 16:53:57 +0200 Subject: [PATCH 119/390] fix: cloudcmd: bin: --show-config --- bin/cloudcmd.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/cloudcmd.js b/bin/cloudcmd.js index 63806aab..abb54430 100755 --- a/bin/cloudcmd.js +++ b/bin/cloudcmd.js @@ -298,8 +298,8 @@ function port(arg) { } async function showConfig() { - const show = await simport('../server/show-config'); - const data = show(config('*')); + const {showConfig} = await import('../server/show-config.js'); + const data = showConfig(config('*')); console.log(data); } From ddf5a59f70e0be1c2b89fdbb8ac47e003ed51356 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Fri, 20 Mar 2026 14:55:06 +0000 Subject: [PATCH 120/390] =?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 | 7 ++++++- client/dom/current-file.spec.js | 10 ++++++++-- client/key/vim/index.js | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/client/client.js b/client/client.js index 1c6d2008..a0e3cb07 100644 --- a/client/client.js +++ b/client/client.js @@ -348,7 +348,12 @@ function CloudCmdProto({DOM, Listeners}) { 'pathLink', ]; - const [error, [file, path, link, pathLink]] = await tryToCatch(Files.get, names); + const [error, [ + file, + path, + link, + pathLink, + ]] = await tryToCatch(Files.get, names); if (error) return DOM.Dialog.alert(error.responseText); diff --git a/client/dom/current-file.spec.js b/client/dom/current-file.spec.js index 99294fde..6bf0509b 100644 --- a/client/dom/current-file.spec.js +++ b/client/dom/current-file.spec.js @@ -19,7 +19,10 @@ test('current-file: setCurrentName: setAttribute', (t) => { currentFile.setCurrentName('hello', current); - t.calledWith(setAttribute, ['data-name', 'js-file-aGVsbG8='], 'should call setAttribute'); + t.calledWith(setAttribute, [ + 'data-name', + 'js-file-aGVsbG8=', + ], 'should call setAttribute'); globalThis.DOM = DOM; globalThis.CloudCmd = CloudCmd; @@ -38,7 +41,10 @@ test('current-file: setCurrentName: setAttribute: cyrillic', (t) => { currentFile.setCurrentName('ай', current); - t.calledWith(setAttribute, ['data-name', 'js-file-JUQwJUIwJUQwJUI5'], 'should call setAttribute'); + t.calledWith(setAttribute, [ + 'data-name', + 'js-file-JUQwJUIwJUQwJUI5', + ], 'should call setAttribute'); globalThis.DOM = DOM; globalThis.CloudCmd = CloudCmd; diff --git a/client/key/vim/index.js b/client/key/vim/index.js index dd9cd026..5f67f4e4 100644 --- a/client/key/vim/index.js +++ b/client/key/vim/index.js @@ -36,7 +36,6 @@ const getOperations = (event, deps) => { preventDefault = event?.preventDefault?.bind(event), stopImmediatePropagation = event?.preventDefault?.bind(event), promptNewFile = DOM.promptNewFile, - toggleSelectedFile, Buffer = {}, createFindNext = _createFindNext, From 10934b3ad9074e824b7f788ba1c6fe033cedd99a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 20 Mar 2026 17:46:51 +0200 Subject: [PATCH 121/390] feature: cloudcmd: add ability to show modification time (#230) --- .webpack/js.js | 3 +++ client/modules/config/index.js | 7 +++++-- common/cloudfunc.js | 6 ++++++ css/columns/name-size-date-time.css | 26 ++++++++++++++++++++++++++ css/columns/name-size-date.css | 5 +++++ css/columns/name-size-time.css | 24 ++++++++++++++++++++++++ css/columns/name-size.css | 5 +++++ css/style.css | 5 +++++ test/common/cloudfunc.html | 6 +++++- test/common/cloudfunc.js | 2 +- tmpl/config.hbs | 1 + tmpl/fs/file.hbs | 1 + 12 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 css/columns/name-size-date-time.css create mode 100644 css/columns/name-size-time.css diff --git a/.webpack/js.js b/.webpack/js.js index 4759741e..fdc88556 100644 --- a/.webpack/js.js +++ b/.webpack/js.js @@ -77,6 +77,8 @@ const splitChunks = { 'themes/light', 'columns/name-size', 'columns/name-size-date', + 'columns/name-size-time', + 'columns/name-size-date-time', ]; return !lazyChunks.includes(chunk.name); @@ -111,6 +113,7 @@ export default { 'themes/light': `${dirThemes}/light.css`, 'columns/name-size': `${dirColumns}/name-size.css`, 'columns/name-size-date': `${dirColumns}/name-size-date.css`, + 'columns/name-size-date-time': `${dirColumns}/name-size-date-time.css`, 'nojs': `${dirCss}/nojs.css`, 'help': `${dirCss}/help.css`, 'view': `${dirCss}/view.css`, diff --git a/client/modules/config/index.js b/client/modules/config/index.js index 4f3965c3..cbed9c74 100644 --- a/client/modules/config/index.js +++ b/client/modules/config/index.js @@ -1,4 +1,3 @@ -/* global CloudCmd, DOM, io */ import '../../../css/config.css'; import {rendy} from 'rendy'; import currify from 'currify'; @@ -14,6 +13,10 @@ import {getTitle} from '#common/cloudfunc'; import * as Images from '#dom/images'; import * as input from './input.js'; +const { + CloudCmd, + DOM, +} = globalThis; const {Dialog, setTitle} = DOM; const Name = 'Config'; @@ -78,7 +81,7 @@ function initSocket() { const ONE_MINUTE = 60 * 1000; - const socket = io.connect(href + prefixSocket + '/config', { + const socket = globalThis.io.connect(href + prefixSocket + '/config', { reconnectionAttempts: Infinity, reconnectionDelay: ONE_MINUTE, path: `${prefix}/socket.io`, diff --git a/common/cloudfunc.js b/common/cloudfunc.js index 9ea55133..37390db9 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -154,6 +154,7 @@ export const buildFromJSON = (params) => { const name = getFieldName('name'); const size = getFieldName('size'); const date = getFieldName('date'); + const time = getFieldName('time'); const header = rendy(templateFile, { tag: 'div', @@ -163,6 +164,7 @@ export const buildFromJSON = (params) => { name, size, date, + time, owner, mode, }); @@ -195,6 +197,7 @@ export const buildFromJSON = (params) => { name: linkResult, size: '<dir>', date: '--.--.----', + time: '--.--.----', owner: '.', mode: '--- --- ---', }); @@ -213,6 +216,7 @@ export const buildFromJSON = (params) => { type, mode, date, + time, owner, size, } = file; @@ -235,6 +239,7 @@ export const buildFromJSON = (params) => { name: linkResult, size, date: formatDate(date), + time, owner, mode, }); @@ -249,6 +254,7 @@ export const buildFromJSON = (params) => { const updateField = (file) => ({ ...file, date: file.date || '--.--.----', + time: file.time || '--.--.----', owner: file.owner || 'root', size: getSize(file), }); diff --git a/css/columns/name-size-date-time.css b/css/columns/name-size-date-time.css new file mode 100644 index 00000000..1d095490 --- /dev/null +++ b/css/columns/name-size-date-time.css @@ -0,0 +1,26 @@ +.name { + width: 40%; +} + +.size { + float: none; +} + +.owner { + display: none; +} + +.mode { + display: none; +} + +.date { + float: right; + width: 20%; +} + +.time { + display: inline; + float: right; + width: 20%; +} diff --git a/css/columns/name-size-date.css b/css/columns/name-size-date.css index 45c65c64..9248f700 100644 --- a/css/columns/name-size-date.css +++ b/css/columns/name-size-date.css @@ -18,3 +18,8 @@ float: right; width: 19%; } + +.time { + display: none; +} + diff --git a/css/columns/name-size-time.css b/css/columns/name-size-time.css new file mode 100644 index 00000000..1bbd59de --- /dev/null +++ b/css/columns/name-size-time.css @@ -0,0 +1,24 @@ +.name { + width: 55%; +} + +.size { + float: none; +} + +.owner { + display: none; +} + +.mode { + display: none; +} + +.date { + display: none; +} + +.time { + float: right; + width: 19%; +} diff --git a/css/columns/name-size.css b/css/columns/name-size.css index e58d1844..c02472a5 100644 --- a/css/columns/name-size.css +++ b/css/columns/name-size.css @@ -18,3 +18,8 @@ .date { display: none; } + +.time { + display: none; +} + diff --git a/css/style.css b/css/style.css index cd7122f7..333075ed 100644 --- a/css/style.css +++ b/css/style.css @@ -228,6 +228,11 @@ a:active { color: var(--column-color); } +.time { + color: var(--column-color); + display: none; +} + .owner { display: inline-block; width: 13%; diff --git a/test/common/cloudfunc.html b/test/common/cloudfunc.html index 8db8081a..572c689c 100644 --- a/test/common/cloudfunc.html +++ b/test/common/cloudfunc.html @@ -2,6 +2,7 @@ name size + time date owner mode @@ -9,6 +10,7 @@ .. <dir> + --.--.---- --.--.---- . --- --- --- @@ -16,6 +18,7 @@ applnk <dir> + --.--.---- 21.02.2016 root rwx r-x r-x @@ -23,7 +26,8 @@ ай 1.30kb + --.--.---- --.--.---- root rwx r-x r-x - \ No newline at end of file + diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index 1eef2147..51899a9a 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -68,7 +68,7 @@ test('cloudfunc: render', (t) => { template, }); - Expect += fs.readFileSync(EXPECT_PATH, 'utf8'); + Expect += fs.readFileSync(EXPECT_PATH, 'utf8').slice(0, -1); let i; const isNotOk = Expect diff --git a/tmpl/config.hbs b/tmpl/config.hbs index 9b10b1e0..26dc3251 100644 --- a/tmpl/config.hbs +++ b/tmpl/config.hbs @@ -52,6 +52,7 @@
  • diff --git a/tmpl/fs/file.hbs b/tmpl/fs/file.hbs index 0eaa6887..8b50494f 100644 --- a/tmpl/fs/file.hbs +++ b/tmpl/fs/file.hbs @@ -2,6 +2,7 @@ {{ name }} {{ size }} + {{ time }} {{ date }} {{ owner }} {{ mode }} From e78f5d943f53d6eda20d94b620d89cd54da4b3a0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 20 Mar 2026 17:55:27 +0200 Subject: [PATCH 122/390] chore: cloudcmd: v19.8.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 8ff40851..df36dc1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2026.03.20, v19.8.0 + +fix: +- 59037f2c cloudcmd: bin: --show-config + +feature: +- 10934b3a cloudcmd: add ability to show modification time (#230) + 2026.03.18, v19.7.1 feature: diff --git a/HELP.md b/HELP.md index 65cfcedf..2091d606 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.7.1 +# Cloud Commander v19.8.0 ### [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 +- *2026.03.20*, **[v19.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.0)** - *2026.03.18*, **[v19.7.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.1)** - *2026.03.17*, **[v19.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.0)** - *2026.03.17*, **[v19.6.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.6.9)** diff --git a/README.md b/README.md index 7ba2b0bd..ad417b9f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.7.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.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 9e2e48f1..12b66089 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.7.1", + "version": "19.8.0", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From e9a8910c9c70de590f2858c46f38d9e1b1f47d07 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Fri, 20 Mar 2026 15:56:30 +0000 Subject: [PATCH 123/390] =?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/modules/config/index.js | 6 ++---- test/common/cloudfunc.js | 4 +++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/modules/config/index.js b/client/modules/config/index.js index cbed9c74..b5db80aa 100644 --- a/client/modules/config/index.js +++ b/client/modules/config/index.js @@ -13,10 +13,8 @@ import {getTitle} from '#common/cloudfunc'; import * as Images from '#dom/images'; import * as input from './input.js'; -const { - CloudCmd, - DOM, -} = globalThis; +const {CloudCmd, DOM} = globalThis; + const {Dialog, setTitle} = DOM; const Name = 'Config'; diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index 51899a9a..30d74814 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -68,7 +68,9 @@ test('cloudfunc: render', (t) => { template, }); - Expect += fs.readFileSync(EXPECT_PATH, 'utf8').slice(0, -1); + Expect += fs + .readFileSync(EXPECT_PATH, 'utf8') + .slice(0, -1); let i; const isNotOk = Expect From 80613f46fa985407a104e85f626d8059d0373e02 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sat, 21 Mar 2026 22:14:53 +0000 Subject: [PATCH 124/390] feature: docker: slim: add --- .github/workflows/docker.yml | 14 ++++++++++++++ docker/Dockerfile | 4 ++-- docker/Dockerfile.slim | 25 +++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 docker/Dockerfile.slim diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 376b0f08..77286bcb 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -65,7 +65,21 @@ jobs: platforms: linux/amd64,linux/arm64 push: true tags: | + coderaiser/cloudcmd:alpine 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 + - name: Build and push slim-image + uses: docker/build-push-action@v5 + with: + context: . + file: docker/Dockerfile.slim + platforms: linux/amd64,linux/arm64 + push: true + tags: | + coderaiser/cloudcmd:slim + coderaiser/cloudcmd:latest-slim + coderaiser/cloudcmd:${{ steps.build.outputs.version }}-slim + ghcr.io/${{ github.repository }}-slim + ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-slim diff --git a/docker/Dockerfile b/docker/Dockerfile index 1549b724..7d72a368 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM node:lts-bookworm +FROM node LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" @@ -9,7 +9,7 @@ COPY package.json /usr/src/app/ RUN curl -fsSL https://bun.com/install | bash && \ ~/.bun/bin/bun i --production --no-save && \ - PATH=$PATH:~/.bun/bin bun i gritty --no-save && \ + PATH=$PATH:~/.bun/bin bun i --production gritty --no-save && \ ~/.bun/bin/bun pm cache rm COPY . /usr/src/app diff --git a/docker/Dockerfile.slim b/docker/Dockerfile.slim new file mode 100644 index 00000000..e551e9fd --- /dev/null +++ b/docker/Dockerfile.slim @@ -0,0 +1,25 @@ +FROM node +LABEL maintainer="Coderaiser" +LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +COPY package.json /usr/src/app/ + +RUN curl -fsSL https://bun.com/install | bash && \ + ~/.bun/bin/bun i --production --no-save && \ + PATH=$PATH:~/.bun/bin bun i gritty --no-save && \ + ~/.bun/bin/bun pm cache rm + +COPY . /usr/src/app + +WORKDIR / + +ENV cloudcmd_terminal=true +ENV cloudcmd_terminal_path=gritty +ENV cloudcmd_open=false + +EXPOSE 8000 + +ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] From 84f3a3dc794fa64a582a99cfd9b4faf588689f37 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sat, 21 Mar 2026 22:16:01 +0000 Subject: [PATCH 125/390] =?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 --- test/common/cloudfunc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index 30d74814..86f93908 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -73,6 +73,7 @@ test('cloudfunc: render', (t) => { .slice(0, -1); let i; + const isNotOk = Expect .split('') .some((item, number) => { From 708a4c6b99ee9a29f71875263e8420d075063f4a Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sat, 21 Mar 2026 22:14:53 +0000 Subject: [PATCH 126/390] feature: docker: slim: add --- docker/Dockerfile | 5 +++-- docker/Dockerfile.slim | 25 ++++++++++++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 7d72a368..d02e75e1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,8 +8,8 @@ WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN curl -fsSL https://bun.com/install | bash && \ - ~/.bun/bin/bun i --production --no-save && \ - PATH=$PATH:~/.bun/bin bun i --production gritty --no-save && \ + ~/.bun/bin/bun i --production && \ + ~/.bun/bin/bun add --no-save gritty && \ ~/.bun/bin/bun pm cache rm COPY . /usr/src/app @@ -19,6 +19,7 @@ WORKDIR / ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false +ENV PATH="/root/.bun/bin:$PATH" EXPOSE 8000 diff --git a/docker/Dockerfile.slim b/docker/Dockerfile.slim index e551e9fd..becb28ab 100644 --- a/docker/Dockerfile.slim +++ b/docker/Dockerfile.slim @@ -1,24 +1,35 @@ -FROM node -LABEL maintainer="Coderaiser" -LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" +FROM node:slim AS build RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ -RUN curl -fsSL https://bun.com/install | bash && \ - ~/.bun/bin/bun i --production --no-save && \ - PATH=$PATH:~/.bun/bin bun i gritty --no-save && \ - ~/.bun/bin/bun pm cache rm +RUN apt-get update && \ + apt-get install -y build-essential python3 libncurses5-dev pkg-config && \ + apt-get install -y --no-install-recommends curl ca-certificates unzip && \ + curl -fsSL https://bun.com/install | bash && \ + ~/.bun/bin/bun i --production && \ + ~/.bun/bin/bun add --no-save gritty && \ + ~/.bun/bin/bun pm cache rm && \ + rm -rf /var/lib/apt/lists/* COPY . /usr/src/app +FROM node:slim AS runtime + +COPY --from=build /usr/src/app /usr/src/app +COPY --from=build /root/.bun /root/.bun + +LABEL maintainer="Coderaiser" +LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" + WORKDIR / ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false +ENV PATH="/root/.bun/bin:$PATH" EXPOSE 8000 From 7661f69f1a2956366f44a4160fd9618848a850d1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 02:04:18 +0200 Subject: [PATCH 127/390] test: cloudcmd: coverage --- common/cloudfunc.js | 7 ++----- common/cloudfunc.spec.js | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/common/cloudfunc.js b/common/cloudfunc.js index 37390db9..a38fa06e 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -4,13 +4,10 @@ import {fullstore} from 'fullstore'; import {encode} from '#common/entity'; const id = (a) => a; - -export const dateFormatter = fullstore(id); - -export const getHeaderField = currify(_getHeaderField); - const NAME = 'Cloud Commander'; +export const dateFormatter = fullstore(id); +export const getHeaderField = currify(_getHeaderField); export const FS = '/fs'; const Path = fullstore(); diff --git a/common/cloudfunc.spec.js b/common/cloudfunc.spec.js index c3d3634d..51408a87 100644 --- a/common/cloudfunc.spec.js +++ b/common/cloudfunc.spec.js @@ -240,7 +240,7 @@ test('cloudfunc: buildFromJSON: formatDate', (t) => { const [day, month, year] = str.split('.'); const date = new Date(year, month - 1, day); - return date.toLocaleDateString(); + return date.toLocaleDateString('en-US'); }; dateFormatter(formatDate); From 2396000a6a11958d793b498f87bff983173dbfd0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 01:41:21 +0200 Subject: [PATCH 128/390] chore: cloudcmd: v19.8.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 df36dc1b..14c5ebc4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026.03.22, v19.8.1 + +feature: +- 708a4c6b docker: slim: add +- 80613f46 docker: slim: add + 2026.03.20, v19.8.0 fix: diff --git a/HELP.md b/HELP.md index 2091d606..2fa1899d 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.0 +# Cloud Commander v19.8.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 +- *2026.03.22*, **[v19.8.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.1)** - *2026.03.20*, **[v19.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.0)** - *2026.03.18*, **[v19.7.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.1)** - *2026.03.17*, **[v19.7.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.0)** diff --git a/README.md b/README.md index ad417b9f..03aef11b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.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 12b66089..1b07875e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.0", + "version": "19.8.1", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From e5b221f7ac3f7291c130a48e765ef8fb306705ab Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sun, 22 Mar 2026 13:59:35 +0000 Subject: [PATCH 129/390] feature: docker: io: add --- .github/workflows/docker.yml | 12 ++++++++++++ docker/Dockerfile.io | 30 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 docker/Dockerfile.io diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 77286bcb..dcc05a6f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -83,3 +83,15 @@ jobs: coderaiser/cloudcmd:${{ steps.build.outputs.version }}-slim ghcr.io/${{ github.repository }}-slim ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-slim + - name: Build and push io-image + uses: docker/build-push-action@v5 + with: + context: . + file: docker/Dockerfile.slim + platforms: linux/amd64,linux/arm64 + push: true + tags: | + coderaiser/cloudcmd:io + coderaiser/cloudcmd:${{ steps.build.outputs.version }}-io + ghcr.io/${{ github.repository }}-io + ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-io diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io new file mode 100644 index 00000000..f8269d96 --- /dev/null +++ b/docker/Dockerfile.io @@ -0,0 +1,30 @@ +FROM node +LABEL maintainer="Coderaiser" +LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +COPY package.json /usr/src/app/ + +RUN apt-get update && apt-get upgrade && apt-get autoremove && \ + apt-get install nc mc && \ + curl -fsSL https://bun.com/install | bash && \ + ~/.bun/bin/bun i --production && \ + ~/.bun/bin/bun add --no-save gritty && \ + ~/.bun/bin/bun pm cache rm && \ + echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get install *" > /etc/sudoers.d/apt-install && \ + chmod 0440 /etc/sudoers.d/apt-install + +COPY . /usr/src/app + +WORKDIR / + +ENV cloudcmd_terminal=true +ENV cloudcmd_terminal_path=gritty +ENV cloudcmd_open=false +ENV PATH="/root/.bun/bin:$PATH" + +EXPOSE 8000 + +ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] From a20640ed75a1fbf25a037c779c25c503ef26a935 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 16:02:19 +0200 Subject: [PATCH 130/390] chore: cloudcmd: v19.8.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 14c5ebc4..dbd737a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.22, v19.8.2 + +feature: +- e5b221f7 docker: io: add + 2026.03.22, v19.8.1 feature: diff --git a/HELP.md b/HELP.md index 2fa1899d..5884ffbc 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.1 +# Cloud Commander v19.8.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 +- *2026.03.22*, **[v19.8.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.2)** - *2026.03.22*, **[v19.8.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.1)** - *2026.03.20*, **[v19.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.0)** - *2026.03.18*, **[v19.7.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.7.1)** diff --git a/README.md b/README.md index 03aef11b..d09777a7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.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 1b07875e..0b551893 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.1", + "version": "19.8.2", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 7e35c6067706ccbfed97d80a208b94d1d8547646 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 22:19:21 +0200 Subject: [PATCH 131/390] feature: docker: io: curl wget --- docker/Dockerfile.io | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index f8269d96..0f799551 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -9,6 +9,7 @@ COPY package.json /usr/src/app/ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ apt-get install nc mc && \ + npm i wisdom nupdate version-io redrun putout -g curl -fsSL https://bun.com/install | bash && \ ~/.bun/bin/bun i --production && \ ~/.bun/bin/bun add --no-save gritty && \ @@ -23,7 +24,7 @@ WORKDIR / ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false -ENV PATH="/root/.bun/bin:$PATH" +ENV PATH="node_modules/.bin:~/.bun/bin:$PATH" EXPOSE 8000 From 01677e6a09164584946a0b248129e4c6947a5f63 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 22:19:21 +0200 Subject: [PATCH 132/390] fix: docker: io: slim -> io --- .github/workflows/docker.yml | 2 +- docker/Dockerfile.io | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index dcc05a6f..d2f8e57d 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -87,7 +87,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - file: docker/Dockerfile.slim + file: docker/Dockerfile.io platforms: linux/amd64,linux/arm64 push: true tags: | diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 0f799551..c3dc73a6 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -8,9 +8,10 @@ WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install nc mc && \ - npm i wisdom nupdate version-io redrun putout -g + apt-get install nc mc iputils-ping && \ + npm i wisdom nupdate version-io redrun madrun redlint putout -g curl -fsSL https://bun.com/install | bash && \ + curl -fsSL https://deno.land/install.sh | sh ~/.bun/bin/bun i --production && \ ~/.bun/bin/bun add --no-save gritty && \ ~/.bun/bin/bun pm cache rm && \ From ca97c21e9c0a0abdbad7785a2f84c0fa519b7858 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 22:25:32 +0200 Subject: [PATCH 133/390] chore: cloudcmd: v19.8.3 --- 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 dbd737a2..72f647a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2026.03.22, v19.8.3 + +fix: +- 01677e6a docker: io: slim -> io + +feature: +- 7e35c606 docker: io: curl wget + 2026.03.22, v19.8.2 feature: diff --git a/HELP.md b/HELP.md index 5884ffbc..06686912 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.2 +# Cloud Commander v19.8.3 ### [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 +- *2026.03.22*, **[v19.8.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.3)** - *2026.03.22*, **[v19.8.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.2)** - *2026.03.22*, **[v19.8.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.1)** - *2026.03.20*, **[v19.8.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.0)** diff --git a/README.md b/README.md index d09777a7..2903dbde 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.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 0b551893..e1f72537 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.2", + "version": "19.8.3", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 9e529605e1833ac544578c0b6eb5daf0f816edd5 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 22:32:13 +0200 Subject: [PATCH 134/390] feature: docker: vim nvim --- docker/Dockerfile.io | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index c3dc73a6..5ec8474f 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -8,15 +8,17 @@ WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install nc mc iputils-ping && \ - npm i wisdom nupdate version-io redrun madrun redlint putout -g + apt-get install -y netcat-openbsd mc iputils-ping vim neovim && \ + npm i wisdom nupdate version-io redrun madrun redlint putout -g && \ curl -fsSL https://bun.com/install | bash && \ - curl -fsSL https://deno.land/install.sh | sh + curl -fsSL https://deno.land/install.sh | sh && \ ~/.bun/bin/bun i --production && \ ~/.bun/bin/bun add --no-save gritty && \ ~/.bun/bin/bun pm cache rm && \ echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get install *" > /etc/sudoers.d/apt-install && \ - chmod 0440 /etc/sudoers.d/apt-install + chmod 0440 /etc/sudoers.d/apt-install && \ + echo "set editing-mode vi" >> /etc/inputrc && \ + echo "TAB: menu-complete" >> /etc/inputrc COPY . /usr/src/app From 151c56f9a31fc4c711382c68e87b97e4651c21f8 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 23:29:31 +0200 Subject: [PATCH 135/390] feature: Dockerfile: simplify --- docker/Dockerfile | 9 +++++---- docker/Dockerfile.alpine | 11 ++++++----- docker/Dockerfile.io | 16 ++++++++++------ docker/Dockerfile.slim | 8 ++++++-- package.json | 4 ++-- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index d02e75e1..7a2f9449 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,9 +8,11 @@ WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN curl -fsSL https://bun.com/install | bash && \ - ~/.bun/bin/bun i --production && \ - ~/.bun/bin/bun add --no-save gritty && \ - ~/.bun/bin/bun pm cache rm + ln -s /root/.bun/bin/bun /usr/local/bin/bun && \ + chmod +x /usr/local/bin/bun && \ + bun i --production --no-save && \ + bun i gritty --production --no-save && \ + bun pm cache rm COPY . /usr/src/app @@ -19,7 +21,6 @@ WORKDIR / ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false -ENV PATH="/root/.bun/bin:$PATH" EXPOSE 8000 diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index b873c341..b4e5b306 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -9,17 +9,18 @@ COPY package.json /usr/src/app/ RUN apk update && \ apk add --no-cache curl bash make g++ python3 && \ - curl -fsSL https://bun.com/install | bash && \ - ~/.bun/bin/bun i --production --no-save && \ - PATH=$PATH:~/.bun/bin bun i gritty --no-save && \ - ~/.bun/bin/bun pm cache rm && \ + curl -fsSL https://bun.sh/install | bash && \ + ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ + chmod +x /usr/local/bin/bun && \ + bun i --production --no-save && \ + bun i gritty --production --no-save && \ + bun pm cache rm && \ apk del make g++ python3 && \ rm -rf /usr/include /tmp/* /var/cache/apk/* COPY . /usr/src/app WORKDIR / - ENV cloudcmd_terminal true ENV cloudcmd_terminal_path gritty ENV cloudcmd_open false diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 5ec8474f..d63f606e 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -8,13 +8,17 @@ WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install -y netcat-openbsd mc iputils-ping vim neovim && \ + apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo && \ npm i wisdom nupdate version-io redrun madrun redlint putout -g && \ - curl -fsSL https://bun.com/install | bash && \ + curl -fsSL https://bun.sh/install | bash && \ + ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ + chmod +x /usr/local/bin/bun && \ curl -fsSL https://deno.land/install.sh | sh && \ - ~/.bun/bin/bun i --production && \ - ~/.bun/bin/bun add --no-save gritty && \ - ~/.bun/bin/bun pm cache rm && \ + ln -s ~/.deno/bin/deno /usr/local/bin/deno && \ + chmod +x /usr/local/bin/deno && \ + bun i --production && \ + bun i gritty --production && \ + bun pm cache rm && \ echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get install *" > /etc/sudoers.d/apt-install && \ chmod 0440 /etc/sudoers.d/apt-install && \ echo "set editing-mode vi" >> /etc/inputrc && \ @@ -27,7 +31,7 @@ WORKDIR / ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false -ENV PATH="node_modules/.bin:~/.bun/bin:$PATH" +ENV PATH=node_modules/.bin:$PATH EXPOSE 8000 diff --git a/docker/Dockerfile.slim b/docker/Dockerfile.slim index becb28ab..fc397a28 100644 --- a/docker/Dockerfile.slim +++ b/docker/Dockerfile.slim @@ -8,8 +8,12 @@ COPY package.json /usr/src/app/ RUN apt-get update && \ apt-get install -y build-essential python3 libncurses5-dev pkg-config && \ apt-get install -y --no-install-recommends curl ca-certificates unzip && \ - curl -fsSL https://bun.com/install | bash && \ - ~/.bun/bin/bun i --production && \ + curl -fsSL https://bun.sh/install | bash && \ + ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ + chmod +x /usr/local/bin/bun && \ + bun i --production --no-save && \ + bun i gritty --production --no-save && \ + ~/.bun/bin/bun i --production --no-save && \ ~/.bun/bin/bun add --no-save gritty && \ ~/.bun/bin/bun pm cache rm && \ rm -rf /var/lib/apt/lists/* diff --git a/package.json b/package.json index e1f72537..76b8931f 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,6 @@ }, "subdomain": "cloudcmd", "dependencies": { - "@babel/plugin-transform-optional-chaining": "^7.21.0", "@cloudcmd/dropbox": "^5.0.1", "@cloudcmd/fileop": "^9.0.7", "@cloudcmd/move-files": "^8.0.0", @@ -149,6 +148,7 @@ "yargs-parser": "^22.0.0" }, "devDependencies": { + "@babel/plugin-transform-optional-chaining": "^7.21.0", "@babel/code-frame": "^7.22.5", "@babel/core": "^7.22.5", "@babel/preset-env": "^7.0.0", @@ -178,7 +178,7 @@ "eslint-plugin-n": "^17.0.0-4", "eslint-plugin-putout": "^31.0.0", "globals": "^17.0.0", - "gritty": "^10.0.0", + "gritty": "^10.0.2", "gunzip-maybe": "^1.3.1", "html-webpack-plugin": "^5.6.3", "inherits": "^2.0.3", From 660f57e914a450bbf99feabfe1fd3137f892d796 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 00:05:57 +0200 Subject: [PATCH 136/390] chore: actions: docker: set-output -> GITHUB_OUTPUT (https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/) --- .github/workflows/docker.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index d2f8e57d..59e6bc9c 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -29,7 +29,8 @@ jobs: id: build run: | redrun build - echo "::set-output name=version::$(grep '"version":' package.json -m1 | cut -d\" -f4)" + VERSION=$(grep '"version":' package.json -m1 | cut -d\" -f4) + echo "version=$VERSION" >> $GITHUB_OUTPUT - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx From 8b83277ec08873b87f24996d619c97afb2fce73c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 22 Mar 2026 22:33:59 +0200 Subject: [PATCH 137/390] chore: cloudcmd: v19.8.4 --- 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 72f647a1..9329f0e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.22, v19.8.4 + +feature: +- 5000227e docker: vim nvim + 2026.03.22, v19.8.3 fix: diff --git a/HELP.md b/HELP.md index 06686912..6842883c 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.3 +# Cloud Commander v19.8.4 ### [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 +- *2026.03.22*, **[v19.8.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.4)** - *2026.03.22*, **[v19.8.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.3)** - *2026.03.22*, **[v19.8.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.2)** - *2026.03.22*, **[v19.8.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.1)** diff --git a/README.md b/README.md index 2903dbde..c403d892 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.3 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.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 76b8931f..6fcbc741 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.3", + "version": "19.8.4", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From df21e81d5adcd2f38f756536dfeb63fdadc455e5 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 00:52:54 +0200 Subject: [PATCH 138/390] chore: docker: lint --- docker/Dockerfile.alpine | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index b4e5b306..b1469875 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -21,9 +21,9 @@ RUN apk update && \ 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 56fc8b838af81055ee593cc9cdc8ff1bf4cc083b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 01:31:58 +0200 Subject: [PATCH 139/390] fix: docker: gritty --- docker/Dockerfile | 4 ++-- docker/Dockerfile.alpine | 4 ++-- docker/Dockerfile.io | 8 ++++---- docker/Dockerfile.slim | 6 ++---- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 7a2f9449..2bd2a7e2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -10,8 +10,8 @@ COPY package.json /usr/src/app/ RUN curl -fsSL https://bun.com/install | bash && \ ln -s /root/.bun/bin/bun /usr/local/bin/bun && \ chmod +x /usr/local/bin/bun && \ - bun i --production --no-save && \ - bun i gritty --production --no-save && \ + bun r gritty --omit dev && \ + bun i gritty --omit dev && \ bun pm cache rm COPY . /usr/src/app diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index b1469875..29a7b8c2 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -12,8 +12,8 @@ RUN apk update && \ curl -fsSL https://bun.sh/install | bash && \ ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ chmod +x /usr/local/bin/bun && \ - bun i --production --no-save && \ - bun i gritty --production --no-save && \ + bun r gritty --omit dev && \ + bun i gritty --omit dev && \ bun pm cache rm && \ apk del make g++ python3 && \ rm -rf /usr/include /tmp/* /var/cache/apk/* diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index d63f606e..b0caa096 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -12,12 +12,12 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ npm i wisdom nupdate version-io redrun madrun redlint putout -g && \ curl -fsSL https://bun.sh/install | bash && \ ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ - chmod +x /usr/local/bin/bun && \ + chmod a+x /usr/local/bin/bun && \ curl -fsSL https://deno.land/install.sh | sh && \ ln -s ~/.deno/bin/deno /usr/local/bin/deno && \ - chmod +x /usr/local/bin/deno && \ - bun i --production && \ - bun i gritty --production && \ + chmod a+x /usr/local/bin/deno && \ + bun r gritty --omit dev && \ + bun i gritty --omit dev && \ bun pm cache rm && \ echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get install *" > /etc/sudoers.d/apt-install && \ chmod 0440 /etc/sudoers.d/apt-install && \ diff --git a/docker/Dockerfile.slim b/docker/Dockerfile.slim index fc397a28..f32d425b 100644 --- a/docker/Dockerfile.slim +++ b/docker/Dockerfile.slim @@ -11,10 +11,8 @@ RUN apt-get update && \ curl -fsSL https://bun.sh/install | bash && \ ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ chmod +x /usr/local/bin/bun && \ - bun i --production --no-save && \ - bun i gritty --production --no-save && \ - ~/.bun/bin/bun i --production --no-save && \ - ~/.bun/bin/bun add --no-save gritty && \ + bun r gritty --omit dev && \ + bun i gritty --omit dev && \ ~/.bun/bin/bun pm cache rm && \ rm -rf /var/lib/apt/lists/* From bec991d94181e989654fa99079fd385b1f55dae0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 01:39:15 +0200 Subject: [PATCH 140/390] chore: lint --- .github/workflows/docker.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 59e6bc9c..bff9c809 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -47,7 +47,7 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push base-image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: . file: docker/Dockerfile @@ -59,7 +59,7 @@ jobs: 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 + uses: docker/build-push-action@v7 with: context: . file: docker/Dockerfile.alpine @@ -72,7 +72,7 @@ jobs: ghcr.io/${{ github.repository }}:latest-alpine ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-alpine - name: Build and push slim-image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: . file: docker/Dockerfile.slim @@ -85,7 +85,7 @@ jobs: ghcr.io/${{ github.repository }}-slim ghcr.io/${{ github.repository }}:${{ steps.build.outputs.version }}-slim - name: Build and push io-image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: . file: docker/Dockerfile.io From 1bb77992b098efeed4482d18f9136dc35ac5f216 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 01:39:37 +0200 Subject: [PATCH 141/390] chore: cloudcmd: v19.8.5 --- 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 9329f0e8..d0aded39 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.5 + +fix: +- 56fc8b83 docker: gritty + 2026.03.22, v19.8.4 feature: diff --git a/HELP.md b/HELP.md index 6842883c..da55027b 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.4 +# Cloud Commander v19.8.5 ### [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 +- *2026.03.23*, **[v19.8.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.5)** - *2026.03.22*, **[v19.8.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.4)** - *2026.03.22*, **[v19.8.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.3)** - *2026.03.22*, **[v19.8.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.2)** diff --git a/README.md b/README.md index c403d892..a7339eb4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.4 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.5 [![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 6fcbc741..a00f5f9e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.4", + "version": "19.8.5", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 4b9922bf92668df6bdc0c38b80c37c5bf1f7ae60 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 01:43:05 +0200 Subject: [PATCH 142/390] feature: docker: /usr/src: app -> cloudcmd --- docker/Dockerfile | 10 +++++----- docker/Dockerfile.alpine | 10 +++++----- docker/Dockerfile.io | 10 +++++----- docker/Dockerfile.slim | 12 ++++++------ 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 2bd2a7e2..cf1505a7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -2,10 +2,10 @@ FROM node LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app +RUN mkdir -p /usr/src/cloudcmd +WORKDIR /usr/src/cloudcmd -COPY package.json /usr/src/app/ +COPY package.json /usr/src/cloudcmd/ RUN curl -fsSL https://bun.com/install | bash && \ ln -s /root/.bun/bin/bun /usr/local/bin/bun && \ @@ -14,7 +14,7 @@ RUN curl -fsSL https://bun.com/install | bash && \ bun i gritty --omit dev && \ bun pm cache rm -COPY . /usr/src/app +COPY . /usr/src/cloudcmd WORKDIR / @@ -24,4 +24,4 @@ ENV cloudcmd_open=false EXPOSE 8000 -ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] +ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index 29a7b8c2..cf069899 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -2,10 +2,10 @@ FROM node:alpine LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app +RUN mkdir -p /usr/src/cloudcmd +WORKDIR /usr/src/cloudcmd -COPY package.json /usr/src/app/ +COPY package.json /usr/src/cloudcmd/ RUN apk update && \ apk add --no-cache curl bash make g++ python3 && \ @@ -18,7 +18,7 @@ RUN apk update && \ apk del make g++ python3 && \ rm -rf /usr/include /tmp/* /var/cache/apk/* -COPY . /usr/src/app +COPY . /usr/src/cloudcmd WORKDIR / ENV cloudcmd_terminal=true @@ -27,5 +27,5 @@ ENV cloudcmd_open=false EXPOSE 8000 -ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] +ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index b0caa096..533c141c 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -2,10 +2,10 @@ FROM node LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app +RUN mkdir -p /usr/src/cloudcmd +WORKDIR /usr/src/cloudcmd -COPY package.json /usr/src/app/ +COPY package.json /usr/src/cloudcmd/ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo && \ @@ -24,7 +24,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "set editing-mode vi" >> /etc/inputrc && \ echo "TAB: menu-complete" >> /etc/inputrc -COPY . /usr/src/app +COPY . /usr/src/cloudcmd WORKDIR / @@ -35,4 +35,4 @@ ENV PATH=node_modules/.bin:$PATH EXPOSE 8000 -ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] +ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] diff --git a/docker/Dockerfile.slim b/docker/Dockerfile.slim index f32d425b..6974b41c 100644 --- a/docker/Dockerfile.slim +++ b/docker/Dockerfile.slim @@ -1,9 +1,9 @@ FROM node:slim AS build -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app +RUN mkdir -p /usr/src/cloudcmd/ +WORKDIR /usr/src/cloudcmd -COPY package.json /usr/src/app/ +COPY package.json /usr/src/cloudcmd/ RUN apt-get update && \ apt-get install -y build-essential python3 libncurses5-dev pkg-config && \ @@ -16,11 +16,11 @@ RUN apt-get update && \ ~/.bun/bin/bun pm cache rm && \ rm -rf /var/lib/apt/lists/* -COPY . /usr/src/app +COPY . /usr/src/cloudcmd FROM node:slim AS runtime -COPY --from=build /usr/src/app /usr/src/app +COPY --from=build /usr/src/cloudcmd /usr/src/cloudcmd COPY --from=build /root/.bun /root/.bun LABEL maintainer="Coderaiser" @@ -35,4 +35,4 @@ ENV PATH="/root/.bun/bin:$PATH" EXPOSE 8000 -ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"] +ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] From 53c072abe49b3fea002e09e64bb4fa98370f5250 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 01:48:46 +0200 Subject: [PATCH 143/390] fix: @putout/plugin-cloudcmd: devDependencies -> dependnecies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a00f5f9e..a7a2eeaa 100644 --- a/package.json +++ b/package.json @@ -129,6 +129,7 @@ "ponse": "^7.0.0", "pullout": "^5.0.0", "putout": "^42.0.5", + "@putout/plugin-cloudcmd": "^5.2.0", "redzip": "^4.6.1", "rendy": "^5.0.0", "restafary": "^13.0.1", @@ -159,7 +160,6 @@ "@cloudcmd/stub": "^5.0.0", "@iocmd/wait": "^2.1.0", "@putout/eslint-flat": "^4.0.0", - "@putout/plugin-cloudcmd": "^5.2.0", "@types/node-fetch": "^2.6.11", "auto-globals": "^4.0.0", "babel-loader": "^10.0.0", From 0fbfa0f0cf4587bfb919c0a817239824cd4aaac3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 01:49:08 +0200 Subject: [PATCH 144/390] chore: cloudcmd: v19.8.6 --- 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 d0aded39..42a171fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2026.03.23, v19.8.6 + +fix: +- 53c072ab @putout/plugin-cloudcmd: devDependencies -> dependnecies + +feature: +- 4b9922bf docker: /usr/src: app -> cloudcmd + 2026.03.23, v19.8.5 fix: diff --git a/HELP.md b/HELP.md index da55027b..44c422d2 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.5 +# Cloud Commander v19.8.6 ### [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 +- *2026.03.23*, **[v19.8.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.6)** - *2026.03.23*, **[v19.8.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.5)** - *2026.03.22*, **[v19.8.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.4)** - *2026.03.22*, **[v19.8.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.3)** diff --git a/README.md b/README.md index a7339eb4..250ac965 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.5 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.6 [![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 a7a2eeaa..065b185d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.5", + "version": "19.8.6", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From ecc76e8b1ed139445a1b51f34654efd5f673bc6b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 12:12:04 +0200 Subject: [PATCH 145/390] feature: docker: io: renamify-cli, runny, redfork --- docker/Dockerfile.io | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 533c141c..2d19051f 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -9,7 +9,7 @@ COPY package.json /usr/src/cloudcmd/ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo && \ - npm i wisdom nupdate version-io redrun madrun redlint putout -g && \ + npm i wisdom nupdate version-io redrun madrun redlint putout renamify-cli runny redfork -g && \ curl -fsSL https://bun.sh/install | bash && \ ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ chmod a+x /usr/local/bin/bun && \ From e616cc0bc958879ba83aebea62309c88b90d4eaa Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 12:13:18 +0200 Subject: [PATCH 146/390] chore: cloudcmd: v19.8.7 --- 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 42a171fd..1c3c4d19 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.7 + +feature: +- ecc76e8b docker: io: renamify-cli, runny, redfork + 2026.03.23, v19.8.6 fix: diff --git a/HELP.md b/HELP.md index 44c422d2..f8257309 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.6 +# Cloud Commander v19.8.7 ### [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 +- *2026.03.23*, **[v19.8.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.7)** - *2026.03.23*, **[v19.8.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.6)** - *2026.03.23*, **[v19.8.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.5)** - *2026.03.22*, **[v19.8.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.4)** diff --git a/README.md b/README.md index 250ac965..ac2f2fcd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.6 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.7 [![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 065b185d..4d58564e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.6", + "version": "19.8.7", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 02dbe56d79ca43403342bee2af49fa06cd5e567d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 12:20:31 +0200 Subject: [PATCH 147/390] feature: server: user-menu: when error send it --- server/user-menu.js | 24 ++++++++++++++++-------- server/user-menu.spec.js | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/server/user-menu.js b/server/user-menu.js index 4c56ad9f..84baf1a3 100644 --- a/server/user-menu.js +++ b/server/user-menu.js @@ -1,7 +1,6 @@ import {homedir} from 'node:os'; import {readFile as _readFile} from 'node:fs/promises'; import {join} from 'node:path'; -import {readFileSync} from 'node:fs'; // warm up worker cache import montag from 'montag'; import {tryToCatch} from 'try-to-catch'; @@ -35,7 +34,9 @@ async function onGET({req, res, menuName, readFile}) { const url = req.url.replace(PREFIX, ''); if (url === '/default') - return await sendDefaultMenu(res); + return await sendDefaultMenu(res, { + readFile, + }); const {findUp} = await import('find-up'); @@ -58,7 +59,9 @@ async function onGET({req, res, menuName, readFile}) { .send(e.message); if (e) - return await sendDefaultMenu(res); + return await sendDefaultMenu(res, { + readFile, + }); const [parseError, result] = await transpile(source); @@ -86,8 +89,10 @@ function getError(error, source) { `; } -async function sendDefaultMenu(res) { - const menu = await getDefaultMenu(); +async function sendDefaultMenu(res, {readFile}) { + const menu = await getDefaultMenu({ + readFile, + }); res .type('js') @@ -106,10 +111,13 @@ async function transpile(source) { }); } -async function getDefaultMenu() { +async function getDefaultMenu({readFile}) { const DEFAULT_MENU_PATH = new URL('../static/user-menu.js', import.meta.url).pathname; - const menu = readFileSync(DEFAULT_MENU_PATH, 'utf8'); - const [, result] = await transpile(menu); + const menu = await readFile(DEFAULT_MENU_PATH, 'utf8'); + const [error, result] = await transpile(menu); + + if (error) + return String(error); return result.code; } diff --git a/server/user-menu.spec.js b/server/user-menu.spec.js index b88cb07a..b24bb9eb 100644 --- a/server/user-menu.spec.js +++ b/server/user-menu.spec.js @@ -86,6 +86,25 @@ test('cloudcmd: user menu: io.cp', async (t) => { t.end(); }); +test('cloudcmd: user menu: broken file', async (t) => { + const readFile = stub().returns('sdfsdf /; s'); + const options = { + menuName: '.cloudcmd.menu.js', + readFile, + }; + + const {request} = serveOnce(userMenu); + + const {body} = await request.get(`/api/v1/user-menu/default`, { + options, + }); + + const expected = 'SyntaxError: Unexpected token (1:8)'; + + t.equal(body, expected); + t.end(); +}); + function getUserMenuFile() { const userMenuFile = readFileSync(userMenuPath, 'utf8'); const {code} = putout(userMenuFile, { From 4fa92f93948c1b3ec877549217cb6227083b2f5b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 12:23:24 +0200 Subject: [PATCH 148/390] chore: cloudcmd: v19.8.8 --- 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 1c3c4d19..0032393f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.8 + +feature: +- 02dbe56d server: user-menu: when error send it + 2026.03.23, v19.8.7 feature: diff --git a/HELP.md b/HELP.md index f8257309..19e30a0e 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.7 +# Cloud Commander v19.8.8 ### [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 +- *2026.03.23*, **[v19.8.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.8)** - *2026.03.23*, **[v19.8.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.7)** - *2026.03.23*, **[v19.8.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.6)** - *2026.03.23*, **[v19.8.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.5)** diff --git a/README.md b/README.md index ac2f2fcd..e1b13dc0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.7 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.8 [![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 4d58564e..a15e24fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.7", + "version": "19.8.8", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From b052cf220dbebd3e91f804ff12f8eb629a6e43a7 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 15:46:00 +0200 Subject: [PATCH 149/390] fix: cloudcmd: no time available: --.--.---- -> --:--:-- (#461) --- common/cloudfunc.js | 4 ++-- test/common/cloudfunc.html | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/cloudfunc.js b/common/cloudfunc.js index a38fa06e..7884d069 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -194,7 +194,7 @@ export const buildFromJSON = (params) => { name: linkResult, size: '<dir>', date: '--.--.----', - time: '--.--.----', + time: '--:--:--', owner: '.', mode: '--- --- ---', }); @@ -251,7 +251,7 @@ export const buildFromJSON = (params) => { const updateField = (file) => ({ ...file, date: file.date || '--.--.----', - time: file.time || '--.--.----', + time: file.time || '--:--:--', owner: file.owner || 'root', size: getSize(file), }); diff --git a/test/common/cloudfunc.html b/test/common/cloudfunc.html index 572c689c..a032b107 100644 --- a/test/common/cloudfunc.html +++ b/test/common/cloudfunc.html @@ -10,7 +10,7 @@ .. <dir> - --.--.---- + --:--:-- --.--.---- . --- --- --- @@ -18,7 +18,7 @@ applnk <dir> - --.--.---- + --:--:-- 21.02.2016 root rwx r-x r-x @@ -26,7 +26,7 @@ ай 1.30kb - --.--.---- + --:--:-- --.--.---- root rwx r-x r-x From 5e0b681d8b9f91cf865ca1d000efb1a8a1e03262 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 15:46:11 +0200 Subject: [PATCH 150/390] chore: docker: lint --- docker/Dockerfile.io | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 2d19051f..0d3a66da 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -9,7 +9,8 @@ COPY package.json /usr/src/cloudcmd/ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo && \ - npm i wisdom nupdate version-io redrun madrun redlint putout renamify-cli runny redfork -g && \ + npm i wisdom nupdate version-io redrun superc8 \ + supertape madrun redlint putout renamify-cli runny redfork -g && \ curl -fsSL https://bun.sh/install | bash && \ ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ chmod a+x /usr/local/bin/bun && \ From 2d524a49742fd547502f82ea3afdf1df3bc3d6a9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 15:46:53 +0200 Subject: [PATCH 151/390] chore: cloudcmd: v19.8.9 --- 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 0032393f..119bcf6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.9 + +fix: +- b052cf22 cloudcmd: no time available: --.--.---- -> --:--:-- (#461) + 2026.03.23, v19.8.8 feature: diff --git a/HELP.md b/HELP.md index 19e30a0e..b093e862 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.8 +# Cloud Commander v19.8.9 ### [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 +- *2026.03.23*, **[v19.8.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.9)** - *2026.03.23*, **[v19.8.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.8)** - *2026.03.23*, **[v19.8.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.7)** - *2026.03.23*, **[v19.8.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.6)** diff --git a/README.md b/README.md index e1b13dc0..b13b5183 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.8 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.9 [![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 a15e24fe..8d252488 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.8", + "version": "19.8.9", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 025b005e123e4f4c6f59cfe45a35c34b2e222779 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 18:16:38 +0200 Subject: [PATCH 152/390] feature: docker: io: add PS1 --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 0d3a66da..c81fc273 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -33,6 +33,7 @@ ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH +ENV PS1='\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' EXPOSE 8000 From 9493e4de7e9c42f9bc612d7812d7b42c9c00e073 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 18:18:10 +0200 Subject: [PATCH 153/390] featur: docker: io: ls --color --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index c81fc273..3971e69a 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -21,6 +21,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ bun i gritty --omit dev && \ bun pm cache rm && \ echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get install *" > /etc/sudoers.d/apt-install && \ + echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ chmod 0440 /etc/sudoers.d/apt-install && \ echo "set editing-mode vi" >> /etc/inputrc && \ echo "TAB: menu-complete" >> /etc/inputrc From e6684df59ea46f7fd7ebaf4305628bffccc299dc Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 18:32:52 +0200 Subject: [PATCH 154/390] chore: cloudcmd: v19.8.10 --- 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 119bcf6d..4c24c6a4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.10 + +feature: +- 025b005e docker: io: add PS1 + 2026.03.23, v19.8.9 fix: diff --git a/HELP.md b/HELP.md index b093e862..a4ff0cf9 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.9 +# Cloud Commander v19.8.10 ### [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 +- *2026.03.23*, **[v19.8.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.10)** - *2026.03.23*, **[v19.8.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.9)** - *2026.03.23*, **[v19.8.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.8)** - *2026.03.23*, **[v19.8.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.7)** diff --git a/README.md b/README.md index b13b5183..3603ec6b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.9 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.10 [![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 8d252488..fa1cd888 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.9", + "version": "19.8.10", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 97672ef5d58ac904b2152dde609acb4c95f5f0e1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 18:41:51 +0200 Subject: [PATCH 155/390] fix: docker: io: apt-get install -> apt-get --- docker/Dockerfile.io | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 3971e69a..24ec08b1 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -20,7 +20,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ bun r gritty --omit dev && \ bun i gritty --omit dev && \ bun pm cache rm && \ - echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get install *" > /etc/sudoers.d/apt-install && \ + echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get *" > /etc/sudoers.d/apt-install && \ echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ chmod 0440 /etc/sudoers.d/apt-install && \ echo "set editing-mode vi" >> /etc/inputrc && \ From 67f27d842588a2ecfc7e82f7eab31d8026da6b99 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 18:52:54 +0200 Subject: [PATCH 156/390] feature: docker: io: bun, deno --- docker/Dockerfile.io | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 24ec08b1..a55a424c 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -11,12 +11,16 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo && \ npm i wisdom nupdate version-io redrun superc8 \ supertape madrun redlint putout renamify-cli runny redfork -g && \ + echo "install bun" && \ curl -fsSL https://bun.sh/install | bash && \ - ln -s ~/.bun/bin/bun /usr/local/bin/bun && \ - chmod a+x /usr/local/bin/bun && \ + mv ~/.bun /usr/local/src/bun && \ + chmod a+rwx /usr/local/src/bun && \ + ln -s /usr/local/src/bun/bin/bun /usr/local/bin/bun && \ + echo "install deno" && \ curl -fsSL https://deno.land/install.sh | sh && \ - ln -s ~/.deno/bin/deno /usr/local/bin/deno && \ - chmod a+x /usr/local/bin/deno && \ + mv ~/.bun /usr/local/src/deno && \ + chmod a+rwx /usr/local/src/deno && \ + ln -s /usr/local/src/deno/bin/deno /usr/local/bin/deno && \ bun r gritty --omit dev && \ bun i gritty --omit dev && \ bun pm cache rm && \ From 682729ac3eca25945bc805b9d8a5f77eb3dcf227 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 18:53:19 +0200 Subject: [PATCH 157/390] chore: cloudcmd: v19.8.11 --- 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 4c24c6a4..77509713 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2026.03.23, v19.8.11 + +fix: +- 97672ef5 docker: io: apt-get install -> apt-get + +feature: +- 67f27d84 docker: io: bun, deno + 2026.03.23, v19.8.10 feature: diff --git a/HELP.md b/HELP.md index a4ff0cf9..cd0d9d54 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.10 +# Cloud Commander v19.8.11 ### [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 +- *2026.03.23*, **[v19.8.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.11)** - *2026.03.23*, **[v19.8.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.10)** - *2026.03.23*, **[v19.8.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.9)** - *2026.03.23*, **[v19.8.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.8)** diff --git a/README.md b/README.md index 3603ec6b..22611c9b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.10 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.11 [![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 fa1cd888..bc29c7ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.10", + "version": "19.8.11", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 618a56151489b53e0a9b9b77a44f0ccbb74e44e9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 19:04:13 +0200 Subject: [PATCH 158/390] feature: docker: io: PS1 --- docker/Dockerfile.io | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index a55a424c..12c17806 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -11,22 +11,25 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo && \ npm i wisdom nupdate version-io redrun superc8 \ supertape madrun redlint putout renamify-cli runny redfork -g && \ - echo "install bun" && \ + echo "> install bun" && \ curl -fsSL https://bun.sh/install | bash && \ mv ~/.bun /usr/local/src/bun && \ chmod a+rwx /usr/local/src/bun && \ ln -s /usr/local/src/bun/bin/bun /usr/local/bin/bun && \ - echo "install deno" && \ + echo "> install deno" && \ curl -fsSL https://deno.land/install.sh | sh && \ - mv ~/.bun /usr/local/src/deno && \ + mv ~/.deno /usr/local/src/deno && \ chmod a+rwx /usr/local/src/deno && \ ln -s /usr/local/src/deno/bin/deno /usr/local/bin/deno && \ bun r gritty --omit dev && \ bun i gritty --omit dev && \ bun pm cache rm && \ + echo "> allow sudo apt-get install for everybody" && \ echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get *" > /etc/sudoers.d/apt-install && \ - echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ chmod 0440 /etc/sudoers.d/apt-install && \ + echo "> configure bash" && \ + echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ + echo "PS1='\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/bash.bashrc && \ echo "set editing-mode vi" >> /etc/inputrc && \ echo "TAB: menu-complete" >> /etc/inputrc @@ -38,8 +41,7 @@ ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH -ENV PS1='\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' -EXPOSE 8000 +EXPOSE 1337 ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] From 4410cd2665df8e83c386455dc81102d0fc616d2e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 19:04:49 +0200 Subject: [PATCH 159/390] chore: cloudcmd: v19.8.12 --- 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 77509713..63814112 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.12 + +feature: +- 556b0150 docker: io: PS1 + 2026.03.23, v19.8.11 fix: diff --git a/HELP.md b/HELP.md index cd0d9d54..accea027 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.11 +# Cloud Commander v19.8.12 ### [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 +- *2026.03.23*, **[v19.8.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.12)** - *2026.03.23*, **[v19.8.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.11)** - *2026.03.23*, **[v19.8.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.10)** - *2026.03.23*, **[v19.8.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.9)** diff --git a/README.md b/README.md index 22611c9b..f27a5500 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.11 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.12 [![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 bc29c7ba..6b7befa7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.11", + "version": "19.8.12", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 0c9f3922f861b7ee3c994ecb5fda4cf8d47a53d0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 19:18:53 +0200 Subject: [PATCH 160/390] chore: actions: lint --- .github/workflows/docker.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index bff9c809..f687d5ec 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -32,16 +32,16 @@ jobs: VERSION=$(grep '"version":' package.json -m1 | cut -d\" -f4) echo "version=$VERSION" >> $GITHUB_OUTPUT - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to DockerHub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} From f51229fc6f9c3d8eeb3169135933001b480c12ea Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 23 Mar 2026 17:42:02 +0000 Subject: [PATCH 161/390] feature: docker: io: port --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 12c17806..974f434d 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -41,6 +41,7 @@ ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH +ENV PORT=1337 EXPOSE 1337 From a44a28f496149e7ea991c83165901829ef24d7d5 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 19:42:50 +0200 Subject: [PATCH 162/390] chore: cloudcmd: v19.8.13 --- 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 63814112..3654d111 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.13 + +feature: +- 618a5615 docker: io: PS1 + 2026.03.23, v19.8.12 feature: diff --git a/HELP.md b/HELP.md index accea027..a89c1fc4 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.12 +# Cloud Commander v19.8.13 ### [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 +- *2026.03.23*, **[v19.8.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.13)** - *2026.03.23*, **[v19.8.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.12)** - *2026.03.23*, **[v19.8.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.11)** - *2026.03.23*, **[v19.8.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.10)** diff --git a/README.md b/README.md index f27a5500..46f7fccc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.12 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.13 [![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 6b7befa7..b188fe7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.12", + "version": "19.8.13", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 665ed9c2e9e1ab5d5aaadd523618c9eb086ab34f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 22:12:03 +0200 Subject: [PATCH 163/390] fix: docker: io: get back port --- docker/Dockerfile.io | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 974f434d..fe2a8b1f 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -41,8 +41,7 @@ ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH -ENV PORT=1337 -EXPOSE 1337 +EXPOSE 8000 ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] From 56e21b4011441e2e7c303ccaefdc9beca13254af Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 22:12:37 +0200 Subject: [PATCH 164/390] chore: cloudcmd: v19.8.14 --- 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 3654d111..aefe19de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.14 + +fix: +- 665ed9c2 docker: io: get back port + 2026.03.23, v19.8.13 feature: diff --git a/HELP.md b/HELP.md index a89c1fc4..c078716b 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.13 +# Cloud Commander v19.8.14 ### [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 +- *2026.03.23*, **[v19.8.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.14)** - *2026.03.23*, **[v19.8.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.13)** - *2026.03.23*, **[v19.8.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.12)** - *2026.03.23*, **[v19.8.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.11)** diff --git a/README.md b/README.md index 46f7fccc..cb4d7a27 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.13 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.14 [![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 b188fe7b..527edfd5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.13", + "version": "19.8.14", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 68b2aa780b38ccfd63b31d66b41f27ec62ed4b94 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 22:50:34 +0200 Subject: [PATCH 165/390] feature: docker: io: cloudcmd_vim --- docker/Dockerfile.alpine | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index cf069899..75549fae 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -24,6 +24,7 @@ WORKDIR / ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false +ENV cloudcmd_vim=true EXPOSE 8000 From 2f0affd3a3f9a7af26b3a65c6b95882c76089539 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 22:51:10 +0200 Subject: [PATCH 166/390] chore: cloudcmd: v19.8.15 --- 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 aefe19de..881a2ab5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.8.15 + +feature: +- 68b2aa78 docker: io: cloudcmd_vim + 2026.03.23, v19.8.14 fix: diff --git a/HELP.md b/HELP.md index c078716b..2c6234cf 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.14 +# Cloud Commander v19.8.15 ### [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 +- *2026.03.23*, **[v19.8.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.15)** - *2026.03.23*, **[v19.8.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.14)** - *2026.03.23*, **[v19.8.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.13)** - *2026.03.23*, **[v19.8.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.12)** diff --git a/README.md b/README.md index cb4d7a27..b3f0136c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.14 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.8.15 [![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 527edfd5..29c79d07 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.14", + "version": "19.8.15", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From a1216cddeb8489acd3aedaec26dd90b8eb8a6171 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 23:02:09 +0200 Subject: [PATCH 167/390] feature: cloudcmd: add ability to hide port configuration --- HELP.md | 3 +++ bin/cloudcmd.js | 3 +++ client/modules/config/index.js | 2 ++ json/config.json | 1 + json/help.json | 2 ++ man/cloudcmd.1 | 2 ++ tmpl/config.hbs | 4 ++-- 7 files changed, 15 insertions(+), 2 deletions(-) diff --git a/HELP.md b/HELP.md index 2c6234cf..35306f7a 100644 --- a/HELP.md +++ b/HELP.md @@ -88,6 +88,7 @@ Cloud Commander supports the following command-line parameters: | `--contact` | enable contact | `--config-dialog` | enable config dialog | `--config-auth` | enable auth change in config dialog +| `--config-port` | enable port change in config dialog | `--console` | enable console | `--sync-console-path` | sync console path | `--terminal` | enable terminal @@ -118,6 +119,7 @@ Cloud Commander supports the following command-line parameters: | `--no-confirm-move` | do not confirm move | `--no-config-dialog` | disable config dialog | `--no-config-auth` | disable auth change in config dialog +| `--no-config-port` | disable port change in config dialog | `--no-console` | disable console | `--no-sync-console-path` | do not sync console path | `--no-contact` | disable contact @@ -440,6 +442,7 @@ Some config options can be overridden with environment variables, such as: - `CLOUDCMD_CONTACT` - enable contact - `CLOUDCMD_CONFIG_DIALOG` - enable config dialog - `CLOUDCMD_CONFIG_AUTH` - enable auth change in config dialog +- `CLOUDCMD_CONFIG_PORT` - enable port change in config dialog - `CLOUDCMD_CONSOLE` - enable console - `CLOUDCMD_SYNC_CONSOLE_PATH` - sync console path - `CLOUDCMD_TERMINAL` - enable terminal diff --git a/bin/cloudcmd.js b/bin/cloudcmd.js index abb54430..d67b5de9 100755 --- a/bin/cloudcmd.js +++ b/bin/cloudcmd.js @@ -78,6 +78,7 @@ const yargsOptions = { 'open', 'config-dialog', 'config-auth', + 'config-port', 'console', 'sync-console-path', 'contact', @@ -132,6 +133,7 @@ const yargsOptions = { 'sync-console-path': choose(env.bool('sync_console_path'), config('syncConsolePath')), 'config-dialog': choose(env.bool('config_dialog'), config('configDialog')), 'config-auth': choose(env.bool('config_auth'), config('configAuth')), + 'config-port': choose(env.bool('config_port'), config('configPort')), 'terminal-path': env.parse('terminal_path') || config('terminalPath'), 'terminal-command': env.parse('terminal_command') || config('terminalCommand'), 'terminal-auto-restart': choose(env.bool('terminal_auto_restart'), config('terminalAutoRestart')), @@ -214,6 +216,7 @@ async function main() { config('oneFilePanel', args.oneFilePanel); config('configDialog', args.configDialog); config('configAuth', args.configAuth); + config('configPort', args.configPort); config('keysPanel', args.keysPanel); config('export', args.export); config('exportToken', args.exportToken); diff --git a/client/modules/config/index.js b/client/modules/config/index.js index b5db80aa..dfa4c105 100644 --- a/client/modules/config/index.js +++ b/client/modules/config/index.js @@ -133,6 +133,7 @@ async function fillTemplate() { columns, theme, configAuth, + configPort, ...obj } = input.convert(config); @@ -142,6 +143,7 @@ async function fillTemplate() { obj[`${columns}-selected`] = 'selected'; obj[`${theme}-selected`] = 'selected'; obj.configAuth = configAuth ? '' : 'hidden'; + obj.configPort = configPort ? '' : 'hidden'; const innerHTML = rendy(Template, obj); diff --git a/json/config.json b/json/config.json index 51bd05ee..3bbb65f4 100644 --- a/json/config.json +++ b/json/config.json @@ -24,6 +24,7 @@ "confirmMove": true, "configDialog": true, "configAuth": true, + "configPort": true, "oneFilePanel": false, "console": true, "syncConsolePath": false, diff --git a/json/help.json b/json/help.json index f8ff0bf8..44f79248 100644 --- a/json/help.json +++ b/json/help.json @@ -25,6 +25,7 @@ "--keys-panel ": "show keys panel", "--config-dialog ": "enable config dialog", "--config-auth ": "enable auth change in config dialog", + "--config-port ": "enable port change in config dialog", "--console ": "enable console", "--sync-console-path ": "sync console path", "--contact ": "enable contact", @@ -56,6 +57,7 @@ "--no-confirm-move ": "do not confirm move", "--no-config-dialog ": "disable config dialog", "--no-config-auth ": "disable auth change in config dialog", + "--no-config-port ": "disable port change in config dialog", "--no-console ": "disable console", "--no-sync-console-path ": "do not sync console path", "--no-contact ": "disable contact", diff --git a/man/cloudcmd.1 b/man/cloudcmd.1 index fe2122b7..2bff72db 100644 --- a/man/cloudcmd.1 +++ b/man/cloudcmd.1 @@ -49,6 +49,7 @@ programs in browser from any computer, mobile or tablet device. --contact enable contact --config-dialog enable config dialog --config-auth enable auth change in config dialog + --config-port enable port change in config dialog --console enable console --sync-console-path sync console path --terminal enable terminal @@ -81,6 +82,7 @@ programs in browser from any computer, mobile or tablet device. --no-contact disable contact --no-config-dialog disable config dialog --no-config-auth disable auth change in config dialog + --no-config-port disable port change in config dialog --no-console disable console --no-sync-console-path do not sync console path --no-terminal disable terminal diff --git a/tmpl/config.hbs b/tmpl/config.hbs index 26dc3251..4a82286a 100644 --- a/tmpl/config.hbs +++ b/tmpl/config.hbs @@ -131,7 +131,7 @@ placeholder="root" class="form-control">
  • -
  • +
  • - + \ No newline at end of file From ec66ba78a7bd343495200a08c9f38e6a0f17beaf Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 23:04:38 +0200 Subject: [PATCH 168/390] chore: cloudcmd: v19.9.0 --- 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 881a2ab5..abd78478 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.9.0 + +feature: +- a1216cdd cloudcmd: add ability to hide port configuration + 2026.03.23, v19.8.15 feature: diff --git a/HELP.md b/HELP.md index 35306f7a..d2e4a633 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.15 +# Cloud Commander v19.9.0 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.23*, **[v19.9.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.0)** - *2026.03.23*, **[v19.8.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.15)** - *2026.03.23*, **[v19.8.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.14)** - *2026.03.23*, **[v19.8.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.13)** diff --git a/README.md b/README.md index b3f0136c..40144ef6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.8.15 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.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 29c79d07..2f1c1fd4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.8.15", + "version": "19.9.0", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 6e5318faa7739a0ca012b495365bbb8cb805f16f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 23:47:24 +0200 Subject: [PATCH 169/390] fix: client: modules: config: input: quote --- client/modules/config/input.js | 24 ++++++++++++++++-------- client/modules/config/input.spec.js | 16 ++++++++++++++++ 2 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 client/modules/config/input.spec.js diff --git a/client/modules/config/input.js b/client/modules/config/input.js index 430f7e51..34a4be69 100644 --- a/client/modules/config/input.js +++ b/client/modules/config/input.js @@ -1,7 +1,9 @@ -import currify from 'currify'; +import {encode} from '#common/entity'; -const isType = currify((type, object, name) => type === typeof object[name]); -const isBool = isType('boolean'); +const isBool = (a) => typeof a === 'boolean'; +const isString = (a) => typeof a === 'string'; + +const {keys} = Object; export function getElementByName(selector, element) { const str = `[data-name="js-${selector}"]`; @@ -19,13 +21,19 @@ export const getName = (element) => { export const convert = (config) => { const result = config; - const array = Object.keys(config); - const filtered = array.filter(isBool(config)); - - for (const name of filtered) { + for (const name of keys(config)) { const item = config[name]; - result[name] = setState(item); + + if (isBool(item)) { + result[name] = setState(item); + continue; + } + + if (isString(item)) { + result[name] = encode(item); + continue; + } } return result; diff --git a/client/modules/config/input.spec.js b/client/modules/config/input.spec.js new file mode 100644 index 00000000..47fe88c5 --- /dev/null +++ b/client/modules/config/input.spec.js @@ -0,0 +1,16 @@ +import {test} from 'supertape'; +import {convert} from './input.js'; + +test('cloudcmd: client: config: input: convert', (t) => { + const result = convert({ + name: 'hello ', + }); + + const expected = { + name: 'hello <world>', + }; + + t.deepEqual(result, expected); + t.end(); +}); + From b949a149ec672d6379be96ea012e2278c5d5c5aa Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 23:49:01 +0200 Subject: [PATCH 170/390] chore: cloudcmd: v19.9.1 --- 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 abd78478..dba82738 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.23, v19.9.1 + +fix: +- 6e5318fa client: modules: config: input: quote + 2026.03.23, v19.9.0 feature: diff --git a/HELP.md b/HELP.md index d2e4a633..ad7dffba 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.0 +# Cloud Commander v19.9.1 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.23*, **[v19.9.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.1)** - *2026.03.23*, **[v19.9.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.0)** - *2026.03.23*, **[v19.8.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.15)** - *2026.03.23*, **[v19.8.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.14)** diff --git a/README.md b/README.md index 40144ef6..c5177afb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.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 2f1c1fd4..98c2f357 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.0", + "version": "19.9.1", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 05ad2fd6357ca96c02dcc72f1c80c77d58e8a9ab Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 23 Mar 2026 21:50:02 +0000 Subject: [PATCH 171/390] =?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/modules/config/input.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/client/modules/config/input.spec.js b/client/modules/config/input.spec.js index 47fe88c5..537c1632 100644 --- a/client/modules/config/input.spec.js +++ b/client/modules/config/input.spec.js @@ -13,4 +13,3 @@ test('cloudcmd: client: config: input: convert', (t) => { t.deepEqual(result, expected); t.end(); }); - From c448eaa48bef805562a4120a684139a88a82ed01 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 23:51:25 +0200 Subject: [PATCH 172/390] feature: docker: io: buni --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index fe2a8b1f..0f560d1a 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -29,6 +29,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ chmod 0440 /etc/sudoers.d/apt-install && \ echo "> configure bash" && \ echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ + echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ echo "PS1='\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/bash.bashrc && \ echo "set editing-mode vi" >> /etc/inputrc && \ echo "TAB: menu-complete" >> /etc/inputrc From 09a02074e1173adf328bd9fe41c4457f70d7820d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 23:54:36 +0200 Subject: [PATCH 173/390] feature: docker: io: git config: add --- docker/Dockerfile.io | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 0f560d1a..6b8cee57 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -24,6 +24,8 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ bun r gritty --omit dev && \ bun i gritty --omit dev && \ bun pm cache rm && \ + echo "setup git" && \ + git config --global core.whitespace -trailing-space && \ echo "> allow sudo apt-get install for everybody" && \ echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get *" > /etc/sudoers.d/apt-install && \ chmod 0440 /etc/sudoers.d/apt-install && \ From c1c67c18af0c29cdd048adc8110ce4652f412fc5 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 23 Mar 2026 23:55:21 +0200 Subject: [PATCH 174/390] chore: cloudcmd: v19.9.2 --- 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 dba82738..65c16ac5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026.03.23, v19.9.2 + +feature: +- 09a02074 docker: io: git config: add +- c448eaa4 docker: io: buni + 2026.03.23, v19.9.1 fix: diff --git a/HELP.md b/HELP.md index ad7dffba..393cc733 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.1 +# Cloud Commander v19.9.2 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.23*, **[v19.9.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.2)** - *2026.03.23*, **[v19.9.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.1)** - *2026.03.23*, **[v19.9.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.0)** - *2026.03.23*, **[v19.8.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.8.15)** diff --git a/README.md b/README.md index c5177afb..79f29e57 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.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 98c2f357..3e4ecd32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.1", + "version": "19.9.2", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 8763788bada1ba2d1992e1ed300ff1239e818253 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Mar 2026 16:33:31 +0200 Subject: [PATCH 175/390] feature: docker: io: healthcheck --- docker/Dockerfile.alpine | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index 75549fae..3de36d2d 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -28,5 +28,12 @@ ENV cloudcmd_vim=true EXPOSE 8000 +HEALTHCHECK \ + --interval=2s \ + --timeout 2s \ + --retries=20 \ + --start-period=30s \ + CMD curl -f localhost:8000 + ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] From 1ea4aa67caf08e37004ed4a44cda55099184eb87 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Mar 2026 16:33:55 +0200 Subject: [PATCH 176/390] chore: cloudcmd: v19.9.3 --- 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 65c16ac5..5ed3db25 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.24, v19.9.3 + +feature: +- 8763788b docker: io: healthcheck + 2026.03.23, v19.9.2 feature: diff --git a/HELP.md b/HELP.md index 393cc733..9bea56e5 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.2 +# Cloud Commander v19.9.3 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.24*, **[v19.9.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.3)** - *2026.03.23*, **[v19.9.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.2)** - *2026.03.23*, **[v19.9.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.1)** - *2026.03.23*, **[v19.9.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.0)** diff --git a/README.md b/README.md index 79f29e57..71129443 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.2 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.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 3e4ecd32..8974fbe7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.2", + "version": "19.9.3", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 82f8d846a943730449cd6cfbeb83b9161992f32a Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 24 Mar 2026 16:41:10 +0200 Subject: [PATCH 177/390] chore: docker: get rid of healcheck --- docker/Dockerfile.alpine | 7 ------- 1 file changed, 7 deletions(-) diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index 3de36d2d..75549fae 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -28,12 +28,5 @@ ENV cloudcmd_vim=true EXPOSE 8000 -HEALTHCHECK \ - --interval=2s \ - --timeout 2s \ - --retries=20 \ - --start-period=30s \ - CMD curl -f localhost:8000 - ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] From 69498ed6ab7f08cf4e82ae5d2d548dd27201f412 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Mar 2026 13:13:44 +0200 Subject: [PATCH 178/390] feature: docker: io: pull.rebase by default --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 6b8cee57..7a2ad3e6 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -26,6 +26,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ bun pm cache rm && \ echo "setup git" && \ git config --global core.whitespace -trailing-space && \ + git config --global pull.rebase true && \ echo "> allow sudo apt-get install for everybody" && \ echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get *" > /etc/sudoers.d/apt-install && \ chmod 0440 /etc/sudoers.d/apt-install && \ From 0bb706995a716cf8630e86ae262c89417334262d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Mar 2026 13:15:02 +0200 Subject: [PATCH 179/390] chore: cloudcmd: v19.9.4 --- 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 5ed3db25..643c20dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.26, v19.9.4 + +feature: +- 69498ed6 docker: io: pull.rebase by default + 2026.03.24, v19.9.3 feature: diff --git a/HELP.md b/HELP.md index 9bea56e5..ca2f69de 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.3 +# Cloud Commander v19.9.4 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.26*, **[v19.9.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.4)** - *2026.03.24*, **[v19.9.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.3)** - *2026.03.23*, **[v19.9.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.2)** - *2026.03.23*, **[v19.9.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.1)** diff --git a/README.md b/README.md index 71129443..c138e86c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.3 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.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 8974fbe7..6565e2e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.3", + "version": "19.9.4", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From e761cacbd0df356f27e84d38b180509e22725fc3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Mar 2026 13:16:40 +0200 Subject: [PATCH 180/390] fix: columns: name-size-date-time: 20% -> 19% --- css/columns/name-size-date-time.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/columns/name-size-date-time.css b/css/columns/name-size-date-time.css index 1d095490..9d6e41ac 100644 --- a/css/columns/name-size-date-time.css +++ b/css/columns/name-size-date-time.css @@ -16,7 +16,7 @@ .date { float: right; - width: 20%; + width: 19%; } .time { From 56439d5ec2af74b5969112c72a9a565e481615e0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Mar 2026 13:17:11 +0200 Subject: [PATCH 181/390] chore: cloudcmd: v19.9.5 --- 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 643c20dd..96d0f440 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.26, v19.9.5 + +fix: +- e761cacb columns: name-size-date-time: 20% -> 19% + 2026.03.26, v19.9.4 feature: diff --git a/HELP.md b/HELP.md index ca2f69de..8eb3cc5e 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.4 +# Cloud Commander v19.9.5 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.26*, **[v19.9.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.5)** - *2026.03.26*, **[v19.9.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.4)** - *2026.03.24*, **[v19.9.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.3)** - *2026.03.23*, **[v19.9.2](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.2)** diff --git a/README.md b/README.md index c138e86c..0d6ef9d1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.4 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.5 [![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 6565e2e7..b9ac9cc0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.4", + "version": "19.9.5", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 8db81f30dcd68a43e7d921377f70b3f01e873a2c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Mar 2026 17:42:50 +0200 Subject: [PATCH 182/390] feature: docker: io: add UTF-8 --- docker/Dockerfile.io | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 7a2ad3e6..9db8d276 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -7,8 +7,10 @@ WORKDIR /usr/src/cloudcmd COPY package.json /usr/src/cloudcmd/ +ENV DEBIAN_FRONTEND=noninteractive + RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo && \ + apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo locales && \ npm i wisdom nupdate version-io redrun superc8 \ supertape madrun redlint putout renamify-cli runny redfork -g && \ echo "> install bun" && \ @@ -35,7 +37,13 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ echo "PS1='\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/bash.bashrc && \ echo "set editing-mode vi" >> /etc/inputrc && \ - echo "TAB: menu-complete" >> /etc/inputrc + echo "TAB: menu-complete" >> /etc/inputrc && \ + echo "set UTF-8" && \ + echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ + echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen && \ + echo "uk_UA.UTF-8 UTF-8" >> /etc/locale.gen && \ + echo "es_ES.UTF-8 UTF-8" >> /etc/locale.gen && \ + locale-gen COPY . /usr/src/cloudcmd @@ -46,6 +54,11 @@ ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH +ENV LANG=en_US.UTF-8 +ENV LANGUAGE=en_US:en +ENV LC_ALL=en_US.UTF-8 + + EXPOSE 8000 ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] From 8be917da4a7a7161e562ad08ee67e8c0d0be1940 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 26 Mar 2026 17:43:28 +0200 Subject: [PATCH 183/390] chore: cloudcmd: v19.9.6 --- 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 96d0f440..2521097d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.26, v19.9.6 + +feature: +- 6450a2f8 docker: io: add UTF-8 + 2026.03.26, v19.9.5 fix: diff --git a/HELP.md b/HELP.md index 8eb3cc5e..3689753b 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.5 +# Cloud Commander v19.9.6 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.26*, **[v19.9.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.6)** - *2026.03.26*, **[v19.9.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.5)** - *2026.03.26*, **[v19.9.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.4)** - *2026.03.24*, **[v19.9.3](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.3)** diff --git a/README.md b/README.md index 0d6ef9d1..430f39f2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.5 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.6 [![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 b9ac9cc0..3ae8e205 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.5", + "version": "19.9.6", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 110908e2215642be89400d717e34d5dfd4001790 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 27 Mar 2026 19:45:32 +0200 Subject: [PATCH 184/390] feature: docker: io: apt-get --- docker/Dockerfile.io | 3 --- 1 file changed, 3 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 9db8d276..6f238725 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -29,9 +29,6 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "setup git" && \ git config --global core.whitespace -trailing-space && \ git config --global pull.rebase true && \ - echo "> allow sudo apt-get install for everybody" && \ - echo "ALL ALL=(ALL) NOPASSWD: /usr/bin/apt-get *" > /etc/sudoers.d/apt-install && \ - chmod 0440 /etc/sudoers.d/apt-install && \ echo "> configure bash" && \ echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ From c3f2b7c32fa2abbfc4d54fb7a287466b8e9d0d15 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 27 Mar 2026 19:46:11 +0200 Subject: [PATCH 185/390] chore: cloudcmd: v19.9.7 --- 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 2521097d..2dac69d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.27, v19.9.7 + +feature: +- 110908e2 docker: io: apt-get + 2026.03.26, v19.9.6 feature: diff --git a/HELP.md b/HELP.md index 3689753b..bcd990bd 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.6 +# Cloud Commander v19.9.7 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.27*, **[v19.9.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.7)** - *2026.03.26*, **[v19.9.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.6)** - *2026.03.26*, **[v19.9.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.5)** - *2026.03.26*, **[v19.9.4](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.4)** diff --git a/README.md b/README.md index 430f39f2..dc0349e4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.6 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.7 [![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 3ae8e205..140e8d64 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.6", + "version": "19.9.7", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 785c32e2e3e6bf8c734a955d96baadefb3b044b3 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 27 Mar 2026 19:50:01 +0200 Subject: [PATCH 186/390] chore: docker: io: echo --- docker/Dockerfile.io | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 6f238725..03a1de88 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -26,16 +26,18 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ bun r gritty --omit dev && \ bun i gritty --omit dev && \ bun pm cache rm && \ - echo "setup git" && \ + echo "> setup git" && \ git config --global core.whitespace -trailing-space && \ git config --global pull.rebase true && \ echo "> configure bash" && \ echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ echo "PS1='\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/bash.bashrc && \ + echo "> setup inputrc" && \ echo "set editing-mode vi" >> /etc/inputrc && \ echo "TAB: menu-complete" >> /etc/inputrc && \ echo "set UTF-8" && \ + echo" > configure languages" && \ echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen && \ echo "uk_UA.UTF-8 UTF-8" >> /etc/locale.gen && \ From 54b56fdc380a7fb15a288a2021f67fd27f5f7a2c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 28 Mar 2026 22:40:46 +0200 Subject: [PATCH 187/390] feature: cloudcmd: vim: ESC: use only to enable, do not use to disable --- client/key/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/key/index.js b/client/key/index.js index 6b4234a0..31f659bc 100644 --- a/client/key/index.js +++ b/client/key/index.js @@ -13,8 +13,8 @@ const Chars = fullstore(); const toggleVim = (keyCode, overrides = {}) => { const {_config, config} = overrides; - if (keyCode === KEY.ESC) - _config('vim', !config('vim')); + if (!config('vim') && keyCode === KEY.ESC) + _config('vim', true); }; const isUndefined = (a) => typeof a === 'undefined'; From 4d1cd8cdc6851c2481a17c6d210292e20d0fcac9 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 28 Mar 2026 22:42:38 +0200 Subject: [PATCH 188/390] feature: docker: io: ffmpeg --- docker/Dockerfile.io | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 03a1de88..1301cf2d 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -10,7 +10,8 @@ COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install -y netcat-openbsd mc iputils-ping vim neovim sudo locales && \ + apt-get install -y ffmpeg netcat-openbsd mc iputils-ping vim neovim sudo locales && \ + apt-get clean && \ npm i wisdom nupdate version-io redrun superc8 \ supertape madrun redlint putout renamify-cli runny redfork -g && \ echo "> install bun" && \ From 2dd62241f7540f12c17b876b3ef0baaba5f1ad43 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 28 Mar 2026 22:43:32 +0200 Subject: [PATCH 189/390] chore: cloudcmd: v19.9.8 --- 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 2dac69d6..b78e8c68 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026.03.28, v19.9.8 + +feature: +- 4d1cd8cd docker: io: ffmpeg +- 54b56fdc cloudcmd: vim: ESC: use only to enable, do not use to disable + 2026.03.27, v19.9.7 feature: diff --git a/HELP.md b/HELP.md index bcd990bd..eadaa2be 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.7 +# Cloud Commander v19.9.8 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.28*, **[v19.9.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.8)** - *2026.03.27*, **[v19.9.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.7)** - *2026.03.26*, **[v19.9.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.6)** - *2026.03.26*, **[v19.9.5](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.5)** diff --git a/README.md b/README.md index dc0349e4..1cec8d83 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.7 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.8 [![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 140e8d64..68f7254e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.7", + "version": "19.9.8", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From fa8875d53caa6658b026e1f0a0ab4ed4be604833 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sat, 28 Mar 2026 20:44:34 +0000 Subject: [PATCH 190/390] =?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 --- server/distribute/import.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/distribute/import.js b/server/distribute/import.js index 57745c51..131dabde 100644 --- a/server/distribute/import.js +++ b/server/distribute/import.js @@ -7,6 +7,8 @@ import _forEachKey from 'for-each-key'; import log from './log.js'; import * as env from '../env.js'; +const isUndefined = (a) => typeof a === 'undefined'; + const noop = () => {}; const forEachKey = currify(_forEachKey); @@ -58,7 +60,7 @@ const emitAuth = wraptile((importUrl, config, socket) => { const updateConfig = currify((config, data) => { for (const [key, value] of entries(data)) { - if (typeof env.parse(key) !== 'undefined') + if (!isUndefined(env.parse(key))) continue; config(key, value); From f671f7981462356b458e1f0ca1b59780d1bf9ee7 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sat, 28 Mar 2026 23:42:07 +0100 Subject: [PATCH 191/390] fix: docker: io: PS1 environment variable in Dockerfile --- docker/Dockerfile.io | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 1301cf2d..ef3defdf 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -33,7 +33,6 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "> configure bash" && \ echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ - echo "PS1='\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/bash.bashrc && \ echo "> setup inputrc" && \ echo "set editing-mode vi" >> /etc/inputrc && \ echo "TAB: menu-complete" >> /etc/inputrc && \ @@ -58,6 +57,7 @@ ENV LANG=en_US.UTF-8 ENV LANGUAGE=en_US:en ENV LC_ALL=en_US.UTF-8 +ENV PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ " EXPOSE 8000 From cc7f9dc75b53224ac7cf21fae046a3b2c7e35bd5 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 00:55:53 +0200 Subject: [PATCH 192/390] feature: docker: io: use ubuntu --- docker/Dockerfile.io | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index ef3defdf..9ad0b436 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -1,4 +1,4 @@ -FROM node +FROM node:24.14-ubuntu24.04 LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" From ba6f66e73ed95826ccb4e0d9fdf2bf2774c2e907 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 00:56:35 +0200 Subject: [PATCH 193/390] chore: cloudcmd: v19.9.9 --- 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 b78e8c68..29503bcf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2026.03.29, v19.9.9 + +fix: +- f671f798 docker: io: PS1 environment variable in Dockerfile + +feature: +- cc7f9dc7 docker: io: use ubuntu + 2026.03.28, v19.9.8 feature: diff --git a/HELP.md b/HELP.md index eadaa2be..f960b77c 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.8 +# Cloud Commander v19.9.9 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.29*, **[v19.9.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.9)** - *2026.03.28*, **[v19.9.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.8)** - *2026.03.27*, **[v19.9.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.7)** - *2026.03.26*, **[v19.9.6](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.6)** diff --git a/README.md b/README.md index 1cec8d83..52897d18 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.8 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.9 [![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 68f7254e..46a0ecff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.8", + "version": "19.9.9", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From f0deb32362f73d8ce1d450c3dd8a568ebaae2fc1 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 00:59:53 +0200 Subject: [PATCH 194/390] feature: docker: io: add ja_JP.UTF-8 --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 9ad0b436..af03a3a0 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -42,6 +42,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen && \ echo "uk_UA.UTF-8 UTF-8" >> /etc/locale.gen && \ echo "es_ES.UTF-8 UTF-8" >> /etc/locale.gen && \ + echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen && \ locale-gen COPY . /usr/src/cloudcmd From fe3e201143c4b27d4de52e853d7507ebe8f0af00 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 12:13:01 +0300 Subject: [PATCH 195/390] docs: help: readme from cloudcmd.io --- HELP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HELP.md b/HELP.md index f960b77c..085359a4 100644 --- a/HELP.md +++ b/HELP.md @@ -15,7 +15,7 @@ **Cloud Commander** is a file manager for the web. It includes a command-line console and a text editor. Cloud Commander helps you manage your server and work with files, directories and programs in a web browser from any computer, mobile or tablet. -![Cloud Commander](/img/logo/cloudcmd.png "Cloud Commander") +![Cloud Commander](https://cloudcmd.io/img/logo/cloudcmd.png "Cloud Commander") ## Benefits From 1a44ab0eac1e990bb3e5bcb530dbc57b1565cddc Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 12:21:03 +0300 Subject: [PATCH 196/390] fix: docker: io: use node This reverts commit cc7f9dc75b53224ac7cf21fae046a3b2c7e35bd5. --- docker/Dockerfile.io | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index af03a3a0..8f110bae 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -1,4 +1,4 @@ -FROM node:24.14-ubuntu24.04 +FROM node LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" From 2aaf0a538534e32640bbc17f10ebd506b0942f5c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 01:00:26 +0200 Subject: [PATCH 197/390] chore: cloudcmd: v19.9.10 --- 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 29503bcf..bbe81042 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.29, v19.9.10 + +feature: +- f0deb323 docker: io: add ja_JP.UTF-8 + 2026.03.29, v19.9.9 fix: diff --git a/HELP.md b/HELP.md index 085359a4..2638215d 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.9 +# Cloud Commander v19.9.10 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.29*, **[v19.9.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.10)** - *2026.03.29*, **[v19.9.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.9)** - *2026.03.28*, **[v19.9.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.8)** - *2026.03.27*, **[v19.9.7](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.7)** diff --git a/README.md b/README.md index 52897d18..0bdfac94 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.9 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.10 [![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 46a0ecff..149bcc8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.9", + "version": "19.9.10", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 1f95f188985e2d1f7582cfdfbf81c045dfc43506 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 12:29:39 +0300 Subject: [PATCH 198/390] feature: cloudcmd: get rid of simport --- bin/cloudcmd.js | 39 ++++++++++++++++++--------------------- bin/release.js | 7 +++---- package.json | 1 - server/config.js | 18 ++++++++---------- 4 files changed, 29 insertions(+), 36 deletions(-) diff --git a/bin/cloudcmd.js b/bin/cloudcmd.js index d67b5de9..697d6541 100755 --- a/bin/cloudcmd.js +++ b/bin/cloudcmd.js @@ -4,21 +4,20 @@ import process from 'node:process'; import {createRequire} from 'node:module'; import {promisify} from 'node:util'; import {tryToCatch} from 'try-to-catch'; -import {createSimport} from 'simport'; import parse from 'yargs-parser'; import exit from '../server/exit.js'; import {createConfig, configPath} from '../server/config.js'; import * as env from '../server/env.js'; import prefixer from '../server/prefixer.js'; import * as validate from '../server/validate.js'; +import Info from '../package.json' with { + type: 'json', +}; 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 (isUndefined(a)) @@ -170,7 +169,7 @@ else main(); async function main() { - const {validateArgs} = await simport('@putout/cli-validate-args'); + const {validateArgs} = await import('@putout/cli-validate-args'); const error = await validateArgs(args, [ ...yargsOptions.boolean, @@ -251,7 +250,7 @@ async function main() { if (args.showConfig) await showConfig(); - const {distributeImport} = await simport('../server/distribute/import.js'); + const {distributeImport} = await import('../server/distribute/import.js'); const importConfig = promisify(distributeImport); await start(options, config); @@ -273,7 +272,7 @@ function validateRoot(root, config) { } async function getPassword(password) { - const criton = await simport('criton'); + const {default: criton} = await import('criton'); return criton(password, config('algo')); } @@ -282,12 +281,10 @@ function version() { } async function start(options, config) { - const SERVER = `../server/server.js`; - if (!args.server) return; - const server = await simport(SERVER); + const {default: server} = await import('../server/server.js'); server(options, config); } @@ -311,13 +308,13 @@ async function readConfig(name) { if (!name) return; - const tryToCatch = await simport('try-to-catch'); - const forEachKey = await simport('for-each-key'); + const {default: forEachKey} = await import('for-each-key'); - const [error, data] = await tryToCatch(simport, name); - - if (error) - return exit(error.message); + const data = await import(name, { + with: { + type: 'json', + }, + }); forEachKey(config, data); } @@ -329,8 +326,8 @@ async function help() { }, }); - const forEachKey = await simport('for-each-key'); - const currify = await simport('currify'); + const {default: forEachKey} = await import('for-each-key'); + const {currify} = await import('currify'); const usage = 'Usage: cloudcmd [options]'; const url = Info.homepage; @@ -348,9 +345,9 @@ function repl() { } async function checkUpdate() { - const load = await simport('package-json'); - + const {default: load} = await import('package-json'); const {version} = await load(Info.name, 'latest'); + await showUpdateInfo(version); } @@ -358,7 +355,7 @@ async function showUpdateInfo(version) { if (version === Info.version) return; - const chalk = await simport('chalk'); + const {default: chalk} = await import('chalk'); const latestVersion = chalk.green.bold(`v${version}`); const latest = `update available: ${latestVersion}`; diff --git a/bin/release.js b/bin/release.js index fbc08e35..86e1d714 100755 --- a/bin/release.js +++ b/bin/release.js @@ -3,17 +3,16 @@ 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 Info from '../package.json' with { + type: 'json', +}; -const simport = createSimport(import.meta.url); const place = promisify(_place); -const Info = await simport('../package.json'); - await main(); async function main() { diff --git a/package.json b/package.json index 149bcc8e..1beed3b0 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,6 @@ "restafary": "^13.0.1", "restbox": "^4.0.0", "shortdate": "^2.0.0", - "simport": "^1.0.1", "socket.io": "^4.0.0", "socket.io-client": "^4.0.1", "squad": "^3.0.0", diff --git a/server/config.js b/server/config.js index 0977b8a4..db6f680d 100644 --- a/server/config.js +++ b/server/config.js @@ -1,8 +1,7 @@ -import path, {dirname} from 'node:path'; +import path from 'node:path'; import fs from 'node:fs'; import Emitter from 'node:events'; import {homedir} from 'node:os'; -import {fileURLToPath} from 'node:url'; import currify from 'currify'; import wraptile from 'wraptile'; import {tryToCatch} from 'try-to-catch'; @@ -15,15 +14,16 @@ import {tryCatch} from 'try-catch'; import criton from 'criton'; import * as CloudFunc from '#common/cloudfunc'; import exit from './exit.js'; +import rootConfig from '../json/config.json' with { + type: 'json', +}; -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); -const DIR_SERVER = `${__dirname}/`; const isUndefined = (a) => typeof a === 'undefined'; -const DIR = `${DIR_SERVER}../`; + const HOME = homedir(); const resolve = Promise.resolve.bind(Promise); + const formatMsg = currify((a, b) => CloudFunc.formatMsg(a, b)); const {apiURL} = CloudFunc; @@ -32,10 +32,10 @@ const key = (a) => Object .keys(a) .pop(); -const ConfigPath = path.join(DIR, 'json/config.json'); - const connection = currify(_connection); + const connectionWrapped = wraptile(_connection); + const middle = currify(_middle); const readjsonSync = (name) => { @@ -44,8 +44,6 @@ const readjsonSync = (name) => { }); }; -const rootConfig = readjsonSync(ConfigPath); - function read(filename) { if (!filename) return rootConfig; From 47acb8fdf7ffb92ec176ecbdd41c6b7ff6aa4992 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 12:30:45 +0300 Subject: [PATCH 199/390] chore: cloudcmd: v19.9.11 --- 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 bbe81042..e5fbd047 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.29, v19.9.11 + +feature: +- 1f95f188 cloudcmd: get rid of simport + 2026.03.29, v19.9.10 feature: diff --git a/HELP.md b/HELP.md index 2638215d..c2b384ea 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.10 +# Cloud Commander v19.9.11 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.29*, **[v19.9.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.11)** - *2026.03.29*, **[v19.9.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.10)** - *2026.03.29*, **[v19.9.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.9)** - *2026.03.28*, **[v19.9.8](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.8)** diff --git a/README.md b/README.md index 0bdfac94..722bb5bd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.10 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.11 [![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 1beed3b0..a50715f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.10", + "version": "19.9.11", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From a423739cb8777f4b4255307dee7ca68549792f89 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 12:37:36 +0300 Subject: [PATCH 200/390] feature: cloudcmd: bin: get rid of require --- bin/cloudcmd.js | 10 +++------- docker/Dockerfile.io | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/bin/cloudcmd.js b/bin/cloudcmd.js index 697d6541..265d05ab 100755 --- a/bin/cloudcmd.js +++ b/bin/cloudcmd.js @@ -1,7 +1,6 @@ #!/usr/bin/env node import process from 'node:process'; -import {createRequire} from 'node:module'; import {promisify} from 'node:util'; import {tryToCatch} from 'try-to-catch'; import parse from 'yargs-parser'; @@ -15,7 +14,6 @@ import Info from '../package.json' with { }; process.on('unhandledRejection', exit); -const require = createRequire(import.meta.url); const isUndefined = (a) => typeof a === 'undefined'; @@ -30,8 +28,6 @@ const config = createConfig({ configPath, }); -const DIR_SERVER = '../server/'; - const maybeRoot = (a) => { if (a === '.') return process.cwd(); @@ -180,7 +176,7 @@ async function main() { return exit(error); if (args.repl) - repl(); + await repl(); validate.columns(args.columns); validate.theme(args.theme); @@ -339,9 +335,9 @@ async function help() { console.log('\nGeneral help using Cloud Commander: <%s>', url); } -function repl() { +async function repl() { console.log('REPL mode enabled (telnet localhost 1337)'); - require(`${DIR_SERVER}repl`); + await import('../server/repl.js'); } async function checkUpdate() { diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 8f110bae..fdf45c30 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -37,7 +37,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "set editing-mode vi" >> /etc/inputrc && \ echo "TAB: menu-complete" >> /etc/inputrc && \ echo "set UTF-8" && \ - echo" > configure languages" && \ + echo " > configure languages" && \ echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen && \ echo "uk_UA.UTF-8 UTF-8" >> /etc/locale.gen && \ From 799d86bda403f4423c5a56cae82a94e382d0dff7 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 12:38:46 +0300 Subject: [PATCH 201/390] chore: cloudcmd: v19.9.12 --- 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 e5fbd047..516b9f3f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.29, v19.9.12 + +feature: +- 811a47fd cloudcmd: bin: get rid of require + 2026.03.29, v19.9.11 feature: diff --git a/HELP.md b/HELP.md index c2b384ea..490c3426 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.11 +# Cloud Commander v19.9.12 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.29*, **[v19.9.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.12)** - *2026.03.29*, **[v19.9.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.11)** - *2026.03.29*, **[v19.9.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.10)** - *2026.03.29*, **[v19.9.9](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.9)** diff --git a/README.md b/README.md index 722bb5bd..47a54b14 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.11 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.12 [![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 a50715f4..8bcc3e08 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.11", + "version": "19.9.12", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From e41828410c36d288b7826efe7332d3d1c63762d2 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 13:39:54 +0300 Subject: [PATCH 202/390] fix: docker: io: xterm-256color --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index fdf45c30..71383d97 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -59,6 +59,7 @@ ENV LANGUAGE=en_US:en ENV LC_ALL=en_US.UTF-8 ENV PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ " +ENV TERM=xterm-256color EXPOSE 8000 From 439b3710ccde36c693a2d03d469abf8b3cf80a6f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 13:40:39 +0300 Subject: [PATCH 203/390] fix: bin: currify --- bin/cloudcmd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/cloudcmd.js b/bin/cloudcmd.js index 265d05ab..bdf88379 100755 --- a/bin/cloudcmd.js +++ b/bin/cloudcmd.js @@ -323,7 +323,7 @@ async function help() { }); const {default: forEachKey} = await import('for-each-key'); - const {currify} = await import('currify'); + const {default: currify} = await import('currify'); const usage = 'Usage: cloudcmd [options]'; const url = Info.homepage; From aa5a772f0092e24eb1c7239678c6c375f2be402b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 13:41:12 +0300 Subject: [PATCH 204/390] chore: cloudcmd: v19.9.13 --- 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 516b9f3f..c231aafc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026.03.29, v19.9.13 + +fix: +- 439b3710 bin: currify +- e4182841 docker: io: xterm-256color + 2026.03.29, v19.9.12 feature: diff --git a/HELP.md b/HELP.md index 490c3426..d0f40d17 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.12 +# Cloud Commander v19.9.13 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.29*, **[v19.9.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.13)** - *2026.03.29*, **[v19.9.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.12)** - *2026.03.29*, **[v19.9.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.11)** - *2026.03.29*, **[v19.9.10](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.10)** diff --git a/README.md b/README.md index 47a54b14..621be563 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.12 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.13 [![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 8bcc3e08..f5ccf12d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.12", + "version": "19.9.13", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 340a639f1bfd2f35ad4e5bdff254695149f93fec Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 13:44:18 +0300 Subject: [PATCH 205/390] test: bin: cloudcmd: -h --- bin/cloudcmd.spec.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 bin/cloudcmd.spec.js diff --git a/bin/cloudcmd.spec.js b/bin/cloudcmd.spec.js new file mode 100644 index 00000000..fa4c44bd --- /dev/null +++ b/bin/cloudcmd.spec.js @@ -0,0 +1,17 @@ +import {spawnSync} from 'node:child_process'; +import {test} from 'supertape'; + +const cliPath = new URL('cloudcmd.js', import.meta.url).pathname; +import info from '../package.json' with { + type: 'json', +} + +test('cloudcmd: bin: cli: -h', (t) => { + const {version} = info; + const {stdout} = spawnSync(cliPath, ['-h'], { + encoding: 'utf8', + }); + + t.match(stdout, `Options`); + t.end(); +}); From 6c7709be9c67de0c92625cca51422795bbf45995 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 16:58:19 +0300 Subject: [PATCH 206/390] fix: docker: io: PS1 --- docker/Dockerfile.io | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 71383d97..69fc1b7b 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -33,6 +33,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "> configure bash" && \ echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ + echo 'PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "' >> /etc/bash.bashrc && \ echo "> setup inputrc" && \ echo "set editing-mode vi" >> /etc/inputrc && \ echo "TAB: menu-complete" >> /etc/inputrc && \ @@ -58,7 +59,6 @@ ENV LANG=en_US.UTF-8 ENV LANGUAGE=en_US:en ENV LC_ALL=en_US.UTF-8 -ENV PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ " ENV TERM=xterm-256color EXPOSE 8000 From 7e2d2ede9810bd6b52ae3d3dbdaacb62b8cc7e2f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 17:00:43 +0300 Subject: [PATCH 207/390] test: bin: coverage --- .madrun.js | 2 +- bin/cloudcmd.spec.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.madrun.js b/.madrun.js index b10c47ac..9bd30e3d 100644 --- a/.madrun.js +++ b/.madrun.js @@ -28,7 +28,7 @@ export default { 'lint:fresh': () => run('lint', '--fresh'), 'fix:lint': async () => `putout --rulesdir rules --fix . && redlint fix`, 'lint:stream': () => run('lint', '-f stream'), - 'test': () => [testEnv, `tape 'test/**/*.{js,mjs}' '{client,static,common,server}/**/*.spec.{js,mjs}' -f fail`], + 'test': () => [testEnv, `tape 'test/**/*.js' '{bin,client,static,common,server}/**/*.spec.js' -f fail`], 'test:client': () => `tape 'test/client/**/*.js'`, 'test:server': () => `tape 'test/**/*.js' 'server/**/*.spec.js' 'common/**/*.spec.js'`, 'wisdom': async () => await run(['lint:all', 'build', 'test'], null, { diff --git a/bin/cloudcmd.spec.js b/bin/cloudcmd.spec.js index fa4c44bd..286ddb95 100644 --- a/bin/cloudcmd.spec.js +++ b/bin/cloudcmd.spec.js @@ -15,3 +15,13 @@ test('cloudcmd: bin: cli: -h', (t) => { t.match(stdout, `Options`); t.end(); }); + +test('cloudcmd: bin: cli: -v', (t) => { + const {version} = info; + const {stdout} = spawnSync(cliPath, ['-v'], { + encoding: 'utf8', + }); + + t.match(stdout, `v${version}`); + t.end(); +}); From 52a9076f14a1b2a801ed08c1b96e2e6434e7a640 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Sun, 29 Mar 2026 14:01:56 +0000 Subject: [PATCH 208/390] =?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/cloudcmd.spec.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bin/cloudcmd.spec.js b/bin/cloudcmd.spec.js index 286ddb95..d09541b9 100644 --- a/bin/cloudcmd.spec.js +++ b/bin/cloudcmd.spec.js @@ -1,13 +1,12 @@ import {spawnSync} from 'node:child_process'; import {test} from 'supertape'; - -const cliPath = new URL('cloudcmd.js', import.meta.url).pathname; import info from '../package.json' with { type: 'json', -} +}; + +const cliPath = new URL('cloudcmd.js', import.meta.url).pathname; test('cloudcmd: bin: cli: -h', (t) => { - const {version} = info; const {stdout} = spawnSync(cliPath, ['-h'], { encoding: 'utf8', }); From 3d2944bd136fb5571e7ee70146599802a7143a24 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 19:58:03 +0300 Subject: [PATCH 209/390] chore: cloudcmd: v19.9.14 --- 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 c231aafc..9e8b8bbe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.29, v19.9.14 + +fix: +- 6c7709be docker: io: PS1 + 2026.03.29, v19.9.13 fix: diff --git a/HELP.md b/HELP.md index d0f40d17..cb2d9dc4 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.13 +# Cloud Commander v19.9.14 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.29*, **[v19.9.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.14)** - *2026.03.29*, **[v19.9.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.13)** - *2026.03.29*, **[v19.9.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.12)** - *2026.03.29*, **[v19.9.11](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.11)** diff --git a/README.md b/README.md index 621be563..a7dc6a2a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.13 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.14 [![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 f5ccf12d..182ee74f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.13", + "version": "19.9.14", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From e04c459489fdab3ca218607953c31d038d5f1e56 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 20:12:12 +0300 Subject: [PATCH 210/390] feature: docker: io: net-tools: add --- docker/Dockerfile.io | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 69fc1b7b..5e8c8b53 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -10,7 +10,7 @@ COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install -y ffmpeg netcat-openbsd mc iputils-ping vim neovim sudo locales && \ + apt-get install -y ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim sudo locales && \ apt-get clean && \ npm i wisdom nupdate version-io redrun superc8 \ supertape madrun redlint putout renamify-cli runny redfork -g && \ From d25a08d2bd539da17a7b2e2066d287ce1d4c305c Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 20:24:07 +0300 Subject: [PATCH 211/390] feature: docker: io: ubuntu --- docker/Dockerfile.io | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 5e8c8b53..9f3c22e2 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -1,4 +1,4 @@ -FROM node +FROM ubuntu LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" @@ -9,9 +9,20 @@ COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install -y ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim sudo locales && \ - apt-get clean && \ +RUN apt-get update && apt-get upgrade -y && \ + apt-get install -y curl git ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim sudo locales \ + build-essential \ + libatomic1 \ + ca-certificates && \ + apt-get autoremove && apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + echo "> install node" && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash && \ + mv ~/.nvm /usr/local/src/nvm && \ + chmod a+rwx /usr/local/src/nvm && \ + . /usr/local/src/nvm/nvm.sh && \ + nvm i node && \ + echo "> install npm globals" && \ npm i wisdom nupdate version-io redrun superc8 \ supertape madrun redlint putout renamify-cli runny redfork -g && \ echo "> install bun" && \ From 74e008198fefd8d1e6340aac10d4b575f9debd1e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 21:23:00 +0300 Subject: [PATCH 212/390] feature: docker: io: BUN_INSTALL_CACHE_DIR --- docker/Dockerfile.io | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 9f3c22e2..f806c545 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -64,7 +64,9 @@ WORKDIR / ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false + ENV PATH=node_modules/.bin:$PATH +ENV BUN_INSTALL_CACHE_DIR=/tmp/bun-cache ENV LANG=en_US.UTF-8 ENV LANGUAGE=en_US:en From a80f109d190f5504cb567f8513a533457871edf6 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 20:24:28 +0300 Subject: [PATCH 213/390] chore: cloudcmd: v19.9.15 --- 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 9e8b8bbe..dc87e0c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026.03.29, v19.9.15 + +feature: +- ee170552 docker: io: ubuntu +- e04c4594 docker: io: net-tools: add + 2026.03.29, v19.9.14 fix: diff --git a/HELP.md b/HELP.md index cb2d9dc4..69032482 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.14 +# Cloud Commander v19.9.15 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.29*, **[v19.9.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.15)** - *2026.03.29*, **[v19.9.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.14)** - *2026.03.29*, **[v19.9.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.13)** - *2026.03.29*, **[v19.9.12](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.12)** diff --git a/README.md b/README.md index a7dc6a2a..fd160b39 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.14 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.15 [![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 182ee74f..4327dfde 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.14", + "version": "19.9.15", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 19347a2b4cd38dfb0f76dbb3ccd5617641fd0d31 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 23:14:51 +0300 Subject: [PATCH 214/390] feature: docker: io: add command-not-found --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index f806c545..b2973018 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -13,6 +13,7 @@ RUN apt-get update && apt-get upgrade -y && \ apt-get install -y curl git ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim sudo locales \ build-essential \ libatomic1 \ + command-not-found \ ca-certificates && \ apt-get autoremove && apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ From efb24e229f5df0f92a3561f60b0c124ca13f8e85 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 23:21:43 +0300 Subject: [PATCH 215/390] feature: docker: io: get back debian --- docker/Dockerfile.io | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index b2973018..b1123302 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -1,4 +1,4 @@ -FROM ubuntu +FROM node LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" @@ -9,20 +9,16 @@ COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get upgrade -y && \ - apt-get install -y curl git ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim sudo locales \ - build-essential \ - libatomic1 \ - command-not-found \ - ca-certificates && \ +RUN apt-get update && apt-get upgrade && apt-get autoremove && \ + apt-get install -y ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim \ + sudo locales command-not-found && \ apt-get autoremove && apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ - echo "> install node" && \ + echo "> install nvm" && \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash && \ mv ~/.nvm /usr/local/src/nvm && \ chmod a+rwx /usr/local/src/nvm && \ . /usr/local/src/nvm/nvm.sh && \ - nvm i node && \ echo "> install npm globals" && \ npm i wisdom nupdate version-io redrun superc8 \ supertape madrun redlint putout renamify-cli runny redfork -g && \ From 8b9004b4dddad997e9884b12ee9f78c2fe072ad8 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 29 Mar 2026 23:15:21 +0300 Subject: [PATCH 216/390] chore: cloudcmd: v19.9.16 --- 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 dc87e0c5..21032d8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.29, v19.9.16 + +feature: +- 19347a2b docker: io: add command-not-found + 2026.03.29, v19.9.15 feature: diff --git a/HELP.md b/HELP.md index 69032482..f915b4f6 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.15 +# Cloud Commander v19.9.16 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.29*, **[v19.9.16](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.16)** - *2026.03.29*, **[v19.9.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.15)** - *2026.03.29*, **[v19.9.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.14)** - *2026.03.29*, **[v19.9.13](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.13)** diff --git a/README.md b/README.md index fd160b39..e2c28af8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.15 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.16 [![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 4327dfde..b7da012f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.15", + "version": "19.9.16", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From cf424d6c05fdcd85caa3b22025ed083afd577504 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 00:10:48 +0300 Subject: [PATCH 217/390] feature: docker: io: command-not-found update --- docker/Dockerfile.io | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index b1123302..bf146dab 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -12,6 +12,8 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get upgrade && apt-get autoremove && \ apt-get install -y ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim \ sudo locales command-not-found && \ + echo "> Update command-not-found database. Run 'sudo apt update' to populate it." && \ + apt-get update && \ apt-get autoremove && apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ echo "> install nvm" && \ From 2db458bc7b4ef6f01c465334eb4c6c64c7ae0401 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 00:11:13 +0300 Subject: [PATCH 218/390] chore: cloudcmd: v19.9.17 --- 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 21032d8e..55ab8e69 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.30, v19.9.17 + +feature: +- cf424d6c docker: io: command-not-found update + 2026.03.29, v19.9.16 feature: diff --git a/HELP.md b/HELP.md index f915b4f6..4c12df19 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.16 +# Cloud Commander v19.9.17 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.30*, **[v19.9.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.17)** - *2026.03.29*, **[v19.9.16](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.16)** - *2026.03.29*, **[v19.9.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.15)** - *2026.03.29*, **[v19.9.14](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.14)** diff --git a/README.md b/README.md index e2c28af8..b429a98e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.16 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.17 [![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 b7da012f..4ea0f3e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.16", + "version": "19.9.17", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 3fc8932f4cfd978b340d1c7cac4493cbc8a5003e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 19:10:51 +0300 Subject: [PATCH 219/390] feature: docker: io: less, el_GR --- docker/Dockerfile.io | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index bf146dab..9d2f1c69 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -10,7 +10,7 @@ COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install -y ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim \ + apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim \ sudo locales command-not-found && \ echo "> Update command-not-found database. Run 'sudo apt update' to populate it." && \ apt-get update && \ @@ -54,6 +54,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "uk_UA.UTF-8 UTF-8" >> /etc/locale.gen && \ echo "es_ES.UTF-8 UTF-8" >> /etc/locale.gen && \ echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen && \ + echo "el_GR.UTF-8 UTF-8" >> /etc/locale.gen && \ locale-gen COPY . /usr/src/cloudcmd From 738059f27fdd70568b9a0efda2480b4160ffed81 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 19:19:04 +0300 Subject: [PATCH 220/390] feature: docker: io: fzf --- docker/Dockerfile.io | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 9d2f1c69..1a5f15c4 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -10,7 +10,7 @@ COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim \ + apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim bat fzf && \ sudo locales command-not-found && \ echo "> Update command-not-found database. Run 'sudo apt update' to populate it." && \ apt-get update && \ @@ -43,6 +43,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "> configure bash" && \ echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ + echo "alias bat='batcat'" >> /etc/bash.bashrc && \ echo 'PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "' >> /etc/bash.bashrc && \ echo "> setup inputrc" && \ echo "set editing-mode vi" >> /etc/inputrc && \ From 6aa496c995c139cc9111c04c5ca990157db0b9db Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 30 Mar 2026 16:20:10 +0000 Subject: [PATCH 221/390] =?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 --- .npmignore | 2 -- docker/Dockerfile.io | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.npmignore b/.npmignore index 62747573..a895f142 100644 --- a/.npmignore +++ b/.npmignore @@ -4,7 +4,6 @@ *.ai *.cdr *.eps -*.config.* *.log *.loc @@ -16,7 +15,6 @@ yarn.lock now.json app.json bower.json -manifest.yml deno.json bin/release.* img/logo/cloudcmd-hq.png diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 1a5f15c4..b529b4be 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -10,8 +10,8 @@ COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get upgrade && apt-get autoremove && \ - apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim bat fzf && \ - sudo locales command-not-found && \ + apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim bat fzf \ + locales sudo command-not-found && \ echo "> Update command-not-found database. Run 'sudo apt update' to populate it." && \ apt-get update && \ apt-get autoremove && apt-get clean && \ From 9a053ec3741f48499d8de8d31df2d863e8e62ca2 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 20:14:29 +0300 Subject: [PATCH 222/390] chore: cloudcmd: v19.9.18 --- 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 55ab8e69..43c6d16c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026.03.30, v19.9.18 + +feature: +- 738059f2 docker: io: fzf +- 3fc8932f docker: io: less, el_GR + 2026.03.30, v19.9.17 feature: diff --git a/HELP.md b/HELP.md index 4c12df19..6a8c7360 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.17 +# Cloud Commander v19.9.18 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.30*, **[v19.9.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.18)** - *2026.03.30*, **[v19.9.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.17)** - *2026.03.29*, **[v19.9.16](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.16)** - *2026.03.29*, **[v19.9.15](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.15)** diff --git a/README.md b/README.md index b429a98e..30d1d15c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.17 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.18 [![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 4ea0f3e6..72b09d23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.17", + "version": "19.9.18", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 6a52b11e462c6d6423c103253f489901278dbc7e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 20:53:59 +0300 Subject: [PATCH 223/390] feature: docker: io: go, rust --- docker/Dockerfile.io | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index b529b4be..32ef638d 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -8,6 +8,7 @@ WORKDIR /usr/src/cloudcmd COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive +ARG GO_VERSION=1.21.2 RUN apt-get update && apt-get upgrade && apt-get autoremove && \ apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim bat fzf \ @@ -34,6 +35,17 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ mv ~/.deno /usr/local/src/deno && \ chmod a+rwx /usr/local/src/deno && \ ln -s /usr/local/src/deno/bin/deno /usr/local/bin/deno && \ + echo "> install golang" && \ + curl -fsSL https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz -o go.tar.gz && \ + tar -C /usr/local -xzf go.tar.gz && \ + rm go.tar.gz && \ + ln -s /usr/local/go/bin/go /usr/local/bin/go && \ + ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt && \ + echo "> install rust" && \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ + mv ~/.cargo /usr/local/src/cargo && \ + chmod a+rwx /usr/local/src/cargo && \ + echo "> install gritty" && \ bun r gritty --omit dev && \ bun i gritty --omit dev && \ bun pm cache rm && \ @@ -67,6 +79,8 @@ ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH +ENV PATH=/usr/local/src/cargo/bin:$PATH + ENV BUN_INSTALL_CACHE_DIR=/tmp/bun-cache ENV LANG=en_US.UTF-8 From 09a8b2bd1c83d2339c19cec95ae03e4e9bdbfc0d Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 20:54:27 +0300 Subject: [PATCH 224/390] chore: cloudcmd: v19.9.19 --- 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 43c6d16c..4308050c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.30, v19.9.19 + +feature: +- 6a52b11e docker: io: go, rust + 2026.03.30, v19.9.18 feature: diff --git a/HELP.md b/HELP.md index 6a8c7360..46a83373 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.18 +# Cloud Commander v19.9.19 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.30*, **[v19.9.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.19)** - *2026.03.30*, **[v19.9.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.18)** - *2026.03.30*, **[v19.9.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.17)** - *2026.03.29*, **[v19.9.16](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.16)** diff --git a/README.md b/README.md index 30d1d15c..799a2207 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.18 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.19 [![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 72b09d23..b79ae08f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.18", + "version": "19.9.19", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 2b29448062f9b7322b7fb25c245cb6db3dfd49c0 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 23:19:52 +0300 Subject: [PATCH 225/390] feature: iocmd: io: nvm --- docker/Dockerfile.io | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 32ef638d..5d117ac1 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -8,6 +8,8 @@ WORKDIR /usr/src/cloudcmd COPY package.json /usr/src/cloudcmd/ ENV DEBIAN_FRONTEND=noninteractive +ENV PATH=/usr/local/src/cargo/bin:$PATH + ARG GO_VERSION=1.21.2 RUN apt-get update && apt-get upgrade && apt-get autoremove && \ @@ -20,31 +22,27 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "> install nvm" && \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash && \ mv ~/.nvm /usr/local/src/nvm && \ - chmod a+rwx /usr/local/src/nvm && \ - . /usr/local/src/nvm/nvm.sh && \ echo "> install npm globals" && \ npm i wisdom nupdate version-io redrun superc8 \ supertape madrun redlint putout renamify-cli runny redfork -g && \ echo "> install bun" && \ curl -fsSL https://bun.sh/install | bash && \ mv ~/.bun /usr/local/src/bun && \ - chmod a+rwx /usr/local/src/bun && \ ln -s /usr/local/src/bun/bin/bun /usr/local/bin/bun && \ echo "> install deno" && \ curl -fsSL https://deno.land/install.sh | sh && \ mv ~/.deno /usr/local/src/deno && \ - chmod a+rwx /usr/local/src/deno && \ ln -s /usr/local/src/deno/bin/deno /usr/local/bin/deno && \ echo "> install golang" && \ curl -fsSL https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz -o go.tar.gz && \ - tar -C /usr/local -xzf go.tar.gz && \ + tar -C /usr/local/src -xzf go.tar.gz && \ rm go.tar.gz && \ - ln -s /usr/local/go/bin/go /usr/local/bin/go && \ - ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt && \ + ln -s /usr/local/src/go/bin/go /usr/local/bin/go && \ + ln -s /usr/local/src/go/bin/gofmt /usr/local/bin/gofmt && \ echo "> install rust" && \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ mv ~/.cargo /usr/local/src/cargo && \ - chmod a+rwx /usr/local/src/cargo && \ + rustup default stable && \ echo "> install gritty" && \ bun r gritty --omit dev && \ bun i gritty --omit dev && \ @@ -56,6 +54,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ echo "alias ls='ls --color=auto'" >> /etc/bash.bashrc && \ echo "alias buni='bun i --no-save'" >> /etc/bash.bashrc && \ echo "alias bat='batcat'" >> /etc/bash.bashrc && \ + echo ". /usr/local/src/nvm/nvm.sh" >> /etc/bash.bashrc && \ echo 'PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "' >> /etc/bash.bashrc && \ echo "> setup inputrc" && \ echo "set editing-mode vi" >> /etc/inputrc && \ @@ -79,7 +78,6 @@ ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH -ENV PATH=/usr/local/src/cargo/bin:$PATH ENV BUN_INSTALL_CACHE_DIR=/tmp/bun-cache From d2a7f6343a37dcb4c8181197abae2c253f8c3baf Mon Sep 17 00:00:00 2001 From: coderiaser Date: Mon, 30 Mar 2026 23:26:38 +0300 Subject: [PATCH 226/390] chore: cloudcmd: v19.9.20 --- 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 4308050c..50945ac9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.30, v19.9.20 + +feature: +- cd0b5554 iocmd: io: nvm + 2026.03.30, v19.9.19 feature: diff --git a/HELP.md b/HELP.md index 46a83373..f840f546 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.19 +# Cloud Commander v19.9.20 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.30*, **[v19.9.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.20)** - *2026.03.30*, **[v19.9.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.19)** - *2026.03.30*, **[v19.9.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.18)** - *2026.03.30*, **[v19.9.17](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.17)** diff --git a/README.md b/README.md index 799a2207..13b8db2c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.19 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.20 [![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 b79ae08f..33a3c047 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.19", + "version": "19.9.20", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 5c6a9a958e60dbedcdbbc84bb121115188a404c7 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 31 Mar 2026 00:50:35 +0300 Subject: [PATCH 227/390] fix: css: columns: name: 40% -> 35% --- css/columns/name-size-date-time.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/columns/name-size-date-time.css b/css/columns/name-size-date-time.css index 9d6e41ac..f46e63f8 100644 --- a/css/columns/name-size-date-time.css +++ b/css/columns/name-size-date-time.css @@ -1,5 +1,5 @@ .name { - width: 40%; + width: 35%; } .size { From e2855641ca1f7f986bdd95159b8d10e17eb28b38 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 31 Mar 2026 00:54:58 +0300 Subject: [PATCH 228/390] feature: docker: io: rustup --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 5d117ac1..f5bde850 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -43,6 +43,7 @@ RUN apt-get update && apt-get upgrade && apt-get autoremove && \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \ mv ~/.cargo /usr/local/src/cargo && \ rustup default stable && \ + mv ~/.rustup /usr/local/src/rustup && \ echo "> install gritty" && \ bun r gritty --omit dev && \ bun i gritty --omit dev && \ From ddbf4d69a4aecbe6f474171e2f84fcb8f9e90f01 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 31 Mar 2026 00:51:02 +0300 Subject: [PATCH 229/390] chore: cloudcmd: v19.9.21 --- 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 50945ac9..48c1ad95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.31, v19.9.21 + +fix: +- 5c6a9a95 css: columns: name: 40% -> 35% + 2026.03.30, v19.9.20 feature: diff --git a/HELP.md b/HELP.md index f840f546..14ddc4a6 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.20 +# Cloud Commander v19.9.21 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.31*, **[v19.9.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.21)** - *2026.03.30*, **[v19.9.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.20)** - *2026.03.30*, **[v19.9.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.19)** - *2026.03.30*, **[v19.9.18](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.18)** diff --git a/README.md b/README.md index 13b8db2c..c5f590fe 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.20 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.21 [![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 33a3c047..830f93b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.20", + "version": "19.9.21", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From b4345ed40d8f430a16a72724ab6e352048ec83a5 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 31 Mar 2026 00:59:02 +0300 Subject: [PATCH 230/390] feature: docker: io: DENO_DIR --- docker/Dockerfile.io | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index f5bde850..577e9a55 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -81,6 +81,7 @@ ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH ENV BUN_INSTALL_CACHE_DIR=/tmp/bun-cache +ENV DENO_DIR=/tmp/deno-cache ENV LANG=en_US.UTF-8 ENV LANGUAGE=en_US:en From e53aa06cdb72f5d9bc0e8e0840cc13446fee8d1b Mon Sep 17 00:00:00 2001 From: coderiaser Date: Tue, 31 Mar 2026 00:59:44 +0300 Subject: [PATCH 231/390] chore: cloudcmd: v19.9.22 --- 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 48c1ad95..67a283c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.03.31, v19.9.22 + +feature: +- b4345ed4 docker: io: DENO_DIR + 2026.03.31, v19.9.21 fix: diff --git a/HELP.md b/HELP.md index 14ddc4a6..96848690 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.21 +# Cloud Commander v19.9.22 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.03.31*, **[v19.9.22](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.22)** - *2026.03.31*, **[v19.9.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.21)** - *2026.03.30*, **[v19.9.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.20)** - *2026.03.30*, **[v19.9.19](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.19)** diff --git a/README.md b/README.md index c5f590fe..0d6bd072 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.21 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.22 [![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 830f93b2..35bdaa7d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.21", + "version": "19.9.22", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From e4d7d441fccdd662eb1146795d38fdf3653ebfeb Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 1 Apr 2026 14:33:41 +0300 Subject: [PATCH 232/390] feature: docker: io: nix --- docker/Dockerfile.io | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 577e9a55..c5905f79 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -12,13 +12,22 @@ ENV PATH=/usr/local/src/cargo/bin:$PATH ARG GO_VERSION=1.21.2 -RUN apt-get update && apt-get upgrade && apt-get autoremove && \ +RUN apt-get update && apt-get upgrade -y && apt-get autoremove && \ apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim bat fzf \ locales sudo command-not-found && \ echo "> Update command-not-found database. Run 'sudo apt update' to populate it." && \ apt-get update && \ apt-get autoremove && apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ + echo "> install nix" && \ + useradd -m -s /bin/bash nixuser && \ + echo "nixuser ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/nixuser && \ + chmod 0440 /etc/sudoers.d/nixuser && \ + su - nixuser -c "curl -L https://nixos.org/nix/install | sh -s -- --no-daemon --no-sendbox" && \ + mv /home/nixuser/.nix-profile /usr/local/src/nix-profile && \ + mv /home/nixuser/.nix-defexpr /usr/local/src/nix-defexpr && \ + rm -rf /etc/sudoers.d/nixuser && \ + userdel -r nixuser && \ echo "> install nvm" && \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash && \ mv ~/.nvm /usr/local/src/nvm && \ @@ -79,6 +88,8 @@ ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false ENV PATH=node_modules/.bin:$PATH +ENV PATH=/usr/local/src/nix/profile/bin:$PATH +ENV NIX_PATH=/usr/local/src/nix/defexpr/channels ENV BUN_INSTALL_CACHE_DIR=/tmp/bun-cache ENV DENO_DIR=/tmp/deno-cache From 582b7423dc90b547a7234f6e621bc41b2c22c84f Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 1 Apr 2026 14:34:24 +0300 Subject: [PATCH 233/390] chore: cloudcmd: v19.9.23 --- 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 67a283c7..69e7fe4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.04.01, v19.9.23 + +feature: +- 5a3413ce docker: io: nix + 2026.03.31, v19.9.22 feature: diff --git a/HELP.md b/HELP.md index 96848690..f7e199f1 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.22 +# Cloud Commander v19.9.23 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.04.01*, **[v19.9.23](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.23)** - *2026.03.31*, **[v19.9.22](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.22)** - *2026.03.31*, **[v19.9.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.21)** - *2026.03.30*, **[v19.9.20](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.20)** diff --git a/README.md b/README.md index 0d6bd072..0ff1d63c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.22 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.23 [![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 35bdaa7d..2e2518b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.22", + "version": "19.9.23", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From 1fc1e3734c05a0975cd0cbb2f06ac2129c0a5770 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Wed, 1 Apr 2026 23:43:20 +0300 Subject: [PATCH 234/390] feature: docker: io: apt-get upgrade --- docker/Dockerfile | 2 ++ docker/Dockerfile.alpine | 4 ++- docker/Dockerfile.io | 54 ++++++++++++++++------------------------ docker/Dockerfile.slim | 1 + 4 files changed, 27 insertions(+), 34 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index cf1505a7..7c5d7b64 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,8 +1,10 @@ FROM node + LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" RUN mkdir -p /usr/src/cloudcmd + WORKDIR /usr/src/cloudcmd COPY package.json /usr/src/cloudcmd/ diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index 75549fae..5e38ab8a 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -1,8 +1,10 @@ FROM node:alpine + LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" RUN mkdir -p /usr/src/cloudcmd + WORKDIR /usr/src/cloudcmd COPY package.json /usr/src/cloudcmd/ @@ -21,6 +23,7 @@ RUN apk update && \ COPY . /usr/src/cloudcmd WORKDIR / + ENV cloudcmd_terminal=true ENV cloudcmd_terminal_path=gritty ENV cloudcmd_open=false @@ -29,4 +32,3 @@ ENV cloudcmd_vim=true EXPOSE 8000 ENTRYPOINT ["/usr/src/cloudcmd/bin/cloudcmd.js"] - diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index c5905f79..588d7d32 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -1,39 +1,33 @@ FROM node + LABEL maintainer="Coderaiser" LABEL org.opencontainers.image.source="https://github.com/coderaiser/cloudcmd" RUN mkdir -p /usr/src/cloudcmd + WORKDIR /usr/src/cloudcmd COPY package.json /usr/src/cloudcmd/ -ENV DEBIAN_FRONTEND=noninteractive -ENV PATH=/usr/local/src/cargo/bin:$PATH +ENV DEBIAN_FRONTEND=noninteractive \ + PATH=/usr/local/src/cargo/bin:$PATH ARG GO_VERSION=1.21.2 -RUN apt-get update && apt-get upgrade -y && apt-get autoremove && \ - apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim bat fzf \ - locales sudo command-not-found && \ +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get autoremove && \ + apt-get install -y less ffmpeg net-tools netcat-openbsd mc iputils-ping vim neovim bat fzf locales sudo command-not-found && \ echo "> Update command-not-found database. Run 'sudo apt update' to populate it." && \ apt-get update && \ - apt-get autoremove && apt-get clean && \ + apt-get autoremove && \ + apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ - echo "> install nix" && \ - useradd -m -s /bin/bash nixuser && \ - echo "nixuser ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/nixuser && \ - chmod 0440 /etc/sudoers.d/nixuser && \ - su - nixuser -c "curl -L https://nixos.org/nix/install | sh -s -- --no-daemon --no-sendbox" && \ - mv /home/nixuser/.nix-profile /usr/local/src/nix-profile && \ - mv /home/nixuser/.nix-defexpr /usr/local/src/nix-defexpr && \ - rm -rf /etc/sudoers.d/nixuser && \ - userdel -r nixuser && \ echo "> install nvm" && \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash && \ mv ~/.nvm /usr/local/src/nvm && \ echo "> install npm globals" && \ - npm i wisdom nupdate version-io redrun superc8 \ - supertape madrun redlint putout renamify-cli runny redfork -g && \ + npm i wisdom nupdate version-io redrun superc8 supertape madrun redlint putout renamify-cli runny redfork -g && \ echo "> install bun" && \ curl -fsSL https://bun.sh/install | bash && \ mv ~/.bun /usr/local/src/bun && \ @@ -83,22 +77,16 @@ COPY . /usr/src/cloudcmd WORKDIR / -ENV cloudcmd_terminal=true -ENV cloudcmd_terminal_path=gritty -ENV cloudcmd_open=false - -ENV PATH=node_modules/.bin:$PATH -ENV PATH=/usr/local/src/nix/profile/bin:$PATH -ENV NIX_PATH=/usr/local/src/nix/defexpr/channels - -ENV BUN_INSTALL_CACHE_DIR=/tmp/bun-cache -ENV DENO_DIR=/tmp/deno-cache - -ENV LANG=en_US.UTF-8 -ENV LANGUAGE=en_US:en -ENV LC_ALL=en_US.UTF-8 - -ENV TERM=xterm-256color +ENV cloudcmd_terminal=true \ + cloudcmd_terminal_path=gritty \ + cloudcmd_open=false \ + PATH=node_modules/.bin:$PATH \ + BUN_INSTALL_CACHE_DIR=/tmp/bun-cache \ + DENO_DIR=/tmp/deno-cache \ + LANG=en_US.UTF-8 \ + LANGUAGE=en_US:en \ + LC_ALL=en_US.UTF-8 \ + TERM=xterm-256color EXPOSE 8000 diff --git a/docker/Dockerfile.slim b/docker/Dockerfile.slim index 6974b41c..c6f273b8 100644 --- a/docker/Dockerfile.slim +++ b/docker/Dockerfile.slim @@ -1,6 +1,7 @@ FROM node:slim AS build RUN mkdir -p /usr/src/cloudcmd/ + WORKDIR /usr/src/cloudcmd COPY package.json /usr/src/cloudcmd/ From b8a621ca1b1fd2061e5540ea68114586422910de Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 2 Apr 2026 00:24:48 +0300 Subject: [PATCH 235/390] chore: cloudcmd: v19.9.24 --- 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 69e7fe4e..5643732b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2026.04.02, v19.9.24 + +feature: +- c4d26c6a docker: io: apt-get upgrade +- 9ddb8c29 docker: io: get rid of nix +- e4d7d441 docker: io: nix + 2026.04.01, v19.9.23 feature: diff --git a/HELP.md b/HELP.md index f7e199f1..2c237301 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.23 +# Cloud Commander v19.9.24 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.04.02*, **[v19.9.24](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.24)** - *2026.04.01*, **[v19.9.23](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.23)** - *2026.03.31*, **[v19.9.22](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.22)** - *2026.03.31*, **[v19.9.21](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.21)** diff --git a/README.md b/README.md index 0ff1d63c..e9b51f9c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.23 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.9.24 [![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 2e2518b7..6a3b2c6b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.23", + "version": "19.9.24", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From d12e7bd0c5e090ffbad70f289dbfd5e8cdf9f4aa Mon Sep 17 00:00:00 2001 From: chaoliang yan Date: Fri, 3 Apr 2026 02:16:49 +1100 Subject: [PATCH 236/390] fix: distribute: fix event listener leak on socket disconnect (#462) --- server/distribute/import.js | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/server/distribute/import.js b/server/distribute/import.js index 131dabde..f6cbe614 100644 --- a/server/distribute/import.js +++ b/server/distribute/import.js @@ -38,9 +38,14 @@ const addUrl = currify((url, a) => `${url}: ${a}`); const rmListeners = wraptile((socket, listeners) => { socket.removeListener('connect', listeners.onConnect); + socket.removeListener('accept', listeners.onAccept); socket.removeListener('config', listeners.onConfig); socket.removeListener('error', listeners.onError); - socket.removeListener('connection_error', listeners.onError); + socket.removeListener('connect_error', listeners.onConnectError); + socket.removeListener('reject', listeners.onReject); + + if (listeners.onChange) + socket.removeListener('change', listeners.onChange); }); const canceled = (f) => f(null, { @@ -106,17 +111,6 @@ 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 onChange = squad(logWrapped(isLog, importStr), config); const onReject = squad(superFn('reject'), logWrapped( @@ -125,6 +119,20 @@ export const distributeImport = (config, options, fn) => { tokenRejectedStr, )); + const onDisconnect = squad(...[ + done(fn, statusStore), + logWrapped(isLog, importStr, `${disconnectedStr} from ${colorUrl}`), + rmListeners(socket, { + onConnect, + onAccept, + onConfig, + onError, + onConnectError, + onReject, + onChange, + }), + ]); + socket.on('connect', onConnect); socket.on('accept', onAccept); socket.on('disconnect', onDisconnect); From 34fad6ea73cf99063cde8a8ee027d85f3a6aa2de Mon Sep 17 00:00:00 2001 From: coderiaser Date: Thu, 2 Apr 2026 18:19:15 +0300 Subject: [PATCH 237/390] chore: cloudcmd: v19.10.0 --- 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 5643732b..ad86fec8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.04.02, v19.10.0 + +fix: +- d12e7bd0 distribute: fix event listener leak on socket disconnect (#462) + 2026.04.02, v19.9.24 feature: diff --git a/HELP.md b/HELP.md index 2c237301..d048ddba 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.24 +# Cloud Commander v19.10.0 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.04.02*, **[v19.10.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.10.0)** - *2026.04.02*, **[v19.9.24](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.24)** - *2026.04.01*, **[v19.9.23](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.23)** - *2026.03.31*, **[v19.9.22](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.22)** diff --git a/README.md b/README.md index e9b51f9c..57010667 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.9.24 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.10.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 6a3b2c6b..46c64410 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.9.24", + "version": "19.10.0", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From ceb7ef4ff75d00b2ef495254f9015a8041402661 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 3 Apr 2026 23:12:00 +0300 Subject: [PATCH 238/390] feature: docker: io: keep /var/lib/apt/lists --- docker/Dockerfile.io | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/Dockerfile.io b/docker/Dockerfile.io index 588d7d32..d4a9f70d 100644 --- a/docker/Dockerfile.io +++ b/docker/Dockerfile.io @@ -22,7 +22,6 @@ RUN apt-get update && \ apt-get update && \ apt-get autoremove && \ apt-get clean && \ - rm -rf /var/lib/apt/lists/* && \ echo "> install nvm" && \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash && \ mv ~/.nvm /usr/local/src/nvm && \ From 314cceb4627527ebbfcce777e9922d019e753e44 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Fri, 3 Apr 2026 23:12:27 +0300 Subject: [PATCH 239/390] chore: cloudcmd: v19.10.1 --- 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 ad86fec8..0fc46c2b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2026.04.03, v19.10.1 + +feature: +- ceb7ef4f docker: io: keep /var/lib/apt/lists + 2026.04.02, v19.10.0 fix: diff --git a/HELP.md b/HELP.md index d048ddba..07def5c0 100644 --- a/HELP.md +++ b/HELP.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.10.0 +# Cloud Commander v19.10.1 ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL] @@ -1114,6 +1114,7 @@ There are a lot of ways to be involved in `Cloud Commander` development: ## Version history +- *2026.04.03*, **[v19.10.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.10.1)** - *2026.04.02*, **[v19.10.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.10.0)** - *2026.04.02*, **[v19.9.24](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.24)** - *2026.04.01*, **[v19.9.23](//github.com/coderaiser/cloudcmd/releases/tag/v19.9.23)** diff --git a/README.md b/README.md index 57010667..48654c69 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cloud Commander v19.10.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] +# Cloud Commander v19.10.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 46c64410..2adfd1ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cloudcmd", - "version": "19.10.0", + "version": "19.10.1", "type": "module", "author": "coderaiser (https://github.com/coderaiser)", "description": "File manager for the web with console and editor", From df4fb517160269baaf004aa55d033d65b5e3f079 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 4 Apr 2026 00:05:55 +0300 Subject: [PATCH 240/390] feature: cloudcmd: aleman v2.0.1 --- html/index.html | 2 +- package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/html/index.html b/html/index.html index 0cfc73c5..76043d9c 100644 --- a/html/index.html +++ b/html/index.html @@ -45,7 +45,7 @@