From db42efb05ade373accd7bff38f1c78345443f8e3 Mon Sep 17 00:00:00 2001 From: Anastasia Date: Thu, 19 Feb 2026 16:38:09 +0200 Subject: [PATCH 1/2] feat: implement copyFiles function --- src/app.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/app.js b/src/app.js index ad9a93a..f00c546 100644 --- a/src/app.js +++ b/src/app.js @@ -1 +1,54 @@ +/* eslint-disable no-console */ 'use strict'; + +const fs = require('fs/promises'); + +async function copyFiles() { + const [src, dest] = process.argv.slice(2); + + if (!src || !dest) { + console.error('Two arguments are required'); + + return; + } + + if (src === dest) { + return; + } + + let srcStat; + + try { + srcStat = await fs.stat(src); + } catch { + console.error('Source file does not exist'); + + return; + } + + if (!srcStat.isFile()) { + console.error('Source is not a file'); + + return; + } + + try { + const destStat = await fs.stat(dest); + + if (destStat.isDirectory()) { + console.error('Destination is a directory'); + + return; + } + } catch (err) { + if (err.code !== 'ENOENT') { + console.error('Error checking destination file'); + + return; + } + } + + await fs.copyFile(src, dest); +} + +copyFiles(); From 00c65ecf40597a463e00546576de8eb2b04a4690 Mon Sep 17 00:00:00 2001 From: Anastasia Date: Thu, 19 Feb 2026 16:53:00 +0200 Subject: [PATCH 2/2] fix: improve function logic --- src/app.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/app.js b/src/app.js index f00c546..10d13fc 100644 --- a/src/app.js +++ b/src/app.js @@ -2,17 +2,27 @@ 'use strict'; const fs = require('fs/promises'); +const path = require('node:path'); async function copyFiles() { - const [src, dest] = process.argv.slice(2); + const args = process.argv.slice(2); + const [src, dest] = args; - if (!src || !dest) { + if (!src || !dest || args.length > 2) { console.error('Two arguments are required'); return; } - if (src === dest) { + for (const arg of args) { + if (arg.startsWith('-')) { + console.error('Arguments should not start with a dash'); + + return; + } + } + + if (path.resolve(src) === path.resolve(dest)) { return; } @@ -48,7 +58,11 @@ async function copyFiles() { } } - await fs.copyFile(src, dest); + try { + await fs.copyFile(src, dest); + } catch (err) { + console.error('Error copying file:', err.message); + } } copyFiles();