diff --git a/Part_9/scripts/.gitignore b/Part_9/scripts/.gitignore new file mode 100644 index 0000000..07e6e47 --- /dev/null +++ b/Part_9/scripts/.gitignore @@ -0,0 +1 @@ +/node_modules diff --git a/Part_9/scripts/bmiCalculator.ts b/Part_9/scripts/bmiCalculator.ts new file mode 100644 index 0000000..64faaa7 --- /dev/null +++ b/Part_9/scripts/bmiCalculator.ts @@ -0,0 +1,53 @@ +interface bmiValues { + height: number, + weight: number +} + +const parseArgs = (args: string[]): bmiValues => { + if (args.length > 4) throw new Error('Too Many Arguments'); + if (args.length < 4) throw new Error('Not Enough Arguments'); + + if(!isNaN(Number(args[2])) && !isNaN(Number(args[3]))) { + return { + height: Number(args[2]), + weight: Number(args[3]) + } + } else { + throw new Error('Provided Values are not Numbers') + } +} + +const calculateBmi = (height: number, weight: number): string => { + const bmi: number = (weight / (height * height)) * 10000; + console.log('Your BMI is:', bmi.toPrecision(4)); + + if (bmi < 16) { + return 'You are Severely Under-Weight 💀'; + } else if (16 < bmi && bmi < 18.4) { + return 'You are Under-Weight 😥'; + } else if (18.5 < bmi && bmi < 24.9) { + return 'You are Healthy 😁'; + } else if (25 < bmi && bmi < 29.9) { + return 'You are Over-Weight 😳'; + } else if (30 < bmi && bmi < 34.9) { + return 'You are Moderately Obese 😰'; + } else if (35 < bmi && bmi < 39.9) { + return 'You are Severely Obese 😨'; + } else if (bmi > 40) { + return 'You are Morbidly Obese 💀'; + } else { + throw new Error('Error occured while calculating BMI'); + } +} + +try { + const { height, weight } = parseArgs(process.argv); + console.log(calculateBmi(height, weight)); +} catch (error) { + let errorMessage = 'Something Wrong Happened!' + if (error instanceof Error) { + errorMessage += '\nError: ' + error.message + } + + console.log(errorMessage) +} diff --git a/Part_9/scripts/package-lock.json b/Part_9/scripts/package-lock.json new file mode 100644 index 0000000..ceceafb --- /dev/null +++ b/Part_9/scripts/package-lock.json @@ -0,0 +1,22 @@ +{ + "name": "first-scripts", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "first-scripts", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@types/node": "^20.2.3" + } + }, + "node_modules/@types/node": { + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==", + "dev": true + } + } +} diff --git a/Part_9/scripts/package.json b/Part_9/scripts/package.json new file mode 100644 index 0000000..d40e836 --- /dev/null +++ b/Part_9/scripts/package.json @@ -0,0 +1,15 @@ +{ + "name": "first-scripts", + "version": "1.0.0", + "description": "", + "main": " ", + "scripts": { + "calculateBmi": "ts-node bmiCalculator.ts", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Savy", + "license": "ISC", + "devDependencies": { + "@types/node": "^20.2.3" + } +} diff --git a/Part_9/scripts/tsconfig.json b/Part_9/scripts/tsconfig.json new file mode 100644 index 0000000..1a93e26 --- /dev/null +++ b/Part_9/scripts/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "noImplicitAny": true + } +}