diff --git a/apps/frontend-e2e/package.json b/apps/frontend-e2e/package.json new file mode 100644 index 0000000..7adee78 --- /dev/null +++ b/apps/frontend-e2e/package.json @@ -0,0 +1,4 @@ +{ + "name": "@library/frontend-e2e", + "version": "0.0.1" +} \ No newline at end of file diff --git a/apps/frontend-e2e/src/e2e/app.cy.ts b/apps/frontend-e2e/src/e2e/app.cy.ts index 24d2f3f..257c02f 100644 --- a/apps/frontend-e2e/src/e2e/app.cy.ts +++ b/apps/frontend-e2e/src/e2e/app.cy.ts @@ -1,13 +1,21 @@ -import { getGreeting } from '../support/app.po'; +/** + * @copyright 2026 NHCarrigan + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + */ -describe('frontend-e2e', () => { - beforeEach(() => cy.visit('/')); +import { getGreeting } from "../support/app.po"; - it('should display welcome message', () => { +describe("frontend-e2e", () => { + beforeEach(() => { + cy.visit("/"); + }); + + it("should display welcome message", () => { // Custom command example, see `../support/commands.ts` file - cy.login('my-email@something.com', 'myPassword'); + cy.login("my-email@something.com", "myPassword"); // Function helper example, see `../support/app.po.ts` file getGreeting().contains(/Welcome/); }); -}); +}); \ No newline at end of file diff --git a/apps/frontend-e2e/src/support/app.po.ts b/apps/frontend-e2e/src/support/app.po.ts index 3293424..91b038c 100644 --- a/apps/frontend-e2e/src/support/app.po.ts +++ b/apps/frontend-e2e/src/support/app.po.ts @@ -1 +1,7 @@ -export const getGreeting = () => cy.get('h1'); +/** + * @copyright 2026 NHCarrigan + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + */ + +export const getGreeting = (): Cypress.Chainable => cy.get("h1"); \ No newline at end of file diff --git a/apps/frontend-e2e/src/support/commands.ts b/apps/frontend-e2e/src/support/commands.ts index c421a3c..e233901 100644 --- a/apps/frontend-e2e/src/support/commands.ts +++ b/apps/frontend-e2e/src/support/commands.ts @@ -1,35 +1,40 @@ +/** + * @copyright 2026 NHCarrigan + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + */ + /// -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** +/** + * This example commands.ts shows you how to + * create various custom commands and overwrite + * existing commands. + * + * For more comprehensive examples of custom + * commands please read more here: + * https://on.cypress.io/custom-commands + */ -// eslint-disable-next-line @typescript-eslint/no-namespace +// eslint-disable-next-line @typescript-eslint/no-namespace -- Required for Cypress type extensions declare namespace Cypress { - // eslint-disable-next-line @typescript-eslint/no-unused-vars + // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Subject is required for type definition interface Chainable { - login(email: string, password: string): void; + login: (email: string, password: string) => void; } } // -- This is a parent command -- -Cypress.Commands.add('login', (email, password) => { - console.log('Custom command example: Login', email, password); +Cypress.Commands.add("login", (email, password) => { + // eslint-disable-next-line no-console -- Example command for demonstration + console.log("Custom command example: Login", email, password); }); -// + // -- This is a child command -- // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) -// -// + // -- This is a dual command -- // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// + // -- This will overwrite an existing command -- -// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) \ No newline at end of file diff --git a/apps/frontend-e2e/src/support/e2e.ts b/apps/frontend-e2e/src/support/e2e.ts index 1c1a9e7..618fc37 100644 --- a/apps/frontend-e2e/src/support/e2e.ts +++ b/apps/frontend-e2e/src/support/e2e.ts @@ -1,17 +1,24 @@ -// *********************************************************** -// This example support/e2e.ts is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** +/** + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + +/** + * This example support/e2e.ts is processed and + * loaded automatically before your test files. + * + * This is a great place to put global configuration and + * behavior that modifies Cypress. + * + * You can change the location of this file or turn off + * automatically serving support files with the + * 'supportFile' configuration option. + * + * You can read more here: + * https://on.cypress.io/configuration + */ // Import commands.ts using ES2015 syntax: -import './commands'; +// eslint-disable-next-line import/no-unassigned-import -- Side effects import for Cypress commands +import "./commands.ts"; diff --git a/shared-types/eslint.config.mjs b/shared-types/eslint.config.mjs index 3f59adf..57fad5a 100644 --- a/shared-types/eslint.config.mjs +++ b/shared-types/eslint.config.mjs @@ -1,8 +1,21 @@ import nhcarrigan from '@nhcarrigan/eslint-config'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); export default [ ...nhcarrigan, { ignores: ['**/dist', '**/out-tsc', 'node_modules'], }, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: './tsconfig.lib.json', + tsconfigRootDir: __dirname, + }, + }, + }, ]; \ No newline at end of file diff --git a/shared-types/package.json b/shared-types/package.json new file mode 100644 index 0000000..3a5e8aa --- /dev/null +++ b/shared-types/package.json @@ -0,0 +1,4 @@ +{ + "name": "@library/shared-types", + "version": "0.0.1" +} \ No newline at end of file diff --git a/shared-types/src/index.ts b/shared-types/src/index.ts index e13003a..137ba74 100644 --- a/shared-types/src/index.ts +++ b/shared-types/src/index.ts @@ -1,4 +1,9 @@ -export * from './lib/game.types'; -export * from './lib/book.types'; -export * from './lib/music.types'; -export * from './lib/auth.types'; \ No newline at end of file +/** + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +export * from "./lib/game.types"; +export * from "./lib/book.types"; +export * from "./lib/music.types"; +export type * from "./lib/auth.types"; \ No newline at end of file diff --git a/shared-types/src/lib/auth.types.ts b/shared-types/src/lib/auth.types.ts index 1740d57..81f53d4 100644 --- a/shared-types/src/lib/auth.types.ts +++ b/shared-types/src/lib/auth.types.ts @@ -1,3 +1,9 @@ +/** + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + export interface User { id: string; email: string; @@ -7,7 +13,10 @@ export interface User { } export interface JwtPayload { - sub: string; // user id + /** + * User id. + */ + sub: string; email: string; username: string; iat?: number; diff --git a/shared-types/src/lib/book.types.ts b/shared-types/src/lib/book.types.ts index 59bc6e4..fe789a0 100644 --- a/shared-types/src/lib/book.types.ts +++ b/shared-types/src/lib/book.types.ts @@ -1,34 +1,40 @@ +/** + * @copyright 2026 NHCarrigan + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + */ + export enum BookStatus { - READING = 'READING', - FINISHED = 'FINISHED', - TO_READ = 'TO_READ', + reading = "READING", + finished = "FINISHED", + toRead = "TO_READ", } export interface Book { - id: string; - title: string; - author: string; - isbn?: string; - status: BookStatus; - dateAdded: Date; + id: string; + title: string; + author: string; + isbn?: string; + status: BookStatus; + dateAdded: Date; dateFinished?: Date; - rating?: number; - notes?: string; - coverImage?: string; - createdAt: Date; - updatedAt: Date; + rating?: number; + notes?: string; + coverImage?: string; + createdAt: Date; + updatedAt: Date; } export interface CreateBookDto { - title: string; - author: string; - isbn?: string; - status: BookStatus; - rating?: number; - notes?: string; + title: string; + author: string; + isbn?: string; + status: BookStatus; + rating?: number; + notes?: string; coverImage?: string; } export interface UpdateBookDto extends Partial { dateFinished?: Date; -} \ No newline at end of file +} diff --git a/shared-types/src/lib/game.types.ts b/shared-types/src/lib/game.types.ts index f2be57c..db61e9b 100644 --- a/shared-types/src/lib/game.types.ts +++ b/shared-types/src/lib/game.types.ts @@ -1,32 +1,38 @@ +/** + * @copyright 2026 NHCarrigan + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + */ + export enum GameStatus { - PLAYING = 'PLAYING', - COMPLETED = 'COMPLETED', - BACKLOG = 'BACKLOG', + playing = "PLAYING", + completed = "COMPLETED", + backlog = "BACKLOG", } export interface Game { - id: string; - title: string; - platform?: string; - status: GameStatus; - dateAdded: Date; + id: string; + title: string; + platform?: string; + status: GameStatus; + dateAdded: Date; dateCompleted?: Date; - rating?: number; - notes?: string; - coverImage?: string; - createdAt: Date; - updatedAt: Date; + rating?: number; + notes?: string; + coverImage?: string; + createdAt: Date; + updatedAt: Date; } export interface CreateGameDto { - title: string; - platform?: string; - status: GameStatus; - rating?: number; - notes?: string; + title: string; + platform?: string; + status: GameStatus; + rating?: number; + notes?: string; coverImage?: string; } export interface UpdateGameDto extends Partial { dateCompleted?: Date; -} \ No newline at end of file +} diff --git a/shared-types/src/lib/music.types.ts b/shared-types/src/lib/music.types.ts index 9aa139a..b02a454 100644 --- a/shared-types/src/lib/music.types.ts +++ b/shared-types/src/lib/music.types.ts @@ -1,40 +1,46 @@ +/** + * @copyright 2026 NHCarrigan + * @copyright 2026 NHCarrigan + * @license Naomi's Public License + */ + export enum MusicType { - ALBUM = 'ALBUM', - SINGLE = 'SINGLE', - EP = 'EP', + album = "ALBUM", + single = "SINGLE", + ep = "EP", } export enum MusicStatus { - LISTENING = 'LISTENING', - COMPLETED = 'COMPLETED', - WANT_TO_LISTEN = 'WANT_TO_LISTEN', + listening = "LISTENING", + completed = "COMPLETED", + wantToListen = "WANT_TO_LISTEN", } export interface Music { - id: string; - title: string; - artist: string; - type: MusicType; - status: MusicStatus; - dateAdded: Date; + id: string; + title: string; + artist: string; + type: MusicType; + status: MusicStatus; + dateAdded: Date; dateCompleted?: Date; - rating?: number; - notes?: string; - coverArt?: string; - createdAt: Date; - updatedAt: Date; + rating?: number; + notes?: string; + coverArt?: string; + createdAt: Date; + updatedAt: Date; } export interface CreateMusicDto { - title: string; - artist: string; - type: MusicType; - status: MusicStatus; - rating?: number; - notes?: string; + title: string; + artist: string; + type: MusicType; + status: MusicStatus; + rating?: number; + notes?: string; coverArt?: string; } export interface UpdateMusicDto extends Partial { dateCompleted?: Date; -} \ No newline at end of file +}