From 7e01fef9ce182e566f44a54c3de903d00d216bef Mon Sep 17 00:00:00 2001 From: Filippos Date: Sun, 1 Sep 2024 15:35:13 +0300 Subject: [PATCH 01/15] Fix plus operation type check in fibonacci function --- src/fib.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/fib.ts b/src/fib.ts index 8dc8ddd..b382e25 100644 --- a/src/fib.ts +++ b/src/fib.ts @@ -1,10 +1,14 @@ // util function that computes the fibonacci numbers module.exports = function fibonacci(n) { + if (typeof n !== 'number' || isNaN(n)) { + throw new TypeError('Input must be a valid number'); + } + if (n < 0) { return -1; - } else if (n == 0) { + } else if (n === 0) { return 0; - } else if (n == 1) { + } else if (n === 1) { return 1; } From 2c97b90e7e6beac1e6be9f3251adb61cb8c78af3 Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 21:39:06 +0300 Subject: [PATCH 02/15] fixed unsafe assignment issue in issue 2 --- src/fibRoute.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 2d41ca5..9fae05a 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -3,9 +3,15 @@ const fibonacci = require("./fib"); export default (req, res) => { - const { num } = req.params; + // Safely parse the number and handle cases where num is not a valid number + const num = parseInt(req.params.num, 10); - const fibN = fibonacci(parseInt(num)); + // Check if num is a valid number after parsing + if (isNaN(num)) { + return res.status(400).send("Invalid input. Please provide a valid number."); + } + + const fibN = fibonacci(num); let result = `fibonacci(${num}) is ${fibN}`; if (fibN < 0) { @@ -14,3 +20,5 @@ export default (req, res) => { res.send(result); }; + +// source CHATGPT \ No newline at end of file From 3cd2d3865c6f0616a0bc970f8b9b296b370abfe8 Mon Sep 17 00:00:00 2001 From: Filippos Date: Sun, 1 Sep 2024 21:49:10 +0300 Subject: [PATCH 03/15] Fix plus operation type check in fibonacci function v2 --- src/fib.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/fib.ts b/src/fib.ts index b382e25..d561ea5 100644 --- a/src/fib.ts +++ b/src/fib.ts @@ -1,5 +1,5 @@ // util function that computes the fibonacci numbers -module.exports = function fibonacci(n) { +function fibonacci(n: number): number { if (typeof n !== 'number' || isNaN(n)) { throw new TypeError('Input must be a valid number'); } @@ -12,5 +12,7 @@ module.exports = function fibonacci(n) { return 1; } - return fibonacci(n - 1) + fibonacci(n - 2); -}; + return fibonacci(n - 1) + fibonacci(n - 2); // Both operands are guaranteed to be numbers +} + +export default fibonacci; From 39ec54ea96d22f8ee172ff760273c1ff782981dd Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 21:59:04 +0300 Subject: [PATCH 04/15] fixed unsafe assignment issue in issue 2 again --- src/fibRoute.ts | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 9fae05a..4613b02 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -1,18 +1,22 @@ // Endpoint for querying the fibonacci numbers -const fibonacci = require("./fib"); +// src/fibRoute.ts -export default (req, res) => { - // Safely parse the number and handle cases where num is not a valid number - const num = parseInt(req.params.num, 10); +import { Request, Response } from 'express'; +import { fibonacci } from './fib'; // Use ES6 import syntax - // Check if num is a valid number after parsing +export default (req: Request, res: Response): void => { + const numString = req.params.num; // req.params is correctly typed by Express + const num = parseInt(numString, 10); // Explicitly convert string to number + + // Validate num after parsing if (isNaN(num)) { - return res.status(400).send("Invalid input. Please provide a valid number."); + res.status(400).send('Invalid input. Please provide a valid number.'); + return; } - const fibN = fibonacci(num); - let result = `fibonacci(${num}) is ${fibN}`; + const fibN: number = fibonacci(num); // Ensure the result of fibonacci is a number + let result: string = `fibonacci(${num}) is ${fibN}`; if (fibN < 0) { result = `fibonacci(${num}) is undefined`; @@ -21,4 +25,5 @@ export default (req, res) => { res.send(result); }; + // source CHATGPT \ No newline at end of file From 68cae6852d8412c06d5a2f7c4e7080876c6cc595 Mon Sep 17 00:00:00 2001 From: Filippos Date: Sun, 1 Sep 2024 22:00:56 +0300 Subject: [PATCH 05/15] Improve Fibonacci function: switch to iterative approach and enhance error handling --- src/fib.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/fib.ts b/src/fib.ts index d561ea5..8d367f3 100644 --- a/src/fib.ts +++ b/src/fib.ts @@ -5,14 +5,21 @@ function fibonacci(n: number): number { } if (n < 0) { - return -1; + throw new RangeError('Input must be a non-negative integer'); } else if (n === 0) { return 0; } else if (n === 1) { return 1; } - return fibonacci(n - 1) + fibonacci(n - 2); // Both operands are guaranteed to be numbers + // Using an iterative approach to avoid recursion overhead + let a = 0, b = 1, temp; + for (let i = 2; i <= n; i++) { + temp = a + b; + a = b; + b = temp; + } + return b; } export default fibonacci; From cd839be5d265c9a9e92173cac20856c5a1c67b21 Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 22:03:39 +0300 Subject: [PATCH 06/15] fixed unsafe assignment issue in issue 2 again --- src/fibRoute.ts | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 4613b02..b6a8d90 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -1,29 +1,24 @@ // Endpoint for querying the fibonacci numbers -// src/fibRoute.ts +import { Request, Response } from 'express'; // Import types for Express +import fibonacci from './fib'; // Use ES6 import syntax for importing modules -import { Request, Response } from 'express'; -import { fibonacci } from './fib'; // Use ES6 import syntax +export default (req: Request, res: Response): void => { // Add explicit types for req and res + const numString: string = req.params.num; // Ensure req.params.num is treated as a string + const num = parseInt(numString, 10); // Safely parse num as an integer -export default (req: Request, res: Response): void => { - const numString = req.params.num; // req.params is correctly typed by Express - const num = parseInt(numString, 10); // Explicitly convert string to number - - // Validate num after parsing + // Check if num is a valid number after parsing if (isNaN(num)) { res.status(400).send('Invalid input. Please provide a valid number.'); return; } const fibN: number = fibonacci(num); // Ensure the result of fibonacci is a number - let result: string = `fibonacci(${num}) is ${fibN}`; + let result: string = `fibonacci(${num}) is ${fibN}`; // Result is explicitly typed as a string if (fibN < 0) { result = `fibonacci(${num}) is undefined`; } - res.send(result); + res.send(result); // Send result as a response }; - - -// source CHATGPT \ No newline at end of file From 9bd999895017e39abc3767525fc28315ab6a22d6 Mon Sep 17 00:00:00 2001 From: Filippos Date: Sun, 1 Sep 2024 22:05:44 +0300 Subject: [PATCH 07/15] Clearly define variable types --- src/fib.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/fib.ts b/src/fib.ts index 8d367f3..b9c0912 100644 --- a/src/fib.ts +++ b/src/fib.ts @@ -12,8 +12,11 @@ function fibonacci(n: number): number { return 1; } - // Using an iterative approach to avoid recursion overhead - let a = 0, b = 1, temp; + // Explicitly type variables to avoid 'any' type issues + let a: number = 0; + let b: number = 1; + let temp: number; + for (let i = 2; i <= n; i++) { temp = a + b; a = b; From 07c3fc3243adea1fa7f69b51a5a71da1c18ba47b Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 22:06:02 +0300 Subject: [PATCH 08/15] fixed unsafe assignment issue in issue 2 again --- src/fibRoute.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index b6a8d90..6c13326 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -1,24 +1,23 @@ -// Endpoint for querying the fibonacci numbers +import { Request, Response } from 'express'; +import fibonacci from './fib'; -import { Request, Response } from 'express'; // Import types for Express -import fibonacci from './fib'; // Use ES6 import syntax for importing modules +export default (req: Request, res: Response): void => { + const numString = req.params.num; // Type inference is sufficient + const num = parseInt(numString, 10); -export default (req: Request, res: Response): void => { // Add explicit types for req and res - const numString: string = req.params.num; // Ensure req.params.num is treated as a string - const num = parseInt(numString, 10); // Safely parse num as an integer - - // Check if num is a valid number after parsing if (isNaN(num)) { res.status(400).send('Invalid input. Please provide a valid number.'); return; } - const fibN: number = fibonacci(num); // Ensure the result of fibonacci is a number - let result: string = `fibonacci(${num}) is ${fibN}`; // Result is explicitly typed as a string + const fibN = fibonacci(num); // Type inference is sufficient + let result = `fibonacci(${num}) is ${fibN}`; // Removed explicit type annotation if (fibN < 0) { result = `fibonacci(${num}) is undefined`; } - res.send(result); // Send result as a response + res.send(result); }; + +//chatgpt source From 4cc98a34cfbf6feafc5fbc1123912e32a669ff7f Mon Sep 17 00:00:00 2001 From: Filippos Date: Sun, 1 Sep 2024 22:09:17 +0300 Subject: [PATCH 09/15] Clearly define variable types --- src/fib.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fib.ts b/src/fib.ts index b9c0912..d799920 100644 --- a/src/fib.ts +++ b/src/fib.ts @@ -12,9 +12,9 @@ function fibonacci(n: number): number { return 1; } - // Explicitly type variables to avoid 'any' type issues - let a: number = 0; - let b: number = 1; + // Removed redundant type annotations + let a = 0; + let b = 1; let temp: number; for (let i = 2; i <= n; i++) { From 3780907139455638804f01165807ea6e19d705f5 Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 22:14:41 +0300 Subject: [PATCH 10/15] fixed unsafe assignment issue in issue 2 in relation to .ts file --- src/fibRoute.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 6c13326..3a59fcd 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -1,17 +1,19 @@ -import { Request, Response } from 'express'; -import fibonacci from './fib'; +import { Request, Response } from 'express'; // Import types for Express +import fibonacci from './fib'; // Use ES6 import syntax for importing modules -export default (req: Request, res: Response): void => { - const numString = req.params.num; // Type inference is sufficient - const num = parseInt(numString, 10); +export default (req: Request, res: Response): void => { // Add explicit types for req and res + // Explicitly typing req.params to avoid 'any' issues + const numString: string = req.params.num as unknown as string; // Ensure it's treated as a string + const num: number = parseInt(numString, 10); // Safely parse num as an integer + // Check if num is a valid number after parsing if (isNaN(num)) { res.status(400).send('Invalid input. Please provide a valid number.'); return; } - const fibN = fibonacci(num); // Type inference is sufficient - let result = `fibonacci(${num}) is ${fibN}`; // Removed explicit type annotation + const fibN: number = fibonacci(num); // Ensure the result of fibonacci is a number + let result: string = `fibonacci(${num}) is ${fibN}`; // Ensure result is a string if (fibN < 0) { result = `fibonacci(${num}) is undefined`; From 81858b8c3a729b712e82293988ec0b4ad6c9b8a0 Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 22:18:54 +0300 Subject: [PATCH 11/15] fixed unsafe assignment issue in issue 2 in relation to .ts file --- src/fibRoute.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 3a59fcd..8fa7ded 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -1,10 +1,9 @@ -import { Request, Response } from 'express'; // Import types for Express -import fibonacci from './fib'; // Use ES6 import syntax for importing modules +import { Request, Response } from 'express'; +import fibonacci from './fib'; -export default (req: Request, res: Response): void => { // Add explicit types for req and res - // Explicitly typing req.params to avoid 'any' issues - const numString: string = req.params.num as unknown as string; // Ensure it's treated as a string - const num: number = parseInt(numString, 10); // Safely parse num as an integer +export default (req: Request, res: Response): void => { + const numString = req.params.num as unknown as string; // Ensure it's treated as a string without explicit type + const num = parseInt(numString, 10); // Safely parse num as an integer // Check if num is a valid number after parsing if (isNaN(num)) { @@ -12,8 +11,8 @@ export default (req: Request, res: Response): void => { // Add explicit types f return; } - const fibN: number = fibonacci(num); // Ensure the result of fibonacci is a number - let result: string = `fibonacci(${num}) is ${fibN}`; // Ensure result is a string + const fibN = fibonacci(num); // Type inference is sufficient + let result = `fibonacci(${num}) is ${fibN}`; // Remove explicit type annotation if (fibN < 0) { result = `fibonacci(${num}) is undefined`; @@ -21,5 +20,3 @@ export default (req: Request, res: Response): void => { // Add explicit types f res.send(result); }; - -//chatgpt source From d4817d02f0bec74cfc0c38f573aad30c08b5cc56 Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 22:20:04 +0300 Subject: [PATCH 12/15] Fix eslint errors by removing redundant type annotations and ensuring type safety --- src/fibRoute.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 8fa7ded..3fabc03 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -19,4 +19,5 @@ export default (req: Request, res: Response): void => { } res.send(result); -}; + +}; \ No newline at end of file From c47987cdf4d79089570a76f66bcf9c0f1558b78c Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 22:29:56 +0300 Subject: [PATCH 13/15] Fix negative number and range errors --- src/fibRoute.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 3fabc03..0c7e1ae 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -2,7 +2,7 @@ import { Request, Response } from 'express'; import fibonacci from './fib'; export default (req: Request, res: Response): void => { - const numString = req.params.num as unknown as string; // Ensure it's treated as a string without explicit type + const numString = req.params.num as unknown as string; // Ensure it's treated as a string const num = parseInt(numString, 10); // Safely parse num as an integer // Check if num is a valid number after parsing @@ -11,13 +11,14 @@ export default (req: Request, res: Response): void => { return; } - const fibN = fibonacci(num); // Type inference is sufficient - let result = `fibonacci(${num}) is ${fibN}`; // Remove explicit type annotation - - if (fibN < 0) { - result = `fibonacci(${num}) is undefined`; + // Check if the number is negative + if (num < 0) { + res.send(`fibonacci(${num}) is undefined`); + return; } - res.send(result); + const fibN = fibonacci(num); // Compute the Fibonacci number safely + let result = `fibonacci(${num}) is ${fibN}`; // Prepare the response -}; \ No newline at end of file + res.send(result); +}; From e797c5bd11021bf3cf76fc60240ae3e189c37522 Mon Sep 17 00:00:00 2001 From: Talal Date: Sun, 1 Sep 2024 22:32:56 +0300 Subject: [PATCH 14/15] Fixing result syntax with let --- src/fibRoute.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 0c7e1ae..c66993a 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -18,7 +18,7 @@ export default (req: Request, res: Response): void => { } const fibN = fibonacci(num); // Compute the Fibonacci number safely - let result = `fibonacci(${num}) is ${fibN}`; // Prepare the response + const result = `fibonacci(${num}) is ${fibN}`; // Use const instead of let res.send(result); }; From e38647237a15615f19797e5fb70cb55f4111b277 Mon Sep 17 00:00:00 2001 From: Filippos Date: Sun, 1 Sep 2024 22:36:44 +0300 Subject: [PATCH 15/15] test --- src/fib.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/fib.ts b/src/fib.ts index d799920..57a0d91 100644 --- a/src/fib.ts +++ b/src/fib.ts @@ -24,5 +24,4 @@ function fibonacci(n: number): number { } return b; } - export default fibonacci;