From c3af885b9d7bd4a76aafa22f29cac2ab15096795 Mon Sep 17 00:00:00 2001 From: Victor Williams Date: Thu, 14 Dec 2023 04:26:40 -0500 Subject: [PATCH] 2.0.0 --- .npmrc | 1 + README.md | 80 +++++++++++++++++- package-lock.json | 4 +- package.json | 2 +- src/assets/Snapple_logo_(2020).png | Bin 0 -> 38974 bytes .../getFactByNumber/getFactByNumber.js | 9 ++ .../getFactByNumber/getFactByNumber.ts | 9 ++ .../tests/getFactByNumber.test.js | 23 +++++ .../tests/getFactByNumber.test.ts | 20 +++++ src/functions/getFacts/getFacts.js | 10 +++ src/functions/getFacts/getFacts.ts | 8 ++ src/functions/getFacts/tests/getFacts.test.js | 20 +++++ src/functions/getFacts/tests/getFacts.test.ts | 18 ++++ src/functions/listFacts/listFacts.js | 6 ++ src/functions/listFacts/listFacts.ts | 7 ++ .../listFacts/tests/listFacts.test.js | 24 ++++++ .../listFacts/tests/listFacts.test.ts | 22 +++++ src/functions/randomFact/randomFact.js | 7 ++ src/functions/randomFact/randomFact.ts | 8 ++ .../randomFact/tests/randomFact.test.js | 16 ++++ .../randomFact/tests/randomFact.test.ts | 12 +++ src/index.js | 24 +++++- src/index.ts | 34 ++++++-- src/interfaces/snappleFact.js | 2 + src/interfaces/snappleFact.ts | 4 + src/snapplefacts.json | 3 +- 26 files changed, 359 insertions(+), 14 deletions(-) create mode 100644 .npmrc create mode 100644 src/assets/Snapple_logo_(2020).png create mode 100644 src/functions/getFactByNumber/getFactByNumber.js create mode 100644 src/functions/getFactByNumber/getFactByNumber.ts create mode 100644 src/functions/getFactByNumber/tests/getFactByNumber.test.js create mode 100644 src/functions/getFactByNumber/tests/getFactByNumber.test.ts create mode 100644 src/functions/getFacts/getFacts.js create mode 100644 src/functions/getFacts/getFacts.ts create mode 100644 src/functions/getFacts/tests/getFacts.test.js create mode 100644 src/functions/getFacts/tests/getFacts.test.ts create mode 100644 src/functions/listFacts/listFacts.js create mode 100644 src/functions/listFacts/listFacts.ts create mode 100644 src/functions/listFacts/tests/listFacts.test.js create mode 100644 src/functions/listFacts/tests/listFacts.test.ts create mode 100644 src/functions/randomFact/randomFact.js create mode 100644 src/functions/randomFact/randomFact.ts create mode 100644 src/functions/randomFact/tests/randomFact.test.js create mode 100644 src/functions/randomFact/tests/randomFact.test.ts create mode 100644 src/interfaces/snappleFact.js create mode 100644 src/interfaces/snappleFact.ts diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..0f6c723 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@Vaporjawn:registry=https://npm.pkg.github.com diff --git a/README.md b/README.md index 82404f0..9d3ad93 100644 --- a/README.md +++ b/README.md @@ -1 +1,79 @@ -# snapple-facts +

Snapple Logo +Snapple Facts +Snapple Logo +

