From b5a3f18ff6baf7fce2669d67910f534097236234 Mon Sep 17 00:00:00 2001 From: asharonbaltazar <58940073+asharonbaltazar@users.noreply.github.com> Date: Tue, 6 Aug 2024 12:46:54 -0400 Subject: [PATCH] fix(lint): Upgrade ESLint (#704) * chore: add new eslint dependencies; remove deprecated * feat: create new eslint `FlatConfig` file * chore: fix eslint errors in `tailwind.config.js` * chore: extend `import.meta.env` * chore: address error eslint warnings * chore: move `eslint` command to project root * chore: remove unused variables and imports * chore: update `bun.lockb` * chore: more lint fixes * fix: add `parse` to cli * chore: address/disable rules * fix: `getUploadUrl` testing woe * chore: linting fixes * chore: re-add `@ts-expect-error` comments * chore: address `submitterName` fallback --- bin/cli/src/lib/runner.ts | 6 +- bin/cli/src/run.ts | 5 +- bun.lockb | Bin 962048 -> 973952 bytes .../components/CheckboxFilter.tsx | 2 +- .../components/ResourceTable.tsx | 6 +- docs/_deploy-metrics/lib/formData.ts | 2 + docs/_deploy-metrics/next.config.js | 2 + eslint.config.mjs | 60 ++++++++++++++++++ lib/lambda/checkConsumerLag.test.ts | 4 -- lib/lambda/createTriggers.test.ts | 1 - lib/lambda/deleteTriggers.test.ts | 3 +- lib/lambda/getAttachmentUrl.test.ts | 2 - lib/lambda/getCpocs.test.ts | 2 +- lib/lambda/getPackageActions.test.ts | 2 +- lib/lambda/getSubTypes.test.ts | 2 +- lib/lambda/getTypes.test.ts | 2 +- lib/lambda/getUploadUrl.test.ts | 21 +++--- lib/lambda/getUploadUrl.ts | 17 +---- lib/lambda/mapRole.test.ts | 1 - .../withdraw-package/withdraw-package.test.ts | 2 +- .../withdraw-package/withdraw-package.ts | 7 +- lib/lambda/postAuth.ts | 20 +++--- lib/lambda/processEmails.ts | 2 +- lib/lambda/runReindex.test.ts | 1 - lib/lambda/search.test.ts | 4 +- lib/lambda/sinkMain.ts | 6 +- lib/lambda/sinkSubtypes.ts | 2 +- lib/lambda/sinkTypes.ts | 2 +- lib/libs/api/auth/user.test.ts | 2 - lib/libs/api/kafka.test.ts | 4 +- lib/libs/email/address-lib.ts | 2 +- lib/libs/email/cognito-lib.ts | 2 +- lib/libs/email/handler-lib.ts | 2 +- lib/libs/email/os-lib.ts | 4 +- lib/libs/opensearch-lib.ts | 14 ++-- lib/libs/sink-lib.ts | 6 +- lib/libs/topics-lib.ts | 23 +++---- lib/local-constructs/clamav-scanning/index.ts | 1 - .../clamav-scanning/src/handlers/defs.test.ts | 1 - .../clamav-scanning/src/handlers/scan.ts | 2 +- .../clamav-scanning/src/lib/clamav.ts | 31 +++++---- .../clamav-scanning/src/lib/file-ext.ts | 8 +-- .../clamav-scanning/src/lib/s3.ts | 7 +- .../clamav-scanning/src/lib/utils.test.ts | 1 - .../clamav-scanning/src/lib/utils.ts | 6 +- lib/local-constructs/cleanup-kafka/index.ts | 1 - .../cleanup-kafka/src/cleanupKafka.ts | 3 +- .../cloudwatch-to-s3/index.test.ts | 1 - .../cloudwatch-to-s3/index.ts | 22 +++---- lib/local-constructs/create-topics/index.ts | 1 - .../create-topics/src/createTopics.ts | 3 +- lib/local-constructs/empty-buckets/index.ts | 1 - .../empty-buckets/src/emptyBuckets.ts | 2 +- lib/local-constructs/manage-users/index.ts | 1 - .../manage-users/src/cognito-lib.ts | 6 +- .../opensearch/main/transforms/issue-rai.ts | 2 +- .../main/transforms/respond-to-rai.ts | 2 +- .../transforms/toggle-withdraw-enabled.ts | 2 +- .../main/transforms/withdraw-package.ts | 2 +- .../main/transforms/withdraw-rai-response.ts | 2 +- .../package-actions/getAvailableActions.ts | 4 +- .../shared-utils/package-check.test.ts | 8 +-- lib/packages/shared-utils/regex.ts | 4 +- lib/packages/shared-utils/rules.test.ts | 1 - lib/packages/shared-utils/s3-url-parser.ts | 8 +-- .../shared-utils/seatool-date-helper.test.ts | 24 +++---- .../shared-utils/seatool-date-helper.ts | 10 +-- lib/packages/shared-utils/testData.ts | 8 ++- lib/packages/shared-utils/user-helper.test.ts | 4 +- lib/stacks/api.ts | 2 +- lib/stacks/auth.ts | 4 +- lib/stacks/data.ts | 28 +++----- lib/stacks/deployment-config.ts | 4 +- lib/stacks/parent.ts | 2 +- package.json | 9 ++- react-app/.eslintrc.cjs | 29 --------- react-app/package.json | 7 -- react-app/src/api/mocks/submit.ts | 3 +- react-app/src/api/submissionService.ts | 4 +- react-app/src/api/useGetUser.test.ts | 20 ++---- react-app/src/api/useSearch.ts | 3 +- .../components/BreadCrumb/BreadCrumb.test.tsx | 6 +- .../Form/content/PackageSection.tsx | 4 +- react-app/src/components/Inputs/form.tsx | 2 +- react-app/src/components/Inputs/switch.tsx | 2 +- react-app/src/components/RHF/Field.tsx | 2 +- react-app/src/components/RHF/FieldArray.tsx | 3 +- react-app/src/components/RHF/FormGroup.tsx | 3 +- react-app/src/components/RHF/Section.tsx | 2 +- react-app/src/components/RHF/Slot.tsx | 2 +- react-app/src/components/RHF/SlotField.tsx | 3 +- .../src/components/RHF/tests/NameGen.test.tsx | 2 - react-app/src/components/RHF/utils/is.ts | 3 +- react-app/src/components/Routing/Link.tsx | 5 -- react-app/src/components/Routing/hooks.ts | 16 +---- react-app/src/components/Routing/types.ts | 9 +-- react-app/src/config.tsx | 1 - react-app/src/features/dashboard/index.tsx | 1 - react-app/src/features/faq/index.tsx | 4 +- .../legacy-shared-components.tsx | 6 +- .../lib/modules/temporary-extension/index.tsx | 2 +- .../temporary-extension/legacy-components.tsx | 3 +- .../ExternalAppLandingPage.tsx | 1 - .../src/features/submission/app-k/index.tsx | 2 +- .../src/features/submission/app-k/slots.tsx | 5 +- react-app/src/features/webforms/Webform.tsx | 5 +- react-app/src/hooks/useCountdown/index.ts | 6 +- react-app/src/hooks/useIdle/index.ts | 2 +- react-app/src/hooks/useParams.ts | 6 +- react-app/src/utils/Poller/DataPoller.ts | 2 +- react-app/src/utils/labelMappers.ts | 1 - react-app/src/utils/useSeaToolAuthorityId.ts | 6 +- react-app/src/vite-env.d.ts | 23 +++++++ react-app/tailwind.config.js | 1 + react-app/testing/setup.ts | 1 - 115 files changed, 330 insertions(+), 351 deletions(-) create mode 100644 eslint.config.mjs delete mode 100644 react-app/.eslintrc.cjs create mode 100644 react-app/src/vite-env.d.ts diff --git a/bin/cli/src/lib/runner.ts b/bin/cli/src/lib/runner.ts index f35b6625f0..19c85a0d71 100644 --- a/bin/cli/src/lib/runner.ts +++ b/bin/cli/src/lib/runner.ts @@ -38,7 +38,7 @@ export class LabeledProcessRunner { } let maxLength = 0; - for (let pre in this.prefixColors) { + for (const pre in this.prefixColors) { if (pre.length > maxLength) { maxLength = pre.length; } @@ -50,7 +50,7 @@ export class LabeledProcessRunner { private sanitizeInput(input) { // A basic pattern that allows letters, numbers, dashes, underscores, and periods // Adjust the pattern to fit the expected input format - const sanitizedInput = input.replace(/[^a-zA-Z0-9-_\.]/g, ""); + const sanitizedInput = input.replace(/[^a-zA-Z0-9-_.]/g, ""); return sanitizedInput; } @@ -90,7 +90,7 @@ export class LabeledProcessRunner { const handleOutput = (data: Buffer, prefix: string, silenced: boolean) => { const paddedPrefix = this.formattedPrefix(prefix); if (!silenced) - for (let line of data.toString().split("\n")) { + for (const line of data.toString().split("\n")) { process.stdout.write(`${paddedPrefix} ${line}\n`); } }; diff --git a/bin/cli/src/run.ts b/bin/cli/src/run.ts index bbc6e96751..e1f5c046a8 100644 --- a/bin/cli/src/run.ts +++ b/bin/cli/src/run.ts @@ -14,7 +14,7 @@ import { } from "./commands"; yargs - .fail((msg, err, _) => { + .fail((msg, err) => { if (err) throw err; if (msg) console.error(msg); process.exit(1); @@ -32,4 +32,5 @@ yargs .command(getCost) .strict() .scriptName("run") - .demandCommand(1, "").argv; + .demandCommand(1, "") + .parse(); diff --git a/bun.lockb b/bun.lockb index d6605082c748fb11f2cd762d62dfdbd479b9e5fc..82b8cd33bed4ee6b5372ac8f1636600fc630be45 100755 GIT binary patch delta 220412 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 >r3RJo3Y%*0^`hC0u|B#7tyM!iWqe#PsEPt;3m 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 AH~;_u delta 213509 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

M?^8>FF#jXViA#&C^a^E8p~id~d)Om@M0GA?Os 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 YU`@_j3{^U85k4kt5n(5tw=k0bAJwXpk^lez diff --git a/docs/_deploy-metrics/components/CheckboxFilter.tsx b/docs/_deploy-metrics/components/CheckboxFilter.tsx index 9b55eaae55..a61c119816 100644 --- a/docs/_deploy-metrics/components/CheckboxFilter.tsx +++ b/docs/_deploy-metrics/components/CheckboxFilter.tsx @@ -9,7 +9,7 @@ type CheckboxFilterProps = Omit & { }; export const CheckboxFilter = (props: CheckboxFilterProps) => { - const { options, label, spacing = "2", showSearch, ...rest } = props; + const { options, label, spacing = "2", ...rest } = props; return ( diff --git a/docs/_deploy-metrics/components/ResourceTable.tsx b/docs/_deploy-metrics/components/ResourceTable.tsx index 6dab8661e4..985dafb4fa 100644 --- a/docs/_deploy-metrics/components/ResourceTable.tsx +++ b/docs/_deploy-metrics/components/ResourceTable.tsx @@ -1,12 +1,14 @@ +/* eslint-disable */ + import * as UI from "@chakra-ui/react"; import { formatDistance } from "date-fns"; import { Resource } from "../lib/getAwsResources"; const ResourceTypeLabel = ({ type }: { type: string }) => { - let iconName = type.split("::")[1]; + const iconName = type.split("::")[1]; try { var ICON = require(`react-aws-icons/dist/aws/logo/${iconName}`).default; - } catch (ex) { + } catch { var ICON = require(`react-aws-icons/dist/aws/logo/AWS`).default; } diff --git a/docs/_deploy-metrics/lib/formData.ts b/docs/_deploy-metrics/lib/formData.ts index bccd8ce395..04bc972a2b 100644 --- a/docs/_deploy-metrics/lib/formData.ts +++ b/docs/_deploy-metrics/lib/formData.ts @@ -1,3 +1,5 @@ +/* eslint no-prototype-builtins: 0 */ // --> OFF + export type FormResult = { version: string; data: any; // replace 'any' with the actual type of the data returned from the API diff --git a/docs/_deploy-metrics/next.config.js b/docs/_deploy-metrics/next.config.js index b0cda4adb8..f53350210e 100644 --- a/docs/_deploy-metrics/next.config.js +++ b/docs/_deploy-metrics/next.config.js @@ -1,3 +1,5 @@ +/* eslint no-undef: 0 */ // --> OFF + /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..0ba8b92501 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,60 @@ +// @ts-check +import react from "eslint-plugin-react"; +import eslintReactHooks from "eslint-plugin-react-hooks"; +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import { fixupPluginRules, includeIgnoreFile } from "@eslint/compat"; +import { fileURLToPath } from "url"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const gitignorePath = path.resolve(__dirname, ".gitignore"); + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, + // @ts-expect-error https://github.com/typescript-eslint/typescript-eslint/issues/8522 + includeIgnoreFile(gitignorePath), + { + plugins: { + react, + // @ts-expect-error https://github.com/facebook/react/pull/28773#issuecomment-2147149016 + "react-hooks": fixupPluginRules(eslintReactHooks), + }, + languageOptions: { + ecmaVersion: 2020, + sourceType: "module", + + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + + settings: { + react: { + version: "detect", + }, + }, + + rules: { + "@typescript-eslint/no-empty-interface": "off", + "react/react-in-jsx-scope": "off", + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "warn", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/ban-ts-comment": [ + "off", + { + "ts-ignore": false, + "ts-nocheck": false, + "ts-check": true, + "ts-expect-error": true, + }, + ], + }, + }, +); diff --git a/lib/lambda/checkConsumerLag.test.ts b/lib/lambda/checkConsumerLag.test.ts index b2d4497732..3c4a684ab3 100644 --- a/lib/lambda/checkConsumerLag.test.ts +++ b/lib/lambda/checkConsumerLag.test.ts @@ -1,10 +1,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { handler } from "./checkConsumerLag"; import { Kafka } from "kafkajs"; -import { - LambdaClient, - ListEventSourceMappingsCommand, -} from "@aws-sdk/client-lambda"; const mockKafkaAdmin = { connect: vi.fn(), diff --git a/lib/lambda/createTriggers.test.ts b/lib/lambda/createTriggers.test.ts index 15f491bf64..2742df1bec 100644 --- a/lib/lambda/createTriggers.test.ts +++ b/lib/lambda/createTriggers.test.ts @@ -5,7 +5,6 @@ import { CreateEventSourceMappingCommand, GetEventSourceMappingCommand, } from "@aws-sdk/client-lambda"; -import { randomUUID } from "crypto"; vi.mock("@aws-sdk/client-lambda", () => ({ LambdaClient: vi.fn().mockImplementation(() => ({ diff --git a/lib/lambda/deleteTriggers.test.ts b/lib/lambda/deleteTriggers.test.ts index fca71973e9..28125ed84d 100644 --- a/lib/lambda/deleteTriggers.test.ts +++ b/lib/lambda/deleteTriggers.test.ts @@ -1,10 +1,9 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; -import { handler, deleteAllTriggersForFunctions } from "./deleteTriggers"; +import { handler } from "./deleteTriggers"; import { LambdaClient, ListEventSourceMappingsCommand, DeleteEventSourceMappingCommand, - GetEventSourceMappingCommand, } from "@aws-sdk/client-lambda"; vi.mock("@aws-sdk/client-lambda", () => ({ diff --git a/lib/lambda/getAttachmentUrl.test.ts b/lib/lambda/getAttachmentUrl.test.ts index ec202e5e71..9f846b7b7d 100644 --- a/lib/lambda/getAttachmentUrl.test.ts +++ b/lib/lambda/getAttachmentUrl.test.ts @@ -2,8 +2,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { APIGatewayEvent } from "aws-lambda"; import { handler } from "./getAttachmentUrl"; import { response } from "libs/handler-lib"; -import { STSClient, AssumeRoleCommand } from "@aws-sdk/client-sts"; -import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; import { getStateFilter } from "../libs/api/auth/user"; import { getPackage, getPackageChangelog } from "../libs/api/package"; diff --git a/lib/lambda/getCpocs.test.ts b/lib/lambda/getCpocs.test.ts index 648b13802e..1477657142 100644 --- a/lib/lambda/getCpocs.test.ts +++ b/lib/lambda/getCpocs.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { APIGatewayEvent } from "aws-lambda"; -import { handler, queryCpocs } from "./getCpocs"; +import { handler } from "./getCpocs"; import { response } from "libs/handler-lib"; import * as os from "libs/opensearch-lib"; diff --git a/lib/lambda/getPackageActions.test.ts b/lib/lambda/getPackageActions.test.ts index 8255f6a6f4..4297ae8d89 100644 --- a/lib/lambda/getPackageActions.test.ts +++ b/lib/lambda/getPackageActions.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { APIGatewayEvent } from "aws-lambda"; -import { handler, getPackageActions } from "./getPackageActions"; +import { handler } from "./getPackageActions"; import { response } from "libs/handler-lib"; import { getAvailableActions } from "shared-utils"; import { getPackage } from "../libs/api/package/getPackage"; diff --git a/lib/lambda/getSubTypes.test.ts b/lib/lambda/getSubTypes.test.ts index b823afd776..3e700e9af0 100644 --- a/lib/lambda/getSubTypes.test.ts +++ b/lib/lambda/getSubTypes.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { APIGatewayEvent } from "aws-lambda"; -import { handler, querySubTypes } from "./getSubTypes"; +import { handler } from "./getSubTypes"; import { response } from "libs/handler-lib"; import * as os from "libs/opensearch-lib"; diff --git a/lib/lambda/getTypes.test.ts b/lib/lambda/getTypes.test.ts index 15a98b9d0f..1ef0a8c5e1 100644 --- a/lib/lambda/getTypes.test.ts +++ b/lib/lambda/getTypes.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { APIGatewayEvent } from "aws-lambda"; -import { handler, queryTypes } from "./getTypes"; +import { handler } from "./getTypes"; import { response } from "libs/handler-lib"; import * as os from "libs/opensearch-lib"; diff --git a/lib/lambda/getUploadUrl.test.ts b/lib/lambda/getUploadUrl.test.ts index b33df722c6..4c12a045fe 100644 --- a/lib/lambda/getUploadUrl.test.ts +++ b/lib/lambda/getUploadUrl.test.ts @@ -1,11 +1,9 @@ -import { describe, it, expect, vi, beforeEach } from "vitest"; +import { describe, it, expect, vi, beforeEach, Mock } from "vitest"; import { APIGatewayEvent } from "aws-lambda"; import { handler } from "./getUploadUrl"; import { response } from "libs/handler-lib"; -import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; import { v4 as uuidv4 } from "uuid"; -import * as path from "node:path"; vi.mock("libs/handler-lib", () => ({ response: vi.fn(), @@ -29,7 +27,7 @@ describe("Handler for generating signed URL", () => { vi.clearAllMocks(); process.env.attachmentsBucketName = "test-bucket"; process.env.attachmentsBucketRegion = "test-region"; - (uuidv4 as vi.Mock).mockReturnValue("123e4567-e89b-12d3-a456-426614174000"); + (uuidv4 as Mock).mockReturnValue("123e4567-e89b-12d3-a456-426614174000"); }); it("should return 400 if event body is missing", async () => { @@ -45,7 +43,7 @@ describe("Handler for generating signed URL", () => { it("should return 200 with signed URL, bucket, and key", async () => { const mockUrl = "https://example.com/signed-url"; - (getSignedUrl as vi.Mock).mockResolvedValueOnce(mockUrl); + (getSignedUrl as Mock).mockResolvedValueOnce(mockUrl); const event = { body: JSON.stringify({ fileName: "test-file.pdf" }), @@ -61,11 +59,11 @@ describe("Handler for generating signed URL", () => { key: "123e4567-e89b-12d3-a456-426614174000.pdf", }, }); - expect(getSignedUrl).toHaveBeenCalled; + expect(getSignedUrl).toHaveBeenCalled(); }); it("should return 500 if an error occurs during processing", async () => { - (getSignedUrl as vi.Mock).mockRejectedValueOnce(new Error("Test error")); + (getSignedUrl as Mock).mockRejectedValueOnce(new Error("Test error")); const event = { body: JSON.stringify({ fileName: "test-file.pdf" }), @@ -79,9 +77,14 @@ describe("Handler for generating signed URL", () => { }); }); - it("should throw an error if required environment variables are missing", () => { + it("should throw an error if required environment variables are missing", async () => { delete process.env.attachmentsBucketName; - expect(() => handler({} as APIGatewayEvent)).toThrowError; + await handler({} as APIGatewayEvent); + + expect(response).toHaveBeenCalledWith({ + statusCode: 500, + body: { message: "Internal server error" }, + }); }); }); diff --git a/lib/lambda/getUploadUrl.ts b/lib/lambda/getUploadUrl.ts index bfe0889eeb..2461983595 100644 --- a/lib/lambda/getUploadUrl.ts +++ b/lib/lambda/getUploadUrl.ts @@ -11,9 +11,10 @@ const s3 = new S3Client({ }); export const handler = async (event: APIGatewayEvent) => { - validateEnvVariable("attachmentsBucketName"); - validateEnvVariable("attachmentsBucketRegion"); try { + validateEnvVariable("attachmentsBucketName"); + validateEnvVariable("attachmentsBucketRegion"); + if (!event.body) { return response({ statusCode: 400, @@ -48,15 +49,3 @@ export const handler = async (event: APIGatewayEvent) => { }); } }; - -function checkEnvVariables(requiredEnvVariables: string[]) { - const missingVariables = requiredEnvVariables.filter( - (envVar) => !process.env[envVar], - ); - - if (missingVariables.length > 0) { - throw new Error( - `Missing required environment variables: ${missingVariables.join(", ")}`, - ); - } -} diff --git a/lib/lambda/mapRole.test.ts b/lib/lambda/mapRole.test.ts index 59203266b5..4bff81432b 100644 --- a/lib/lambda/mapRole.test.ts +++ b/lib/lambda/mapRole.test.ts @@ -1,5 +1,4 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; -import { Handler } from "aws-lambda"; import { send, SUCCESS, FAILED } from "cfn-response-async"; import { handler } from "./mapRole"; import * as os from "../libs/opensearch-lib"; diff --git a/lib/lambda/package-actions/withdraw-package/withdraw-package.test.ts b/lib/lambda/package-actions/withdraw-package/withdraw-package.test.ts index 9c8329751b..efdd91ca82 100644 --- a/lib/lambda/package-actions/withdraw-package/withdraw-package.test.ts +++ b/lib/lambda/package-actions/withdraw-package/withdraw-package.test.ts @@ -1,4 +1,4 @@ -import { assert, describe, expect, it, vi } from "vitest"; +import { describe, expect, it, vi } from "vitest"; import { withdrawPackage } from "./withdraw-package"; import { generateMock } from "@anatine/zod-mock"; import { withdrawPackageSchema } from "shared-types"; diff --git a/lib/lambda/package-actions/withdraw-package/withdraw-package.ts b/lib/lambda/package-actions/withdraw-package/withdraw-package.ts index 3866a1afbf..a6f9e80891 100644 --- a/lib/lambda/package-actions/withdraw-package/withdraw-package.ts +++ b/lib/lambda/package-actions/withdraw-package/withdraw-package.ts @@ -1,9 +1,4 @@ -import { - WithdrawPackage, - withdrawPackageSchema, - SEATOOL_STATUS, - Action, -} from "shared-types"; +import { withdrawPackageSchema, SEATOOL_STATUS, Action } from "shared-types"; import { seaToolFriendlyTimestamp } from "shared-utils"; import { response } from "../../../libs/handler-lib"; import { TOPIC_NAME } from "../consts"; diff --git a/lib/lambda/postAuth.ts b/lib/lambda/postAuth.ts index 0a1aec5c34..433ac8e94c 100644 --- a/lib/lambda/postAuth.ts +++ b/lib/lambda/postAuth.ts @@ -10,7 +10,7 @@ import { getSecret } from "shared-utils"; // Initialize Cognito client const client = new CognitoIdentityProviderClient({}); -export const handler: Handler = async (event, context) => { +export const handler: Handler = async (event) => { console.log(JSON.stringify(event, null, 2)); // Check if idmInfoSecretArn is provided @@ -30,7 +30,7 @@ export const handler: Handler = async (event, context) => { throw error; } - const { request, response } = event; + const { request } = event; const { userAttributes } = request; if (!userAttributes.identities) { @@ -56,12 +56,12 @@ export const handler: Handler = async (event, context) => { `Network response was not ok. Response was ${response.status}: ${response.statusText}`, ); } - let data = await response.json(); + const data = await response.json(); console.log(JSON.stringify(data, null, 2)); - let roleArray: string[] = []; - let stateArray: string[] = []; + const roleArray: string[] = []; + const stateArray: string[] = []; data.userProfileAppRoles.userRolesInfoList.forEach((element: any) => { - let role = element.roleName; + const role = element.roleName; if (Object.values(UserRoles).includes(role)) { roleArray.push(role); if (STATE_ROLES.includes(role)) { @@ -74,7 +74,7 @@ export const handler: Handler = async (event, context) => { } }); - let attributeData: any = { + const attributeData: any = { Username: event.userName, UserPoolId: event.userPoolId, UserAttributes: [ @@ -126,7 +126,7 @@ async function updateUserAttributes(params: any): Promise { : []; // Prepare for updating user attributes - let attributeData: any = { + const attributeData: any = { UserPoolId: params.UserPoolId, Username: params.Username, UserAttributes: params.UserAttributes, @@ -139,7 +139,7 @@ async function updateUserAttributes(params: any): Promise { ); if (rolesIndex !== -1) { // Only merge if new roles are not empty - let newRoles = attributeData.UserAttributes[rolesIndex].Value + const newRoles = attributeData.UserAttributes[rolesIndex].Value ? new Set( attributeData.UserAttributes[rolesIndex].Value.split(",").concat( "onemac-micro-super", @@ -164,7 +164,7 @@ async function updateUserAttributes(params: any): Promise { ); if (stateIndex !== -1) { // Only merge if new states are not empty - let newStates = attributeData.UserAttributes[stateIndex].Value + const newStates = attributeData.UserAttributes[stateIndex].Value ? new Set( attributeData.UserAttributes[stateIndex].Value.split(",").concat( "ZZ", diff --git a/lib/lambda/processEmails.ts b/lib/lambda/processEmails.ts index 90ff7bb419..3893f159c3 100644 --- a/lib/lambda/processEmails.ts +++ b/lib/lambda/processEmails.ts @@ -37,7 +37,7 @@ export const handler = E.emailHandler( async ( record: EmailLib.DecodedRecord, ): Promise => { - const emailBundle = EmailLib.getBundle(record, process.env.STAGE!!) as any; + const emailBundle = EmailLib.getBundle(record, process.env.STAGE!) as any; if (!emailBundle || !!emailBundle?.message || !emailBundle?.emailCommands) { return { message: "no eventToEmailMapping found, no email sent" }; diff --git a/lib/lambda/runReindex.test.ts b/lib/lambda/runReindex.test.ts index d7460d308b..b4f1695b29 100644 --- a/lib/lambda/runReindex.test.ts +++ b/lib/lambda/runReindex.test.ts @@ -1,5 +1,4 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; -import { Handler } from "aws-lambda"; import { send, SUCCESS, FAILED } from "cfn-response-async"; import { SFNClient, StartExecutionCommand } from "@aws-sdk/client-sfn"; import { handler } from "./runReindex"; diff --git a/lib/lambda/search.test.ts b/lib/lambda/search.test.ts index 8929967ad6..fd4387b67c 100644 --- a/lib/lambda/search.test.ts +++ b/lib/lambda/search.test.ts @@ -1,8 +1,8 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { APIGatewayEvent } from "aws-lambda"; -import { handler, getSearchData } from "./search"; +import { handler } from "./search"; import { response } from "libs/handler-lib"; -import { getStateFilter } from "../libs/api/auth/user"; + import * as os from "../libs/opensearch-lib"; import { getAppkChildren } from "../libs/api/package"; diff --git a/lib/lambda/sinkMain.ts b/lib/lambda/sinkMain.ts index 11cb84650e..5f97200ff2 100644 --- a/lib/lambda/sinkMain.ts +++ b/lib/lambda/sinkMain.ts @@ -264,12 +264,8 @@ const changed_date = async ( ) => { const docs: any[] = []; for (const kafkaRecord of kafkaRecords) { - const { key, value } = kafkaRecord; + const { value } = kafkaRecord; try { - // Set id - const id: string = JSON.parse(decodeBase64WithUtf8(key)).payload - .ID_Number; - // Handle delete events and continue if (value === undefined) { continue; diff --git a/lib/lambda/sinkSubtypes.ts b/lib/lambda/sinkSubtypes.ts index f396f4ddf5..7d93a13021 100644 --- a/lib/lambda/sinkSubtypes.ts +++ b/lib/lambda/sinkSubtypes.ts @@ -16,7 +16,7 @@ const index: Index = `${process.env.indexNamespace}subtypes`; export const handler: Handler = async (event) => { const loggableEvent = { ...event, records: "too large to display" }; - const docs: any[] = []; + try { for (const topicPartition of Object.keys(event.records)) { const topic = getTopic(topicPartition); diff --git a/lib/lambda/sinkTypes.ts b/lib/lambda/sinkTypes.ts index d915af06f7..2c1d903359 100644 --- a/lib/lambda/sinkTypes.ts +++ b/lib/lambda/sinkTypes.ts @@ -16,7 +16,7 @@ const index: Index = `${process.env.indexNamespace}types`; export const handler: Handler = async (event) => { const loggableEvent = { ...event, records: "too large to display" }; - const docs: any[] = []; + try { for (const topicPartition of Object.keys(event.records)) { const topic = getTopic(topicPartition); diff --git a/lib/libs/api/auth/user.test.ts b/lib/libs/api/auth/user.test.ts index afb540270d..72a1b9afd7 100644 --- a/lib/libs/api/auth/user.test.ts +++ b/lib/libs/api/auth/user.test.ts @@ -2,7 +2,6 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { getAuthDetails, lookupUserAttributes, - fetchUserFromCognito, isAuthorized, isAuthorizedToGetPackageActions, getStateFilter, @@ -10,7 +9,6 @@ import { import { APIGatewayEvent } from "aws-lambda"; import { CognitoIdentityProviderClient, - ListUsersCommand, UserType as CognitoUserType, } from "@aws-sdk/client-cognito-identity-provider"; diff --git a/lib/libs/api/kafka.test.ts b/lib/libs/api/kafka.test.ts index 7c6105566c..5f6702f87d 100644 --- a/lib/libs/api/kafka.test.ts +++ b/lib/libs/api/kafka.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; -import { Kafka, Producer } from "kafkajs"; +import { Producer } from "kafkajs"; import { produceMessage, getProducer } from "./kafka"; vi.mock("kafkajs", () => { @@ -86,6 +86,6 @@ describe("Kafka producer functions", () => { it("should throw an error if brokerString is not defined", () => { delete process.env.brokerString; - expect(() => getProducer()).toThrowError; + expect(() => getProducer()).toThrowError(); }); }); diff --git a/lib/libs/email/address-lib.ts b/lib/libs/email/address-lib.ts index 2e0a5713b4..58f07ebc51 100644 --- a/lib/libs/email/address-lib.ts +++ b/lib/libs/email/address-lib.ts @@ -30,7 +30,7 @@ export const buildDestination = ( command: Command, data: Record, ): Destination => { - let destination: Destination = { + const destination: Destination = { ToAddresses: buildAddressList(command.ToAddresses, data), }; if (command.CcAddresses) diff --git a/lib/libs/email/cognito-lib.ts b/lib/libs/email/cognito-lib.ts index 994ed7654c..6b0f18cd2d 100644 --- a/lib/libs/email/cognito-lib.ts +++ b/lib/libs/email/cognito-lib.ts @@ -26,7 +26,7 @@ export const getCognitoData = async ( commandListUsers, ); const userList: string[] = listUsersResponse.Users?.map((user) => { - let oneUser: UserAttributes = {}; + const oneUser: UserAttributes = {}; user.Attributes?.forEach((attribute: AttributeType) => { oneUser[attribute.Name as any] = attribute.Value; }); diff --git a/lib/libs/email/handler-lib.ts b/lib/libs/email/handler-lib.ts index e781c2d287..c681de22c6 100644 --- a/lib/libs/email/handler-lib.ts +++ b/lib/libs/email/handler-lib.ts @@ -38,7 +38,7 @@ export function emailHandler( lambda: (eventData: DecodedRecord) => Promise, ) { return async function (event: Event): Promise { - let eventQueue: EncodedRecord[] = []; + const eventQueue: EncodedRecord[] = []; let sendResults: any[] = []; const response: LambdaResponse = { statusCode: 200, diff --git a/lib/libs/email/os-lib.ts b/lib/libs/email/os-lib.ts index 68a5bdf14f..199456107b 100644 --- a/lib/libs/email/os-lib.ts +++ b/lib/libs/email/os-lib.ts @@ -41,7 +41,7 @@ const buildEmailsToSend = ( export const getOsInsightData = async ( id: string, ): Promise<{ [key: string]: any }> => { - let returnData: { [key: string]: any } = {}; + const returnData: { [key: string]: any } = {}; try { if (!process.env.osDomain) { throw new Error("process.env.osDomain must be defined"); @@ -101,7 +101,7 @@ export const getOsInsightData = async ( export const getOsMainData = async ( id: string, ): Promise<{ [key: string]: any }> => { - let returnData: { [key: string]: any } = {}; + const returnData: { [key: string]: any } = {}; try { if (!process.env.osDomain) { throw new Error("process.env.osDomain must be defined"); diff --git a/lib/libs/opensearch-lib.ts b/lib/libs/opensearch-lib.ts index 8ebc6a2885..9d7247f299 100644 --- a/lib/libs/opensearch-lib.ts +++ b/lib/libs/opensearch-lib.ts @@ -35,7 +35,7 @@ function createAwsConnector(credentials: any) { export async function updateData(host: string, indexObject: any) { client = client || (await getClient(host)); // Add a document to the index. - var response = await client.update(indexObject); + await client.update(indexObject); } function sleep(ms: number): Promise { @@ -214,7 +214,7 @@ export async function createIndex(host: string, index: opensearch.Index) { client = client || (await getClient(host)); try { const exists = await client.indices.exists({ index }); - if (!!exists.body) return; + if (exists.body) return; await client.indices.create({ index }); } catch (error) { @@ -245,21 +245,21 @@ export async function updateFieldMapping( } function decodeUtf8(data: any): any { - if (typeof data === 'string') { + if (typeof data === "string") { try { return decodeURIComponent(escape(data)); - } catch (e) { + } catch { return data; } } if (Array.isArray(data)) { - return data.map(item => decodeUtf8(item)); + return data.map((item) => decodeUtf8(item)); } - if (typeof data === 'object' && data !== null) { + if (typeof data === "object" && data !== null) { return Object.keys(data).reduce((acc, key) => { acc[key] = decodeUtf8(data[key]); return acc; }, {} as any); } return data; -} \ No newline at end of file +} diff --git a/lib/libs/sink-lib.ts b/lib/libs/sink-lib.ts index 545c7d46d2..a0abb9ac09 100644 --- a/lib/libs/sink-lib.ts +++ b/lib/libs/sink-lib.ts @@ -47,7 +47,7 @@ export const logError = ({ metadata, }), }, - ErrorMessages[type] + ErrorMessages[type], ); }; @@ -57,7 +57,7 @@ const prettyPrintJsonInObject = (obj: any): any => { try { JSON.parse(str); return true; - } catch (e) { + } catch { return false; } }; @@ -85,7 +85,7 @@ const prettyPrintJsonInObject = (obj: any): any => { export async function bulkUpdateDataWrapper( domain: string, index: string, - docs: any[] + docs: any[], ) { try { await os.bulkUpdateData(process.env.osDomain!, index, docs); diff --git a/lib/libs/topics-lib.ts b/lib/libs/topics-lib.ts index 93d14360ab..4248a23866 100644 --- a/lib/libs/topics-lib.ts +++ b/lib/libs/topics-lib.ts @@ -9,7 +9,7 @@ interface TopicConfig { export async function createTopics( brokerString: string, - topicsConfig: TopicConfig[] + topicsConfig: TopicConfig[], ) { const topics = topicsConfig; const brokers = brokerString.split(","); @@ -27,7 +27,7 @@ export async function createTopics( // Fetch topics from MSK and filter out __ internal management topic const existingTopicList = _.filter( await admin.listTopics(), - (n) => !n.startsWith("_") + (n) => !n.startsWith("_"), ); console.log("Existing topics:", JSON.stringify(existingTopicList, null, 2)); @@ -35,7 +35,7 @@ export async function createTopics( // Fetch the metadata for the topics in MSK const topicsMetadata = _.get( await admin.fetchTopicMetadata({ topics: existingTopicList }), - "topics" + "topics", ); console.log("Topics Metadata:", JSON.stringify(topicsMetadata, null, 2)); @@ -43,7 +43,7 @@ export async function createTopics( const topicsToCreate = _.differenceWith( topics, existingTopicList, - (topicConfig, topic) => _.get(topicConfig, "topic") === topic + (topicConfig, topic) => _.get(topicConfig, "topic") === topic, ); // Find intersection of topics metadata collection with topic configuration collection @@ -55,7 +55,7 @@ export async function createTopics( (topicConfig, topicMetadata) => _.get(topicConfig, "topic") === _.get(topicMetadata, "name") && _.get(topicConfig, "numPartitions") > - _.get(topicMetadata, "partitions", []).length + _.get(topicMetadata, "partitions", []).length, ); // Create a collection to update topic partitioning @@ -83,19 +83,20 @@ export async function createTopics( console.log("Topics to Update:", JSON.stringify(topicsToUpdate, null, 2)); console.log( "Partitions to Update:", - JSON.stringify(partitionConfig, null, 2) + JSON.stringify(partitionConfig, null, 2), ); console.log( "Topic configuration options:", - JSON.stringify(configs, null, 2) + JSON.stringify(configs, null, 2), ); // Create topics that don't exist in MSK await admin.createTopics({ topics: topicsToCreate }); // If any topics have fewer partitions in MSK than in the configuration, add those partitions - partitionConfig.length > 0 && - (await admin.createPartitions({ topicPartitions: partitionConfig })); + if (partitionConfig.length > 0) { + await admin.createPartitions({ topicPartitions: partitionConfig }); + } await admin.disconnect(); }; @@ -108,7 +109,7 @@ export async function deleteTopics(brokerString: string, topicList: string[]) { for (const topic of topicList) { if (!topic.match(/.*--.*--.*--.*/g)) { throw new Error( - "ERROR: The deleteTopics function only operates against topics that match /.*--.*--.*--.*/g" + "ERROR: The deleteTopics function only operates against topics that match /.*--.*--.*--.*/g", ); } } @@ -130,7 +131,7 @@ export async function deleteTopics(brokerString: string, topicList: string[]) { const currentTopics = await admin.listTopics(); const topicsToDelete = _.filter(currentTopics, (currentTopic) => - topicList.some((pattern) => !!currentTopic.match(pattern)) + topicList.some((pattern) => !!currentTopic.match(pattern)), ); console.log(`Deleting topics: ${topicsToDelete}`); diff --git a/lib/local-constructs/clamav-scanning/index.ts b/lib/local-constructs/clamav-scanning/index.ts index 56d115b957..8f9880e50d 100644 --- a/lib/local-constructs/clamav-scanning/index.ts +++ b/lib/local-constructs/clamav-scanning/index.ts @@ -1,7 +1,6 @@ import { DockerImageCode, DockerImageFunction } from "aws-cdk-lib/aws-lambda"; import * as cdk from "aws-cdk-lib"; import { Construct } from "constructs"; -import path = require("path"); import * as sqs from "aws-cdk-lib/aws-sqs"; import * as s3 from "aws-cdk-lib/aws-s3"; import * as s3n from "aws-cdk-lib/aws-s3-notifications"; diff --git a/lib/local-constructs/clamav-scanning/src/handlers/defs.test.ts b/lib/local-constructs/clamav-scanning/src/handlers/defs.test.ts index 852ceb4eb3..5d65e42ad5 100644 --- a/lib/local-constructs/clamav-scanning/src/handlers/defs.test.ts +++ b/lib/local-constructs/clamav-scanning/src/handlers/defs.test.ts @@ -6,7 +6,6 @@ import { FRESHCLAM_WORK_DIR, } from "./../lib"; import { expect, test, vi } from "vitest"; -import pino from "pino"; vi.mock("pino", () => { return { diff --git a/lib/local-constructs/clamav-scanning/src/handlers/scan.ts b/lib/local-constructs/clamav-scanning/src/handlers/scan.ts index 916872e29f..ba736abadc 100644 --- a/lib/local-constructs/clamav-scanning/src/handlers/scan.ts +++ b/lib/local-constructs/clamav-scanning/src/handlers/scan.ts @@ -70,7 +70,7 @@ export async function handler(event: any): Promise { virusScanStatus = (await scanLocalFile(fileLoc))!; await tagWithScanStatus(s3ObjectBucket, s3ObjectKey, virusScanStatus); results.push(virusScanStatus); - } catch (error) { + } catch { virusScanStatus = STATUS_ERROR_PROCESSING_FILE; await tagWithScanStatus(s3ObjectBucket, s3ObjectKey, virusScanStatus); results.push(virusScanStatus); diff --git a/lib/local-constructs/clamav-scanning/src/lib/clamav.ts b/lib/local-constructs/clamav-scanning/src/lib/clamav.ts index 6f89ecf783..bed0f133e5 100644 --- a/lib/local-constructs/clamav-scanning/src/lib/clamav.ts +++ b/lib/local-constructs/clamav-scanning/src/lib/clamav.ts @@ -18,7 +18,7 @@ const s3Client: S3Client = new S3Client(); export const updateAVDefinitonsWithFreshclam = (): boolean => { try { - const { stdout, stderr, error }: SpawnSyncReturns = spawnSync( + const { stdout, stderr }: SpawnSyncReturns = spawnSync( `${constants.PATH_TO_FRESHCLAM}`, [ `--config-file=${constants.FRESHCLAM_CONFIG}`, @@ -63,7 +63,7 @@ export const downloadAVDefinitions = async (): Promise => { // Download each file in the bucket const downloadPromises: Promise[] = definitionFileKeys.map( (filenameToDownload) => { - return new Promise(async (resolve, reject) => { + return new Promise((resolve, reject) => { const destinationFile: string = path.join( constants.FRESHCLAM_WORK_DIR, filenameToDownload, @@ -79,13 +79,17 @@ export const downloadAVDefinitions = async (): Promise => { }; try { - const { Body } = await s3Client.send(new GetObjectCommand(options)); - if (!Body || !(Body instanceof Readable)) { - throw new Error("Invalid Body type received from S3"); - } - await asyncfs.writeFile(destinationFile, Body); - logger.info(`Finished download ${filenameToDownload}`); - resolve(); + s3Client + .send(new GetObjectCommand(options)) + .then(async ({ Body }) => { + if (!Body || !(Body instanceof Readable)) { + throw new Error("Invalid Body type received from S3"); + } + + await asyncfs.writeFile(destinationFile, Body); + resolve(); + logger.info(`Finished download ${filenameToDownload}`); + }); } catch (err) { logger.info( `Error downloading definition file ${filenameToDownload}`, @@ -145,7 +149,7 @@ export const uploadAVDefinitions = async (): Promise => { const uploadPromises: Promise[] = definitionFiles.map( (filenameToUpload) => { - return new Promise(async (resolve, reject) => { + return new Promise((resolve, reject) => { logger.info( `Uploading updated definitions for file ${filenameToUpload} ---`, ); @@ -159,9 +163,10 @@ export const uploadAVDefinitions = async (): Promise => { }; try { - await s3Client.send(new PutObjectCommand(options)); - resolve(); - logger.info(`--- Finished uploading ${filenameToUpload} ---`); + s3Client.send(new PutObjectCommand(options)).then(() => { + logger.info(`--- Finished uploading ${filenameToUpload} ---`); + resolve(); + }); } catch (err) { logger.info(`--- Error uploading ${filenameToUpload} ---`); logger.info(err); diff --git a/lib/local-constructs/clamav-scanning/src/lib/file-ext.ts b/lib/local-constructs/clamav-scanning/src/lib/file-ext.ts index e88da1aa32..f86b629e99 100644 --- a/lib/local-constructs/clamav-scanning/src/lib/file-ext.ts +++ b/lib/local-constructs/clamav-scanning/src/lib/file-ext.ts @@ -10,7 +10,7 @@ const logger = pino(); export async function checkFileExt(pathToFile: string): Promise { try { // Calculate the mime type based off the extension. - let mimeTypeFromExtension = lookup(path.extname(pathToFile)); + const mimeTypeFromExtension = lookup(path.extname(pathToFile)); // Error out if mimeTypes couldn't figure out the mime type. if (!mimeTypeFromExtension) { @@ -25,7 +25,7 @@ export async function checkFileExt(pathToFile: string): Promise { } // Caclulate the mime type based off the file's contents. - let mimeTypeFromContents = await getFileTypeFromContents(pathToFile); + const mimeTypeFromContents = await getFileTypeFromContents(pathToFile); // Error out if file-type couldn't determine the mime type. if (!mimeTypeFromContents) { logger.info("FAILURE - CANNOT DETERMINE MIMETYPE FROM CONTENTS"); @@ -37,7 +37,7 @@ export async function checkFileExt(pathToFile: string): Promise { logger.info(`File mimetype from contents: ${mimeTypeFromContents}`); // Check if the mimes are equivalent - let same = areMimeTypesEquivalent( + const same = areMimeTypesEquivalent( mimeTypeFromExtension, mimeTypeFromContents, ); @@ -51,7 +51,7 @@ export async function checkFileExt(pathToFile: string): Promise { // Otherwise, so far it's clean return constants.STATUS_CLEAN_FILE; - } catch (error) { + } catch { logger.error("Error Checking file extension"); return constants.STATUS_ERROR_PROCESSING_FILE; } diff --git a/lib/local-constructs/clamav-scanning/src/lib/s3.ts b/lib/local-constructs/clamav-scanning/src/lib/s3.ts index 17855e0d9e..2e0addb3db 100644 --- a/lib/local-constructs/clamav-scanning/src/lib/s3.ts +++ b/lib/local-constructs/clamav-scanning/src/lib/s3.ts @@ -4,7 +4,6 @@ import { GetObjectCommand, PutObjectTaggingCommand, HeadObjectCommandOutput, - PutObjectTaggingCommandOutput, ListObjectsV2Command, } from "@aws-sdk/client-s3"; import { randomUUID } from "crypto"; @@ -38,7 +37,7 @@ export async function checkFileSize( return res.ContentLength > parseInt(constants.MAX_FILE_SIZE) ? constants.STATUS_TOO_BIG : constants.STATUS_CLEAN_FILE; - } catch (e) { + } catch { logger.info(`Error finding size of S3 Object: s3://${bucket}/${key}`); return constants.STATUS_ERROR_PROCESSING_FILE; } @@ -55,7 +54,7 @@ export async function downloadFileFromS3( const localPath: string = `${ constants.TMP_DOWNLOAD_PATH }${randomUUID()}--${s3ObjectKey}`; - const writeStream: fs.WriteStream = fs.createWriteStream(localPath); + fs.createWriteStream(localPath); logger.info(`Downloading file s3://${s3ObjectBucket}/${s3ObjectKey}`); @@ -84,7 +83,7 @@ export async function tagWithScanStatus( virusScanStatus: string, ): Promise { try { - const res: PutObjectTaggingCommandOutput = await s3Client.send( + await s3Client.send( new PutObjectTaggingCommand({ Bucket: bucket, Key: key, diff --git a/lib/local-constructs/clamav-scanning/src/lib/utils.test.ts b/lib/local-constructs/clamav-scanning/src/lib/utils.test.ts index 0acfcb9fb7..87304aa3af 100644 --- a/lib/local-constructs/clamav-scanning/src/lib/utils.test.ts +++ b/lib/local-constructs/clamav-scanning/src/lib/utils.test.ts @@ -1,7 +1,6 @@ import { execSync } from "child_process"; import { describe, it, expect, vi, beforeAll, afterAll } from "vitest"; import * as utils from "./utils"; -import * as constants from "./constants"; vi.mock("child_process", () => ({ execSync: vi.fn(), diff --git a/lib/local-constructs/clamav-scanning/src/lib/utils.ts b/lib/local-constructs/clamav-scanning/src/lib/utils.ts index 27a4d05416..39b6892379 100644 --- a/lib/local-constructs/clamav-scanning/src/lib/utils.ts +++ b/lib/local-constructs/clamav-scanning/src/lib/utils.ts @@ -28,7 +28,7 @@ export function extractS3EventFromSQSEvent(sqsEvent: any): any { const sqsMessageBody: string = sqsEvent["Records"][0]["body"]; const s3Event = JSON.parse(sqsMessageBody); return s3Event; - } catch (error) { + } catch { throw new Error("Unable to retrieve body from the SQS event"); } } @@ -42,7 +42,7 @@ export function extractKeyFromS3Event(s3Event: any): string { try { const key: string = s3Event["Records"][0]["s3"]["object"]["key"]; return decodeURIComponent(key).replace(/\+/g, " "); - } catch (error) { + } catch { throw new Error("Unable to retrieve key information from the event"); } } @@ -56,7 +56,7 @@ export function extractBucketFromS3Event(s3Event: any): string { try { const bucketName: string = s3Event["Records"][0]["s3"]["bucket"]["name"]; return bucketName; - } catch (error) { + } catch { throw new Error("Unable to retrieve bucket information from the event"); } } diff --git a/lib/local-constructs/cleanup-kafka/index.ts b/lib/local-constructs/cleanup-kafka/index.ts index d6d5ef03bf..10f93c2f60 100644 --- a/lib/local-constructs/cleanup-kafka/index.ts +++ b/lib/local-constructs/cleanup-kafka/index.ts @@ -18,7 +18,6 @@ import { Duration, RemovalPolicy } from "aws-cdk-lib"; import { LogGroup } from "aws-cdk-lib/aws-logs"; import { Runtime } from "aws-cdk-lib/aws-lambda"; import { ISecurityGroup, ISubnet, IVpc } from "aws-cdk-lib/aws-ec2"; -import path = require("path"); interface CleanupKafkaProps { vpc: IVpc; diff --git a/lib/local-constructs/cleanup-kafka/src/cleanupKafka.ts b/lib/local-constructs/cleanup-kafka/src/cleanupKafka.ts index efb3faee26..90a3cd72f4 100644 --- a/lib/local-constructs/cleanup-kafka/src/cleanupKafka.ts +++ b/lib/local-constructs/cleanup-kafka/src/cleanupKafka.ts @@ -1,9 +1,8 @@ -import { CloudFormationCustomResourceEvent, Context } from "aws-lambda"; +import { CloudFormationCustomResourceEvent } from "aws-lambda"; import * as topics from "../../../libs/topics-lib"; export const handler = async function ( event: CloudFormationCustomResourceEvent, - context: Context, ): Promise { console.log("Request:", JSON.stringify(event, undefined, 2)); diff --git a/lib/local-constructs/cloudwatch-to-s3/index.test.ts b/lib/local-constructs/cloudwatch-to-s3/index.test.ts index b3324d9ee4..736bce440c 100644 --- a/lib/local-constructs/cloudwatch-to-s3/index.test.ts +++ b/lib/local-constructs/cloudwatch-to-s3/index.test.ts @@ -2,7 +2,6 @@ import { describe, it, expect } from "vitest"; import * as cdk from "aws-cdk-lib"; import { CloudWatchToS3 } from "."; import * as logs from "aws-cdk-lib/aws-logs"; -import * as s3 from "aws-cdk-lib/aws-s3"; import * as iam from "aws-cdk-lib/aws-iam"; import * as firehose from "aws-cdk-lib/aws-kinesisfirehose"; diff --git a/lib/local-constructs/cloudwatch-to-s3/index.ts b/lib/local-constructs/cloudwatch-to-s3/index.ts index e9870da05c..584e0562f9 100644 --- a/lib/local-constructs/cloudwatch-to-s3/index.ts +++ b/lib/local-constructs/cloudwatch-to-s3/index.ts @@ -86,18 +86,14 @@ export class CloudWatchToS3 extends Construct { }); // Create a subscription filter to send logs from the CloudWatch Log Group to Firehose - const subscriptionFilter = new CfnSubscriptionFilter( - this, - "SubscriptionFilter", - { - logGroupName: logGroup.logGroupName, - filterPattern: filterPattern, - destinationArn: cdk.Fn.getAtt( - this.deliveryStream.logicalId, - "Arn", - ).toString(), - roleArn: subscriptionFilterRole.roleArn, - }, - ); + new CfnSubscriptionFilter(this, "SubscriptionFilter", { + logGroupName: logGroup.logGroupName, + filterPattern: filterPattern, + destinationArn: cdk.Fn.getAtt( + this.deliveryStream.logicalId, + "Arn", + ).toString(), + roleArn: subscriptionFilterRole.roleArn, + }); } } diff --git a/lib/local-constructs/create-topics/index.ts b/lib/local-constructs/create-topics/index.ts index 69ea454839..0c706c2f7a 100644 --- a/lib/local-constructs/create-topics/index.ts +++ b/lib/local-constructs/create-topics/index.ts @@ -18,7 +18,6 @@ import { Duration, RemovalPolicy } from "aws-cdk-lib"; import { LogGroup } from "aws-cdk-lib/aws-logs"; import { Runtime } from "aws-cdk-lib/aws-lambda"; import { ISecurityGroup, ISubnet, IVpc } from "aws-cdk-lib/aws-ec2"; -import path = require("path"); interface CreateTopicsProps { vpc: IVpc; diff --git a/lib/local-constructs/create-topics/src/createTopics.ts b/lib/local-constructs/create-topics/src/createTopics.ts index 0dfbdde37c..967d2c88b9 100644 --- a/lib/local-constructs/create-topics/src/createTopics.ts +++ b/lib/local-constructs/create-topics/src/createTopics.ts @@ -1,4 +1,4 @@ -import { CloudFormationCustomResourceEvent, Context } from "aws-lambda"; +import { CloudFormationCustomResourceEvent } from "aws-lambda"; import * as topics from "./../../../libs/topics-lib"; interface TopicConfig { @@ -9,7 +9,6 @@ interface TopicConfig { export const handler = async function ( event: CloudFormationCustomResourceEvent, - context: Context, ) { console.log("Request:", JSON.stringify(event, undefined, 2)); const resourceProperties = event.ResourceProperties; diff --git a/lib/local-constructs/empty-buckets/index.ts b/lib/local-constructs/empty-buckets/index.ts index d180f9a4a9..e36a066426 100644 --- a/lib/local-constructs/empty-buckets/index.ts +++ b/lib/local-constructs/empty-buckets/index.ts @@ -19,7 +19,6 @@ import { ServicePrincipal, } from "aws-cdk-lib/aws-iam"; import { Construct } from "constructs"; -import path = require("path"); interface EmptyBucketsProps extends StackProps { buckets: IBucket[]; diff --git a/lib/local-constructs/empty-buckets/src/emptyBuckets.ts b/lib/local-constructs/empty-buckets/src/emptyBuckets.ts index 969fa83bd0..ea4f4218be 100644 --- a/lib/local-constructs/empty-buckets/src/emptyBuckets.ts +++ b/lib/local-constructs/empty-buckets/src/emptyBuckets.ts @@ -11,7 +11,7 @@ import { const s3 = new S3Client({ region: process.env.AWS_REGION }); -export const handler = async function (event: any, context: any) { +export const handler = async function (event: any) { console.log("Request received:\n", JSON.stringify(event, null, 2)); if (event.RequestType === "Delete") { diff --git a/lib/local-constructs/manage-users/index.ts b/lib/local-constructs/manage-users/index.ts index 9107964eda..cfaae46395 100644 --- a/lib/local-constructs/manage-users/index.ts +++ b/lib/local-constructs/manage-users/index.ts @@ -18,7 +18,6 @@ import { Duration, RemovalPolicy } from "aws-cdk-lib"; import { LogGroup } from "aws-cdk-lib/aws-logs"; import { UserPool } from "aws-cdk-lib/aws-cognito"; import { Runtime } from "aws-cdk-lib/aws-lambda"; -import path = require("path"); export class ManageUsers extends Construct { constructor( diff --git a/lib/local-constructs/manage-users/src/cognito-lib.ts b/lib/local-constructs/manage-users/src/cognito-lib.ts index be6b681285..902a1ac64d 100644 --- a/lib/local-constructs/manage-users/src/cognito-lib.ts +++ b/lib/local-constructs/manage-users/src/cognito-lib.ts @@ -59,7 +59,7 @@ export async function updateUserAttributes(params: any): Promise { : []; // Prepare for updating user attributes - let attributeData: any = { + const attributeData: any = { UserPoolId: params.UserPoolId, Username: params.Username, UserAttributes: params.UserAttributes, @@ -72,7 +72,7 @@ export async function updateUserAttributes(params: any): Promise { ); if (rolesIndex !== -1) { // Only merge if new roles are not empty - let newRoles = attributeData.UserAttributes[rolesIndex].Value + const newRoles = attributeData.UserAttributes[rolesIndex].Value ? new Set( attributeData.UserAttributes[rolesIndex].Value.split(",").concat( "onemac-micro-super", @@ -97,7 +97,7 @@ export async function updateUserAttributes(params: any): Promise { ); if (stateIndex !== -1) { // Only merge if new states are not empty - let newStates = attributeData.UserAttributes[stateIndex].Value + const newStates = attributeData.UserAttributes[stateIndex].Value ? new Set( attributeData.UserAttributes[stateIndex].Value.split(",").concat( "ZZ", diff --git a/lib/packages/shared-types/opensearch/main/transforms/issue-rai.ts b/lib/packages/shared-types/opensearch/main/transforms/issue-rai.ts index da4e1944b5..fe5f7925af 100644 --- a/lib/packages/shared-types/opensearch/main/transforms/issue-rai.ts +++ b/lib/packages/shared-types/opensearch/main/transforms/issue-rai.ts @@ -3,7 +3,7 @@ import { raiIssueSchema } from "../../.."; export const transform = (id: string) => { return raiIssueSchema.transform((data) => ({ id, - makoChangedDate: !!data.timestamp + makoChangedDate: data.timestamp ? new Date(data.timestamp).toISOString() : null, })); diff --git a/lib/packages/shared-types/opensearch/main/transforms/respond-to-rai.ts b/lib/packages/shared-types/opensearch/main/transforms/respond-to-rai.ts index 3eb4cb0e7b..975a5e65da 100644 --- a/lib/packages/shared-types/opensearch/main/transforms/respond-to-rai.ts +++ b/lib/packages/shared-types/opensearch/main/transforms/respond-to-rai.ts @@ -3,7 +3,7 @@ import { raiResponseSchema } from "../../.."; export const transform = (id: string) => { return raiResponseSchema.transform((data) => ({ id, - makoChangedDate: !!data.timestamp + makoChangedDate: data.timestamp ? new Date(data.timestamp).toISOString() : null, })); diff --git a/lib/packages/shared-types/opensearch/main/transforms/toggle-withdraw-enabled.ts b/lib/packages/shared-types/opensearch/main/transforms/toggle-withdraw-enabled.ts index f65554e450..641bf2c7a0 100644 --- a/lib/packages/shared-types/opensearch/main/transforms/toggle-withdraw-enabled.ts +++ b/lib/packages/shared-types/opensearch/main/transforms/toggle-withdraw-enabled.ts @@ -4,7 +4,7 @@ export const transform = (id: string) => { return toggleWithdrawRaiEnabledSchema.transform((data) => ({ id, raiWithdrawEnabled: data.raiWithdrawEnabled, - makoChangedDate: !!data.timestamp + makoChangedDate: data.timestamp ? new Date(data.timestamp).toISOString() : null, })); diff --git a/lib/packages/shared-types/opensearch/main/transforms/withdraw-package.ts b/lib/packages/shared-types/opensearch/main/transforms/withdraw-package.ts index c4f285d831..d5e46155bd 100644 --- a/lib/packages/shared-types/opensearch/main/transforms/withdraw-package.ts +++ b/lib/packages/shared-types/opensearch/main/transforms/withdraw-package.ts @@ -5,7 +5,7 @@ export const transform = (id: string) => { return withdrawPackageSchema.transform((data) => ({ id, raiWithdrawEnabled: false, - makoChangedDate: !!data.timestamp + makoChangedDate: data.timestamp ? new Date(data.timestamp).toISOString() : null, })); diff --git a/lib/packages/shared-types/opensearch/main/transforms/withdraw-rai-response.ts b/lib/packages/shared-types/opensearch/main/transforms/withdraw-rai-response.ts index badc7ae84a..cc149ef77d 100644 --- a/lib/packages/shared-types/opensearch/main/transforms/withdraw-rai-response.ts +++ b/lib/packages/shared-types/opensearch/main/transforms/withdraw-rai-response.ts @@ -4,7 +4,7 @@ export const transform = (id: string) => { return raiWithdrawSchema.transform((data) => ({ id, raiWithdrawEnabled: false, - makoChangedDate: !!data.timestamp + makoChangedDate: data.timestamp ? new Date(data.timestamp).toISOString() : null, })); diff --git a/lib/packages/shared-utils/package-actions/getAvailableActions.ts b/lib/packages/shared-utils/package-actions/getAvailableActions.ts index eaf75d8ada..c2e943f79d 100644 --- a/lib/packages/shared-utils/package-actions/getAvailableActions.ts +++ b/lib/packages/shared-utils/package-actions/getAvailableActions.ts @@ -6,9 +6,9 @@ export const getAvailableActions = ( user: CognitoUserAttributes, result: opensearch.main.Document, ) => { - let allActions: Action[][] = []; + const allActions: Action[][] = []; - let allMembers = [result]; + const allMembers = [result]; if (result.appkChildren) { allMembers.push(...result.appkChildren.map((el) => el._source)); } diff --git a/lib/packages/shared-utils/package-check.test.ts b/lib/packages/shared-utils/package-check.test.ts index 643bb894b5..3bbeb4509e 100644 --- a/lib/packages/shared-utils/package-check.test.ts +++ b/lib/packages/shared-utils/package-check.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { testItemResult, testCMSCognitoUser } from "./testData"; +import { testItemResult } from "./testData"; import { PackageCheck } from "."; import { ActionType, Authority, SEATOOL_STATUS } from "shared-types"; @@ -40,7 +40,7 @@ describe("PackageCheck", () => { expect(packageCheck.isWaiver).toBe(false); }); it("checks against input", () => { - let packageCheck = PackageCheck({ + const packageCheck = PackageCheck({ ...testItemResult._source, authority: Authority["1915b"], }); @@ -92,7 +92,7 @@ describe("PackageCheck", () => { expect(packageCheck.isNotWithdrawn).toBe(true); }); it("checks against input", () => { - let packageCheck = PackageCheck({ + const packageCheck = PackageCheck({ ...testItemResult._source, seatoolStatus: SEATOOL_STATUS.WITHDRAWN, }); @@ -149,7 +149,7 @@ describe("PackageCheck", () => { }); describe("Action Type Checks", () => { it("checks against input", () => { - let packageChecker = PackageCheck({ + const packageChecker = PackageCheck({ ...testItemResult._source, actionType: "Amend" as ActionType, }); diff --git a/lib/packages/shared-utils/regex.ts b/lib/packages/shared-utils/regex.ts index 22a08336f4..ba2a32435b 100644 --- a/lib/packages/shared-utils/regex.ts +++ b/lib/packages/shared-utils/regex.ts @@ -1,3 +1,5 @@ +/* eslint no-prototype-builtins: 0 */ // --> OFF + export const convertRegexToString = (obj: any) => { for (const key in obj) { if (obj.hasOwnProperty(key)) { @@ -34,7 +36,7 @@ export const reInsertRegex = (obj: any) => { // if its a pattern.value replace the value's value with a regex from the weird array thing obj[key].pattern.value = new RegExp( obj[key].pattern.value[1], - obj[key].pattern.value[2] + obj[key].pattern.value[2], ); } } diff --git a/lib/packages/shared-utils/rules.test.ts b/lib/packages/shared-utils/rules.test.ts index 4406902710..3367b2f751 100644 --- a/lib/packages/shared-utils/rules.test.ts +++ b/lib/packages/shared-utils/rules.test.ts @@ -5,7 +5,6 @@ import { testItemResult, testCMSCognitoUser, testStateCognitoUser, - testStateIDMUser, testCMSIDMUser, } from "./testData"; import { PackageCheck } from "./package-check"; diff --git a/lib/packages/shared-utils/s3-url-parser.ts b/lib/packages/shared-utils/s3-url-parser.ts index cd7a0472c3..6cb2a8e03e 100644 --- a/lib/packages/shared-utils/s3-url-parser.ts +++ b/lib/packages/shared-utils/s3-url-parser.ts @@ -3,7 +3,7 @@ export function s3ParseUrl(url: string) { // http://s3.amazonaws.com/bucket/key1/key2 const _match_1 = _decodedUrl.match( - /^https?:\/\/s3.amazonaws.com\/([^\/]+)\/?(.*?)$/ + /^https?:\/\/s3.amazonaws.com\/([^/]+)\/?(.*?)$/, ); if (_match_1) { return { @@ -15,7 +15,7 @@ export function s3ParseUrl(url: string) { // http://s3-aws-region.amazonaws.com/bucket/key1/key2 const _match_2 = _decodedUrl.match( - /^https?:\/\/s3-([^.]+).amazonaws.com\/([^\/]+)\/?(.*?)$/ + /^https?:\/\/s3-([^.]+).amazonaws.com\/([^/]+)\/?(.*?)$/, ); if (_match_2) { return { @@ -27,7 +27,7 @@ export function s3ParseUrl(url: string) { // http://bucket.s3.amazonaws.com/key1/key2 const _match_3 = _decodedUrl.match( - /^https?:\/\/([^.]+).s3.amazonaws.com\/?(.*?)$/ + /^https?:\/\/([^.]+).s3.amazonaws.com\/?(.*?)$/, ); if (_match_3) { return { @@ -40,7 +40,7 @@ export function s3ParseUrl(url: string) { // http://bucket.s3-aws-region.amazonaws.com/key1/key2 or, // http://bucket.s3.aws-region.amazonaws.com/key1/key2 const _match_4 = _decodedUrl.match( - /^https?:\/\/([^.]+).(?:s3-|s3\.)([^.]+).amazonaws.com\/?(.*?)$/ + /^https?:\/\/([^.]+).(?:s3-|s3\.)([^.]+).amazonaws.com\/?(.*?)$/, ); if (_match_4) { return { diff --git a/lib/packages/shared-utils/seatool-date-helper.test.ts b/lib/packages/shared-utils/seatool-date-helper.test.ts index e16354281a..dd7e98cd2f 100644 --- a/lib/packages/shared-utils/seatool-date-helper.test.ts +++ b/lib/packages/shared-utils/seatool-date-helper.test.ts @@ -57,40 +57,40 @@ describe("formatSeatoolDate", () => { describe("getNextBusinessDayTimestamp", () => { it("identifies weekenends", () => { - let testDate = new Date(2024, 0, 27, 12, 0, 0); // Saturday, noon, utc - let nextDate = getNextBusinessDayTimestamp(testDate); + const testDate = new Date(2024, 0, 27, 12, 0, 0); // Saturday, noon, utc + const nextDate = getNextBusinessDayTimestamp(testDate); expect(nextDate).toEqual(Date.UTC(2024, 0, 29)); // Monday, midnight, utc }); it("identifies holidays", () => { - let testDate = new Date(2024, 0, 15, 12, 0, 0); // MLK Day, a Monday - let nextDate = getNextBusinessDayTimestamp(testDate); + const testDate = new Date(2024, 0, 15, 12, 0, 0); // MLK Day, a Monday + const nextDate = getNextBusinessDayTimestamp(testDate); expect(nextDate).toEqual(Date.UTC(2024, 0, 16)); // Tuesday, midnight, utc }); it("identifies submissions after 5pm eastern", () => { - let testDate = new Date(2024, 0, 17, 23, 0, 0); // Wednesday 11pm utc, Wednesday 6pm eastern - let nextDate = getNextBusinessDayTimestamp(testDate); + const testDate = new Date(2024, 0, 17, 23, 0, 0); // Wednesday 11pm utc, Wednesday 6pm eastern + const nextDate = getNextBusinessDayTimestamp(testDate); expect(nextDate).toEqual(Date.UTC(2024, 0, 18)); // Thursday, midnight, utc }); it("identifies submissions before 5pm eastern", () => { - let testDate = new Date(2024, 0, 17, 10, 0, 0); // Wednesday 10am utc, Wednesday 5am eastern - let nextDate = getNextBusinessDayTimestamp(testDate); + const testDate = new Date(2024, 0, 17, 10, 0, 0); // Wednesday 10am utc, Wednesday 5am eastern + const nextDate = getNextBusinessDayTimestamp(testDate); expect(nextDate).toEqual(Date.UTC(2024, 0, 17)); // Wednesday, midnight, utc }); it("handles combinations of rule violations", () => { - let testDate = new Date(2024, 0, 12, 23, 0, 0); // Friday 11pm utc, Friday 6pm eastern - let nextDate = getNextBusinessDayTimestamp(testDate); + const testDate = new Date(2024, 0, 12, 23, 0, 0); // Friday 11pm utc, Friday 6pm eastern + const nextDate = getNextBusinessDayTimestamp(testDate); // Submission is after 5pm, Saturday is a weekend, Sunday is a weekend, and Monday is MLK Day expect(nextDate).toEqual(Date.UTC(2024, 0, 16)); // Tuesday, midnight utc }); // TODO: I dont know if its my time zone but this always fails for me in the MST it("identifies valid business days", () => { - let testDate = new Date(2024, 0, 9, 15, 0, 0); // Tuesday 3pm utc, Tuesday 8am eastern - let nextDate = getNextBusinessDayTimestamp(testDate); + const testDate = new Date(2024, 0, 9, 15, 0, 0); // Tuesday 3pm utc, Tuesday 8am eastern + const nextDate = getNextBusinessDayTimestamp(testDate); expect(nextDate).toEqual(Date.UTC(2024, 0, 9)); // Tuesday, midnight utc }); }); diff --git a/lib/packages/shared-utils/seatool-date-helper.ts b/lib/packages/shared-utils/seatool-date-helper.ts index c0b18bd1bf..03423c914e 100644 --- a/lib/packages/shared-utils/seatool-date-helper.ts +++ b/lib/packages/shared-utils/seatool-date-helper.ts @@ -29,27 +29,27 @@ export const formatSeatoolDate = (date: string): string => { export const getNextBusinessDayTimestamp = ( date: Date = new Date(), ): number => { - let localeStringDate = date.toLocaleString("en-US", { + const localeStringDate = date.toLocaleString("en-US", { timeZone: "America/New_York", dateStyle: "short", }); - let localeStringHours24 = date.toLocaleString("en-US", { + const localeStringHours24 = date.toLocaleString("en-US", { timeZone: "America/New_York", hour: "numeric", hour12: false, }); - let localeDate = new Date(localeStringDate); + const localeDate = new Date(localeStringDate); const after5pmEST = parseInt(localeStringHours24, 10) >= 17; const isHoliday = fedHolidays.isAHoliday(localeDate); const isWeekend = !(localeDate.getDay() % 6); if (after5pmEST || isHoliday || isWeekend) { - let nextDate = localeDate; + const nextDate = localeDate; nextDate.setDate(nextDate.getDate() + 1); nextDate.setHours(12, 0, 0, 0); return getNextBusinessDayTimestamp(nextDate); } // Return the next business day's epoch for midnight UTC - let ret = offsetToUtc(localeDate).getTime(); + const ret = offsetToUtc(localeDate).getTime(); return ret; }; diff --git a/lib/packages/shared-utils/testData.ts b/lib/packages/shared-utils/testData.ts index 8a40e758d2..f092fb4c5d 100644 --- a/lib/packages/shared-utils/testData.ts +++ b/lib/packages/shared-utils/testData.ts @@ -1,5 +1,5 @@ +import { opensearch, Authority } from "shared-types"; import { OneMacUser } from "ui/src/api"; -import { Authority, opensearch } from "../../shared-types"; export const testStateCognitoUser: OneMacUser = { isCms: false, @@ -19,6 +19,7 @@ export const testStateIDMUser: OneMacUser = { user: { ...testStateCognitoUser.user, username: "IDM_0000aaaa-0000-00aa-0a0a-aaaaaa000000", + // @ts-expect-error identities: '[{"dateCreated":"1709308952587","userId":"abc123","providerName":"IDM","providerType":"OIDC","issuer":null,"primary":"true"}]', }, @@ -41,6 +42,7 @@ export const testCMSIDMUser: OneMacUser = { user: { ...testCMSCognitoUser.user, username: "IDM_0000aaaa-0000-00aa-0a0a-aaaaaa000000", + // @ts-expect-error identities: '[{"dateCreated":"1709308952587","userId":"abc123","providerName":"IDM","providerType":"OIDC","issuer":null,"primary":"true"}]', }, @@ -108,10 +110,10 @@ export const testItemResult: opensearch.main.ItemResult = { { _index: "changelog", _id: "MD-12-3456", - // @ts-ignore _source: { authority: "medicaid spa", origin: "micro", + //@ts-expect-error appkParentId: null, additionalInformation: "does the main branch work?!", submitterName: "George Harrison", @@ -135,7 +137,9 @@ export const testItemResult: opensearch.main.ItemResult = { }, ], raiWithdrawEnabled: false, + //@ts-expect-error actionType: "new-submission", + //@ts-expect-error timestamp: "1709319909826", id: "MD-12-3456", packageId: "MD-12-3456", diff --git a/lib/packages/shared-utils/user-helper.test.ts b/lib/packages/shared-utils/user-helper.test.ts index 4efaf7e6d9..0ef1f7027e 100644 --- a/lib/packages/shared-utils/user-helper.test.ts +++ b/lib/packages/shared-utils/user-helper.test.ts @@ -1,4 +1,4 @@ -import { describe, it, vi, expect } from "vitest"; +import { describe, it, expect } from "vitest"; import { isCmsReadonlyUser, isCmsUser, @@ -14,7 +14,6 @@ import { testStateIDMUser, } from "./testData"; import { CognitoUserAttributes } from "shared-types"; -import { OneMacUser } from "ui/src/api"; const cmsHelpDeskUser: CognitoUserAttributes = { ...testCMSCognitoUser.user, @@ -96,7 +95,6 @@ describe("isCmsSuperUser", () => { }); describe("isIDM", () => { - const consoleErrorSpy = vi.spyOn(console, "error"); it("returns false if a user has no Cognito identities", () => { expect(isIDM(testStateCognitoUser.user)).toBe(false); expect(isIDM(testCMSCognitoUser.user)).toBe(false); diff --git a/lib/stacks/api.ts b/lib/stacks/api.ts index 01283d7f7c..06add17a2e 100644 --- a/lib/stacks/api.ts +++ b/lib/stacks/api.ts @@ -44,7 +44,7 @@ export class Api extends cdk.NestedStack { private initializeResources(props: ApiStackProps): { apiGateway: cdk.aws_apigateway.RestApi; } { - const { project, stage, stack, isDev } = props; + const { project, stage, stack } = props; const { vpc, privateSubnets, diff --git a/lib/stacks/auth.ts b/lib/stacks/auth.ts index 0e616a4cd5..252e247b4f 100644 --- a/lib/stacks/auth.ts +++ b/lib/stacks/auth.ts @@ -47,7 +47,7 @@ export class Auth extends cdk.NestedStack { userPoolDomain: cdk.aws_cognito.CfnUserPoolDomain; identityPool: cdk.aws_cognito.CfnIdentityPool; } { - const { project, stage, stack, isDev } = props; + const { project, stage, stack } = props; const { apiGateway, applicationEndpointUrl, @@ -225,7 +225,7 @@ export class Auth extends cdk.NestedStack { }, ); - const manageUsers = new ManageUsers( + new ManageUsers( this, "ManageUsers", userPool, diff --git a/lib/stacks/data.ts b/lib/stacks/data.ts index b22addd716..98168b270a 100644 --- a/lib/stacks/data.ts +++ b/lib/stacks/data.ts @@ -74,16 +74,12 @@ export class Data extends cdk.NestedStack { standardAttributes: { email: { required: true, mutable: true } }, }); - const userPoolDomain = new cdk.aws_cognito.UserPoolDomain( - this, - "UserPoolDomain", - { - userPool, - cognitoDomain: { - domainPrefix: `${project}-${stage}-search`, - }, + new cdk.aws_cognito.UserPoolDomain(this, "UserPoolDomain", { + userPool, + cognitoDomain: { + domainPrefix: `${project}-${stage}-search`, }, - ); + }); const userPoolClient = new cdk.aws_cognito.UserPoolClient( this, @@ -898,16 +894,12 @@ export class Data extends cdk.NestedStack { }, ); - const runReindexCustomResource = new cdk.CustomResource( - this, - "RunReindex", - { - serviceToken: runReindexProviderProvider.serviceToken, - properties: { - stateMachine: reindexStateMachine.stateMachineArn, - }, + new cdk.CustomResource(this, "RunReindex", { + serviceToken: runReindexProviderProvider.serviceToken, + properties: { + stateMachine: reindexStateMachine.stateMachineArn, }, - ); + }); if (!usingSharedOpenSearch) { reindexStateMachine.node.addDependency(this.mapRoleCustomResource); diff --git a/lib/stacks/deployment-config.ts b/lib/stacks/deployment-config.ts index 5a6fec1cc0..9d2d5b6e99 100644 --- a/lib/stacks/deployment-config.ts +++ b/lib/stacks/deployment-config.ts @@ -82,7 +82,7 @@ export class DeploymentConfig { let defaultSecret: { [key: string]: string } = {}; try { defaultSecret = JSON.parse(await getSecret(defaultSecretName)); - } catch (error) { + } catch { throw new Error(`Failed to fetch mandatory secret ${defaultSecretName}`); } @@ -97,7 +97,7 @@ export class DeploymentConfig { } // Merge secrets with stageSecret taking precedence - let combinedSecret: { [key: string]: any } = { + const combinedSecret: { [key: string]: any } = { ...defaultSecret, ...stageSecret, }; diff --git a/lib/stacks/parent.ts b/lib/stacks/parent.ts index 5b5a92423d..704f71ca9b 100644 --- a/lib/stacks/parent.ts +++ b/lib/stacks/parent.ts @@ -106,7 +106,7 @@ export class ParentStack extends cdk.Stack { devPasswordArn: props.devPasswordArn, }); - const emailStack = new Stacks.Email(this, "email", { + new Stacks.Email(this, "email", { ...commonProps, stack: "email", vpc, diff --git a/package.json b/package.json index cd8c5f3ac3..703002bb05 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "watch": "tsc -w", "cdk": "cdk", "build:cli": "turbo build:cli", - "lint": "turbo lint", + "lint": "eslint", "e2e": "turbo e2e", "e2e:ui": "turbo e2e:ui", "test-tsc": "tsc --skipLibCheck --noEmit", @@ -43,6 +43,8 @@ "devDependencies": { "@anatine/zod-mock": "^3.13.4", "@aws-sdk/client-secrets-manager": "^3.622.0", + "@eslint/compat": "^1.1.1", + "@eslint/js": "^9.8.0", "@faker-js/faker": "^8.4.1", "@semantic-release/changelog": "^6.0.3", "@semantic-release/git": "^10.0.1", @@ -53,12 +55,17 @@ "@vitest/coverage-v8": "^2.0.5", "@vitest/ui": "^2.0.5", "aws-cdk": "2.146.0", + "eslint": "9.x", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^4.6.2", + "globals": "^15.9.0", "jest": "^29.7.0", "semantic-release": "^21.1.2", "ts-jest": "^29.2.4", "ts-node": "^10.9.2", "turbo": "^2.0.11", "typescript": "5.4.5", + "typescript-eslint": "^8.0.1", "vitest": "^2.0.5" }, "release": { diff --git a/react-app/.eslintrc.cjs b/react-app/.eslintrc.cjs deleted file mode 100644 index a4dade9e7f..0000000000 --- a/react-app/.eslintrc.cjs +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = { - parser: "@typescript-eslint/parser", - extends: [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:@typescript-eslint/recommended", - ], - plugins: ["react", "react-hooks", "@typescript-eslint"], - parserOptions: { - ecmaVersion: 2020, - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, - }, - rules: { - "@typescript-eslint/no-empty-interface": "off", - "react/react-in-jsx-scope": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/ban-ts-comment": "off", - }, - settings: { - react: { - version: "detect", - }, - }, -}; diff --git a/react-app/package.json b/react-app/package.json index bf46b7589b..445a9b34f5 100644 --- a/react-app/package.json +++ b/react-app/package.json @@ -5,7 +5,6 @@ "type": "module", "scripts": { "dev": "vite", - "lint": "eslint 'src/**/*.{ts,tsx}'", "build": "tsc && vite build", "preview": "vite preview", "test": "vitest", @@ -84,14 +83,8 @@ "@types/pluralize": "^0.0.33", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", "@vitejs/plugin-react-swc": "^3.0.0", "autoprefixer": "^10.4.14", - "eslint": "^8.57.0", - "eslint-config-custom": "*", - "eslint-plugin-react": "^7.34.4", - "eslint-plugin-react-hooks": "^4.6.2", "jsdom": "^21.1.1", "msw": "^2.3.1", "postcss": "^8.4.31", diff --git a/react-app/src/api/mocks/submit.ts b/react-app/src/api/mocks/submit.ts index 2bad1ae04c..d16934ccf0 100644 --- a/react-app/src/api/mocks/submit.ts +++ b/react-app/src/api/mocks/submit.ts @@ -1,6 +1,5 @@ import { http, HttpResponse } from "msw"; import { setupServer } from "msw/node"; -import { opensearch, SEATOOL_STATUS } from "shared-types"; const handlers = [ http.put("/upload", async () => { @@ -13,7 +12,7 @@ const handlers = [ key: "test-key", bucket: "test-bucket", }, - { status: 200 } + { status: 200 }, ); }), http.post("/test", () => { diff --git a/react-app/src/api/submissionService.ts b/react-app/src/api/submissionService.ts index 97c94cccb4..92185a3581 100644 --- a/react-app/src/api/submissionService.ts +++ b/react-app/src/api/submissionService.ts @@ -64,7 +64,9 @@ export const buildSubmissionPayload = >( const userDetails = { submitterEmail: user?.user?.email ?? "N/A", submitterName: - `${user?.user?.given_name} ${user?.user?.family_name}` ?? "N/A", + user?.user?.given_name && user?.user?.family_name + ? `${user.user.given_name} ${user.user.family_name}` + : "N/A", }; const baseProperties = { authority: authority, diff --git a/react-app/src/api/useGetUser.test.ts b/react-app/src/api/useGetUser.test.ts index ca4c4eb40f..81d6392d24 100644 --- a/react-app/src/api/useGetUser.test.ts +++ b/react-app/src/api/useGetUser.test.ts @@ -1,7 +1,6 @@ import { beforeAll, it, expect, vi, describe } from "vitest"; import * as unit from "./useGetUser"; import { Auth } from "aws-amplify"; -import { CognitoUser } from "@aws-amplify/auth"; /* When mocking the getItem and helper functions: * 1. Assign Auth.currentAuthenticatedUser to use mockCognito @@ -31,7 +30,7 @@ const mockUserAttr = ({ isCms?: boolean; options?: { error?: boolean; noRoles?: boolean }; }) => - vi.fn(async (user: CognitoUser) => { + vi.fn(async () => { return await new Promise>( (resolve) => { if (options?.error) @@ -58,7 +57,7 @@ const mockUserAttr = ({ Value: isCms ? "onemac-micro-reviewer" : "onemac-micro-cmsreview", }, ] as Array<{ Name: string; Value: string }>); - } + }, ); }); @@ -69,20 +68,17 @@ describe("getUser", () => { it("distinguishes CMS users with `isCms` property", async () => { // Auth.userAttributes doesn't like mockUserAttr, and the necessary // type is not exported for manual assertion. - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error Auth.userAttributes = mockUserAttr({ isCms: false }); const stateUser = await unit.getUser(); expect(stateUser.isCms).toBe(false); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error Auth.userAttributes = mockUserAttr({ isCms: true }); const cmsUser = await unit.getUser(); expect(cmsUser.isCms).toBe(true); }); it("returns an object of CognitoUserAttributes", async () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error Auth.userAttributes = mockUserAttr({ isCms: false }); const oneMacUser = await unit.getUser(); expect(oneMacUser.user).toStrictEqual({ @@ -97,8 +93,7 @@ describe("getUser", () => { }); }); it("handles a user with no 'custom:cms-roles'", async () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error Auth.userAttributes = mockUserAttr({ isCms: false, options: { noRoles: true }, @@ -116,8 +111,7 @@ describe("getUser", () => { }); }); it("handles and logs errors", async () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error Auth.userAttributes = mockUserAttr({ isCms: false, options: { error: true }, diff --git a/react-app/src/api/useSearch.ts b/react-app/src/api/useSearch.ts index d586a5f303..a1140b2a64 100644 --- a/react-app/src/api/useSearch.ts +++ b/react-app/src/api/useSearch.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ import { aggQueryBuilder, filterQueryBuilder, @@ -76,7 +75,7 @@ export const useOsSearch = ( QueryProps >, ) => { - //@ts-ignore + //@ts-expect-error return useMutation>( (props) => getOsData(props), options, diff --git a/react-app/src/components/BreadCrumb/BreadCrumb.test.tsx b/react-app/src/components/BreadCrumb/BreadCrumb.test.tsx index 7577308375..06d257211c 100644 --- a/react-app/src/components/BreadCrumb/BreadCrumb.test.tsx +++ b/react-app/src/components/BreadCrumb/BreadCrumb.test.tsx @@ -1,4 +1,4 @@ -import { describe, test, expect, beforeAll, beforeEach } from "vitest"; +import { describe, test, expect, beforeEach } from "vitest"; import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { BreadCrumb, BreadCrumbBar } from "./BreadCrumb"; @@ -25,7 +25,7 @@ describe("Bread Crumb Tests", () => { , - { wrapper: BrowserRouter } + { wrapper: BrowserRouter }, ); const user = userEvent.setup(); @@ -51,7 +51,7 @@ describe("Bread Crumb Tests", () => { , { wrapper: BrowserRouter, - } + }, ); }); diff --git a/react-app/src/components/Form/content/PackageSection.tsx b/react-app/src/components/Form/content/PackageSection.tsx index 6cd7bcd80a..c9c4b4e1e4 100644 --- a/react-app/src/components/Form/content/PackageSection.tsx +++ b/react-app/src/components/Form/content/PackageSection.tsx @@ -1,8 +1,8 @@ +import { useParams } from "react-router-dom"; import { Authority } from "shared-types"; -import { useParams } from "@/components"; export const PackageSection = () => { - const { id, authority } = useParams("/action/:authority/:id/:type"); + const { id, authority } = useParams<{ id: string; authority: Authority }>(); const lcAuthority = authority.toLowerCase(); // We should pass in the already lowercased Authority, right? todo return ( diff --git a/react-app/src/components/Inputs/form.tsx b/react-app/src/components/Inputs/form.tsx index 7981a894e9..621cafcb8e 100644 --- a/react-app/src/components/Inputs/form.tsx +++ b/react-app/src/components/Inputs/form.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import * as LabelPrimitive from "@radix-ui/react-label"; +import type * as LabelPrimitive from "@radix-ui/react-label"; import { Slot } from "@radix-ui/react-slot"; import { Controller, diff --git a/react-app/src/components/Inputs/switch.tsx b/react-app/src/components/Inputs/switch.tsx index b13738558f..98271445c5 100644 --- a/react-app/src/components/Inputs/switch.tsx +++ b/react-app/src/components/Inputs/switch.tsx @@ -1,4 +1,4 @@ -/* eslint-disable react/prop-types */ + import * as React from "react"; import * as SwitchPrimitives from "@radix-ui/react-switch"; import { cn } from "@/utils"; diff --git a/react-app/src/components/RHF/Field.tsx b/react-app/src/components/RHF/Field.tsx index dfc75a5564..b4aed35c26 100644 --- a/react-app/src/components/RHF/Field.tsx +++ b/react-app/src/components/RHF/Field.tsx @@ -66,7 +66,7 @@ export const Field = ({ const formField = ( ( - props: FieldArrayProps + props: FieldArrayProps, ) => { const isFieldArray = props.rhf === "FieldArray"; const fieldArr = useFieldArray({ diff --git a/react-app/src/components/RHF/FormGroup.tsx b/react-app/src/components/RHF/FormGroup.tsx index 9e310384ff..1c5cb3f494 100644 --- a/react-app/src/components/RHF/FormGroup.tsx +++ b/react-app/src/components/RHF/FormGroup.tsx @@ -1,4 +1,3 @@ -// @ts-nocheck import { Control, FieldValues } from "react-hook-form"; import * as TRhf from "shared-types"; import { FormLabel, FormField } from "../Inputs"; @@ -29,8 +28,10 @@ export const RHFFormGroup = (props: { {props.form.slots.map((SLOT) => ( diff --git a/react-app/src/components/RHF/tests/NameGen.test.tsx b/react-app/src/components/RHF/tests/NameGen.test.tsx index 37abd63617..970c53d28d 100644 --- a/react-app/src/components/RHF/tests/NameGen.test.tsx +++ b/react-app/src/components/RHF/tests/NameGen.test.tsx @@ -107,12 +107,10 @@ describe("Test Name Generation", () => { }); test("Test data structure matches expectation", async () => { - let data: any = {}; const rend = render( { console.log("d", d); - data = d; }} />, ); diff --git a/react-app/src/components/RHF/utils/is.ts b/react-app/src/components/RHF/utils/is.ts index 98c4b89b77..855e11bdb0 100644 --- a/react-app/src/components/RHF/utils/is.ts +++ b/react-app/src/components/RHF/utils/is.ts @@ -19,8 +19,7 @@ export type MinType = | InputValidationRules["min"] | InputValidationRules["minLength"]; -// eslint-disable-next-line @typescript-eslint/ban-types -export const isFunction = (value: unknown): value is Function => +export const isFunction = (value: unknown): value is typeof Function => typeof value === "function"; export const isNullOrUndefined = (value: unknown): value is null | undefined => diff --git a/react-app/src/components/Routing/Link.tsx b/react-app/src/components/Routing/Link.tsx index 386fd96914..ac04590831 100644 --- a/react-app/src/components/Routing/Link.tsx +++ b/react-app/src/components/Routing/Link.tsx @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ import { Link as AppLink, Navigate as AppNavigate, @@ -16,12 +15,10 @@ export type _LinkProps = { Omit; export const Link = (props: _LinkProps) => { - //@ts-ignore const { path, params, hash, query, ...rest } = props; const to = (() => { let url: string = path; - //@ts-ignore if (params) url = urlEmbedParams(url, params); if (query) url = urlEmbedQuery(url, query); if (hash) url = urlEmbedHash(url, hash); @@ -39,12 +36,10 @@ export type _NavigateProps = { Omit; export const Navigate = (props: _NavigateProps) => { - //@ts-ignore const { path, params, hash, query, ...rest } = props; const to = (() => { let url: string = path; - //@ts-ignore if (params) url = urlEmbedParams(path, params); if (query) url = urlEmbedQuery(path, query); if (hash) url = urlEmbedHash(path, hash); diff --git a/react-app/src/components/Routing/hooks.ts b/react-app/src/components/Routing/hooks.ts index cab1c0508c..d8a377ad98 100644 --- a/react-app/src/components/Routing/hooks.ts +++ b/react-app/src/components/Routing/hooks.ts @@ -1,16 +1,9 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ import { NavigateOptions, useNavigate as useNav, - useParams as usePara, redirect as redir, } from "react-router-dom"; -import { - Route, - Params, - TupleByCharKeyToInterface, - StringToTuple, -} from "./types"; +import { Route, Params } from "./types"; import { urlEmbedHash, urlEmbedParams, urlEmbedQuery } from "./utils"; export const useNavigate = () => { @@ -26,7 +19,6 @@ export const useNavigate = () => { ) => { const to = (() => { let url: string = props.path; - //@ts-ignore if (props.params) url = urlEmbedParams(url, props.params); if (props.query) url = urlEmbedQuery(url, props.query); if (props.hash) url = urlEmbedHash(url, props.hash); @@ -40,11 +32,6 @@ export const useNavigate = () => { return navigate; }; -export const useParams = (_: T) => { - //@ts-ignore - return usePara, ":">>(); -}; - export const redirect = ( props: { path: T; @@ -54,7 +41,6 @@ export const redirect = ( ) => { const to = (() => { let url: string = props.path; - //@ts-ignore if (props.params) url = urlEmbedParams(url, props.params); if (props.query) url = urlEmbedQuery(url, props.query); if (props.hash) url = urlEmbedHash(url, props.hash); diff --git a/react-app/src/components/Routing/types.ts b/react-app/src/components/Routing/types.ts index 503cae3745..30a4008026 100644 --- a/react-app/src/components/Routing/types.ts +++ b/react-app/src/components/Routing/types.ts @@ -1,5 +1,3 @@ -import type { UrlObject } from "url"; - export type RoutesModule = typeof import("./routes"); export type Route = RoutesModule[keyof RoutesModule]; @@ -24,7 +22,7 @@ export type StringToTuple< type StringContains< T extends string, C extends string, -> = T extends `${infer _U}${C}${infer _A}` ? true : false; +> = T extends `${string}${C}${string}` ? true : false; export type Params< T extends string, @@ -33,10 +31,9 @@ export type Params< > = StringContains extends true ? { - params: TupleByCharKeyToInterface< + params?: TupleByCharKeyToInterface< StringToTuple, TWildCard >; } - : // eslint-disable-next-line @typescript-eslint/ban-types - {}; + : { params?: object }; diff --git a/react-app/src/config.tsx b/react-app/src/config.tsx index d0d1185b3d..eb834ef2b1 100644 --- a/react-app/src/config.tsx +++ b/react-app/src/config.tsx @@ -1,4 +1,3 @@ -// @ts-nocheck const config = { apiGateway: { REGION: import.meta.env.VITE_API_REGION, diff --git a/react-app/src/features/dashboard/index.tsx b/react-app/src/features/dashboard/index.tsx index fda5170132..9e3aa35d36 100644 --- a/react-app/src/features/dashboard/index.tsx +++ b/react-app/src/features/dashboard/index.tsx @@ -4,7 +4,6 @@ import { Plus as PlusIcon } from "lucide-react"; import { getUser } from "@/api"; import { WaiversList } from "./Lists/waivers"; import { SpasList } from "./Lists/spas"; -import { SimplePageContainer } from "@/components"; import { OsProvider, type OsTab, diff --git a/react-app/src/features/faq/index.tsx b/react-app/src/features/faq/index.tsx index 07226b1624..82201df5e6 100644 --- a/react-app/src/features/faq/index.tsx +++ b/react-app/src/features/faq/index.tsx @@ -7,11 +7,11 @@ import { AccordionContent, AccordionTrigger, SubNavHeader, - useParams, } from "@/components"; +import { useParams } from "react-router-dom"; export const Faq = () => { - const { id } = useParams("/faq/:id"); + const { id } = useParams<{ id: string }>(); const [openItems, setOpenItems] = useState([]); useEffect(() => { diff --git a/react-app/src/features/package-actions/legacy-shared-components.tsx b/react-app/src/features/package-actions/legacy-shared-components.tsx index c5e26e5835..0a832b8b59 100644 --- a/react-app/src/features/package-actions/legacy-shared-components.tsx +++ b/react-app/src/features/package-actions/legacy-shared-components.tsx @@ -17,7 +17,7 @@ export const useSubmitForm = () => { const submit = useSubmit(); const location = useLocation(); - const validSubmission: SubmitHandler = (data, e) => { + const validSubmission: SubmitHandler = (data) => { const formData = new FormData(); // Append all other data for (const key in data) { @@ -53,7 +53,7 @@ export const useIntakePackage = () => { const submit = useSubmit(); const location = useLocation(); - const validSubmission: SubmitHandler = (data, e) => { + const validSubmission: SubmitHandler = (data) => { submit(data, { method: "post", encType: "application/json", @@ -116,7 +116,7 @@ export const useDisplaySubmissionAlert = (header: string, body: string) => { const filterUndefinedValues = (obj: Record) => { if (obj) { return Object.fromEntries( - Object.entries(obj).filter(([key, value]) => value !== undefined), + Object.entries(obj).filter(([, value]) => value !== undefined), ); } return {}; diff --git a/react-app/src/features/package-actions/lib/modules/temporary-extension/index.tsx b/react-app/src/features/package-actions/lib/modules/temporary-extension/index.tsx index 1612e5537d..87a6549126 100644 --- a/react-app/src/features/package-actions/lib/modules/temporary-extension/index.tsx +++ b/react-app/src/features/package-actions/lib/modules/temporary-extension/index.tsx @@ -91,7 +91,7 @@ export const defaultTempExtFields: ReactElement[] = [ instruction={"Add anything else that you would like to share with CMS."} />, ]; -export const defaultTempExtContent: FormContentHydrator = (document) => ({ +export const defaultTempExtContent: FormContentHydrator = () => ({ title: "Temporary Extension Request Details", preSubmitNotice: "Once you submit this form, a confirmation email is sent to you and to CMS. CMS will use this content to review your package, and you will not be able to edit this form. If CMS needs any additional information, they will follow up by email.", diff --git a/react-app/src/features/package-actions/lib/modules/temporary-extension/legacy-components.tsx b/react-app/src/features/package-actions/lib/modules/temporary-extension/legacy-components.tsx index c201718d65..d2b5b9d94f 100644 --- a/react-app/src/features/package-actions/lib/modules/temporary-extension/legacy-components.tsx +++ b/react-app/src/features/package-actions/lib/modules/temporary-extension/legacy-components.tsx @@ -17,8 +17,7 @@ import { SelectTrigger, SelectValue, } from "@/components"; -import { defaultTempExtSchema } from "@/features/package-actions/lib/modules"; -import { useDebounce } from "@/hooks"; +import type { defaultTempExtSchema } from "@/features/package-actions/lib/modules"; export const TEPackageSection = () => { const { id, authority } = useParams(); diff --git a/react-app/src/features/selection-flow/external-landing/ExternalAppLandingPage.tsx b/react-app/src/features/selection-flow/external-landing/ExternalAppLandingPage.tsx index 9a342415c8..eea40433f1 100644 --- a/react-app/src/features/selection-flow/external-landing/ExternalAppLandingPage.tsx +++ b/react-app/src/features/selection-flow/external-landing/ExternalAppLandingPage.tsx @@ -6,7 +6,6 @@ import { BreadCrumbs, FAQ_TAB, optionCrumbsFromPath, - Route, } from "@/components"; import { SimplePageTitle } from "@/features"; diff --git a/react-app/src/features/submission/app-k/index.tsx b/react-app/src/features/submission/app-k/index.tsx index 8e6ee4f6d0..6caf4f62a7 100644 --- a/react-app/src/features/submission/app-k/index.tsx +++ b/react-app/src/features/submission/app-k/index.tsx @@ -1,4 +1,4 @@ -/* eslint-disable react/prop-types */ + import * as I from "@/components/Inputs"; import * as C from "@/components"; diff --git a/react-app/src/features/submission/app-k/slots.tsx b/react-app/src/features/submission/app-k/slots.tsx index 336137db5d..9e240833fc 100644 --- a/react-app/src/features/submission/app-k/slots.tsx +++ b/react-app/src/features/submission/app-k/slots.tsx @@ -1,4 +1,3 @@ -/* eslint-disable react/prop-types */ import { useGetUser } from "@/api/useGetUser"; import { OPTIONS_STATE } from "./consts"; import * as I from "@/components/Inputs"; @@ -75,7 +74,7 @@ export const SlotWaiverId = < setLoading(true); - const [_, index] = field.name.split("."); + const [, index] = field.name.split("."); const childWaivers = context.getValues("waiverIds") || []; const existsInList = childWaivers .filter((_: any, I: number) => I != Number(index)) @@ -180,8 +179,6 @@ export const WaiverIdFieldArray = (props: any) => { fieldArr.remove(index) }), state: props.state, diff --git a/react-app/src/features/webforms/Webform.tsx b/react-app/src/features/webforms/Webform.tsx index fc839aee83..f46ab4c6cf 100644 --- a/react-app/src/features/webforms/Webform.tsx +++ b/react-app/src/features/webforms/Webform.tsx @@ -1,10 +1,11 @@ -import { documentInitializer, LoadingSpinner, useParams } from "@/components"; +import { documentInitializer, LoadingSpinner } from "@/components"; import { useGetForm } from "@/api"; import { useReadOnlyUser } from "../../hooks/useReadOnlyUser"; import { WebformBody } from "./WebFormBody"; +import { useParams } from "react-router-dom"; export function Webform() { - const { id, version } = useParams("/webform/:id/:version"); + const { id, version } = useParams<{ id: string; version: string }>(); const { data, isLoading, error } = useGetForm(id as string, version); const readonly = useReadOnlyUser(); diff --git a/react-app/src/hooks/useCountdown/index.ts b/react-app/src/hooks/useCountdown/index.ts index 3a022381c4..bdb02f6e7c 100644 --- a/react-app/src/hooks/useCountdown/index.ts +++ b/react-app/src/hooks/useCountdown/index.ts @@ -18,15 +18,15 @@ export const useCountdown = ( setIsCountdownRunning(true); }; - const stopCountdown = () => { + const stopCountdown = useCallback(() => { setIsCountdownRunning(false); - }; + }, []); // Will set running false and reset the seconds to initial value const resetCountdown = useCallback(() => { stopCountdown(); setCount(minutesToCountDown); - }, [stopCountdown]); + }, [stopCountdown, minutesToCountDown]); const countdownCallback = useCallback(() => { if (count === 0) { diff --git a/react-app/src/hooks/useIdle/index.ts b/react-app/src/hooks/useIdle/index.ts index 1819831d67..5831ea3003 100644 --- a/react-app/src/hooks/useIdle/index.ts +++ b/react-app/src/hooks/useIdle/index.ts @@ -30,7 +30,7 @@ export function useIdle( timer.current = window.setTimeout(() => { setIdle(true); }, timeout); - }, []); + }, [timeout, events]); useEffect(() => { const handleEvents = () => { diff --git a/react-app/src/hooks/useParams.ts b/react-app/src/hooks/useParams.ts index 17ed84bae3..af2311e1cb 100644 --- a/react-app/src/hooks/useParams.ts +++ b/react-app/src/hooks/useParams.ts @@ -19,7 +19,7 @@ export const useLzUrl = (props: { key: string; initValue?: T }) => { try { return JSON.parse(decompress); - } catch (e) { + } catch { return props.initValue; } }, [queryString]); @@ -31,7 +31,7 @@ export const useLzUrl = (props: { key: string; initValue?: T }) => { })(); const compressedValue = LZ.compressToEncodedURIComponent( - JSON.stringify(val) + JSON.stringify(val), ); setParams( @@ -47,7 +47,7 @@ export const useLzUrl = (props: { key: string; initValue?: T }) => { return { ...prevParams, [props.key]: compressedValue }; }, - { replace: true } + { replace: true }, ); }; diff --git a/react-app/src/utils/Poller/DataPoller.ts b/react-app/src/utils/Poller/DataPoller.ts index 573bcc1dde..f97e52ad80 100644 --- a/react-app/src/utils/Poller/DataPoller.ts +++ b/react-app/src/utils/Poller/DataPoller.ts @@ -16,7 +16,7 @@ export class DataPoller { return new Promise<{ maxAttemptsReached: boolean; correctDataStateFound: boolean; - }>((resolve, _reject) => { + }>((resolve) => { let timesPolled = 0; const intervalId = setInterval(async () => { diff --git a/react-app/src/utils/labelMappers.ts b/react-app/src/utils/labelMappers.ts index 84b39acf1a..0d557a9a9d 100644 --- a/react-app/src/utils/labelMappers.ts +++ b/react-app/src/utils/labelMappers.ts @@ -2,7 +2,6 @@ import { Action } from "shared-types"; import { BLANK_VALUE } from "@/consts"; import { Route } from "@/components"; -import config from "@/config"; export const mapActionLabel = (a: Action) => { switch (a) { diff --git a/react-app/src/utils/useSeaToolAuthorityId.ts b/react-app/src/utils/useSeaToolAuthorityId.ts index 5c891b26ef..ff3efe836e 100644 --- a/react-app/src/utils/useSeaToolAuthorityId.ts +++ b/react-app/src/utils/useSeaToolAuthorityId.ts @@ -1,11 +1,11 @@ -import { SEATOOL_AUTHORITIES_MAP_TO_ID } from "shared-types"; -import { useParams } from "@/components"; +import { Authority, SEATOOL_AUTHORITIES_MAP_TO_ID } from "shared-types"; import { useState } from "react"; +import { useParams } from "react-router-dom"; /** takes an Authority and returns the seatool authority ID. * REQUIRES :authority url parameter */ export const useSeaToolAuthorityId = () => { - const { authority } = useParams("/action/:authority/:id/:type"); + const { authority } = useParams<{ authority: Authority }>(); const [stAuthorityId] = useState( authority ? SEATOOL_AUTHORITIES_MAP_TO_ID[authority] : 0, ); diff --git a/react-app/src/vite-env.d.ts b/react-app/src/vite-env.d.ts new file mode 100644 index 0000000000..82c5f1b8b2 --- /dev/null +++ b/react-app/src/vite-env.d.ts @@ -0,0 +1,23 @@ +/// + +interface ImportMetaEnv { + readonly VITE_APP_TITLE: string; + readonly VITE_API_REGION: string; + readonly VITE_API_URL: string; + readonly VITE_NODE_ENV: string; + readonly VITE_COGNITO_REGION: string; + readonly VITE_COGNITO_IDENTITY_POOL_ID: string; + readonly VITE_COGNITO_USER_POOL_ID: string; + readonly VITE_COGNITO_USER_POOL_CLIENT_ID: string; + readonly VITE_COGNITO_USER_POOL_CLIENT_DOMAIN: string; + readonly VITE_COGNITO_REDIRECT_SIGNIN: string; + readonly VITE_COGNITO_REDIRECT_SIGNOUT: string; + readonly VITE_IDM_HOME_URL: string; + readonly VITE_GOOGLE_ANALYTICS_GTAG: string; + readonly VITE_GOOGLE_ANALYTICS_DISABLE: string; + readonly VITE_LAUNCHDARKLY_CLIENT_ID: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/react-app/tailwind.config.js b/react-app/tailwind.config.js index 8a6a379ce0..d220c3b51b 100644 --- a/react-app/tailwind.config.js +++ b/react-app/tailwind.config.js @@ -1,3 +1,4 @@ +/* eslint @typescript-eslint/no-require-imports: 0 */ /** @type {import('tailwindcss').Config} */ import defaultTheme from "tailwindcss/defaultTheme"; diff --git a/react-app/testing/setup.ts b/react-app/testing/setup.ts index f48a7c55c5..97877332cf 100644 --- a/react-app/testing/setup.ts +++ b/react-app/testing/setup.ts @@ -15,7 +15,6 @@ expect.extend(matchers); // Add this to remove all the expected errors in console when running unit tests. beforeAll(() => { - // eslint-disable-next-line @typescript-eslint/no-empty-function vi.spyOn(console, "error").mockImplementation(() => {}); });