diff --git a/client/eslint.config.js b/client/eslint.config.js index f21b71a..b4d62f8 100644 --- a/client/eslint.config.js +++ b/client/eslint.config.js @@ -2,4 +2,28 @@ import NaomisConfig from "@nhcarrigan/eslint-config"; export default [ ...NaomisConfig, + { + rules: { + "no-console": "off", + "new-cap": "off", + "@typescript-eslint/naming-convention": "off", + "jsdoc/require-jsdoc": "off", + "jsdoc/require-param": "off", + "jsdoc/require-returns": "off", + "@typescript-eslint/no-useless-constructor": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/consistent-type-assertions": "off", + "@typescript-eslint/no-extraneous-class": "off", + "stylistic/no-multi-spaces": "off", + "unicorn/filename-case": "off", + "@typescript-eslint/consistent-type-imports": "off" + }, + }, + { + files: ["**/*.spec.ts"], + rules: { + "no-undef": "off", + "@typescript-eslint/init-declarations": "off" + } + } ] \ No newline at end of file diff --git a/client/package.json b/client/package.json index c34e6a5..9919528 100644 --- a/client/package.json +++ b/client/package.json @@ -27,14 +27,15 @@ "@angular/cli": "^19.1.7", "@angular/compiler-cli": "^19.1.0", "@nhcarrigan/eslint-config": "5.2.0", + "@repo/types": "../packages/types", "@types/jasmine": "~5.1.0", + "eslint": "9.20.1", "jasmine-core": "~5.5.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.7.2", - "@repo/types": "../packages/types" + "typescript": "~5.7.2" } } diff --git a/client/src/app/api.service.spec.ts b/client/src/app/api.service.spec.ts index 322a0c1..1364993 100644 --- a/client/src/app/api.service.spec.ts +++ b/client/src/app/api.service.spec.ts @@ -1,3 +1,9 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { TestBed } from "@angular/core/testing"; import { ApiService } from "./api.service"; diff --git a/client/src/app/api.service.ts b/client/src/app/api.service.ts index 94252bd..3d7c009 100644 --- a/client/src/app/api.service.ts +++ b/client/src/app/api.service.ts @@ -1,30 +1,38 @@ -import { Injectable } from "@angular/core"; -import type { Appeal, Commission, Contact, ErrorResponse, Event, Meeting, Mentorship, SuccessResponse, Staff, DataResponse } from "@repo/types"; - /** - * + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan */ + +import { Injectable } from "@angular/core"; +import type { + Appeal, + Commission, + Contact, + ErrorResponse, + Event, + Meeting, + Mentorship, + SuccessResponse, + Staff, + DataResponse, +} from "@repo/types"; + @Injectable({ providedIn: "root", }) export class ApiService { public url = "https://forms-api.nhcarrigan.com"; - /** - * - */ - constructor() { } + public constructor() {} - /** - * @param token - */ public async validateToken(token: string | null): Promise { - if (!token) { + if (token === null) { return false; } const ipRequest = await fetch("https://api.ipify.org?format=json"); - const ipRes = await ipRequest.json(); - const { ip } = ipRes; + const ipResult = await ipRequest.json() as { ip: string }; + const { ip } = ipResult; const request = await fetch(`${this.url}/validate-token`, { body: JSON.stringify({ ip, token }), headers: { @@ -32,14 +40,13 @@ export class ApiService { }, method: "POST", }); - const response = await request.json(); + const response = await request.json() as { valid: boolean }; return response.valid; } - /** - * @param appeal - */ - public async submitAppeal(appeal: Partial): Promise { + public async submitAppeal( + appeal: Partial, + ): Promise { const request = await fetch(`${this.url}/submit/appeals`, { body: JSON.stringify(appeal), headers: { @@ -47,14 +54,13 @@ export class ApiService { }, method: "POST", }); - const response = await request.json(); + const response = await request.json() as SuccessResponse | ErrorResponse; return response; } - /** - * @param commission - */ - public async submitCommission(commission: Partial): Promise { + public async submitCommission( + commission: Partial, + ): Promise { const request = await fetch(`${this.url}/submit/commissions`, { body: JSON.stringify(commission), headers: { @@ -62,14 +68,13 @@ export class ApiService { }, method: "POST", }); - const response = await request.json(); + const response = await request.json() as SuccessResponse | ErrorResponse; return response; } - /** - * @param contact - */ - public async submitContact(contact: Partial): Promise { + public async submitContact( + contact: Partial, + ): Promise { const request = await fetch(`${this.url}/submit/contacts`, { body: JSON.stringify(contact), headers: { @@ -77,14 +82,13 @@ export class ApiService { }, method: "POST", }); - const response = await request.json(); + const response = await request.json() as SuccessResponse | ErrorResponse; return response; } - /** - * @param event - */ - public async submitEvent(event: Partial): Promise { + public async submitEvent( + event: Partial, + ): Promise { const request = await fetch(`${this.url}/submit/events`, { body: JSON.stringify(event), headers: { @@ -92,14 +96,13 @@ export class ApiService { }, method: "POST", }); - const response = await request.json(); + const response = await request.json() as SuccessResponse | ErrorResponse; return response; } - /** - * @param meeting - */ - public async submitMeeting(meeting: Partial): Promise { + public async submitMeeting( + meeting: Partial, + ): Promise { const request = await fetch(`${this.url}/submit/meetings`, { body: JSON.stringify(meeting), headers: { @@ -107,14 +110,13 @@ export class ApiService { }, method: "POST", }); - const response = await request.json(); + const response = await request.json() as SuccessResponse | ErrorResponse; return response; } - /** - * @param mentorship - */ - public async submitMentorship(mentorship: Partial): Promise { + public async submitMentorship( + mentorship: Partial, + ): Promise { const request = await fetch(`${this.url}/submit/mentorships`, { body: JSON.stringify(mentorship), headers: { @@ -122,14 +124,13 @@ export class ApiService { }, method: "POST", }); - const response = await request.json(); + const response = await request.json() as SuccessResponse | ErrorResponse; return response; } - /** - * @param staff - */ - public async submitStaff(staff: Partial): Promise { + public async submitStaff( + staff: Partial, + ): Promise { const request = await fetch(`${this.url}/submit/staff`, { body: JSON.stringify(staff), headers: { @@ -137,15 +138,21 @@ export class ApiService { }, method: "POST", }); - const response = await request.json(); + const response = await request.json() as SuccessResponse | ErrorResponse; return response; } - /** - * @param type - * @param token - */ - public async getData(type: "appeals" | "commissions" | "contacts" | "events" | "meetings" | "mentorships" | "staff", token: string): Promise { + public async getData( + type: + | "appeals" + | "commissions" + | "contacts" + | "events" + | "meetings" + | "mentorships" + | "staff", + token: string, + ): Promise { const request = await fetch(`${this.url}/list/${type}`, { headers: { "Authorization": token, @@ -153,16 +160,22 @@ export class ApiService { }, method: "GET", }); - const response = await request.json(); + const response = await request.json() as DataResponse | ErrorResponse; return response; } - /** - * @param type - * @param id - * @param token - */ - public async markReviewed(type: "appeals" | "commissions" | "contacts" | "events" | "meetings" | "mentorships" | "staff", id: string, token: string): Promise { + public async markReviewed( + type: + | "appeals" + | "commissions" + | "contacts" + | "events" + | "meetings" + | "mentorships" + | "staff", + id: string, + token: string, + ): Promise { const request = await fetch(`${this.url}/review/${type}`, { body: JSON.stringify({ submissionId: id }), headers: { @@ -171,7 +184,7 @@ export class ApiService { }, method: "PUT", }); - const response = await request.json(); + const response = await request.json() as SuccessResponse | ErrorResponse; return response; } } diff --git a/client/src/app/app.component.spec.ts b/client/src/app/app.component.spec.ts index 3261a94..471faf7 100644 --- a/client/src/app/app.component.spec.ts +++ b/client/src/app/app.component.spec.ts @@ -1,3 +1,9 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { TestBed } from "@angular/core/testing"; import { AppComponent } from "./app.component"; @@ -24,6 +30,8 @@ describe("AppComponent", () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector("h1")?.textContent).toContain("Hello, client"); + expect( + compiled.querySelector("h1")?.textContent, + ).toContain("Hello, client"); }); }); diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index b5ae4d4..07e395c 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts @@ -1,15 +1,18 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { Component } from "@angular/core"; import { RouterOutlet } from "@angular/router"; -/** - * - */ @Component({ imports: [ RouterOutlet ], - selector: 'app-root', - styleUrl: './app.component.css', + selector: "app-root", + styleUrl: "./app.component.css", templateUrl: "./app.component.html", }) export class AppComponent { - title = "NHCarrigan Forms"; + public title = "NHCarrigan Forms"; } diff --git a/client/src/app/app.config.ts b/client/src/app/app.config.ts index 1997966..11370b9 100644 --- a/client/src/app/app.config.ts +++ b/client/src/app/app.config.ts @@ -1,7 +1,17 @@ -import { type ApplicationConfig, provideZoneChangeDetection } from "@angular/core"; +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + +import { type ApplicationConfig, provideZoneChangeDetection } + from "@angular/core"; import { provideRouter } from "@angular/router"; import { routes } from "./app.routes"; export const appConfig: ApplicationConfig = { - providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes) ], + providers: [ + provideZoneChangeDetection({ eventCoalescing: true }), + provideRouter(routes), + ], }; diff --git a/client/src/app/app.routes.ts b/client/src/app/app.routes.ts index 1e670e5..6127667 100644 --- a/client/src/app/app.routes.ts +++ b/client/src/app/app.routes.ts @@ -1,9 +1,17 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { AppealComponent } from "./forms/appeal/appeal.component.js"; -import { CommissionComponent } from "./forms/commission/commission.component.js"; +import { CommissionComponent } + from "./forms/commission/commission.component.js"; import { ContactComponent } from "./forms/contact/contact.component.js"; import { EventComponent } from "./forms/event/event.component.js"; import { MeetingComponent } from "./forms/meeting/meeting.component.js"; -import { MentorshipComponent } from "./forms/mentorship/mentorship.component.js"; +import { MentorshipComponent } + from "./forms/mentorship/mentorship.component.js"; import { StaffComponent } from "./forms/staff/staff.component.js"; import { HomeComponent } from "./home/home.component.js"; import { ReviewComponent } from "./review/review.component.js"; diff --git a/client/src/app/consent/consent.component.spec.ts b/client/src/app/consent/consent.component.spec.ts index b7e05c5..221edec 100644 --- a/client/src/app/consent/consent.component.spec.ts +++ b/client/src/app/consent/consent.component.spec.ts @@ -1,4 +1,10 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; import { ConsentComponent } from "./consent.component"; describe("ConsentComponent", () => { @@ -7,7 +13,7 @@ describe("ConsentComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ ConsentComponent ], + imports: [ ConsentComponent, ReactiveFormsModule ], }). compileComponents(); diff --git a/client/src/app/consent/consent.component.ts b/client/src/app/consent/consent.component.ts index 396a408..612109b 100644 --- a/client/src/app/consent/consent.component.ts +++ b/client/src/app/consent/consent.component.ts @@ -1,13 +1,15 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { Component, input } from "@angular/core"; import { type FormControl, ReactiveFormsModule } from "@angular/forms"; -/** - * - */ @Component({ imports: [ ReactiveFormsModule ], - selector: 'app-consent', - styleUrl: './consent.component.css', + selector: "app-consent", + styleUrl: "./consent.component.css", templateUrl: "./consent.component.html", }) export class ConsentComponent { diff --git a/client/src/app/error/error.component.spec.ts b/client/src/app/error/error.component.spec.ts index 66c2867..8172bfe 100644 --- a/client/src/app/error/error.component.spec.ts +++ b/client/src/app/error/error.component.spec.ts @@ -1,3 +1,8 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { type ComponentFixture, TestBed } from "@angular/core/testing"; import { ErrorComponent } from "./error.component"; diff --git a/client/src/app/error/error.component.ts b/client/src/app/error/error.component.ts index f958cad..fc40683 100644 --- a/client/src/app/error/error.component.ts +++ b/client/src/app/error/error.component.ts @@ -1,12 +1,14 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { Component, input } from "@angular/core"; -/** - * - */ @Component({ imports: [], - selector: 'app-error', - styleUrl: './error.component.css', + selector: "app-error", + styleUrl: "./error.component.css", templateUrl: "./error.component.html", }) export class ErrorComponent { diff --git a/client/src/app/forms/appeal/appeal.component.spec.ts b/client/src/app/forms/appeal/appeal.component.spec.ts index 913bf24..2218da8 100644 --- a/client/src/app/forms/appeal/appeal.component.spec.ts +++ b/client/src/app/forms/appeal/appeal.component.spec.ts @@ -1,4 +1,23 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +import { CommonModule } from "@angular/common"; import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { RouterModule } from "@angular/router"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SelectMenuComponent } + from "../../inputs/select-menu/select-menu.component"; +import { SingleLineComponent } + from "../../inputs/single-line/single-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; import { AppealComponent } from "./appeal.component"; describe("AppealComponent", () => { @@ -7,7 +26,18 @@ describe("AppealComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ AppealComponent ], + imports: [ AppealComponent, + RouterModule, + CommonModule, + ConsentComponent, + UserinfoComponent, + ErrorComponent, + ReactiveFormsModule, + CheckboxComponent, + SingleLineComponent, + SelectMenuComponent, + MultiLineComponent, + SuccessComponent ], }). compileComponents(); diff --git a/client/src/app/forms/appeal/appeal.component.ts b/client/src/app/forms/appeal/appeal.component.ts index 8a34f71..72c0da1 100644 --- a/client/src/app/forms/appeal/appeal.component.ts +++ b/client/src/app/forms/appeal/appeal.component.ts @@ -1,22 +1,27 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { ReactiveFormsModule, FormControl } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { ConsentComponent } from "../../consent/consent.component.js"; -import { ErrorComponent } from "../../error/error.component.js"; -import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component.js"; -import { MultiLineComponent } from "../../inputs/multi-line/multi-line.component.js"; -import { SelectMenuComponent } from "../../inputs/select-menu/select-menu.component.js"; -import { SingleLineComponent } from "../../inputs/single-line/single-line.component.js"; -import { SuccessComponent } from "../../success/success.component.js"; -import { UserinfoComponent } from "../../userinfo/userinfo.component.js"; -import { ApiService } from "../../api.service.js"; -import type { Platform } from "@repo/types/prod/unions/platform.js"; -import type { Sanction } from "@repo/types/prod/unions/sanction.js"; +import { ApiService } from "../../api.service"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SelectMenuComponent } + from "../../inputs/select-menu/select-menu.component"; +import { SingleLineComponent } + from "../../inputs/single-line/single-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; +import type { Platform } from "@repo/types/prod/unions/platform"; +import type { Sanction } from "@repo/types/prod/unions/sanction"; -/** - * - */ @Component({ imports: [ RouterModule, @@ -31,8 +36,8 @@ import type { Sanction } from "@repo/types/prod/unions/sanction.js"; MultiLineComponent, SuccessComponent, ], - selector: 'appeal-form', - styleUrl: './appeal.component.css', + selector: "appeal-form", + styleUrl: "./appeal.component.css", templateUrl: "./appeal.component.html", }) export class AppealComponent { @@ -58,45 +63,40 @@ export class AppealComponent { public consent = new FormControl(false); - /** - * @param apiService - */ - constructor(private readonly apiService: ApiService) {} + public constructor(private readonly apiService: ApiService) {} - /** - * @param e - */ - public submit(e: MouseEvent): void { + // eslint-disable-next-line complexity -- stfu + public submit(event: MouseEvent): void { this.error = ""; - const { form } = e.target as HTMLButtonElement; + const { form } = event.target as HTMLButtonElement; const valid = form?.reportValidity(); - if (!valid) { + if (valid !== true) { return; } this.loading = true; this.apiService. submitAppeal({ - caseNumber: Number.parseInt(this.caseNumber.value ?? "0", 10), - email: this.email.value ?? undefined, appealReason: this.appealReason.value ?? undefined, - firstName: this.firstName.value ?? undefined, behaviourImprove: this.behaviourImprove.value ?? undefined, - lastName: this.lastName.value ?? undefined, behaviourViolation: this.behaviourViolation.value ?? undefined, - platformUsername: this.platformUsername.value ?? undefined, + caseNumber: Number.parseInt(this.caseNumber.value ?? "0", 10), consent: this.consent.value ?? false, - sanctionFair: this.sanctionFair.value ?? undefined, + email: this.email.value ?? undefined, + firstName: this.firstName.value ?? undefined, + lastName: this.lastName.value ?? undefined, + platformUsername: this.platformUsername.value ?? undefined, + sanctionFair: this.sanctionFair.value ?? undefined, sanctionPlatform: this.sanctionPlatform.value ?? undefined, + sanctionReason: this.sanctionReason.value ?? undefined, sanctionType: (this.sanctionType.value?.split(/\s+/)[0] as Sanction | undefined) ?? undefined, - sanctionReason: this.sanctionReason.value ?? undefined, understandBinding: this.understandBinding.value ?? undefined, }). - then((res) => { - if ("error" in res) { - this.error = res.error; + then((response) => { + if ("error" in response) { + this.error = response.error; this.loading = false; } else { this.error = ""; diff --git a/client/src/app/forms/commission/commission.component.spec.ts b/client/src/app/forms/commission/commission.component.spec.ts index aeeca92..3a5df12 100644 --- a/client/src/app/forms/commission/commission.component.spec.ts +++ b/client/src/app/forms/commission/commission.component.spec.ts @@ -1,4 +1,18 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +import { CommonModule } from "@angular/common"; import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { RouterModule } from "@angular/router"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; import { CommissionComponent } from "./commission.component"; describe("CommissionComponent", () => { @@ -7,7 +21,15 @@ describe("CommissionComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ CommissionComponent ], + imports: [ CommissionComponent, + RouterModule, + CommonModule, + ConsentComponent, + UserinfoComponent, + ErrorComponent, + ReactiveFormsModule, + MultiLineComponent, + SuccessComponent ], }). compileComponents(); diff --git a/client/src/app/forms/commission/commission.component.ts b/client/src/app/forms/commission/commission.component.ts index 02666dd..73d241c 100644 --- a/client/src/app/forms/commission/commission.component.ts +++ b/client/src/app/forms/commission/commission.component.ts @@ -1,17 +1,20 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { FormControl, ReactiveFormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { ConsentComponent } from "../../consent/consent.component.js"; -import { ErrorComponent } from "../../error/error.component.js"; -import { MultiLineComponent } from "../../inputs/multi-line/multi-line.component.js"; -import { SuccessComponent } from "../../success/success.component.js"; -import { UserinfoComponent } from "../../userinfo/userinfo.component.js"; -import { ApiService } from "../../api.service.js"; +import { ApiService } from "../../api.service"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; -/** - * - */ @Component({ imports: [ RouterModule, @@ -23,8 +26,8 @@ import { ApiService } from "../../api.service.js"; MultiLineComponent, SuccessComponent, ], - selector: 'commission-form', - styleUrl: './commission.component.css', + selector: "commission-form", + styleUrl: "./commission.component.css", templateUrl: "./commission.component.html", }) export class CommissionComponent { @@ -41,19 +44,13 @@ export class CommissionComponent { public consent = new FormControl(false); - /** - * @param apiService - */ - constructor(private readonly apiService: ApiService) {} + public constructor(private readonly apiService: ApiService) {} - /** - * @param e - */ - public submit(e: MouseEvent): void { + public submit(event: MouseEvent): void { this.error = ""; - const { form } = e.target as HTMLButtonElement; + const { form } = event.target as HTMLButtonElement; const valid = form?.reportValidity(); - if (!valid) { + if (valid !== true) { return; } this.loading = true; @@ -67,9 +64,9 @@ export class CommissionComponent { lastName: this.lastName.value ?? undefined, request: this.request.value ?? undefined, }). - then((res) => { - if ("error" in res) { - this.error = res.error; + then((response) => { + if ("error" in response) { + this.error = response.error; this.loading = false; } else { this.error = ""; diff --git a/client/src/app/forms/contact/contact.component.spec.ts b/client/src/app/forms/contact/contact.component.spec.ts index 9a536ef..6ae9e32 100644 --- a/client/src/app/forms/contact/contact.component.spec.ts +++ b/client/src/app/forms/contact/contact.component.spec.ts @@ -1,4 +1,18 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +import { CommonModule } from "@angular/common"; import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { RouterModule } from "@angular/router"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; import { ContactComponent } from "./contact.component"; describe("ContactComponent", () => { @@ -7,7 +21,15 @@ describe("ContactComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ ContactComponent ], + imports: [ ContactComponent, + RouterModule, + CommonModule, + ConsentComponent, + UserinfoComponent, + ErrorComponent, + ReactiveFormsModule, + MultiLineComponent, + SuccessComponent ], }). compileComponents(); diff --git a/client/src/app/forms/contact/contact.component.ts b/client/src/app/forms/contact/contact.component.ts index 0ffb21b..9d0935c 100644 --- a/client/src/app/forms/contact/contact.component.ts +++ b/client/src/app/forms/contact/contact.component.ts @@ -1,17 +1,20 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { FormControl, ReactiveFormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { ConsentComponent } from "../../consent/consent.component.js"; -import { ErrorComponent } from "../../error/error.component.js"; -import { MultiLineComponent } from "../../inputs/multi-line/multi-line.component.js"; -import { SuccessComponent } from "../../success/success.component.js"; -import { UserinfoComponent } from "../../userinfo/userinfo.component.js"; -import { ApiService } from "../../api.service.js"; +import { ApiService } from "../../api.service"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; -/** - * - */ @Component({ imports: [ RouterModule, @@ -23,8 +26,8 @@ import { ApiService } from "../../api.service.js"; MultiLineComponent, SuccessComponent, ], - selector: 'contact-form', - styleUrl: './contact.component.css', + selector: "contact-form", + styleUrl: "./contact.component.css", templateUrl: "./contact.component.html", }) export class ContactComponent { @@ -41,19 +44,13 @@ export class ContactComponent { public consent = new FormControl(false); - /** - * @param apiService - */ - constructor(private readonly apiService: ApiService) {} + public constructor(private readonly apiService: ApiService) {} - /** - * @param e - */ - public submit(e: MouseEvent): void { + public submit(event: MouseEvent): void { this.error = ""; - const { form } = e.target as HTMLButtonElement; + const { form } = event.target as HTMLButtonElement; const valid = form?.reportValidity(); - if (!valid) { + if (valid !== true) { return; } this.loading = true; @@ -67,9 +64,9 @@ export class ContactComponent { lastName: this.lastName.value ?? undefined, request: this.request.value ?? undefined, }). - then((res) => { - if ("error" in res) { - this.error = res.error; + then((response) => { + if ("error" in response) { + this.error = response.error; this.loading = false; } else { this.error = ""; diff --git a/client/src/app/forms/event/event.component.spec.ts b/client/src/app/forms/event/event.component.spec.ts index 93e0e73..dc2f45c 100644 --- a/client/src/app/forms/event/event.component.spec.ts +++ b/client/src/app/forms/event/event.component.spec.ts @@ -1,4 +1,21 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +import { CommonModule } from "@angular/common"; import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { RouterModule } from "@angular/router"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SingleLineComponent } + from "../../inputs/single-line/single-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; import { EventComponent } from "./event.component"; describe("EventComponent", () => { @@ -7,7 +24,17 @@ describe("EventComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ EventComponent ], + imports: [ EventComponent, + RouterModule, + CommonModule, + ConsentComponent, + UserinfoComponent, + ErrorComponent, + ReactiveFormsModule, + CheckboxComponent, + SingleLineComponent, + MultiLineComponent, + SuccessComponent ], }). compileComponents(); diff --git a/client/src/app/forms/event/event.component.ts b/client/src/app/forms/event/event.component.ts index 9e315bd..18c0b2d 100644 --- a/client/src/app/forms/event/event.component.ts +++ b/client/src/app/forms/event/event.component.ts @@ -1,19 +1,23 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { FormControl, ReactiveFormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { ConsentComponent } from "../../consent/consent.component.js"; -import { ErrorComponent } from "../../error/error.component.js"; -import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component.js"; -import { MultiLineComponent } from "../../inputs/multi-line/multi-line.component.js"; -import { SingleLineComponent } from "../../inputs/single-line/single-line.component.js"; -import { SuccessComponent } from "../../success/success.component.js"; -import { UserinfoComponent } from "../../userinfo/userinfo.component.js"; -import { ApiService } from "../../api.service.js"; +import { ApiService } from "../../api.service"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SingleLineComponent } + from "../../inputs/single-line/single-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; -/** - * - */ @Component({ imports: [ RouterModule, @@ -27,8 +31,8 @@ import { ApiService } from "../../api.service.js"; MultiLineComponent, SuccessComponent, ], - selector: 'event-form', - styleUrl: './event.component.css', + selector: "event-form", + styleUrl: "./event.component.css", templateUrl: "./event.component.html", }) export class EventComponent { @@ -52,19 +56,14 @@ export class EventComponent { public consent = new FormControl(false); - /** - * @param apiService - */ - constructor(private readonly apiService: ApiService) {} + public constructor(private readonly apiService: ApiService) {} - /** - * @param e - */ - public submit(e: MouseEvent): void { + // eslint-disable-next-line complexity -- stfu + public submit(event: MouseEvent): void { this.error = ""; - const { form } = e.target as HTMLButtonElement; + const { form } = event.target as HTMLButtonElement; const valid = form?.reportValidity(); - if (!valid) { + if (valid !== true) { return; } this.loading = true; @@ -72,8 +71,8 @@ export class EventComponent { this.apiService. submitEvent({ companyName: this.company.value ?? undefined, + consent: this.consent.value ?? false, email: this.email.value ?? undefined, - consent: this.consent.value ?? false, eventBudget: this.eventBudget.value ?? undefined, eventDate: this.eventDate.value ?? undefined, eventDescription: this.eventDescription.value ?? undefined, @@ -85,9 +84,9 @@ export class EventComponent { lodgingCovered: this.lodgingCovered.value ?? false, travelCovered: this.travelCovered.value ?? false, }). - then((res) => { - if ("error" in res) { - this.error = res.error; + then((response) => { + if ("error" in response) { + this.error = response.error; this.loading = false; } else { this.error = ""; diff --git a/client/src/app/forms/meeting/meeting.component.spec.ts b/client/src/app/forms/meeting/meeting.component.spec.ts index 3537362..5177d0e 100644 --- a/client/src/app/forms/meeting/meeting.component.spec.ts +++ b/client/src/app/forms/meeting/meeting.component.spec.ts @@ -1,4 +1,21 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +import { CommonModule } from "@angular/common"; import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { RouterModule } from "@angular/router"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SelectMenuComponent } + from "../../inputs/select-menu/select-menu.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; import { MeetingComponent } from "./meeting.component"; describe("MeetingComponent", () => { @@ -7,7 +24,17 @@ describe("MeetingComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ MeetingComponent ], + imports: [ MeetingComponent, + RouterModule, + CommonModule, + ConsentComponent, + UserinfoComponent, + ErrorComponent, + ReactiveFormsModule, + CheckboxComponent, + SelectMenuComponent, + MultiLineComponent, + SuccessComponent ], }). compileComponents(); diff --git a/client/src/app/forms/meeting/meeting.component.ts b/client/src/app/forms/meeting/meeting.component.ts index c20d827..ca256f4 100644 --- a/client/src/app/forms/meeting/meeting.component.ts +++ b/client/src/app/forms/meeting/meeting.component.ts @@ -1,20 +1,24 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { FormControl, ReactiveFormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { ConsentComponent } from "../../consent/consent.component.js"; -import { ErrorComponent } from "../../error/error.component.js"; -import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component.js"; -import { MultiLineComponent } from "../../inputs/multi-line/multi-line.component.js"; -import { SelectMenuComponent } from "../../inputs/select-menu/select-menu.component.js"; -import { SuccessComponent } from "../../success/success.component.js"; -import { UserinfoComponent } from "../../userinfo/userinfo.component.js"; -import { ApiService } from "../../api.service.js"; -import type { SessionLength } from "@repo/types/prod/unions/session.js"; +import { ApiService } from "../../api.service"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SelectMenuComponent } + from "../../inputs/select-menu/select-menu.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; +import type { SessionLength } from "@repo/types/prod/unions/session"; -/** - * - */ @Component({ imports: [ RouterModule, @@ -28,8 +32,8 @@ import type { SessionLength } from "@repo/types/prod/unions/session.js"; MultiLineComponent, SuccessComponent, ], - selector: 'meeting-form', - styleUrl: './meeting.component.css', + selector: "meeting-form", + styleUrl: "./meeting.component.css", templateUrl: "./meeting.component.html", }) export class MeetingComponent { @@ -48,19 +52,14 @@ export class MeetingComponent { public consent = new FormControl(false); - /** - * @param apiService - */ - constructor(private readonly apiService: ApiService) {} + public constructor(private readonly apiService: ApiService) {} - /** - * @param e - */ - public submit(e: MouseEvent): void { + // eslint-disable-next-line complexity -- stfu + public submit(event: MouseEvent): void { this.error = ""; - const { form } = e.target as HTMLButtonElement; + const { form } = event.target as HTMLButtonElement; const valid = form?.reportValidity(); - if (!valid) { + if (valid !== true) { return; } this.loading = true; @@ -74,11 +73,13 @@ export class MeetingComponent { lastName: this.lastName.value ?? undefined, paymentUnderstanding: this.paymentUnderstanding.value ?? undefined, sessionGoal: this.sessionGoal.value ?? undefined, - sessionLength: Number.parseInt(this.sessionLength.value ?? "15", 10) as SessionLength, + sessionLength: Number.parseInt( + this.sessionLength.value ?? "15", 10, + ) as SessionLength, }). - then((res) => { - if ("error" in res) { - this.error = res.error; + then((response) => { + if ("error" in response) { + this.error = response.error; this.loading = false; } else { this.error = ""; diff --git a/client/src/app/forms/mentorship/mentorship.component.spec.ts b/client/src/app/forms/mentorship/mentorship.component.spec.ts index 0641160..dc31d3a 100644 --- a/client/src/app/forms/mentorship/mentorship.component.spec.ts +++ b/client/src/app/forms/mentorship/mentorship.component.spec.ts @@ -1,4 +1,19 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +import { CommonModule } from "@angular/common"; import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { RouterModule } from "@angular/router"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; import { MentorshipComponent } from "./mentorship.component"; describe("MentorshipComponent", () => { @@ -7,7 +22,16 @@ describe("MentorshipComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ MentorshipComponent ], + imports: [ MentorshipComponent, + RouterModule, + CommonModule, + ConsentComponent, + UserinfoComponent, + ErrorComponent, + ReactiveFormsModule, + CheckboxComponent, + MultiLineComponent, + SuccessComponent ], }). compileComponents(); diff --git a/client/src/app/forms/mentorship/mentorship.component.ts b/client/src/app/forms/mentorship/mentorship.component.ts index d559165..1e9d479 100644 --- a/client/src/app/forms/mentorship/mentorship.component.ts +++ b/client/src/app/forms/mentorship/mentorship.component.ts @@ -1,18 +1,21 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { FormControl, ReactiveFormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { ConsentComponent } from "../../consent/consent.component.js"; -import { ErrorComponent } from "../../error/error.component.js"; -import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component.js"; -import { MultiLineComponent } from "../../inputs/multi-line/multi-line.component.js"; -import { SuccessComponent } from "../../success/success.component.js"; -import { UserinfoComponent } from "../../userinfo/userinfo.component.js"; -import { ApiService } from "../../api.service.js"; +import { ApiService } from "../../api.service"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; -/** - * - */ @Component({ imports: [ RouterModule, @@ -25,8 +28,8 @@ import { ApiService } from "../../api.service.js"; MultiLineComponent, SuccessComponent, ], - selector: 'mentorship-form', - styleUrl: './mentorship.component.css', + selector: "mentorship-form", + styleUrl: "./mentorship.component.css", templateUrl: "./mentorship.component.html", }) export class MentorshipComponent { @@ -45,19 +48,14 @@ export class MentorshipComponent { public consent = new FormControl(false); - /** - * @param apiService - */ - constructor(private readonly apiService: ApiService) {} + public constructor(private readonly apiService: ApiService) {} - /** - * @param e - */ - public submit(e: MouseEvent): void { + // eslint-disable-next-line complexity -- stfu + public submit(event: MouseEvent): void { this.error = ""; - const { form } = e.target as HTMLButtonElement; + const { form } = event.target as HTMLButtonElement; const valid = form?.reportValidity(); - if (!valid) { + if (valid !== true) { return; } this.loading = true; @@ -73,9 +71,9 @@ export class MentorshipComponent { mentorshipGoal: this.mentorshipGoal.value ?? undefined, paymentUnderstanding: this.paymentUnderstanding.value ?? false, }). - then((res) => { - if ("error" in res) { - this.error = res.error; + then((response) => { + if ("error" in response) { + this.error = response.error; this.loading = false; } else { this.error = ""; diff --git a/client/src/app/forms/staff/staff.component.spec.ts b/client/src/app/forms/staff/staff.component.spec.ts index 71c153a..79981f4 100644 --- a/client/src/app/forms/staff/staff.component.spec.ts +++ b/client/src/app/forms/staff/staff.component.spec.ts @@ -1,4 +1,23 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +import { CommonModule } from "@angular/common"; import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { RouterModule } from "@angular/router"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SelectMenuComponent } + from "../../inputs/select-menu/select-menu.component"; +import { SingleLineComponent } + from "../../inputs/single-line/single-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; import { StaffComponent } from "./staff.component"; describe("StaffComponent", () => { @@ -7,7 +26,18 @@ describe("StaffComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ StaffComponent ], + imports: [ StaffComponent, + RouterModule, + CommonModule, + ConsentComponent, + UserinfoComponent, + ErrorComponent, + ReactiveFormsModule, + CheckboxComponent, + SingleLineComponent, + SelectMenuComponent, + MultiLineComponent, + SuccessComponent ], }). compileComponents(); diff --git a/client/src/app/forms/staff/staff.component.ts b/client/src/app/forms/staff/staff.component.ts index 77ce022..e6ecef4 100644 --- a/client/src/app/forms/staff/staff.component.ts +++ b/client/src/app/forms/staff/staff.component.ts @@ -1,21 +1,26 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { FormControl, ReactiveFormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import type { Platform } from "@repo/types/prod/unions/platform.js"; -import { ApiService } from "../../api.service.js"; -import { ConsentComponent } from "../../consent/consent.component.js"; -import { ErrorComponent } from "../../error/error.component.js"; -import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component.js"; -import { MultiLineComponent } from "../../inputs/multi-line/multi-line.component.js"; -import { SelectMenuComponent } from "../../inputs/select-menu/select-menu.component.js"; -import { SingleLineComponent } from "../../inputs/single-line/single-line.component.js"; -import { SuccessComponent } from "../../success/success.component.js"; -import { UserinfoComponent } from "../../userinfo/userinfo.component.js"; +import { ApiService } from "../../api.service"; +import { ConsentComponent } from "../../consent/consent.component"; +import { ErrorComponent } from "../../error/error.component"; +import { CheckboxComponent } from "../../inputs/checkbox/checkbox.component"; +import { MultiLineComponent } + from "../../inputs/multi-line/multi-line.component"; +import { SelectMenuComponent } + from "../../inputs/select-menu/select-menu.component"; +import { SingleLineComponent } + from "../../inputs/single-line/single-line.component"; +import { SuccessComponent } from "../../success/success.component"; +import { UserinfoComponent } from "../../userinfo/userinfo.component"; +import type { Platform } from "@repo/types/prod/unions/platform"; -/** - * - */ @Component({ imports: [ RouterModule, @@ -30,8 +35,8 @@ import { UserinfoComponent } from "../../userinfo/userinfo.component.js"; MultiLineComponent, SuccessComponent, ], - selector: 'staff-form', - styleUrl: './staff.component.css', + selector: "staff-form", + styleUrl: "./staff.component.css", templateUrl: "./staff.component.html", }) export class StaffComponent { @@ -57,32 +62,27 @@ export class StaffComponent { public consent = new FormControl(false); - /** - * @param apiService - */ - constructor(private readonly apiService: ApiService) {} + public constructor(private readonly apiService: ApiService) {} - /** - * @param e - */ - public submit(e: MouseEvent): void { + // eslint-disable-next-line complexity -- stfu + public submit(event: MouseEvent): void { this.error = ""; - const { form } = e.target as HTMLButtonElement; + const { form } = event.target as HTMLButtonElement; const valid = form?.reportValidity(); - if (!valid) { + if (valid !== true) { return; } this.loading = true; this.apiService. submitStaff({ - currentBehaviour: this.currentBehaviour.value ?? undefined, - email: this.email.value ?? undefined, - difficultSituation: this.difficultSituation.value ?? undefined, - firstName: this.firstName.value ?? undefined, consent: this.consent.value ?? false, - internalConflict: this.internalConflict.value ?? undefined, + currentBehaviour: this.currentBehaviour.value ?? undefined, + difficultSituation: this.difficultSituation.value ?? undefined, + email: this.email.value ?? undefined, + firstName: this.firstName.value ?? undefined, handlingTrauma: this.handlingTrauma.value ?? undefined, + internalConflict: this.internalConflict.value ?? undefined, lastName: this.lastName.value ?? undefined, leadershipSituation: this.leadershipSituation.value ?? undefined, platform: this.platform.value ?? undefined, @@ -91,9 +91,9 @@ export class StaffComponent { understandVolunteer: this.understandVolunteer.value ?? false, whyJoin: this.whyJoin.value ?? undefined, }). - then((res) => { - if ("error" in res) { - this.error = res.error; + then((response) => { + if ("error" in response) { + this.error = response.error; this.loading = false; } else { this.error = ""; diff --git a/client/src/app/home/home.component.spec.ts b/client/src/app/home/home.component.spec.ts index 0790f03..8b1cd26 100644 --- a/client/src/app/home/home.component.spec.ts +++ b/client/src/app/home/home.component.spec.ts @@ -1,4 +1,10 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { RouterModule } from "@angular/router"; import { HomeComponent } from "./home.component"; describe("HomeComponent", () => { @@ -7,7 +13,7 @@ describe("HomeComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ HomeComponent ], + imports: [ HomeComponent, RouterModule ], }). compileComponents(); diff --git a/client/src/app/home/home.component.ts b/client/src/app/home/home.component.ts index ecb3640..16842af 100644 --- a/client/src/app/home/home.component.ts +++ b/client/src/app/home/home.component.ts @@ -1,13 +1,15 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { Component } from "@angular/core"; import { RouterModule } from "@angular/router"; -/** - * - */ @Component({ imports: [ RouterModule ], - selector: 'app-home', - styleUrl: './home.component.css', + selector: "app-home", + styleUrl: "./home.component.css", templateUrl: "./home.component.html", }) export class HomeComponent { diff --git a/client/src/app/inputs/checkbox/checkbox.component.spec.ts b/client/src/app/inputs/checkbox/checkbox.component.spec.ts index 2dfc10d..e5045a0 100644 --- a/client/src/app/inputs/checkbox/checkbox.component.spec.ts +++ b/client/src/app/inputs/checkbox/checkbox.component.spec.ts @@ -1,4 +1,10 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; import { CheckboxComponent } from "./checkbox.component"; describe("CheckboxComponent", () => { @@ -7,7 +13,7 @@ describe("CheckboxComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ CheckboxComponent ], + imports: [ CheckboxComponent, ReactiveFormsModule ], }). compileComponents(); diff --git a/client/src/app/inputs/checkbox/checkbox.component.ts b/client/src/app/inputs/checkbox/checkbox.component.ts index dbb59f5..06da043 100644 --- a/client/src/app/inputs/checkbox/checkbox.component.ts +++ b/client/src/app/inputs/checkbox/checkbox.component.ts @@ -1,13 +1,15 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { Component, input } from "@angular/core"; import { ReactiveFormsModule, type FormControl } from "@angular/forms"; -/** - * - */ @Component({ imports: [ ReactiveFormsModule ], - selector: 'app-checkbox', - styleUrl: './checkbox.component.css', + selector: "app-checkbox", + styleUrl: "./checkbox.component.css", templateUrl: "./checkbox.component.html", }) export class CheckboxComponent { diff --git a/client/src/app/inputs/multi-line/multi-line.component.spec.ts b/client/src/app/inputs/multi-line/multi-line.component.spec.ts index d91e471..4c20237 100644 --- a/client/src/app/inputs/multi-line/multi-line.component.spec.ts +++ b/client/src/app/inputs/multi-line/multi-line.component.spec.ts @@ -1,4 +1,10 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; import { MultiLineComponent } from "./multi-line.component"; describe("MultiLineComponent", () => { @@ -7,7 +13,7 @@ describe("MultiLineComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ MultiLineComponent ], + imports: [ MultiLineComponent, ReactiveFormsModule ], }). compileComponents(); diff --git a/client/src/app/inputs/multi-line/multi-line.component.ts b/client/src/app/inputs/multi-line/multi-line.component.ts index 0a911ad..85385ec 100644 --- a/client/src/app/inputs/multi-line/multi-line.component.ts +++ b/client/src/app/inputs/multi-line/multi-line.component.ts @@ -1,14 +1,16 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component, input } from "@angular/core"; import { ReactiveFormsModule, type FormControl } from "@angular/forms"; -/** - * - */ @Component({ imports: [ CommonModule, ReactiveFormsModule ], - selector: 'app-multi-line', - styleUrl: './multi-line.component.css', + selector: "app-multi-line", + styleUrl: "./multi-line.component.css", templateUrl: "./multi-line.component.html", }) export class MultiLineComponent { diff --git a/client/src/app/inputs/select-menu/select-menu.component.spec.ts b/client/src/app/inputs/select-menu/select-menu.component.spec.ts index 2dc01bd..09e4571 100644 --- a/client/src/app/inputs/select-menu/select-menu.component.spec.ts +++ b/client/src/app/inputs/select-menu/select-menu.component.spec.ts @@ -1,4 +1,10 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; import { SelectMenuComponent } from "./select-menu.component"; describe("SelectMenuComponent", () => { @@ -7,7 +13,7 @@ describe("SelectMenuComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ SelectMenuComponent ], + imports: [ SelectMenuComponent, ReactiveFormsModule ], }). compileComponents(); diff --git a/client/src/app/inputs/select-menu/select-menu.component.ts b/client/src/app/inputs/select-menu/select-menu.component.ts index 596b64b..e8ec49c 100644 --- a/client/src/app/inputs/select-menu/select-menu.component.ts +++ b/client/src/app/inputs/select-menu/select-menu.component.ts @@ -1,14 +1,16 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ import { CommonModule } from "@angular/common"; import { Component, input } from "@angular/core"; import { ReactiveFormsModule, type FormControl } from "@angular/forms"; -/** - * - */ @Component({ imports: [ CommonModule, ReactiveFormsModule ], - selector: 'app-select-menu', - styleUrl: './select-menu.component.css', + selector: "app-select-menu", + styleUrl: "./select-menu.component.css", templateUrl: "./select-menu.component.html", }) export class SelectMenuComponent { diff --git a/client/src/app/inputs/single-line/single-line.component.spec.ts b/client/src/app/inputs/single-line/single-line.component.spec.ts index 7a10e1a..78eecd0 100644 --- a/client/src/app/inputs/single-line/single-line.component.spec.ts +++ b/client/src/app/inputs/single-line/single-line.component.spec.ts @@ -1,3 +1,9 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { type ComponentFixture, TestBed } from "@angular/core/testing"; import { SingleLineComponent } from "./single-line.component"; diff --git a/client/src/app/inputs/single-line/single-line.component.ts b/client/src/app/inputs/single-line/single-line.component.ts index e90d0d8..ac68525 100644 --- a/client/src/app/inputs/single-line/single-line.component.ts +++ b/client/src/app/inputs/single-line/single-line.component.ts @@ -1,14 +1,17 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { CommonModule } from "@angular/common"; import { Component, input } from "@angular/core"; import { type FormControl, ReactiveFormsModule } from "@angular/forms"; -/** - * - */ @Component({ imports: [ CommonModule, ReactiveFormsModule ], - selector: 'app-single-line', - styleUrl: './single-line.component.css', + selector: "app-single-line", + styleUrl: "./single-line.component.css", templateUrl: "./single-line.component.html", }) export class SingleLineComponent { diff --git a/client/src/app/review/review.component.spec.ts b/client/src/app/review/review.component.spec.ts index 609f0cc..a0d3b38 100644 --- a/client/src/app/review/review.component.spec.ts +++ b/client/src/app/review/review.component.spec.ts @@ -1,4 +1,16 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + +import { CommonModule } from "@angular/common"; import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { ReactiveFormsModule } from "@angular/forms"; +import { RouterModule } from "@angular/router"; +import { ErrorComponent } from "../error/error.component"; +import { SingleLineComponent } + from "../inputs/single-line/single-line.component"; import { ReviewComponent } from "./review.component"; describe("ReviewComponent", () => { @@ -7,7 +19,12 @@ describe("ReviewComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ ReviewComponent ], + imports: [ ReviewComponent, + CommonModule, + ReactiveFormsModule, + RouterModule, + SingleLineComponent, + ErrorComponent ], }). compileComponents(); diff --git a/client/src/app/review/review.component.ts b/client/src/app/review/review.component.ts index 0abdf7c..124629f 100644 --- a/client/src/app/review/review.component.ts +++ b/client/src/app/review/review.component.ts @@ -1,14 +1,18 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +/* global localStorage -- this runs in the browser */ import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { FormControl, ReactiveFormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { ErrorComponent } from "../error/error.component.js"; -import { SingleLineComponent } from "../inputs/single-line/single-line.component.js"; -import { ApiService } from "../api.service.js"; +import { ApiService } from "../api.service"; +import { ErrorComponent } from "../error/error.component"; +import { SingleLineComponent } + from "../inputs/single-line/single-line.component"; -/** - * - */ @Component({ imports: [ CommonModule, @@ -17,15 +21,17 @@ import { ApiService } from "../api.service.js"; SingleLineComponent, ErrorComponent, ], - selector: 'app-review', - styleUrl: './review.component.css', + selector: "app-review", + styleUrl: "./review.component.css", templateUrl: "./review.component.html", }) export class ReviewComponent { public error = ""; public token = new FormControl(""); public valid = false; - public data: Array<{ email: string; id: string; info: Array<{ key: string; value: unknown }> }> = []; + public data: Array<{ + email: string; id: string; info: Array<{ key: string; value: unknown }>; + }> = []; public view: | "" @@ -37,45 +43,40 @@ export class ReviewComponent { | "mentorships" | "staff" = ""; - /** - * @param apiService - */ - constructor(private readonly apiService: ApiService) { + public constructor(private readonly apiService: ApiService) { const storedToken = localStorage.getItem("token"); - if (!storedToken) { + if (storedToken === null) { return; } - this.apiService.validateToken(storedToken) - .then((valid) => { - if (valid) { - this.valid = true; - this.token.setValue(storedToken); - } else { - this.error = 'The token found in local storage is invalid.'; + this.apiService.validateToken(storedToken). + then((valid) => { + if (valid) { + this.valid = true; + this.token.setValue(storedToken); + } else { + this.error = "The token found in local storage is invalid."; + this.valid = false; + } + }). + catch(() => { + // eslint-disable-next-line stylistic/max-len -- Long string + this.error = "An error occurred while validating the token found in local storage."; this.valid = false; - } - }) - .catch(() => { - this.error = 'An error occurred while validating the token found in local storage.'; - this.valid = false; - }); + }); } - /** - * @param e - */ - public submit(e: MouseEvent): void { + public submit(event: MouseEvent): void { this.error = ""; - const { form } = e.target as HTMLButtonElement; + const { form } = event.target as HTMLButtonElement; const valid = form?.reportValidity(); - if (!valid) { + if (valid !== true) { return; } this.apiService. validateToken(this.token.value). - then((valid) => { - if (valid) { + then((tokenValid) => { + if (tokenValid) { this.valid = true; localStorage.setItem("token", this.token.value as string); } else { @@ -89,25 +90,28 @@ export class ReviewComponent { }); } - /** - * @param id - */ public markReviewed(id: string): void { - const view = this.view as "appeals" | "commissions" | "contacts" | "events" | "meetings" | "mentorships" | "staff"; - this.apiService.markReviewed(view, id, this.token.value!).then((data) => { - if ("error" in data) { - this.error = data.error; - } else { - this.data = this.data.filter((item) => { - return item.id !== id; - }); - } - }); + const view = this.view as + | "appeals" + | "commissions" + | "contacts" + | "events" + | "meetings" + | "mentorships" + | "staff"; + void this.apiService. + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- We know token is not null + markReviewed(view, id, this.token.value!).then((data) => { + if ("error" in data) { + this.error = data.error; + } else { + this.data = this.data.filter((item) => { + return item.id !== id; + }); + } + }); } - /** - * @param view - */ public setView( view: | "appeals" @@ -119,17 +123,24 @@ export class ReviewComponent { | "staff", ): void { this.view = view; - this.apiService.getData(view, this.token.value!).then((data) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- We know token is not null + void this.apiService.getData(view, this.token.value!).then((data) => { if ("error" in data) { this.error = data.error; } else { this.data = (data.data as Array< { email: string; id: string } & Record >).map((item) => { - const object: { email: string; id: string; info: Array<{ key: string; value: unknown }> } = { email: item.email, id: item.id, info: [] }; + const object: + { + email: string; + id: string; + info: Array<{ key: string; value: unknown }>; + } + = { email: item.email, id: item.id, info: [] }; for (const key in item) { if (![ "email", "id" ].includes(key)) { - object.info.push({ key, value: item[key] }); + object.info.push({ key: key, value: item[key] }); } } return object; diff --git a/client/src/app/success/success.component.spec.ts b/client/src/app/success/success.component.spec.ts index 04905cb..5df7f1b 100644 --- a/client/src/app/success/success.component.spec.ts +++ b/client/src/app/success/success.component.spec.ts @@ -1,3 +1,9 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { type ComponentFixture, TestBed } from "@angular/core/testing"; import { SuccessComponent } from "./success.component"; diff --git a/client/src/app/success/success.component.ts b/client/src/app/success/success.component.ts index fa1af6c..b12c369 100644 --- a/client/src/app/success/success.component.ts +++ b/client/src/app/success/success.component.ts @@ -1,12 +1,15 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { Component } from "@angular/core"; -/** - * - */ @Component({ imports: [], - selector: 'app-success', - styleUrl: './success.component.css', + selector: "app-success", + styleUrl: "./success.component.css", templateUrl: "./success.component.html", }) export class SuccessComponent { diff --git a/client/src/app/userinfo/userinfo.component.spec.ts b/client/src/app/userinfo/userinfo.component.spec.ts index dfb950e..cb890ca 100644 --- a/client/src/app/userinfo/userinfo.component.spec.ts +++ b/client/src/app/userinfo/userinfo.component.spec.ts @@ -1,4 +1,12 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { type ComponentFixture, TestBed } from "@angular/core/testing"; +import { SingleLineComponent } + from "../inputs/single-line/single-line.component"; import { UserinfoComponent } from "./userinfo.component"; describe("UserinfoComponent", () => { @@ -7,7 +15,7 @@ describe("UserinfoComponent", () => { beforeEach(async() => { await TestBed.configureTestingModule({ - imports: [ UserinfoComponent ], + imports: [ UserinfoComponent, SingleLineComponent ], }). compileComponents(); diff --git a/client/src/app/userinfo/userinfo.component.ts b/client/src/app/userinfo/userinfo.component.ts index b0b34fa..7301ed0 100644 --- a/client/src/app/userinfo/userinfo.component.ts +++ b/client/src/app/userinfo/userinfo.component.ts @@ -1,14 +1,18 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { Component, input } from "@angular/core"; -import { SingleLineComponent } from "../inputs/single-line/single-line.component.js"; +import { SingleLineComponent } + from "../inputs/single-line/single-line.component"; import type { FormControl } from "@angular/forms"; -/** - * - */ @Component({ imports: [ SingleLineComponent ], - selector: 'app-userinfo', - styleUrl: './userinfo.component.css', + selector: "app-userinfo", + styleUrl: "./userinfo.component.css", templateUrl: "./userinfo.component.html", }) export class UserinfoComponent { diff --git a/client/src/main.ts b/client/src/main.ts index e5fc310..fd81e7b 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,8 +1,15 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + import { bootstrapApplication } from "@angular/platform-browser"; import { AppComponent } from "./app/app.component"; import { appConfig } from "./app/app.config"; bootstrapApplication(AppComponent, appConfig). - catch((error) => { + // eslint-disable-next-line unicorn/prefer-top-level-await -- This is the entry point of the application. + catch((error: unknown) => { console.error(error); }); diff --git a/client/tsconfig.app.json b/client/tsconfig.app.json index 3775b37..8e73564 100644 --- a/client/tsconfig.app.json +++ b/client/tsconfig.app.json @@ -4,7 +4,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/app", - "types": [] + "types": [], }, "files": [ "src/main.ts" diff --git a/client/tsconfig.json b/client/tsconfig.json index 5525117..5985f6c 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -16,7 +16,7 @@ "moduleResolution": "bundler", "importHelpers": true, "target": "ES2022", - "module": "ES2022" + "module": "ES2022", }, "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, diff --git a/package.json b/package.json index 086920f..8792fba 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "turbo build", "start": "turbo start", "lint": "turbo lint", - "test": "echo \"Error: no test specified\" && exit 0" + "test": "turbo test" }, "keywords": [], "author": "", diff --git a/packages/types/package.json b/packages/types/package.json index 385b958..ad66d2b 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -8,7 +8,7 @@ "scripts": { "build": "tsc", "lint": "eslint src --max-warnings 0", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 0" }, "keywords": [], "author": "", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d22a354..e283d6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,6 +73,9 @@ importers: '@types/jasmine': specifier: ~5.1.0 version: 5.1.6 + eslint: + specifier: 9.20.1 + version: 9.20.1(jiti@1.21.7) jasmine-core: specifier: ~5.5.0 version: 5.5.0 diff --git a/server/src/handlers/list/generateHandlers.ts b/server/src/handlers/list/generateHandlers.ts index 55a0dae..0a521aa 100644 --- a/server/src/handlers/list/generateHandlers.ts +++ b/server/src/handlers/list/generateHandlers.ts @@ -29,6 +29,7 @@ export const listHandler = async( }), }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error(`/list/${route}`, error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/server/src/handlers/review/generateHandlers.ts b/server/src/handlers/review/generateHandlers.ts index f407417..115458e 100644 --- a/server/src/handlers/review/generateHandlers.ts +++ b/server/src/handlers/review/generateHandlers.ts @@ -47,6 +47,7 @@ export const reviewHandler = async( await markSubmissionReviewed(database, route, submissionId); await response.code(200).send({ success: true }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error(`/review/${route}`, error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/server/src/handlers/submit/appealHandler.ts b/server/src/handlers/submit/appealHandler.ts index 16342f6..5f14b72 100644 --- a/server/src/handlers/submit/appealHandler.ts +++ b/server/src/handlers/submit/appealHandler.ts @@ -53,6 +53,7 @@ export const submitAppealHandler = async( await sendMail("appeal", data); await response.send({ success: true }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error("/submit/appeals", error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/server/src/handlers/submit/commissionHandler.ts b/server/src/handlers/submit/commissionHandler.ts index 3a36a70..71ffad7 100644 --- a/server/src/handlers/submit/commissionHandler.ts +++ b/server/src/handlers/submit/commissionHandler.ts @@ -55,6 +55,7 @@ export const submitCommissionHandler = async( await sendMail("commissions", data); await response.send({ success: true }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error("/submit/commissions", error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/server/src/handlers/submit/contactHandler.ts b/server/src/handlers/submit/contactHandler.ts index a9269b3..b6d2d30 100644 --- a/server/src/handlers/submit/contactHandler.ts +++ b/server/src/handlers/submit/contactHandler.ts @@ -55,6 +55,7 @@ export const submitContactHandler = async( await sendMail("contact", data); await response.send({ success: true }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error("/submit/contacts", error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/server/src/handlers/submit/eventHandler.ts b/server/src/handlers/submit/eventHandler.ts index 210299c..57398ae 100644 --- a/server/src/handlers/submit/eventHandler.ts +++ b/server/src/handlers/submit/eventHandler.ts @@ -55,6 +55,7 @@ export const submitEventHandler = async( await sendMail("event", data); await response.send({ success: true }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error("/submit/events", error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/server/src/handlers/submit/meetingHandler.ts b/server/src/handlers/submit/meetingHandler.ts index 7071e20..31f24dd 100644 --- a/server/src/handlers/submit/meetingHandler.ts +++ b/server/src/handlers/submit/meetingHandler.ts @@ -55,6 +55,7 @@ export const submitMeetingHandler = async( await sendMail("meeting", data); await response.send({ success: true }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error("/submit/meetings", error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/server/src/handlers/submit/mentorshipHandler.ts b/server/src/handlers/submit/mentorshipHandler.ts index d815721..d935e79 100644 --- a/server/src/handlers/submit/mentorshipHandler.ts +++ b/server/src/handlers/submit/mentorshipHandler.ts @@ -55,6 +55,7 @@ export const submitMentorshipHandler = async( await sendMail("mentorship", data); await response.send({ success: true }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error("/submit/mentorships", error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/server/src/handlers/submit/staffHandler.ts b/server/src/handlers/submit/staffHandler.ts index 68f3e95..b599c46 100644 --- a/server/src/handlers/submit/staffHandler.ts +++ b/server/src/handlers/submit/staffHandler.ts @@ -55,6 +55,7 @@ export const submitStaffHandler = async( await sendMail("staff", data); await response.send({ success: true }); } catch (error) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we bein' lazy. await logger.error("/submit/staff", error as Error); await response.status(500).send({ error: error instanceof Error ? error.message diff --git a/turbo.json b/turbo.json index 4379672..5e0cd9e 100644 --- a/turbo.json +++ b/turbo.json @@ -5,6 +5,10 @@ "dependsOn": ["^lint"], "outputs": ["prod/**"] }, + "test": { + "dependsOn": [], + "outputs": [] + }, "lint": { "dependsOn": [], "outputs": []