+ +[![Installation](https://github.com/Vaporjawn/snapple-facts/actions/workflows/install.js.yml/badge.svg)](https://github.com/Vaporjawn/snapple-facts/actions/workflows/install.js.yml) +[![Build](https://github.com/Vaporjawn/snapple-facts/actions/workflows/build.js.yml/badge.svg)](https://github.com/Vaporjawn/snapple-facts/actions/workflows/build.js.yml) +[![Linting](https://github.com/Vaporjawn/snapple-facts/actions/workflows/lint.js.yml/badge.svg)](https://github.com/Vaporjawn/snapple-facts/actions/workflows/lint.js.yml) +[![Tests](https://github.com/Vaporjawn/snapple-facts/actions/workflows/tests.js.yml/badge.svg)](https://github.com/Vaporjawn/snapple-facts/actions/workflows/tests.js.yml) +[![Security Scan](https://github.com/Vaporjawn/snapple-facts/actions/workflows/securityScan.yml/badge.svg)](https://github.com/Vaporjawn/snapple-facts/actions/workflows/securityScan.yml) + +[![GitHub repo forks](https://img.shields.io/github/forks/Vaporjawn/snapple-facts?style=flat&logo=github&logoColor=whitesmoke&label=Forks)](https://github.com/Vaporjawn/snapple-facts/network) [![GitHub repo stars](https://img.shields.io/github/stars/Vaporjawn/snapple-facts?style=flat&logo=github&logoColor=whitesmoke&label=Stars)](https://github.com/Vaporjawn/snapple-facts/stargazers) [![GitHub repo contributors](https://img.shields.io/github/contributors-anon/Vaporjawn/snapple-facts?style=flat&logo=github&logoColor=whitesmoke&label=Contributors)](https://github.com/Vaporjawn/snapple-facts/graphs/contributors)[![GitHub org sponsors](https://img.shields.io/github/sponsors/Vaporjawn?style=flat&logo=github&logoColor=whitesmoke&label=Sponsors)](https://github.com/sponsors/Vaporjawn) [![GitHub repo watchers](https://img.shields.io/github/watchers/Vaporjawn/snapple-facts?style=flat&logo=github&logoColor=whitesmoke&label=Watchers)](https://github.com/Vaporjawn/snapple-facts/watchers) [![GitHub repo size](https://img.shields.io/github/repo-size/Vaporjawn/snapple-facts?style=flat&logo=github&logoColor=whitesmoke&label=Repo%20Size)](https://github.com/Vaporjawn/snapple-facts/archive/refs/heads/main.zip) + + + +[![GitHub package.json dependency version (dev dep on branch)](https://img.shields.io/github/package-json/dependency-version/Vaporjawn/snapple-facts/dev/typescript/main?style=flat&logo=typescript&logoColor=whitesmoke&label=TypeScript)](https://www.typescriptlang.org/) ![GitHub package.json dependency version (dev dep on branch)](https://img.shields.io/github/package-json/dependency-version/Vaporjawn/snapple-facts/dev/prettier/main?style=flat&logo=prettier&logoColor=whitesmoke&label=Prettier) ![GitHub package.json dependency version (dev dep on branch)](https://img.shields.io/github/package-json/dependency-version/Vaporjawn/snapple-facts/dev/eslint/main?style=flat&logo=eslint&logoColor=whitesmoke&label=ESLint) ![GitHub package.json dependency version (dev dep on branch)](https://img.shields.io/github/package-json/dependency-version/Vaporjawn/snapple-facts/dev/jest/main?style=flat&logo=jest&logoColor=whitesmoke&label=Jest)  + +## Technologies + +TypeScriptPrettierESLintJestNodeJSNPM + +## Installation + +[![Installation](https://github.com/Vaporjawn/snapple-facts/actions/workflows/install.js.yml/badge.svg)](https://github.com/Vaporjawn/snapple-facts/actions/workflows/install.js.yml) + +```bash +npm install +``` + +## Running + +```bash +npm start +``` + +or + +```bash +npm run dev +``` + +## Testing + +[![Tests](https://github.com/Vaporjawn/snapple-facts/actions/workflows/tests.js.yml/badge.svg)](https://github.com/Vaporjawn/snapple-facts/actions/workflows/tests.js.yml) + +```bash +npm test +``` + +## Building + +[![Build](https://github.com/Vaporjawn/snapple-facts/actions/workflows/build.js.yml/badge.svg)](https://github.com/Vaporjawn/snapple-facts/actions/workflows/build.js.yml) + +```bash +npm run build +``` + +## How To Contribute + +Click on these badges to see how you might be able to help: + +
+ +[![GitHub repo Issues](https://img.shields.io/github/issues/Vaporjawn/snapple-facts?style=flat&logo=github&logoColor=red&label=Issues)](https://github.com/Vaporjawn/snapple-facts/issues) [![GitHub repo Good Issues for newbies](https://img.shields.io/github/issues/Vaporjawn/snapple-facts/good%20first%20issue?style=flat&logo=github&logoColor=green&label=Good%20First%20issues)](https://github.com/Vaporjawn/snapple-facts/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) [![GitHub Help Wanted issues](https://img.shields.io/github/issues/Vaporjawn/snapple-facts/help%20wanted?style=flat&logo=github&logoColor=b545d1&label=%22Help%20Wanted%22%20issues)](https://github.com/Vaporjawn/snapple-facts/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)[![GitHub repo PRs](https://img.shields.io/github/issues-pr/Vaporjawn/snapple-facts?style=flat&logo=github&logoColor=orange&label=PRs)](https://github.com/Vaporjawn/snapple-facts/pulls) [![GitHub repo Merged PRs](https://img.shields.io/github/issues-search/Vaporjawn/snapple-facts?style=flat&logo=github&logoColor=green&label=Merged%20PRs&query=is%3Amerged)](https://github.com/Vaporjawn/snapple-facts/pulls?q=is%3Apr+is%3Amerged) [![GitHub Help Wanted PRs](https://img.shields.io/github/issues-pr/Vaporjawn/snapple-facts/help%20wanted?style=flat&logo=github&logoColor=b545d1&label=%22Help%20Wanted%22%20PRs)](https://github.com/Vaporjawn/snapple-facts/pulls?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) + +
+ +## Thanks to all Contributors 💪 + +- **Thank you** for considering to contribute +- Feel free to submit feature requests, UI updates, bugs as issues. +- Checkout [Contribution Guidelines](https://github.com/Vaporjawn/snapple-facts/blob/master/CONTRIBUTING.md) for more information. +- Have a feature request? Feel free to create a issue for it. + +[![Contributors](https://contrib.rocks/image?repo=Vaporjawn/snapple-facts)](https://github.com/Vaporjawn/snapple-facts/graphs/contributors) + +## Your Support means a lot + +Give a ⭐ to show support for the project. diff --git a/package-lock.json b/package-lock.json index 80c5d1c..f49a199 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "snapple-facts", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "snapple-facts", - "version": "1.0.0", + "version": "1.0.1", "license": "MIT", "dependencies": { "ts-node": "^10.9.2" diff --git a/package.json b/package.json index 87a0fe0..56368e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "snapple-facts", - "version": "1.0.1", + "version": "2.0.0", "description": "Every Snapple Fact", "main": "./src/index.js", "scripts": { diff --git a/src/assets/Snapple_logo_(2020).png b/src/assets/Snapple_logo_(2020).png new file mode 100644 index 0000000000000000000000000000000000000000..ec2743e78834bc4359f03cece7063176a9dd2ed7 GIT binary patch literal 38974 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

&_C`csU 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 literal 0 HcmV?d00001 diff --git a/src/functions/getFactByNumber/getFactByNumber.js b/src/functions/getFactByNumber/getFactByNumber.js new file mode 100644 index 0000000..894ddc8 --- /dev/null +++ b/src/functions/getFactByNumber/getFactByNumber.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const GetFactByNumber = (args) => { + const { snappleFacts, number } = args; + if (number < 1 || number > snappleFacts.length) + throw new Error('Invalid number'); + return snappleFacts.find(fact => fact.number === number); +}; +exports.default = GetFactByNumber; diff --git a/src/functions/getFactByNumber/getFactByNumber.ts b/src/functions/getFactByNumber/getFactByNumber.ts new file mode 100644 index 0000000..a08ebe6 --- /dev/null +++ b/src/functions/getFactByNumber/getFactByNumber.ts @@ -0,0 +1,9 @@ +import { SnappleFact } from '../../interfaces/snappleFact'; + +const GetFactByNumber = (args: { snappleFacts: SnappleFact[]; number: number }): SnappleFact | undefined => { + const { snappleFacts, number } = args; + if (number < 1 || number > snappleFacts.length) throw new Error('Invalid number'); + return snappleFacts.find(fact => fact.number === number); +}; + +export default GetFactByNumber; diff --git a/src/functions/getFactByNumber/tests/getFactByNumber.test.js b/src/functions/getFactByNumber/tests/getFactByNumber.test.js new file mode 100644 index 0000000..2532c30 --- /dev/null +++ b/src/functions/getFactByNumber/tests/getFactByNumber.test.js @@ -0,0 +1,23 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const getFactByNumber_1 = __importDefault(require("../getFactByNumber")); +describe('getFactByNumber', () => { + it('should return a fact for a valid number', () => { + const snappleFacts = [ + { number: 1, fact: 'fact 1' }, + { number: 2, fact: 'fact 2' }, + ]; + const fact = (0, getFactByNumber_1.default)({ snappleFacts, number: 1 }); + expect(fact).toEqual({ number: 1, fact: 'fact 1' }); + }); + it('should throw an error for an invalid number', () => { + const snappleFacts = [ + { number: 1, fact: 'fact 1' }, + { number: 2, fact: 'fact 2' }, + ]; + expect(() => (0, getFactByNumber_1.default)({ snappleFacts, number: 3 })).toThrow('Invalid number'); + }); +}); diff --git a/src/functions/getFactByNumber/tests/getFactByNumber.test.ts b/src/functions/getFactByNumber/tests/getFactByNumber.test.ts new file mode 100644 index 0000000..1f82b4e --- /dev/null +++ b/src/functions/getFactByNumber/tests/getFactByNumber.test.ts @@ -0,0 +1,20 @@ +import GetFactByNumber from '../getFactByNumber'; + +describe('getFactByNumber', () => { + it('should return a fact for a valid number', () => { + const snappleFacts = [ + { number: 1, fact: 'fact 1' }, + { number: 2, fact: 'fact 2' }, + ]; + const fact = GetFactByNumber({ snappleFacts, number: 1 }); + expect(fact).toEqual({ number: 1, fact: 'fact 1' }); + }); + + it('should throw an error for an invalid number', () => { + const snappleFacts = [ + { number: 1, fact: 'fact 1' }, + { number: 2, fact: 'fact 2' }, + ]; + expect(() => GetFactByNumber({ snappleFacts, number: 3 })).toThrow('Invalid number'); + }); +}); diff --git a/src/functions/getFacts/getFacts.js b/src/functions/getFacts/getFacts.js new file mode 100644 index 0000000..e6dd16d --- /dev/null +++ b/src/functions/getFacts/getFacts.js @@ -0,0 +1,10 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const snappleFacts_json_1 = __importDefault(require("../../snappleFacts.json")); +const GetFacts = () => { + return snappleFacts_json_1.default.snapplefacts; +}; +exports.default = GetFacts; diff --git a/src/functions/getFacts/getFacts.ts b/src/functions/getFacts/getFacts.ts new file mode 100644 index 0000000..ef7fa94 --- /dev/null +++ b/src/functions/getFacts/getFacts.ts @@ -0,0 +1,8 @@ +import { SnappleFact } from '../../interfaces/snappleFact'; +import data from '../../snappleFacts.json'; + +const GetFacts = (): SnappleFact[] => { + return data.snapplefacts; +}; + +export default GetFacts; diff --git a/src/functions/getFacts/tests/getFacts.test.js b/src/functions/getFacts/tests/getFacts.test.js new file mode 100644 index 0000000..7f97e9a --- /dev/null +++ b/src/functions/getFacts/tests/getFacts.test.js @@ -0,0 +1,20 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const getFacts_1 = __importDefault(require("../getFacts")); +describe('GetFacts', () => { + it('should return an array of SnappleFacts', () => { + const facts = (0, getFacts_1.default)(); + expect(facts.length).toBeGreaterThan(0); + }); + it('should return an array of SnappleFacts with numbers', () => { + const facts = (0, getFacts_1.default)(); + expect(facts[0].number).toBeDefined(); + }); + it('should return an array of SnappleFacts with facts', () => { + const facts = (0, getFacts_1.default)(); + expect(facts[0].fact).toBeDefined(); + }); +}); diff --git a/src/functions/getFacts/tests/getFacts.test.ts b/src/functions/getFacts/tests/getFacts.test.ts new file mode 100644 index 0000000..3a9c306 --- /dev/null +++ b/src/functions/getFacts/tests/getFacts.test.ts @@ -0,0 +1,18 @@ +import GetFacts from '../getFacts'; + +describe('GetFacts', () => { + it('should return an array of SnappleFacts', () => { + const facts = GetFacts(); + expect(facts.length).toBeGreaterThan(0); + }); + + it('should return an array of SnappleFacts with numbers', () => { + const facts = GetFacts(); + expect(facts[0].number).toBeDefined(); + }); + + it('should return an array of SnappleFacts with facts', () => { + const facts = GetFacts(); + expect(facts[0].fact).toBeDefined(); + }); +}); diff --git a/src/functions/listFacts/listFacts.js b/src/functions/listFacts/listFacts.js new file mode 100644 index 0000000..ac85084 --- /dev/null +++ b/src/functions/listFacts/listFacts.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ListFacts = (snappleFacts) => { + return snappleFacts.map(fact => fact.fact); +}; +exports.default = ListFacts; diff --git a/src/functions/listFacts/listFacts.ts b/src/functions/listFacts/listFacts.ts new file mode 100644 index 0000000..d4d82cb --- /dev/null +++ b/src/functions/listFacts/listFacts.ts @@ -0,0 +1,7 @@ +import { SnappleFact } from '../../interfaces/snappleFact'; + +const ListFacts = (snappleFacts: SnappleFact[]): string[] => { + return snappleFacts.map(fact => fact.fact); +}; + +export default ListFacts; diff --git a/src/functions/listFacts/tests/listFacts.test.js b/src/functions/listFacts/tests/listFacts.test.js new file mode 100644 index 0000000..4052eb0 --- /dev/null +++ b/src/functions/listFacts/tests/listFacts.test.js @@ -0,0 +1,24 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const listFacts_1 = __importDefault(require("../listFacts")); +describe('ListFacts', () => { + it('should return an array of strings', () => { + const snappleFacts = [ + { fact: 'Fact 1', number: 1 }, + { fact: 'Fact 2', number: 2 }, + { fact: 'Fact 3', number: 3 }, + ]; + const expected = ['Fact 1', 'Fact 2', 'Fact 3']; + const actual = (0, listFacts_1.default)(snappleFacts); + expect(actual).toEqual(expected); + }); + it('should return an empty array when given an empty array', () => { + const snappleFacts = []; + const expected = []; + const actual = (0, listFacts_1.default)(snappleFacts); + expect(actual).toEqual(expected); + }); +}); diff --git a/src/functions/listFacts/tests/listFacts.test.ts b/src/functions/listFacts/tests/listFacts.test.ts new file mode 100644 index 0000000..72c92a7 --- /dev/null +++ b/src/functions/listFacts/tests/listFacts.test.ts @@ -0,0 +1,22 @@ +import { SnappleFact } from '../../../interfaces/snappleFact'; +import ListFacts from '../listFacts'; + +describe('ListFacts', () => { + it('should return an array of strings', () => { + const snappleFacts: SnappleFact[] = [ + { fact: 'Fact 1', number: 1 }, + { fact: 'Fact 2', number: 2 }, + { fact: 'Fact 3', number: 3 }, + ]; + const expected = ['Fact 1', 'Fact 2', 'Fact 3']; + const actual = ListFacts(snappleFacts); + expect(actual).toEqual(expected); + }); + + it('should return an empty array when given an empty array', () => { + const snappleFacts: SnappleFact[] = []; + const expected: string[] = []; + const actual = ListFacts(snappleFacts); + expect(actual).toEqual(expected); + }); +}); diff --git a/src/functions/randomFact/randomFact.js b/src/functions/randomFact/randomFact.js new file mode 100644 index 0000000..1c41a52 --- /dev/null +++ b/src/functions/randomFact/randomFact.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const RandomFact = (snappleFacts) => { + const randomIndex = Math.floor(Math.random() * snappleFacts.length); + return snappleFacts[randomIndex]; +}; +exports.default = RandomFact; diff --git a/src/functions/randomFact/randomFact.ts b/src/functions/randomFact/randomFact.ts new file mode 100644 index 0000000..beb2280 --- /dev/null +++ b/src/functions/randomFact/randomFact.ts @@ -0,0 +1,8 @@ +import { SnappleFact } from '../../interfaces/snappleFact'; + +const RandomFact = (snappleFacts: SnappleFact[]): SnappleFact => { + const randomIndex = Math.floor(Math.random() * snappleFacts.length); + return snappleFacts[randomIndex]; +}; + +export default RandomFact; diff --git a/src/functions/randomFact/tests/randomFact.test.js b/src/functions/randomFact/tests/randomFact.test.js new file mode 100644 index 0000000..de4caad --- /dev/null +++ b/src/functions/randomFact/tests/randomFact.test.js @@ -0,0 +1,16 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const randomFact_1 = __importDefault(require("../randomFact")); +describe('RandomFact', () => { + it('should return a random fact', () => { + const snappleFacts = [ + { number: 1, fact: 'fact 1' }, + { number: 2, fact: 'fact 2' }, + ]; + const fact = (0, randomFact_1.default)(snappleFacts); + expect(fact).toBeDefined(); + }); +}); diff --git a/src/functions/randomFact/tests/randomFact.test.ts b/src/functions/randomFact/tests/randomFact.test.ts new file mode 100644 index 0000000..3f841e0 --- /dev/null +++ b/src/functions/randomFact/tests/randomFact.test.ts @@ -0,0 +1,12 @@ +import RandomFact from '../randomFact'; + +describe('RandomFact', () => { + it('should return a random fact', () => { + const snappleFacts = [ + { number: 1, fact: 'fact 1' }, + { number: 2, fact: 'fact 2' }, + ]; + const fact = RandomFact(snappleFacts); + expect(fact).toBeDefined(); + }); +}); diff --git a/src/index.js b/src/index.js index abd564f..44eca17 100644 --- a/src/index.js +++ b/src/index.js @@ -3,6 +3,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +const getFactByNumber_1 = __importDefault(require("./functions/getFactByNumber/getFactByNumber")); +const getFacts_1 = __importDefault(require("./functions/getFacts/getFacts")); +const listFacts_1 = __importDefault(require("./functions/listFacts/listFacts")); +const randomFact_1 = __importDefault(require("./functions/randomFact/randomFact")); const snappleFacts_json_1 = __importDefault(require("./snappleFacts.json")); -const snappleFacts = snappleFacts_json_1.default.snapplefacts; -exports.default = snappleFacts; +class SnappleFacts { + constructor() { + this.snappleFacts = snappleFacts_json_1.default.snapplefacts; + } + getFacts() { + return (0, getFacts_1.default)(); + } + listFacts() { + return (0, listFacts_1.default)(this.snappleFacts); + } + getFactByNumber(number) { + return (0, getFactByNumber_1.default)({ snappleFacts: this.snappleFacts, number }); + } + randomFact() { + return (0, randomFact_1.default)(this.snappleFacts); + } +} +exports.default = SnappleFacts; diff --git a/src/index.ts b/src/index.ts index 4ad08a1..8c923b7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,32 @@ +import GetFactByNumber from './functions/getFactByNumber/getFactByNumber'; +import GetFacts from './functions/getFacts/getFacts'; +import ListFacts from './functions/listFacts/listFacts'; +import RandomFact from './functions/randomFact/randomFact'; +import { SnappleFact } from './interfaces/snappleFact'; import data from './snappleFacts.json'; -export interface SnappleFact { - fact: string; - number: number; -} +class SnappleFacts { + private snappleFacts: SnappleFact[]; + + constructor() { + this.snappleFacts = data.snapplefacts; + } + + public getFacts(): SnappleFact[] { + return GetFacts(); + } -const snappleFacts: SnappleFact[] = data.snapplefacts; + public listFacts(): string[] { + return ListFacts(this.snappleFacts); + } + + public getFactByNumber(number: number): SnappleFact | undefined { + return GetFactByNumber({ snappleFacts: this.snappleFacts, number }); + } + + public randomFact(): SnappleFact { + return RandomFact(this.snappleFacts); + } +} -export default snappleFacts; +export default SnappleFacts; diff --git a/src/interfaces/snappleFact.js b/src/interfaces/snappleFact.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/src/interfaces/snappleFact.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/src/interfaces/snappleFact.ts b/src/interfaces/snappleFact.ts new file mode 100644 index 0000000..b659c32 --- /dev/null +++ b/src/interfaces/snappleFact.ts @@ -0,0 +1,4 @@ +export interface SnappleFact { + fact: string; + number: number; +} diff --git a/src/snapplefacts.json b/src/snapplefacts.json index 246a841..30f7452 100644 --- a/src/snapplefacts.json +++ b/src/snapplefacts.json @@ -235,7 +235,7 @@ { "number": 68, "fact": "The longest one-syllable word is \"screeched.\"" - }, + }, { "number": 69, "fact": "No word in the English language rhymes with month." @@ -4026,4 +4026,3 @@ } ] } -