From 96f142f4ed3b0078752177efdf3530a82a8ed9af Mon Sep 17 00:00:00 2001 From: Jarren Bess <7104202+jbb-codes@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:53:16 -0400 Subject: [PATCH 1/2] feat(utils): add string reversal utility with TDD - Add reverseString function that reverses a string character by character - Throw on non-string input with a clear error message - Add three unit tests covering normal reversal, empty string, and invalid input Co-Authored-By: Claude Sonnet 4.6 --- package-lock.json | 2 +- src/utils/reverseString.js | 17 +++++++++++++++++ test/utils/reverseString.spec.js | 25 +++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/utils/reverseString.js create mode 100644 test/utils/reverseString.spec.js diff --git a/package-lock.json b/package-lock.json index 8fce75c..8e2718d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "": { "name": "nodejs-practice-repository", "version": "1.0.0", - "license": "ISC", + "license": "MIT", "devDependencies": { "jest": "^29.7.0" } diff --git a/src/utils/reverseString.js b/src/utils/reverseString.js new file mode 100644 index 0000000..0fa26c6 --- /dev/null +++ b/src/utils/reverseString.js @@ -0,0 +1,17 @@ +/** + * Author: Jarren Bess + * Date: 2 June 2026 + * File: reverseString.js + * Description: Utility function to reverse a string. + */ +"use strict"; + +function reverseString(str) { + if (typeof str !== "string") { + throw new Error("Input must be a string"); + } + + return str.split("").reverse().join(""); +} + +module.exports = { reverseString }; diff --git a/test/utils/reverseString.spec.js b/test/utils/reverseString.spec.js new file mode 100644 index 0000000..adb19a6 --- /dev/null +++ b/test/utils/reverseString.spec.js @@ -0,0 +1,25 @@ +/** + * Author: Jarren Bess + * Date: 2 June 2026 + * File: reverseString.spec.js + * Description: Tests for the reverseString utility function. + */ +"use strict"; + +const { reverseString } = require("../../src/utils/reverseString"); + +describe("reverseString", () => { + it("should reverse a regular string", () => { + const result = reverseString("hello"); + expect(result).toBe("olleh"); + }); + + it("should return an empty string when given an empty string", () => { + const result = reverseString(""); + expect(result).toBe(""); + }); + + it("should throw an error when given a non-string input", () => { + expect(() => reverseString(123)).toThrow("Input must be a string"); + }); +}); From 81b638a92194a42e6e8df908ba7b9331dd25a568 Mon Sep 17 00:00:00 2001 From: Jarren Bess <7104202+jbb-codes@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:12:19 -0400 Subject: [PATCH 2/2] chore: add .gitignore and update README with setup instructions - Ignore node_modules, dist, .env files, logs, .DS_Store, and coverage - Add clone, install, and test instructions to README Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 8 ++++++++ README.md | 20 +++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a95d6c --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +dist/ +.env +.env.local +.env.*.local +*.log +.DS_Store +coverage/ diff --git a/README.md b/README.md index a70037b..b6883cc 100644 --- a/README.md +++ b/README.md @@ -1 +1,19 @@ -# nodejs-practice-repository \ No newline at end of file +# nodejs-practice-repository + +A Node.js practice repo for learning JavaScript utilities and TDD. + +## Getting Started + +**Prerequisites:** Node.js and npm installed. + +```bash +# Clone the repo +git clone https://github.com/jbb-codes/nodejs-practice-repository.git +cd nodejs-practice-repository + +# Install dependencies +npm install + +# Run tests +npm test +```