diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/src/validation.ts b/src/errors/exceptions.ts similarity index 99% rename from src/validation.ts rename to src/errors/exceptions.ts index 89bdf8b..bdbb7a2 100644 --- a/src/validation.ts +++ b/src/errors/exceptions.ts @@ -4,5 +4,4 @@ * @example * `throw new ValidationError("Bad id")` */ - export class ValidationError extends Error {} diff --git a/src/index.test.ts b/src/index.test.ts index c7348f7..5c7f2dd 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -1,6 +1,6 @@ import { assertStrictEquals } from "https://deno.land/std@0.87.0/testing/asserts.ts"; import { sayHello, sayRandomHello } from "./index.ts"; -import { ID } from "./types.ts"; +import { ID } from "./types/id.ts"; Deno.test("Random Hello", () => { const result = sayRandomHello(); diff --git a/src/index.ts b/src/index.ts index 61fad20..e928749 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ import { getLocaleById, localesSize } from "./repository/locales.ts"; -import { ID } from "./types.ts"; +import { ID } from "./types/id.ts"; /** * Display the iconic Hello, World in a random locale @@ -15,5 +15,5 @@ export const sayRandomHello = () => { * @param id Unique identifier */ export const sayHello = (id: ID): string => { - return getLocaleById(id.id); + return getLocaleById(id.value); }; diff --git a/src/repository/data.ts b/src/repository/locales.data.ts similarity index 100% rename from src/repository/data.ts rename to src/repository/locales.data.ts diff --git a/src/repository/locales.ts b/src/repository/locales.ts index 07c827d..bce13ed 100644 --- a/src/repository/locales.ts +++ b/src/repository/locales.ts @@ -1,4 +1,4 @@ -import { locales } from "./data.ts"; +import { locales } from "./locales.data.ts"; export const localesSize = Object.keys(locales).length; diff --git a/src/types.ts b/src/types.ts deleted file mode 100644 index e548fe9..0000000 --- a/src/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ValidationError } from "./validation.ts"; -import { localesSize } from "./repository/locales.ts"; - -export class ID { - constructor(public id: number) { - this.#isValid(id); - } - - #idIsValid = (id: number) => id > 0 && id < localesSize; - - #isValid = (id: number) => { - if (!this.#idIsValid(id)) { - throw new ValidationError(`Invalid index: ${id}`); - } - }; -} diff --git a/src/types.test.ts b/src/types/id.test.ts similarity index 73% rename from src/types.test.ts rename to src/types/id.test.ts index 395ff89..3346758 100644 --- a/src/types.test.ts +++ b/src/types/id.test.ts @@ -1,7 +1,7 @@ -import { ID } from "./types.ts"; -import { ValidationError } from "./validation.ts"; import { assertThrows } from "https://deno.land/std@0.87.0/testing/asserts.ts"; -import { localesSize } from "./repository/locales.ts"; +import { localesSize } from "../repository/locales.ts"; +import { ID } from "./id.ts"; +import { ValidationError } from "../errors/exceptions.ts"; Deno.test("ID validation fails for non strictly positive values", () => { assertThrows(() => new ID(-1), ValidationError, "Invalid index: -1"); diff --git a/src/types/id.ts b/src/types/id.ts new file mode 100644 index 0000000..f4f84be --- /dev/null +++ b/src/types/id.ts @@ -0,0 +1,20 @@ +import { localesSize } from "../repository/locales.ts"; +import { ValidationError } from "../errors/exceptions.ts"; + +/** + * ID is the input type. + * It validates input value at creation + */ +export class ID { + constructor(public value: number) { + this.#validate(value); + } + + #idIsValid = (id: number) => id > 0 && id < localesSize; + + #validate = (id: number) => { + if (!this.#idIsValid(id)) { + throw new ValidationError(`Invalid index: ${id}`); + } + }; +}