diff --git a/.npmignore b/.npmignore index 0ecde705..eb036c9d 100644 --- a/.npmignore +++ b/.npmignore @@ -1,5 +1,5 @@ .* -*.spec.js +*.spec.* *.fixture.js* manifest.yml docker @@ -19,7 +19,7 @@ app.json bower.json manifest.yml -bin/release.js +bin/release.mjs client img/logo/cloudcmd-hq.png diff --git a/bin/release.mjs b/bin/release.mjs index ee55509a..694eb7da 100755 --- a/bin/release.mjs +++ b/bin/release.mjs @@ -19,8 +19,8 @@ await main(); async function main() { const history = '## Version history\n\n'; const link = '//github.com/coderaiser/cloudcmd/releases/tag/'; - const template = - '- *{{ date }}*, ' + + const template = '- ' + + '*{{ date }}*, ' + '**[v{{ version }}]' + '(' + link + 'v{{ version }})**\n'; diff --git a/client/key/vim/index.js b/client/key/vim/index.js index 6a209ea7..7c94f773 100644 --- a/client/key/vim/index.js +++ b/client/key/vim/index.js @@ -31,7 +31,7 @@ const getOperations = (event, deps) => { getCurrentName, toggleSelectedFile, - Buffer = {}, + Buffer = {}, } = deps; return { diff --git a/client/listeners/index.js b/client/listeners/index.js index 3bd0ce9c..8e948d67 100644 --- a/client/listeners/index.js +++ b/client/listeners/index.js @@ -215,8 +215,7 @@ async function onPathElementClick(panel, event) { function copyPath(el) { clipboard - .writeText(el - .parentElement.title) + .writeText(el.parentElement.title) .then(CloudCmd.log) .catch(CloudCmd.log); } @@ -422,7 +421,7 @@ function dragndrop() { }; /** - * In Mac OS Chrome dropEffect = 'none' + * In macOS Chrome dropEffect = 'none' * so drop do not firing up when try * to upload file from download bar */ diff --git a/client/modules/operation/index.js b/client/modules/operation/index.js index 8105e85f..bf19bda8 100644 --- a/client/modules/operation/index.js +++ b/client/modules/operation/index.js @@ -59,19 +59,19 @@ module.exports.init = promisify((callback) => { exec.series([ DOM.loadSocket, async (callback) => { - if (config('dropbox')) - return callback(); - - const {prefix, prefixSocket} = CloudCmd; - - await loadAll(); - await initOperations(prefix, prefixSocket, callback); - }, + if (config('dropbox')) + return callback(); + + const {prefix, prefixSocket} = CloudCmd; + + await loadAll(); + await initOperations(prefix, prefixSocket, callback); + }, (callback) => { - Loaded = true; - Images.hide(); - callback(); - }, + Loaded = true; + Images.hide(); + callback(); + }, ], callback); }); diff --git a/client/modules/user-menu/navigate.js b/client/modules/user-menu/navigate.js index d3c89830..445d47d1 100644 --- a/client/modules/user-menu/navigate.js +++ b/client/modules/user-menu/navigate.js @@ -2,7 +2,12 @@ const fullstore = require('fullstore'); -const {J, K, UP, DOWN} = require('../../key/key.js'); +const { + J, + K, + UP, + DOWN, +} = require('../../key/key.js'); const store = fullstore(1); const isDigit = (a) => /^\d+$/.test(a); diff --git a/client/modules/user-menu/navigate.spec.js b/client/modules/user-menu/navigate.spec.js index 5dbbfb81..abf95aab 100644 --- a/client/modules/user-menu/navigate.spec.js +++ b/client/modules/user-menu/navigate.spec.js @@ -3,7 +3,12 @@ const test = require('supertape'); const navigate = require('./navigate'); -const {UP, DOWN, J, K} = require('../../key/key.js'); +const { + UP, + DOWN, + J, + K, +} = require('../../key/key.js'); test('cloudcmd: user-menu: navigate: DOWN', (t) => { const el = { diff --git a/common/cloudfunc.js b/common/cloudfunc.js index 66ec044f..c906b548 100644 --- a/common/cloudfunc.js +++ b/common/cloudfunc.js @@ -173,6 +173,7 @@ module.exports.buildFromJSON = (params) => { Path(path); fileTable += `${header}'; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..b7808852 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,42 @@ +import {safeAlign} from 'eslint-plugin-putout'; +import {defineConfig} from 'eslint/config'; +import n from 'eslint-plugin-n'; +import globals from 'globals'; +import {matchToFlat} from '@putout/eslint-flat'; + +export const match = { + 'bin/release.mjs': { + 'no-console': 'off', + 'n/hashbang': 'off', + }, + 'client/dom/index.js': { + 'no-multi-spaces': 'off', + }, + 'client/**/*.js': { + 'n/no-extraneous-require': 'off', + 'n/no-unsupported-features/node-builtins': 'off', + }, + 'bin/cloudcmd.js': { + 'no-console': 'off', + }, +}; +export default defineConfig([ + safeAlign, { + ignores: ['**/fixture'], + rules: { + 'key-spacing': 'off', + 'n/prefer-node-protocol': 'error', + }, + plugins: { + n, + }, + }, { + files: ['{client,common,static}/**/*.js'], + languageOptions: { + globals: { + ...globals.browser, + }, + }, + }, + ...matchToFlat(match), +]); diff --git a/package.json b/package.json index 3bbed088..7ee17729 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "just-snake-case": "^3.2.0", "markdown-it": "^14.0.0", "mellow": "^3.0.0", + "mime-types": "^3.0.1", "montag": "^1.2.1", "nano-memoize": "^3.0.16", "nomine": "^4.0.0", diff --git a/server/repl.js b/server/repl.js index c1647f04..0c4d5279 100644 --- a/server/repl.js +++ b/server/repl.js @@ -6,22 +6,22 @@ const repl = require('node:repl'); module.exports = net .createServer((socket) => { - const {pid} = process; - const addr = socket.remoteAddress; - const port = socket.remotePort; - - const r = repl.start({ - prompt: `[${pid} ${addr}:${port}>`, - input: socket, - output: socket, - terminal: true, - useGlobal: false, - }); - - r.on('exit', () => { - socket.end(); - }); - - r.context.socket = socket; -}) + const {pid} = process; + const addr = socket.remoteAddress; + const port = socket.remotePort; + + const r = repl.start({ + prompt: `[${pid} ${addr}:${port}>`, + input: socket, + output: socket, + terminal: true, + useGlobal: false, + }); + + r.on('exit', () => { + socket.end(); + }); + + r.context.socket = socket; + }) .listen(1337); diff --git a/server/show-config.js b/server/show-config.js index 78180b79..065fd7dd 100644 --- a/server/show-config.js +++ b/server/show-config.js @@ -11,9 +11,9 @@ module.exports = (config) => { const data = Object .keys(config) .map((name) => [ - name, - config[name], - ]); + name, + config[name], + ]); if (!data.length) return ''; diff --git a/server/user-menu.mjs b/server/user-menu.mjs index 5ae51536..1100e1f3 100644 --- a/server/user-menu.mjs +++ b/server/user-menu.mjs @@ -74,10 +74,10 @@ async function onGET({req, res, menuName, readFile}) { function getError(error, source) { return montag` const e = Error(\`
${codeframe({
-        error,
-        source,
-        highlightCode: false,
-    })}
\`); + error, + source, + highlightCode: false, + })}\`); e.code = 'frame'; diff --git a/test/common/cloudfunc.js b/test/common/cloudfunc.js index c8acadea..185ff7b5 100644 --- a/test/common/cloudfunc.js +++ b/test/common/cloudfunc.js @@ -44,8 +44,7 @@ const data = { }], }; -let Expect = - '
' + +let Expect = '
' + '' + '' + @@ -75,13 +74,13 @@ test('cloudfunc: render', (t) => { const isNotOk = Expect .split('') .some((item, number) => { - const ret = result[number] !== item; - - if (ret) - i = number; - - return ret; - }); + const ret = result[number] !== item; + + if (ret) + i = number; + + return ret; + }); timeEnd('CloudFunc.buildFromJSON');