From 32f89d38748645a0ab502d1eb41f1cc2bd21354e Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sat, 4 Apr 2026 01:34:27 +0300 Subject: [PATCH] feature: cloudcmd: user-menu: root --- .cloudcmd.menu.js | 66 ++++++++++++++-------------------- client/modules/terminal-run.js | 2 +- server/cloudcmd.js | 1 + server/user-menu.js | 8 +++-- server/user-menu.spec.js | 11 ++++++ 5 files changed, 45 insertions(+), 43 deletions(-) diff --git a/.cloudcmd.menu.js b/.cloudcmd.menu.js index 08637d80..0e0126b6 100644 --- a/.cloudcmd.menu.js +++ b/.cloudcmd.menu.js @@ -1,43 +1,31 @@ export default { - 'F2 - Rename file': async ({DOM}) => { - await DOM.renameCurrent(); - }, - 'L - Lint': async ({CloudCmd}) => { - const {TerminalRun} = CloudCmd; - await run(TerminalRun, 'npm run lint'); - }, - 'F - Fix Lint': async ({CloudCmd}) => { - const {TerminalRun} = CloudCmd; - await run(TerminalRun, 'npm run fix:lint'); - }, - 'T - Test': async ({CloudCmd}) => { - const {TerminalRun} = CloudCmd; - - await run(TerminalRun, 'npm run test'); - }, - 'C - Coverage': async ({CloudCmd}) => { - const {TerminalRun} = CloudCmd; - - await run(TerminalRun, 'npm run coverage'); - }, - 'D - Build Dev': async ({CloudCmd}) => { - const {TerminalRun} = CloudCmd; - - await run(TerminalRun, 'npm run build:client:dev'); - CloudCmd.refresh(); - }, - 'P - Build Prod': async ({CloudCmd}) => { - const {TerminalRun} = CloudCmd; - - await run(TerminalRun, 'npm run build:client'); - CloudCmd.refresh(); - }, + 'F2 - Rename File': renameCurrent, + 'L - Lint': run('npm run lint'), + 'F - Fix Lint': run('npm run fix:lint'), + 'T - Test': run('npm run test'), + 'C - Coverage': run('npm run coverage'), + 'D - Build Dev': run('npm run build:client:dev'), + 'P - Build Prod': run('npm run build:client'), }; -async function run(TerminalRun, command) { - await TerminalRun.show({ - command, - closeMessage: 'Press any key to close Terminal', - autoClose: false, - }); +async function renameCurrent(DOM) { + await DOM.renameCurrent(); +} + +function run(command) { + return async ({CloudCmd, DOM}) => { + const {TerminalRun, config} = CloudCmd; + + const {CurrentInfo} = DOM; + const {dirPath} = CurrentInfo; + + const cwd = config('root') + dirPath; + + return await TerminalRun.show({ + cwd, + command, + closeMessage: 'Press any key to close Terminal', + autoClose: false, + }); + }; } diff --git a/client/modules/terminal-run.js b/client/modules/terminal-run.js index c7dbf9c2..029415ea 100644 --- a/client/modules/terminal-run.js +++ b/client/modules/terminal-run.js @@ -51,7 +51,7 @@ export async function init() { } export async function show(options = {}) { - await runTerminal(options); + return await runTerminal(options); } const runTerminal = promisify((options, fn) => { diff --git a/server/cloudcmd.js b/server/cloudcmd.js index 319cc4ae..773b6499 100644 --- a/server/cloudcmd.js +++ b/server/cloudcmd.js @@ -242,6 +242,7 @@ function cloudcmdMiddle({modules, config}) { }), userMenu({ menuName: '.cloudcmd.menu.js', + config, }), rest({ config, diff --git a/server/user-menu.js b/server/user-menu.js index 84baf1a3..9e01b992 100644 --- a/server/user-menu.js +++ b/server/user-menu.js @@ -12,7 +12,7 @@ transpile(''); const PREFIX = '/api/v1/user-menu'; -export const userMenu = currify(async ({menuName, readFile = _readFile}, req, res, next) => { +export const userMenu = currify(async ({menuName, readFile = _readFile, config}, req, res, next) => { if (!req.url.startsWith(PREFIX)) return next(); @@ -24,12 +24,13 @@ export const userMenu = currify(async ({menuName, readFile = _readFile}, req, re res, menuName, readFile, + config, }); next(); }); -async function onGET({req, res, menuName, readFile}) { +async function onGET({req, res, menuName, readFile, config}) { const {dir} = req.query; const url = req.url.replace(PREFIX, ''); @@ -40,8 +41,9 @@ async function onGET({req, res, menuName, readFile}) { const {findUp} = await import('find-up'); + const cwd = join(config('root'), dir); const [errorFind, currentMenuPath] = await tryToCatch(findUp, [menuName], { - cwd: dir, + cwd, }); if (errorFind && errorFind.code !== 'ENOENT') diff --git a/server/user-menu.spec.js b/server/user-menu.spec.js index b24bb9eb..bb78b4e8 100644 --- a/server/user-menu.spec.js +++ b/server/user-menu.spec.js @@ -24,8 +24,11 @@ const fixtureCopy = readFileSync(fixtureCopyName, 'utf8'); const fixtureCopyFix = readFileSync(fixtureCopyFixName, 'utf8'); test('cloudcmd: user menu', async (t) => { + const config = stub().returns(''); const userMenuFile = getUserMenuFile(); + const options = { + config, menuName: '.cloudcmd.menu.js', }; @@ -38,10 +41,13 @@ test('cloudcmd: user menu', async (t) => { }); test('cloudcmd: user menu: io.mv', async (t) => { + const config = stub().returns(''); const readFile = stub().returns(fixtureMove); + const options = { menuName: '.cloudcmd.menu.js', readFile, + config, }; const {request} = serveOnce(userMenu); @@ -55,8 +61,10 @@ test('cloudcmd: user menu: io.mv', async (t) => { }); test('cloudcmd: user menu: default menu', async (t) => { + const config = stub().returns(''); const options = { menuName: '111.cloudcmd.menu.js', + config, }; const {request} = serveOnce(userMenu); @@ -70,10 +78,13 @@ test('cloudcmd: user menu: default menu', async (t) => { }); test('cloudcmd: user menu: io.cp', async (t) => { + const config = stub().returns(''); const readFile = stub().returns(fixtureCopy); + const options = { menuName: '.cloudcmd.menu.js', readFile, + config, }; const {request} = serveOnce(userMenu);