diff --git a/apps/api-v2/.eslintrc.json b/apps/api-v2/.eslintrc.json new file mode 100644 index 0000000..2ec5958 --- /dev/null +++ b/apps/api-v2/.eslintrc.json @@ -0,0 +1,13 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + // Add your custom rules here + "@typescript-eslint/no-explicit-any": "off" + } +} \ No newline at end of file diff --git a/apps/api-v2/package.json b/apps/api-v2/package.json index 24475e6..ce86489 100644 --- a/apps/api-v2/package.json +++ b/apps/api-v2/package.json @@ -15,7 +15,8 @@ "db:migrate": "prisma migrate deploy", "schema:generate": "prisma generate", "db:start": "docker-compose up -d", - "db:setup": "npm run db:start && npm run db:migrate" + "db:setup": "npm run db:start && npm run db:migrate", + "lint": "eslint --ext .ts src" }, "keywords": [], "author": "Vincent Vu ", @@ -33,6 +34,9 @@ "@types/passport-google-oauth20": "^2.0.11", "@types/response-time": "^2.3.5", "@types/supertest": "^2.0.12", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "eslint": "^8.50.0", "jest": "^29.6.4", "jest-express": "^1.12.0", "prisma": "^5.2.0", diff --git a/apps/api-v2/src/__tests__/index.test.ts b/apps/api-v2/src/__tests__/index.test.ts index d8fb40b..8b55cf8 100644 --- a/apps/api-v2/src/__tests__/index.test.ts +++ b/apps/api-v2/src/__tests__/index.test.ts @@ -4,7 +4,7 @@ import { Server } from "http"; import config from "../config"; let httpServer: Server; -let { app } = createApp(); +const { app } = createApp(); beforeEach(() => { // run the server first diff --git a/apps/api-v2/src/logging.ts b/apps/api-v2/src/logging.ts index ff979f2..0ec27f2 100644 --- a/apps/api-v2/src/logging.ts +++ b/apps/api-v2/src/logging.ts @@ -2,7 +2,7 @@ import config from "./config"; import pino from "pino"; // only enable logging to axiom in production -export let loggerOptions: any = {}; +export let loggerOptions: Record = {}; if (process.env.NODE_ENV === "production") { loggerOptions = { transport: { diff --git a/apps/api-v2/src/routers/auth.ts b/apps/api-v2/src/routers/auth.ts index 610044c..a52e08e 100644 --- a/apps/api-v2/src/routers/auth.ts +++ b/apps/api-v2/src/routers/auth.ts @@ -4,12 +4,11 @@ import config from "../config"; import jwt from "jsonwebtoken"; import { EncodedProfileTokenClaims, - IAuthCtx, IAuthPassportCallbackCtx, SupernovaResponse, } from "../types"; import { authenticateJWTMiddleware } from "../mws"; -import { prisma, redis } from "../db"; +import { redis } from "../db"; import { logger } from "../logging"; import { Strategy as GoogleStrategy } from "passport-google-oauth20"; import { getAuthContext } from "../utils"; @@ -143,41 +142,47 @@ export default function buildAuthRouter(): Router { ); }); - router.get("/auth/logout", authenticateJWTMiddleware, async (req, res) => { - try { - const userAuthCtx = getAuthContext(req); - // delete the refresh token from redis (stored as a KV pair of user ID -> refresh token) - if (userAuthCtx.sub === undefined) { - logger.error( - `userAuthCtx.sub is undefined; userAuthCtx=${JSON.stringify( - userAuthCtx - )}` - ); - return res.status(400).send( - new SupernovaResponse({ - error: "Internal Server Error", - message: "Failed to logout user", - }) - ); - } - await redis.connect(); - const resdel = await redis.del(userAuthCtx.sub); - await redis.disconnect(); - // didn't delete anything - if (resdel === 0) { + router.get( + "/auth/logout", + authenticateJWTMiddleware, + async (req, res, next) => { + try { + const userAuthCtx = getAuthContext(req); + // delete the refresh token from redis (stored as a KV pair of user ID -> refresh token) + if (userAuthCtx.sub === undefined) { + logger.error( + `userAuthCtx.sub is undefined; userAuthCtx=${JSON.stringify( + userAuthCtx + )}` + ); + return res.status(400).send( + new SupernovaResponse({ + error: "Internal Server Error", + message: "Failed to logout user", + }) + ); + } + await redis.connect(); + const resdel = await redis.del(userAuthCtx.sub); + await redis.disconnect(); + // didn't delete anything + if (resdel === 0) { + return res.status(200).send( + new SupernovaResponse({ + message: "User has already been logged out", + }) + ); + } return res.status(200).send( new SupernovaResponse({ - message: "User has already been logged out", + message: "User logged out", }) ); + } catch (err) { + return next(err); } - return res.status(200).send( - new SupernovaResponse({ - message: "User logged out", - }) - ); - } catch (err) {} - }); + } + ); return router; } diff --git a/apps/api-v2/src/types.ts b/apps/api-v2/src/types.ts index 7100011..13dd9fd 100644 --- a/apps/api-v2/src/types.ts +++ b/apps/api-v2/src/types.ts @@ -1,7 +1,7 @@ import { Profile } from "passport-google-oauth20"; import jwt from "jsonwebtoken"; -export interface ISupernovaResponse { +export interface ISupernovaResponse { data?: T; error?: string; message?: string; diff --git a/apps/api-v2/tsconfig.json b/apps/api-v2/tsconfig.json index e075f97..9465b26 100644 --- a/apps/api-v2/tsconfig.json +++ b/apps/api-v2/tsconfig.json @@ -83,7 +83,7 @@ /* Type Checking */ "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ diff --git a/apps/desktop-v2/components/command-center.tsx b/apps/desktop-v2/components/command-center.tsx index 9dfa120..b32b56f 100644 --- a/apps/desktop-v2/components/command-center.tsx +++ b/apps/desktop-v2/components/command-center.tsx @@ -4,7 +4,7 @@ import Mousetrap from "mousetrap"; import React from "react"; import { Kbd } from "./kbd"; import { SupernovaCommand } from "../types/command"; -import { ISupernovaTask } from "../types/supernova-task"; +import { ISupernovaTask } from "@supernova/types"; import { twMerge } from "tailwind-merge"; import { ibmPlexMono } from "./fonts"; import { SupernovaGlobeLogoImage } from "./icons"; diff --git a/apps/desktop-v2/components/supernova-task.tsx b/apps/desktop-v2/components/supernova-task.tsx index be4c97f..c16bfd8 100644 --- a/apps/desktop-v2/components/supernova-task.tsx +++ b/apps/desktop-v2/components/supernova-task.tsx @@ -1,7 +1,7 @@ "use client"; import { ArrowRightIcon } from "./icons"; import * as React from "react"; -import { ISupernovaTask } from "../types/supernova-task"; +import { ISupernovaTask } from "@supernova/types"; import { CustomCheckbox } from "./checkbox"; import { DurationWidget } from "./duration-widget"; import { StartTimeWidget } from "./start-time-widget"; diff --git a/apps/desktop-v2/components/task-builder-dialog.tsx b/apps/desktop-v2/components/task-builder-dialog.tsx index 0a56f7b..3eb96ca 100644 --- a/apps/desktop-v2/components/task-builder-dialog.tsx +++ b/apps/desktop-v2/components/task-builder-dialog.tsx @@ -13,7 +13,7 @@ import { RenderLeafProps, } from "slate-react"; import { Descendant } from "slate"; -import { ISupernovaTask } from "../types/supernova-task"; +import { ISupernovaTask } from "@supernova/types"; import { extractExpectedDuration, START_AT_SLATE_TYPE, diff --git a/apps/desktop-v2/services/local-db.ts b/apps/desktop-v2/services/local-db.ts index 50afbf2..7df5d02 100644 --- a/apps/desktop-v2/services/local-db.ts +++ b/apps/desktop-v2/services/local-db.ts @@ -1,5 +1,5 @@ import Database from "tauri-plugin-sql-api"; -import { ISupernovaTask } from "../types/supernova-task"; +import { ISupernovaTask } from "@supernova/types"; export namespace LocalDB { // delete the table supernova_tasks if it exists diff --git a/apps/desktop-v2/types/supernova-task.ts b/apps/desktop-v2/types/supernova-task.ts deleted file mode 100644 index 26273fe..0000000 --- a/apps/desktop-v2/types/supernova-task.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface ISupernovaTask { - id: string; - title: string; - originalBuildText: string; - description?: string; - expectedDurationSeconds?: number; // in seconds - startTime?: Date; - isComplete: boolean; -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74d9cb1..6e90828 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,6 +110,15 @@ importers: '@types/supertest': specifier: ^2.0.12 version: 2.0.12 + '@typescript-eslint/eslint-plugin': + specifier: ^6.7.4 + version: 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.50.0)(typescript@5.1.6) + '@typescript-eslint/parser': + specifier: ^6.7.4 + version: 6.7.4(eslint@8.50.0)(typescript@5.1.6) + eslint: + specifier: ^8.50.0 + version: 8.50.0 jest: specifier: ^29.6.4 version: 29.6.4(@types/node@20.6.0) @@ -954,10 +963,19 @@ packages: eslint-visitor-keys: 3.4.3 dev: false + /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.50.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/regexpp@4.8.0: resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: false /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} @@ -991,7 +1009,6 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: false /@eslint/js@8.48.0: resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} @@ -1003,6 +1020,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false + /@eslint/js@8.50.0: + resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@humanwhocodes/config-array@0.11.11: resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} @@ -1012,7 +1034,6 @@ packages: minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: false /@humanwhocodes/config-array@0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} @@ -1028,7 +1049,6 @@ packages: /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: false /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} @@ -2642,6 +2662,10 @@ packages: pretty-format: 29.6.3 dev: true + /@types/json-schema@7.0.13: + resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + dev: true + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: false @@ -2748,6 +2772,10 @@ packages: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} dev: false + /@types/semver@7.5.3: + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + dev: true + /@types/send@0.17.1: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: @@ -2800,8 +2828,37 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/parser@6.6.0(eslint@8.46.0)(typescript@5.1.6): - resolution: {integrity: sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==} + /@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.50.0)(typescript@5.1.6): + resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.8.0 + '@typescript-eslint/parser': 6.7.4(eslint@8.50.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/type-utils': 6.7.4(eslint@8.50.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.7.4(eslint@8.50.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.50.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.7.4(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2810,10 +2867,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.7.4 debug: 4.3.4 eslint: 8.46.0 typescript: 5.1.6 @@ -2821,8 +2878,8 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@6.6.0(eslint@8.48.0)(typescript@5.1.6): - resolution: {integrity: sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==} + /@typescript-eslint/parser@6.7.4(eslint@8.48.0)(typescript@5.1.6): + resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2831,10 +2888,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.7.4 debug: 4.3.4 eslint: 8.48.0 typescript: 5.1.6 @@ -2842,21 +2899,60 @@ packages: - supports-color dev: false - /@typescript-eslint/scope-manager@6.6.0: - resolution: {integrity: sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==} + /@typescript-eslint/parser@6.7.4(eslint@8.50.0)(typescript@5.1.6): + resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/visitor-keys': 6.6.0 - dev: false + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.50.0 + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true - /@typescript-eslint/types@6.6.0: - resolution: {integrity: sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==} + /@typescript-eslint/scope-manager@6.7.4: + resolution: {integrity: sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==} engines: {node: ^16.0.0 || >=18.0.0} - dev: false + dependencies: + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 + + /@typescript-eslint/type-utils@6.7.4(eslint@8.50.0)(typescript@5.1.6): + resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.1.6) + '@typescript-eslint/utils': 6.7.4(eslint@8.50.0)(typescript@5.1.6) + debug: 4.3.4 + eslint: 8.50.0 + ts-api-utils: 1.0.3(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true - /@typescript-eslint/typescript-estree@6.6.0(typescript@5.1.6): - resolution: {integrity: sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==} + /@typescript-eslint/types@6.7.4: + resolution: {integrity: sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==} + engines: {node: ^16.0.0 || >=18.0.0} + + /@typescript-eslint/typescript-estree@6.7.4(typescript@5.1.6): + resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2864,8 +2960,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -2874,15 +2970,32 @@ packages: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: false - /@typescript-eslint/visitor-keys@6.6.0: - resolution: {integrity: sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==} + /@typescript-eslint/utils@6.7.4(eslint@8.50.0)(typescript@5.1.6): + resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==} engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/types': 6.6.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) + '@types/json-schema': 7.0.13 + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.1.6) + eslint: 8.50.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.7.4: + resolution: {integrity: sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.4 eslint-visitor-keys: 3.4.3 - dev: false /@zeit/schemas@2.29.0: resolution: {integrity: sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==} @@ -2916,7 +3029,6 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.10.0 - dev: false /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -4284,11 +4396,11 @@ packages: dependencies: '@next/eslint-plugin-next': 13.4.13 '@rushstack/eslint-patch': 1.3.3 - '@typescript-eslint/parser': 6.6.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.7.4(eslint@8.46.0)(typescript@5.1.6) eslint: 8.46.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.46.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.46.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.46.0) eslint-plugin-react: 7.33.2(eslint@8.46.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.46.0) @@ -4309,11 +4421,11 @@ packages: dependencies: '@next/eslint-plugin-next': 13.4.13 '@rushstack/eslint-patch': 1.3.3 - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.7.4(eslint@8.48.0)(typescript@5.1.6) eslint: 8.48.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.48.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.48.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.48.0) eslint-plugin-react: 7.33.2(eslint@8.48.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.48.0) @@ -4333,7 +4445,7 @@ packages: - supports-color dev: false - /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.46.0): + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.46.0): resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4343,8 +4455,8 @@ packages: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.46.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) fast-glob: 3.3.1 get-tsconfig: 4.7.0 is-core-module: 2.13.0 @@ -4356,7 +4468,7 @@ packages: - supports-color dev: false - /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.48.0): + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.48.0): resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4366,8 +4478,8 @@ packages: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.48.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) fast-glob: 3.3.1 get-tsconfig: 4.7.0 is-core-module: 2.13.0 @@ -4379,7 +4491,7 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4400,16 +4512,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.6.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.7.4(eslint@8.46.0)(typescript@5.1.6) debug: 3.2.7 eslint: 8.46.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.46.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.46.0) transitivePeerDependencies: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4430,16 +4542,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.7.4(eslint@8.48.0)(typescript@5.1.6) debug: 3.2.7 eslint: 8.48.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.48.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.48.0) transitivePeerDependencies: - supports-color dev: false - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -4449,7 +4561,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.6.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.7.4(eslint@8.46.0)(typescript@5.1.6) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4458,7 +4570,7 @@ packages: doctrine: 2.1.0 eslint: 8.46.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.46.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -4606,7 +4718,6 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: false /eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} @@ -4628,7 +4739,6 @@ packages: /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false /eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} @@ -4771,6 +4881,52 @@ packages: - supports-color dev: false + /eslint@8.50.0: + resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) + '@eslint-community/regexpp': 4.8.0 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.50.0 + '@humanwhocodes/config-array': 0.11.11 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.21.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /espree@7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4787,7 +4943,6 @@ packages: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 - dev: false /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -5038,7 +5193,6 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: false /flat-cache@3.1.0: resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} @@ -5235,7 +5389,6 @@ packages: engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: false /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -5387,7 +5540,6 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: false /gtoken@7.0.1: resolution: {integrity: sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==} @@ -6621,7 +6773,6 @@ packages: engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: false /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} @@ -7184,7 +7335,6 @@ packages: engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: false /p-map@3.0.0: resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} @@ -8621,7 +8771,6 @@ packages: typescript: '>=4.2.0' dependencies: typescript: 5.1.6 - dev: false /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}