From 0bcacaa2984aa08989ac52d80dce19f60cf2c29c Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Wed, 25 Mar 2026 13:37:14 +0200 Subject: [PATCH 1/3] added solution --- .github/workflows/test.yml-template | 23 +++++++++++ package-lock.json | 9 +++-- package.json | 2 +- src/app.js | 59 ++++++++++++++++++++++++++++- 4 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/test.yml-template diff --git a/.github/workflows/test.yml-template b/.github/workflows/test.yml-template new file mode 100644 index 0000000..bb13dfc --- /dev/null +++ b/.github/workflows/test.yml-template @@ -0,0 +1,23 @@ +name: Test + +on: + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm test diff --git a/package-lock.json b/package-lock.json index 2a93237..60ddc72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "devDependencies": { "@faker-js/faker": "^8.4.1", "@mate-academy/eslint-config": "latest", - "@mate-academy/scripts": "^1.8.6", + "@mate-academy/scripts": "^2.1.3", "eslint": "^8.57.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", @@ -1484,10 +1484,11 @@ } }, "node_modules/@mate-academy/scripts": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.8.6.tgz", - "integrity": "sha512-b4om/whj4G9emyi84ORE3FRZzCRwRIesr8tJHXa8EvJdOaAPDpzcJ8A0sFfMsWH9NUOVmOwkBtOXDu5eZZ00Ig==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-2.1.3.tgz", + "integrity": "sha512-a07wHTj/1QUK2Aac5zHad+sGw4rIvcNl5lJmJpAD7OxeSbnCdyI6RXUHwXhjF5MaVo9YHrJ0xVahyERS2IIyBQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/rest": "^17.11.2", "@types/get-port": "^4.2.0", diff --git a/package.json b/package.json index f8c126f..c27ea01 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@faker-js/faker": "^8.4.1", "@mate-academy/eslint-config": "latest", - "@mate-academy/scripts": "^1.8.6", + "@mate-academy/scripts": "^2.1.3", "eslint": "^8.57.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", diff --git a/src/app.js b/src/app.js index 0d15e7b..fc8b47c 100644 --- a/src/app.js +++ b/src/app.js @@ -1 +1,58 @@ -// write code here +/* eslint-disable no-console */ +'use strict'; + +const fs = require('fs/promises'); +const path = require('path'); + +async function moveFile() { + const args = process.argv.slice(2); + + const originPath = args[0]; + const pathToMove = args[1]; + + if (!originPath) { + console.error('File does not exist'); + + return; + } + + if (!pathToMove) { + console.error('Path to move does not exist'); + + return; + } + + if (originPath === pathToMove) { + return; + } + + try { + await fs.access(originPath); + + let finalDest = pathToMove; + + try { + const destStat = await fs.stat(pathToMove); + + if (destStat.isDirectory()) { + finalDest = path.join(pathToMove, path.basename(originPath)); + } + } catch (e) { + if (pathToMove.endsWith('/') || pathToMove.endsWith('\\')) { + console.error('Path does not exist'); + + return; + } + } + + await fs.rename(originPath, finalDest); + } catch (error) { + if (error.code === 'ENOENT') { + console.error('File does not exist'); + } else { + console.error('Error:', error.message); + } + } +} + +moveFile(); From 8aa40a5dff1227c9174d2410758b1c4c19b59d83 Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Wed, 25 Mar 2026 13:53:54 +0200 Subject: [PATCH 2/3] added check if origin path not directory --- src/app.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/app.js b/src/app.js index fc8b47c..2c0b096 100644 --- a/src/app.js +++ b/src/app.js @@ -11,13 +11,13 @@ async function moveFile() { const pathToMove = args[1]; if (!originPath) { - console.error('File does not exist'); + console.error('Source file path was not provided'); return; } if (!pathToMove) { - console.error('Path to move does not exist'); + console.error('Destination path was not provided'); return; } @@ -26,9 +26,23 @@ async function moveFile() { return; } + let sourceStat; + try { - await fs.access(originPath); + sourceStat = await fs.stat(originPath); + } catch (e) { + console.error('File does not exist'); + + return; + } + if (sourceStat.isDirectory()) { + console.error('Error: Source is a directory'); + + return; + } + + try { let finalDest = pathToMove; try { @@ -47,11 +61,7 @@ async function moveFile() { await fs.rename(originPath, finalDest); } catch (error) { - if (error.code === 'ENOENT') { - console.error('File does not exist'); - } else { - console.error('Error:', error.message); - } + console.error('Error:', error.message); } } From 99ffb872120249966b1844fcb44e719dfde546ca Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Wed, 25 Mar 2026 14:07:58 +0200 Subject: [PATCH 3/3] fix --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index 2c0b096..1d8a0b3 100644 --- a/src/app.js +++ b/src/app.js @@ -26,7 +26,7 @@ async function moveFile() { return; } - let sourceStat; + let sourceStat = null; try { sourceStat = await fs.stat(originPath);