From c95e7ca890d012d56bfd2c87a9dea6e0b3aaff43 Mon Sep 17 00:00:00 2001 From: S-Khraban Date: Mon, 26 Jan 2026 21:04:12 +0200 Subject: [PATCH 1/2] Implement file move CLI app --- src/app.js | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index 0d15e7b..4cafedd 100644 --- a/src/app.js +++ b/src/app.js @@ -1 +1,70 @@ -// write code here +'use strict'; + +/* eslint-disable no-console */ + +const fs = require('fs'); +const path = require('path'); + +try { + const args = process.argv.slice(2); + + if (args.length !== 2) { + console.error('Error'); + } else { + const [srcRaw, destRaw] = args; + + const src = path.resolve(srcRaw); + const destResolved = path.resolve(destRaw); + + const srcStat = fs.statSync(src); + + if (!srcStat.isFile()) { + console.error('Error'); + } else { + const endsWithSlash = destRaw.endsWith('/') || destRaw.endsWith('\\'); + + let finalDest = destResolved; + + if (endsWithSlash) { + if ( + !fs.existsSync(destResolved) || + !fs.statSync(destResolved).isDirectory() + ) { + console.error('Error'); + } else { + finalDest = path.join(destResolved, path.basename(src)); + } + } else if ( + fs.existsSync(destResolved) && + fs.statSync(destResolved).isDirectory() + ) { + finalDest = path.join(destResolved, path.basename(src)); + } else { + const parentDir = path.dirname(destResolved); + + if ( + !fs.existsSync(parentDir) || + !fs.statSync(parentDir).isDirectory() + ) { + console.error('Error'); + } + } + + if (finalDest === src) { + } else if ( + !endsWithSlash || + (endsWithSlash && + fs.existsSync(destResolved) && + fs.statSync(destResolved).isDirectory()) + ) { + if (fs.existsSync(finalDest) && fs.statSync(finalDest).isFile()) { + fs.unlinkSync(finalDest); + } + + fs.renameSync(src, finalDest); + } + } + } +} catch (err) { + console.error(err); +} From 2248baea5db23a9bd91730e8eb54d4adac54d385 Mon Sep 17 00:00:00 2001 From: S-Khraban Date: Mon, 26 Jan 2026 21:08:58 +0200 Subject: [PATCH 2/2] Fix move file logic: throw errors and simplify rename --- src/app.js | 78 ++++++++++++++++++++++-------------------------------- 1 file changed, 32 insertions(+), 46 deletions(-) diff --git a/src/app.js b/src/app.js index 4cafedd..51adcc6 100644 --- a/src/app.js +++ b/src/app.js @@ -9,62 +9,48 @@ try { const args = process.argv.slice(2); if (args.length !== 2) { - console.error('Error'); - } else { - const [srcRaw, destRaw] = args; + throw new Error('Error'); + } - const src = path.resolve(srcRaw); - const destResolved = path.resolve(destRaw); + const [srcRaw, destRaw] = args; - const srcStat = fs.statSync(src); + const src = path.resolve(srcRaw); + const destResolved = path.resolve(destRaw); - if (!srcStat.isFile()) { - console.error('Error'); - } else { - const endsWithSlash = destRaw.endsWith('/') || destRaw.endsWith('\\'); + const srcStat = fs.statSync(src); - let finalDest = destResolved; + if (!srcStat.isFile()) { + throw new Error('Error'); + } - if (endsWithSlash) { - if ( - !fs.existsSync(destResolved) || - !fs.statSync(destResolved).isDirectory() - ) { - console.error('Error'); - } else { - finalDest = path.join(destResolved, path.basename(src)); - } - } else if ( - fs.existsSync(destResolved) && - fs.statSync(destResolved).isDirectory() - ) { - finalDest = path.join(destResolved, path.basename(src)); - } else { - const parentDir = path.dirname(destResolved); + const endsWithSlash = destRaw.endsWith('/') || destRaw.endsWith('\\'); + let finalDest = destResolved; - if ( - !fs.existsSync(parentDir) || - !fs.statSync(parentDir).isDirectory() - ) { - console.error('Error'); - } - } + if (endsWithSlash) { + if ( + !fs.existsSync(destResolved) || + !fs.statSync(destResolved).isDirectory() + ) { + throw new Error('Error'); + } - if (finalDest === src) { - } else if ( - !endsWithSlash || - (endsWithSlash && - fs.existsSync(destResolved) && - fs.statSync(destResolved).isDirectory()) - ) { - if (fs.existsSync(finalDest) && fs.statSync(finalDest).isFile()) { - fs.unlinkSync(finalDest); - } + finalDest = path.join(destResolved, path.basename(src)); + } else if ( + fs.existsSync(destResolved) && + fs.statSync(destResolved).isDirectory() + ) { + finalDest = path.join(destResolved, path.basename(src)); + } else { + const parentDir = path.dirname(destResolved); - fs.renameSync(src, finalDest); - } + if (!fs.existsSync(parentDir) || !fs.statSync(parentDir).isDirectory()) { + throw new Error('Error'); } } + + if (finalDest !== src) { + fs.renameSync(src, finalDest); + } } catch (err) { console.error(err); }