diff --git a/.eslintrc.cjs b/.eslintrc.cjs index d0c38aca6..92c01bfb4 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -6,8 +6,6 @@ module.exports = { }, extends: [ '@nuxtjs/eslint-config-typescript', - // Enable typescript-specific recommended rules - 'plugin:@typescript-eslint/recommended', 'plugin:nuxt/recommended', // Turns off all rules that are unnecessary or might conflict with Prettier (needs to be last) 'prettier', @@ -81,19 +79,35 @@ module.exports = { parser: '@typescript-eslint/parser', // Correct root tsconfigRootDir: __dirname, - // Path to tsconfig to enable rules that require type information - project: './tsconfig.json', + // Enable rules that require type information + project: true, // Correctly handle vue files extraFileExtensions: ['.vue'], }, extends: [ - // Enable recommended rules for typescript that use typing information (may be CPU intensive) - 'plugin:@typescript-eslint/recommended-requiring-type-checking', + // Enable typescript-specific stylistic rules + 'plugin:@typescript-eslint/stylistic-type-checked', + // Enable strict rules for typescript that use typing information (may be CPU intensive) + 'plugin:@typescript-eslint/strict-type-checked', ], rules: { // The graphql processor disables the vue processor, so some rules need to be disenabled // TODO: Remove this once https://github.com/eslint/eslint/issues/14745 is fixed and we can use multiple processors 'vue/comment-directive': 'off', + // Allow any type (for now) + '@typescript-eslint/no-explicit-any': 'warn', + // TODO: Remove this once all errors are fixed + '@typescript-eslint/no-unsafe-call': 'warn', + // TODO: Remove this once all errors are fixed + '@typescript-eslint/no-unsafe-member-access': 'warn', + // TODO: Remove this once all errors are fixed + '@typescript-eslint/no-unsafe-argument': 'warn', + // TODO: Remove this once all errors are fixed + '@typescript-eslint/no-unsafe-return': 'warn', + // TODO: Remove this once all errors are fixed + '@typescript-eslint/no-unsafe-assignment': 'warn', + // TODO: Remove this once all errors are fixed + '@typescript-eslint/no-redundant-type-constituents': 'warn', }, }, { diff --git a/app/router.options.ts b/app/router.options.ts index 1708ad99f..0d28a2029 100644 --- a/app/router.options.ts +++ b/app/router.options.ts @@ -4,8 +4,8 @@ import type { RouterConfig } from '@nuxt/schema' // ex: To Top // https://github.com/nuxt/framework/discussions/5561 // https://router.vuejs.org/api/#routeroptions -export default { - scrollBehavior: (to, from, savedPosition) => { +export default { + scrollBehavior: (to) => { if (to.hash) { return { el: to.hash, @@ -13,4 +13,4 @@ export default { } } }, -} +} as RouterConfig diff --git a/components/DocumentEditor.vue b/components/DocumentEditor.vue index a31966749..223a2f227 100644 --- a/components/DocumentEditor.vue +++ b/components/DocumentEditor.vue @@ -218,7 +218,7 @@ const authors = computed({ ? formatAuthor(useFragment(PersonFullDetails, author)) : '', })), - set: (value) => { + set: (_value) => { // TODO: implement }, }) @@ -229,7 +229,7 @@ const keywords = computed({ document.value?.keywords.map((keyword) => ({ value: keyword, })), - set: (value) => { + set: (_value) => { // TODO: implement }, }) @@ -246,7 +246,7 @@ const externalLinks = computed(() => [ const title = computed({ get: () => document.value?.title, - set: (value) => { + set: (_value) => { // TODO: implement }, }) @@ -255,7 +255,7 @@ const published = computed({ document.value && 'published' in document.value ? document.value.published : null, - set: (value) => { + set: (_value) => { // TODO: implement }, }) @@ -265,9 +265,9 @@ const journal = computed({ 'in' in document.value && document.value.in && 'journal' in document.value.in - ? document.value.in?.journal?.name + ? document.value.in.journal?.name : null, - set: (value) => { + set: (_value) => { // TODO: implement }, }) @@ -277,9 +277,9 @@ const volume = computed({ 'in' in document.value && document.value.in && 'volume' in document.value.in - ? document.value.in?.volume + ? document.value.in.volume : null, - set: (value) => { + set: (_value) => { // TODO: implement }, }) @@ -289,9 +289,9 @@ const issue = computed({ 'in' in document.value && document.value.in && 'number' in document.value.in - ? document.value.in?.number + ? document.value.in.number : null, - set: (value) => { + set: (_value) => { // TODO: implement }, }) @@ -301,7 +301,7 @@ const pages = computed({ ? (document.value.pageStart ?? '') + (document.value.pageEnd ? '-' + document.value.pageEnd : '') : null, - set: (value) => { + set: (_value) => { // TODO: implement }, }) @@ -310,7 +310,7 @@ const abstract = computed({ document.value && 'abstract' in document.value ? document.value.abstract : null, - set: (value) => { + set: (_value) => { // TODO: implement }, }) diff --git a/components/SideBar.vue b/components/SideBar.vue index 61620806b..b8cf6d045 100644 --- a/components/SideBar.vue +++ b/components/SideBar.vue @@ -118,7 +118,7 @@ export default defineComponent({ const groups = useResult( result, null, - (data) => data?.me?.groups, + (data) => data.me.groups, ) as unknown as any[] const uiStore = useUiStore() diff --git a/components/tagify.vue b/components/tagify.vue index cdea01420..6a35dc530 100644 --- a/components/tagify.vue +++ b/components/tagify.vue @@ -21,9 +21,7 @@ export default defineComponent({ default: 'input', }, settings: { - type: Object as PropType< - Tagify.TagifyConstructorSettings - >, + type: Object as PropType, default: () => ({}), }, value: { @@ -57,10 +55,10 @@ export default defineComponent({ }, mounted() { // Install tagify - const tagifySettings: Tagify.TagifyConstructorSettings = { + const tagifySettings: Tagify.TagifyConstructorSettings = { delimiters: this.delimiters, whitelist: this.whitelist, - ...(this.settings ?? []), + ...this.settings, } if (this.tagClass) { if (tagifySettings.classNames) { @@ -85,7 +83,7 @@ export default defineComponent({ // Update value prop this.$emit( 'input', - (event.target as HTMLInputElement | null)?.value || [], + (event.target as HTMLInputElement | null)?.value ?? [], ) }, }, diff --git a/composables/detectOs.ts b/composables/detectOs.ts index 0340b552a..1c6e3889e 100644 --- a/composables/detectOs.ts +++ b/composables/detectOs.ts @@ -10,7 +10,7 @@ export function detectOs() { return 'mac' } else if (windowsPlatforms.includes(platform)) { return 'windows' - } else if (/Linux/.test(platform)) { + } else if (platform.includes('Linux')) { return 'linux' } } diff --git a/config.ts b/config.ts index aae832c79..a78347bfc 100644 --- a/config.ts +++ b/config.ts @@ -29,7 +29,7 @@ export enum Environment { * Taken from https://stackoverflow.com/a/41548441 */ function enumFromStringValue( - enm: { [s: string]: T }, + enm: Record, value: string, ): T | undefined { return (Object.values(enm) as unknown as string[]).includes(value) @@ -75,14 +75,14 @@ export function constructConfig() { return { redis: { port: Number(process.env.REDIS_PORT) || 6380, - host: process.env.REDIS_HOST || 'localhost', - password: process.env.REDIS_PASSWORD || 'jabref', + host: process.env.REDIS_HOST ?? 'localhost', + password: process.env.REDIS_PASSWORD ?? 'jabref', }, session: { - primarySecret: process.env.SESSION_SECRET_PRIMARY || 'session_secret', - secondarySecret: process.env.SESSION_SECRET_SECONDARY || 'session_secret', + primarySecret: process.env.SESSION_SECRET_PRIMARY ?? 'session_secret', + secondarySecret: process.env.SESSION_SECRET_SECONDARY ?? 'session_secret', }, - githubRepoToken: process.env.GITHUB_REPO_TOKEN || 'UNDEFINED', + githubRepoToken: process.env.GITHUB_REPO_TOKEN ?? 'UNDEFINED', public: { environment: getEnvironment(), }, diff --git a/layouts/content.vue b/layouts/content.vue index 4d230dc61..01634e552 100644 --- a/layouts/content.vue +++ b/layouts/content.vue @@ -84,7 +84,7 @@ if (process.client) { value: (option: { top: number; left: number }) => { const els = document.querySelectorAll(contentElementSelector) const el = els[els.length - 1] - if (el && el.scrollHeight > el.clientHeight) { + if (el.scrollHeight > el.clientHeight) { // element can be scrolled el.scrollTo(option.left, el.scrollTop + option.top - offset) } else { diff --git a/nuxt.config.ts b/nuxt.config.ts index 363c2cbb7..bcc9669c3 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -238,8 +238,8 @@ export default defineNuxtConfig({ ? { // Gitpod is served over https, so we need to use wss as well protocol: 'wss', - host: `3000-${process.env.GITPOD_WORKSPACE_ID || ''}.${ - process.env.GITPOD_WORKSPACE_CLUSTER_HOST || '' + host: `3000-${process.env.GITPOD_WORKSPACE_ID ?? ''}.${ + process.env.GITPOD_WORKSPACE_CLUSTER_HOST ?? '' }`, port: 443, } diff --git a/package.json b/package.json index e72f0f840..19106c887 100644 --- a/package.json +++ b/package.json @@ -113,8 +113,8 @@ "@types/supertest": "^2.0.12", "@types/uuid": "^9.0.2", "@types/yaireo__tagify": "^4.17.0", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^6.4.1", + "@typescript-eslint/parser": "^6.4.1", "@vee-validate/nuxt": "^4.10.5", "@vitest/coverage-v8": "^0.33.0", "@volar/vue-typescript": "^1.6.5", @@ -125,13 +125,13 @@ "concurrently": "^8.2.0", "cross-env": "^7.0.3", "dotenv": "^16.3.1", - "eslint": "^8.44.0", - "eslint-config-prettier": "^8.8.0", - "eslint-import-resolver-typescript": "^3.5.5", + "eslint": "^8.48.0", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-typescript": "^3.6.0", "eslint-plugin-nuxt": "^4.0.0", - "eslint-plugin-unused-imports": "^2.0.0", - "eslint-plugin-vitest": "^0.2.6", - "eslint-plugin-vue": "^9.15.1", + "eslint-plugin-unused-imports": "^3.0.0", + "eslint-plugin-vitest": "^0.2.8", + "eslint-plugin-vue": "^9.17.0", "graphql-codegen-typescript-validation-schema": "^0.11.1", "mount-vue-component": "^0.10.2", "naive-ui": "^2.34.4", diff --git a/pages/_storybook/external-iframe.vue b/pages/_storybook/external-iframe.vue index f7b35e726..fd12b4a05 100644 --- a/pages/_storybook/external-iframe.vue +++ b/pages/_storybook/external-iframe.vue @@ -40,6 +40,7 @@ export function renderToCanvas( ): void { const element = storyFn() + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!element) { showError({ title: `Expecting a Vue component from the story: "${name}" of "${title}".`, diff --git a/pages/dashboard.vue b/pages/dashboard.vue index 8c1330418..db4d5f315 100644 --- a/pages/dashboard.vue +++ b/pages/dashboard.vue @@ -78,6 +78,7 @@ const documents = computed( result.value?.me?.documents.edges.map((edge) => edge.node).filter(notEmpty), ) +// eslint-disable-next-line @typescript-eslint/no-unused-vars const onScrollToBottom = () => { if (result.value?.me?.documents.pageInfo.hasNextPage) { void fetchMore({ @@ -85,7 +86,7 @@ const onScrollToBottom = () => { groupId: ui.selectedGroupId, query: ui.activeSearchQuery, first: FIRST, - after: result.value?.me?.documents.pageInfo.endCursor ?? undefined, + after: result.value.me.documents.pageInfo.endCursor ?? undefined, }, }) } diff --git a/pages/user/login.vue b/pages/user/login.vue index 110d7b729..4be8d1733 100644 --- a/pages/user/login.vue +++ b/pages/user/login.vue @@ -151,7 +151,7 @@ onDone((result) => { : 'Unknown error' } }) -const error = computed(() => graphqlError.value || otherError.value) +const error = computed(() => graphqlError.value ?? otherError.value) // TODO: Implement remember login const rememberLogin = ref(false) diff --git a/pages/user/register.vue b/pages/user/register.vue index fd84d0245..a3930d5be 100644 --- a/pages/user/register.vue +++ b/pages/user/register.vue @@ -114,7 +114,7 @@ export default defineComponent({ cacheCurrentUser( cache, data?.signup?.__typename === 'UserReturned' - ? data?.signup?.user + ? data.signup.user : null, ) }, diff --git a/plugins/apollo.ts b/plugins/apollo.ts index b6cfa5092..f022d9b3b 100644 --- a/plugins/apollo.ts +++ b/plugins/apollo.ts @@ -7,6 +7,7 @@ import { Environment } from '~/config' import { cache } from '../apollo/cache' export default defineNuxtPlugin((nuxtApp) => { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!nuxtApp) { // For some strange reason, nuxtApp is not defined for storybook, so don't do anything in this case return @@ -17,6 +18,7 @@ export default defineNuxtPlugin((nuxtApp) => { // Print errors const errorLink = onError((error) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison --- bug in nuxt? if (config.public.environment !== Environment.Production) { logErrorMessages(error) } diff --git a/plugins/vue.directives.ts b/plugins/vue.directives.ts index f5c762c48..d637940cf 100644 --- a/plugins/vue.directives.ts +++ b/plugins/vue.directives.ts @@ -3,6 +3,8 @@ export default defineNuxtPlugin((nuxtApp) => { // Register a global custom directive called `v-focus` that auto-focuses the given element nuxtApp.vueApp.directive('focus', { - mounted: (element: HTMLElement) => element.focus(), + mounted: (element: HTMLElement) => { + element.focus() + }, }) }) diff --git a/server/api/getLatestRelease.ts b/server/api/getLatestRelease.ts index cb69508ce..70325c0c6 100644 --- a/server/api/getLatestRelease.ts +++ b/server/api/getLatestRelease.ts @@ -33,7 +33,7 @@ export default defineEventHandler(async () => { } } return { - version: response?.data?.repository?.releases?.nodes[0].tagName.replace( + version: response.data?.repository?.releases?.nodes[0].tagName.replace( 'v', '', ), // something like 5.7 diff --git a/server/api/index.ts b/server/api/index.ts index d69eb7a48..93d921c2f 100644 --- a/server/api/index.ts +++ b/server/api/index.ts @@ -61,6 +61,7 @@ http.IncomingMessage.Readable.prototype.unpipe = function (dest) { state.pipes = [] this.pause() + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < dests.length; i++) // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call dests[i].emit('unpipe', this, { hasUnpiped: false }) diff --git a/server/context.ts b/server/context.ts index e9c3436c3..893ed04b1 100644 --- a/server/context.ts +++ b/server/context.ts @@ -25,7 +25,7 @@ export function buildContext({ // @ts-expect-error: h3 doesn't provide correct types https://github.com/unjs/h3/issues/146 ...passportBuildContext({ req: event.req, res: event.res }), // The login method provided by graphql-passport doesn't work on azure, so we have to override it - login: async (user, options) => { + login: async (user) => { // @ts-expect-error: there are no correct types for this // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const session = event.req.session @@ -42,7 +42,8 @@ export function buildContext({ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call session.save(function (err: any) { if (err) { - return reject(err) + reject(err) + return } // For some strange reason the session cookie is not set correctly on azure, so do this manually // @ts-expect-error: internal diff --git a/server/documents/resolvers.ts b/server/documents/resolvers.ts index 3c2430bae..166069149 100644 --- a/server/documents/resolvers.ts +++ b/server/documents/resolvers.ts @@ -26,6 +26,7 @@ import { } from './user.document.service' // Fields that are stored as separate columns in the database +// eslint-disable-next-line @typescript-eslint/no-unused-vars const specialFields: string[] = [ 'author', 'editor', @@ -255,26 +256,22 @@ export class DocumentResolver { } authors(document: UserDocument): (Person | Organization)[] { - if (document.contributors) { - // TODO: Already store authors separately on save? - return document.contributors - .filter((contributor) => contributor.role === 'AUTHOR') - .sort((a, b) => a.position - b.position) - .map((contributor) => { - return contributor.entity.type === 'PERSON' - ? { - ...contributor.entity, - __typename: 'Person', - } - : { - id: contributor.entity.id, - name: contributor.entity.name ?? '', - __typename: 'Organization', - } - }) - } else { - return [] - } + // TODO: Already store authors separately on save? + return document.contributors + .filter((contributor) => contributor.role === 'AUTHOR') + .sort((a, b) => a.position - b.position) + .map((contributor) => { + return contributor.entity.type === 'PERSON' + ? { + ...contributor.entity, + __typename: 'Person', + } + : { + id: contributor.entity.id, + name: contributor.entity.name ?? '', + __typename: 'Organization', + } + }) } keywords(document: UserDocument): string[] { diff --git a/server/documents/user.document.service.ts b/server/documents/user.document.service.ts index ddd0156ac..0a62691c0 100644 --- a/server/documents/user.document.service.ts +++ b/server/documents/user.document.service.ts @@ -32,7 +32,7 @@ export type UserDocument = PlainUserDocument & { })[] } -type UserDocumentsAndPageInfo = { +interface UserDocumentsAndPageInfo { documents: UserDocument[] hasNextPage: boolean } @@ -68,6 +68,7 @@ export class UserDocumentService { | UserDocument | (UserDocumentCreateInput & { revisionHash?: string }), ): string { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { revisionNumber, revisionHash, ...documentWithoutRevision } = document return unsecureHash(documentWithoutRevision) diff --git a/server/groups/resolvers.ts b/server/groups/resolvers.ts index 9a7fbcfc1..af53873d8 100644 --- a/server/groups/resolvers.ts +++ b/server/groups/resolvers.ts @@ -92,6 +92,7 @@ export class Mutation { isRegEx = group.searchGroup.isRegEx } else if (group.texGroup) { type = GroupType.TexGroup + // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars --- TODO: handle paths paths = group.texGroup.paths } diff --git a/server/tsyringe.ts b/server/tsyringe.ts index 062f292ab..c3c87143c 100644 --- a/server/tsyringe.ts +++ b/server/tsyringe.ts @@ -25,7 +25,10 @@ import { RedisClient } from './utils/services.factory' export { injectable, instanceCachingFactory } from 'tsyringe' -type InjectionSymbol = { sym: symbol; value: T | undefined } +interface InjectionSymbol { + sym: symbol + value: T | undefined +} /** * Define a new injection token. @@ -178,11 +181,7 @@ export function fallback( */ export function register( token: T, - provider: ValueProvider>, -): DependencyContainer -export function register( - token: T, - provider: FactoryProvider>, + provider: ValueProvider> | FactoryProvider>, ): DependencyContainer export function register( token: T, @@ -191,12 +190,7 @@ export function register( ): DependencyContainer export function register( token: T, - provider: ClassProvider>, - options?: RegistrationOptions, -): DependencyContainer -export function register( - token: T, - provider: constructor>, + provider: ClassProvider> | constructor>, options?: RegistrationOptions, ): DependencyContainer export function register( diff --git a/server/user/auth.email.strategy.ts b/server/user/auth.email.strategy.ts index c3cd6f7a2..336ab2bc3 100644 --- a/server/user/auth.email.strategy.ts +++ b/server/user/auth.email.strategy.ts @@ -1,12 +1,8 @@ import { User } from '@prisma/client' -import { Request as ExpressRequest } from 'express' import { GraphQLLocalStrategy } from 'graphql-passport' import { AuthenticationMessage, AuthService } from './auth.service' -export default class EmailStrategy extends GraphQLLocalStrategy< - User, - ExpressRequest -> { +export default class EmailStrategy extends GraphQLLocalStrategy { constructor(private authService: AuthService) { super( async ( diff --git a/server/user/auth.service.ts b/server/user/auth.service.ts index ca9afb3ff..9c7f1530e 100644 --- a/server/user/auth.service.ts +++ b/server/user/auth.service.ts @@ -63,7 +63,7 @@ export class AuthService { if (!user) { return true } - const PREFIX = process.env.PREFIX || 'forgot-password' + const PREFIX = process.env.PREFIX ?? 'forgot-password' const key = PREFIX + user.id const token = generateToken() const hashedToken = await hash(token) @@ -131,7 +131,7 @@ export class AuthService { ], } } - const PREFIX = process.env.PREFIX || 'forgot-password' + const PREFIX = process.env.PREFIX ?? 'forgot-password' const key = PREFIX + id const hashedToken = await this.redisClient.get(key) if (!hashedToken) { diff --git a/server/user/passport-initializer.ts b/server/user/passport-initializer.ts index 794f93336..2d04736da 100644 --- a/server/user/passport-initializer.ts +++ b/server/user/passport-initializer.ts @@ -17,12 +17,12 @@ export default class PassportInitializer { initialize(): void { passport.use(new EmailStrategy(this.accountService)) - passport.serializeUser((user, done) => - this.serializeUser(user, done), - ) - passport.deserializeUser((id, done) => - this.deserializeUser(id, done), - ) + passport.serializeUser((user, done) => { + this.serializeUser(user, done) + }) + passport.deserializeUser((id, done) => { + this.deserializeUser(id, done) + }) } createHandler(): EventHandler { @@ -30,6 +30,7 @@ export default class PassportInitializer { // TODO: Use redis store also for development as soon as mock-redis is compatible with redis v4 let store: session.Store + // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison --- bug in nuxt? if (config.public.environment === Environment.Production) { store = new RedisStore({ client: this.redisClient, @@ -54,6 +55,7 @@ export default class PassportInitializer { name: 'session', cookie: { // Serve secure cookies (requires HTTPS, so only in production) + // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison --- bug in nuxt? secure: config.public.environment === Environment.Production, // Blocks the access cookie from javascript, preventing XSS attacks httpOnly: true, @@ -96,12 +98,14 @@ export default class PassportInitializer { this.accountService .getUserById(id) .then((user) => { - if (user === undefined) { + if (user === null) { done("account doesn't exist", undefined) } else { done(null, user) } }) - .catch((error) => done(error, null)) + .catch((error) => { + done(error, null) + }) } } diff --git a/server/user/resolvers.ts b/server/user/resolvers.ts index a57b5cefd..153602dde 100644 --- a/server/user/resolvers.ts +++ b/server/user/resolvers.ts @@ -95,7 +95,7 @@ export class Mutation { { path: ['email'], message: - (typeof info === 'string' ? info : info?.message) || + (typeof info === 'string' ? info : info?.message) ?? 'Unknown error while logging in.', }, ], diff --git a/server/utils/services.factory.ts b/server/utils/services.factory.ts index 74275998d..1724fdc97 100644 --- a/server/utils/services.factory.ts +++ b/server/utils/services.factory.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-misused-promises */ // TODO: Remove once redis-mock is updated /* eslint-disable @typescript-eslint/no-unsafe-assignment */ // TODO: Remove once redis-mock is updated import { createClient, @@ -57,10 +56,18 @@ export async function createRedisClient(config: Config): Promise { // Log errors // The 'error' handler is important, since otherwise errors in the redis connection bring down the whole server/process // see https://github.com/redis/node-redis/issues/2032#issuecomment-1116883257 - client.on('error', (err) => console.error('Redis client:', err)) - client.on('connect', () => console.debug('Redis client: connected')) - client.on('reconnecting', () => console.debug('Redis client: reconnecting')) - client.on('ready', () => console.debug('Redis client: ready')) + client.on('error', (err) => { + console.error('Redis client:', err) + }) + client.on('connect', () => { + console.debug('Redis client: connected') + }) + client.on('reconnecting', () => { + console.debug('Redis client: reconnecting') + }) + client.on('ready', () => { + console.debug('Redis client: ready') + }) try { await client.connect() } catch (exception) { diff --git a/server/utils/validation.spec.ts b/server/utils/validation.spec.ts index 4c033d56d..11a42d9f3 100644 --- a/server/utils/validation.spec.ts +++ b/server/utils/validation.spec.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ import { z } from 'zod' import { validateInput, validation } from './validation' diff --git a/server/utils/validation.ts b/server/utils/validation.ts index 0a67282ef..0d01e536c 100644 --- a/server/utils/validation.ts +++ b/server/utils/validation.ts @@ -6,7 +6,7 @@ type MethodDecorator = ( target: any, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor, -) => TypedPropertyDescriptor | void +) => TypedPropertyDescriptor /** * Method decorator that validates the argument of the target function against the given schema. @@ -52,15 +52,17 @@ export function validateInput( arg: T | (() => T), ): MethodDecorator> { return function (_target, _propertyKey, descriptor) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const originalMethod = descriptor.value! + const originalMethod = descriptor.value + if (!originalMethod) { + throw new Error('validateInput can only be used on methods') + } // @ts-expect-error: should be fine descriptor.value = function (root, { input }, context, info) { const schema = typeof arg === 'function' ? arg() : arg const result = schema.safeParse(input) if (result.success) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call return originalMethod.call( this, root, diff --git a/tailwind.config.ts b/tailwind.config.ts index 6e0a2f8bc..d9752aa68 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -18,7 +18,7 @@ const flip = plugin(({ addUtilities }) => { }) }) -export default { +export default { content: [`components/**/*.{vue,js}`, `layouts/**/*.vue`, `pages/**/*.vue`], plugins: [forms, flip, typography], theme: { @@ -59,4 +59,4 @@ export default { }), }, }, -} +} as Config diff --git a/test/api-e2e/supertest.ts b/test/api-e2e/supertest.ts index 626ab106d..dbe71f0d6 100644 --- a/test/api-e2e/supertest.ts +++ b/test/api-e2e/supertest.ts @@ -5,7 +5,7 @@ import supertestGraphql, { Variables, } from 'supertest-graphql' -const url = process.env.TEST_URL || 'http://localhost:3000' +const url = process.env.TEST_URL ?? 'http://localhost:3000' export function api(): SuperTestGraphQL { return supertestGraphql(url).path('/api') diff --git a/test/apollo.server.ts b/test/apollo.server.ts index ab6df1194..db41cf004 100644 --- a/test/apollo.server.ts +++ b/test/apollo.server.ts @@ -5,7 +5,7 @@ import { Context } from '~/server/context' import { loadSchemaWithResolvers } from '~/server/schema' import { resolve } from '~/server/tsyringe' -export type ApolloClient = { +export interface ApolloClient { executeOperation< TData = Record, TVariables extends VariableValues = VariableValues, diff --git a/yarn.lock b/yarn.lock index 30bed6159..4b69fc8d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2547,7 +2547,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.3.0": +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.3.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: @@ -2565,9 +2565,16 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.0": - version: 2.1.0 - resolution: "@eslint/eslintrc@npm:2.1.0" +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.8.0 + resolution: "@eslint-community/regexpp@npm:4.8.0" + checksum: 601e6d033d556e98e8c929905bef335f20d7389762812df4d0f709d9b4d2631610dda975fb272e23b5b68e24a163b3851b114c8080a0a19fb4c141a1eff6305b + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -2578,14 +2585,14 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: d5ed0adbe23f6571d8c9bb0ca6edf7618dc6aed4046aa56df7139f65ae7b578874e0d9c796df784c25bda648ceb754b6320277d828c8b004876d7443b8dc018c + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 languageName: node linkType: hard -"@eslint/js@npm:8.44.0": - version: 8.44.0 - resolution: "@eslint/js@npm:8.44.0" - checksum: fc539583226a28f5677356e9f00d2789c34253f076643d2e32888250e509a4e13aafe0880cb2425139051de0f3a48d25bfc5afa96b7304f203b706c17340e3cf +"@eslint/js@npm:8.48.0": + version: 8.48.0 + resolution: "@eslint/js@npm:8.48.0" + checksum: b2755f9c0ee810c886eba3c50dcacb184ba5a5cd1cbc01988ee506ad7340653cae0bd55f1d95c64b56dfc6d25c2caa7825335ffd2c50165bae9996fe0f396851 languageName: node linkType: hard @@ -6121,6 +6128,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:^7.0.12": + version: 7.0.12 + resolution: "@types/json-schema@npm:7.0.12" + checksum: 00239e97234eeb5ceefb0c1875d98ade6e922bfec39dd365ec6bd360b5c2f825e612ac4f6e5f1d13601b8b30f378f15e6faa805a3a732f4a1bbe61915163d293 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -6434,7 +6448,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.4": +"@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.4, @types/semver@npm:^7.5.0": version: 7.5.0 resolution: "@types/semver@npm:7.5.0" checksum: 0a64b9b9c7424d9a467658b18dd70d1d781c2d6f033096a6e05762d20ebbad23c1b69b0083b0484722aabf35640b78ccc3de26368bcae1129c87e9df028a22e2 @@ -6536,7 +6550,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.42.1, @typescript-eslint/eslint-plugin@npm:^5.61.0": +"@typescript-eslint/eslint-plugin@npm:^5.42.1": version: 5.61.0 resolution: "@typescript-eslint/eslint-plugin@npm:5.61.0" dependencies: @@ -6560,7 +6574,32 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.42.1, @typescript-eslint/parser@npm:^5.61.0": +"@typescript-eslint/eslint-plugin@npm:^6.4.1": + version: 6.4.1 + resolution: "@typescript-eslint/eslint-plugin@npm:6.4.1" + dependencies: + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 6.4.1 + "@typescript-eslint/type-utils": 6.4.1 + "@typescript-eslint/utils": 6.4.1 + "@typescript-eslint/visitor-keys": 6.4.1 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: aa5f2f516a4ea07d1a9878d347dcb915808862f41efd3c4acd4955e616d265e051c4c93d597d30e54bee10bab9b965e2ef9cea1b497bf16f23a475d7911a8078 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^5.42.1": version: 5.61.0 resolution: "@typescript-eslint/parser@npm:5.61.0" dependencies: @@ -6577,6 +6616,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^6.4.1": + version: 6.4.1 + resolution: "@typescript-eslint/parser@npm:6.4.1" + dependencies: + "@typescript-eslint/scope-manager": 6.4.1 + "@typescript-eslint/types": 6.4.1 + "@typescript-eslint/typescript-estree": 6.4.1 + "@typescript-eslint/visitor-keys": 6.4.1 + debug: ^4.3.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: cb61c757963f2a7964c2f846087eadda044720da769d96600f9f0069fe796d612caef5d9bb0c785aa4fa95028b2d231e7c83847ce44f02b1fa41f2102d6f444c + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:5.61.0": version: 5.61.0 resolution: "@typescript-eslint/scope-manager@npm:5.61.0" @@ -6587,6 +6644,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:6.4.1": + version: 6.4.1 + resolution: "@typescript-eslint/scope-manager@npm:6.4.1" + dependencies: + "@typescript-eslint/types": 6.4.1 + "@typescript-eslint/visitor-keys": 6.4.1 + checksum: 8f7f90aa378a19838301b31cfa58a4b0641d2b84891705c8c006c67aacb5c0d07112b714e1f0e7a159c5736779c934ec26dadef42a0711fccb635596aba391fc + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:5.61.0": version: 5.61.0 resolution: "@typescript-eslint/type-utils@npm:5.61.0" @@ -6604,6 +6671,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:6.4.1": + version: 6.4.1 + resolution: "@typescript-eslint/type-utils@npm:6.4.1" + dependencies: + "@typescript-eslint/typescript-estree": 6.4.1 + "@typescript-eslint/utils": 6.4.1 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 33bcdd48bd4e07258ed1919b598d50354dd67d8f01702cd2fd46aa9250b7b7cba9caab640df01f4dc0e45dabeddbb3ca47bee88f81fe2087350ed6f70a4cbe5d + languageName: node + linkType: hard + "@typescript-eslint/types@npm:5.61.0": version: 5.61.0 resolution: "@typescript-eslint/types@npm:5.61.0" @@ -6611,6 +6695,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:6.4.1": + version: 6.4.1 + resolution: "@typescript-eslint/types@npm:6.4.1" + checksum: 16ba46140dbe426407bbb940e87fb347e7eb53b64f74e8f6a819cd662aa25ccd0c25b1e588867ce3cd36a8b4eccea7bd81f4d429595e6e86d9a24c655b1c8617 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.61.0": version: 5.61.0 resolution: "@typescript-eslint/typescript-estree@npm:5.61.0" @@ -6629,7 +6720,25 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.61.0, @typescript-eslint/utils@npm:^5.59.9": +"@typescript-eslint/typescript-estree@npm:6.4.1": + version: 6.4.1 + resolution: "@typescript-eslint/typescript-estree@npm:6.4.1" + dependencies: + "@typescript-eslint/types": 6.4.1 + "@typescript-eslint/visitor-keys": 6.4.1 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 34c289e50a6337321154efe6c20c762e94fea308f9032971e356a266f63e99b908b1a00dd8cf51eba50a6f69db01d665faf2cf13454b355767fd167eebe60f1c + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.61.0": version: 5.61.0 resolution: "@typescript-eslint/utils@npm:5.61.0" dependencies: @@ -6647,6 +6756,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:6.4.1, @typescript-eslint/utils@npm:^6.2.0": + version: 6.4.1 + resolution: "@typescript-eslint/utils@npm:6.4.1" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 6.4.1 + "@typescript-eslint/types": 6.4.1 + "@typescript-eslint/typescript-estree": 6.4.1 + semver: ^7.5.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 54e642a345790f912393a6f2821495e2359eff0f874a94cbe6fb3ef4411702983ed54fe88ca3ea9d28f2e93800a74dee22b7888838154bc1afd57c7e119e17ec + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.61.0": version: 5.61.0 resolution: "@typescript-eslint/visitor-keys@npm:5.61.0" @@ -6657,6 +6783,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:6.4.1": + version: 6.4.1 + resolution: "@typescript-eslint/visitor-keys@npm:6.4.1" + dependencies: + "@typescript-eslint/types": 6.4.1 + eslint-visitor-keys: ^3.4.1 + checksum: bd9cd56fc793e1d880c24193f939c4992b2653f330baece41cd461d1fb48edb2c53696987cba0e29074bbb452dd181fd009db92dd19060fdcc417ad76768f18a + languageName: node + linkType: hard + "@unhead/addons@npm:^1.1.26": version: 1.1.27 resolution: "@unhead/addons@npm:1.1.27" @@ -7612,7 +7748,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -11145,14 +11281,14 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^8.8.0": - version: 8.8.0 - resolution: "eslint-config-prettier@npm:8.8.0" +"eslint-config-prettier@npm:^9.0.0": + version: 9.0.0 + resolution: "eslint-config-prettier@npm:9.0.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: 1e94c3882c4d5e41e1dcfa2c368dbccbfe3134f6ac7d40101644d3bfbe3eb2f2ffac757f3145910b5eacf20c0e85e02b91293d3126d770cbf3dc390b3564681c + checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 languageName: node linkType: hard @@ -11179,7 +11315,7 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-typescript@npm:^3.5.2, eslint-import-resolver-typescript@npm:^3.5.5": +"eslint-import-resolver-typescript@npm:^3.5.2": version: 3.5.5 resolution: "eslint-import-resolver-typescript@npm:3.5.5" dependencies: @@ -11198,6 +11334,24 @@ __metadata: languageName: node linkType: hard +"eslint-import-resolver-typescript@npm:^3.6.0": + version: 3.6.0 + resolution: "eslint-import-resolver-typescript@npm:3.6.0" + dependencies: + debug: ^4.3.4 + enhanced-resolve: ^5.12.0 + eslint-module-utils: ^2.7.4 + fast-glob: ^3.3.1 + get-tsconfig: ^4.5.0 + is-core-module: ^2.11.0 + is-glob: ^4.0.3 + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + checksum: 57b1b3859149f847e0d4174ff979cf35362d60c951df047f01b96f4c3794a7ea0d4e1ec85be25e610d3706902c3acfb964a66b825c1a55e3ce3a124b9a7a13bd + languageName: node + linkType: hard + "eslint-module-utils@npm:^2.7.4": version: 2.8.0 resolution: "eslint-module-utils@npm:2.8.0" @@ -11337,33 +11491,54 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-unused-imports@npm:^2.0.0": - version: 2.0.0 - resolution: "eslint-plugin-unused-imports@npm:2.0.0" +"eslint-plugin-unused-imports@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-plugin-unused-imports@npm:3.0.0" dependencies: eslint-rule-composer: ^0.3.0 peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 + "@typescript-eslint/eslint-plugin": ^6.0.0 eslint: ^8.0.0 peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true - checksum: 8aa1e03e75da2a62a354065e0cb8fe370118c6f8d9720a32fe8c1da937de6adb81a4fed7d0d391d115ac9453b49029fb19f970d180a2cf3dba451fd4c20f0dc4 + checksum: 51666f62cc8dccba2895ced83f3c1e0b78b68c357e17360e156c4db548bfdeda34cbd8725192fb4903f22d5069400fb22ded6039631df01ee82fd618dc307247 languageName: node linkType: hard -"eslint-plugin-vitest@npm:^0.2.6": - version: 0.2.6 - resolution: "eslint-plugin-vitest@npm:0.2.6" +"eslint-plugin-vitest@npm:^0.2.8": + version: 0.2.8 + resolution: "eslint-plugin-vitest@npm:0.2.8" dependencies: - "@typescript-eslint/utils": ^5.59.9 + "@typescript-eslint/utils": ^6.2.0 peerDependencies: eslint: ">=8.0.0" - checksum: 09bb95262dc39b05546eb704b60440bce03bc68f4d563b3bcb4b25774624b3758db76bfa3702b8b0d45313246b6a6d57729ecc027f64ad840b234b94ca6aa233 + vitest: "*" + peerDependenciesMeta: + vite: + optional: true + checksum: bf09a8da8b564277b7bfcac37d24b3db16b35c61293bccfeb45651a3810c919da74e29e5a264eaf611af35c91b971dbbf28f6fba34166cf6a263d40ad91a48a6 languageName: node linkType: hard -"eslint-plugin-vue@npm:^9.15.1, eslint-plugin-vue@npm:^9.4.0, eslint-plugin-vue@npm:^9.7.0": +"eslint-plugin-vue@npm:^9.17.0": + version: 9.17.0 + resolution: "eslint-plugin-vue@npm:9.17.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + natural-compare: ^1.4.0 + nth-check: ^2.1.1 + postcss-selector-parser: ^6.0.13 + semver: ^7.5.4 + vue-eslint-parser: ^9.3.1 + xml-name-validator: ^4.0.0 + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + checksum: 2ef53a03876f7c96828ad10dae7d1c4d87b51e348f58b16de3f2bedbbff9a3410eabfaf65e4890b0b7ae6d1e710c1c370998d5bc64d6ca3095a95713b3a4cf67 + languageName: node + linkType: hard + +"eslint-plugin-vue@npm:^9.4.0, eslint-plugin-vue@npm:^9.7.0": version: 9.15.1 resolution: "eslint-plugin-vue@npm:9.15.1" dependencies: @@ -11448,26 +11623,33 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.44.0": - version: 8.44.0 - resolution: "eslint@npm:8.44.0" +"eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:^8.48.0": + version: 8.48.0 + resolution: "eslint@npm:8.48.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.4.0 - "@eslint/eslintrc": ^2.1.0 - "@eslint/js": 8.44.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.48.0 "@humanwhocodes/config-array": ^0.11.10 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 - ajv: ^6.10.0 + ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 debug: ^4.3.2 doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 - eslint-scope: ^7.2.0 - eslint-visitor-keys: ^3.4.1 - espree: ^9.6.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 @@ -11477,7 +11659,6 @@ __metadata: globals: ^13.19.0 graphemer: ^1.4.0 ignore: ^5.2.0 - import-fresh: ^3.0.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 is-path-inside: ^3.0.3 @@ -11489,11 +11670,10 @@ __metadata: natural-compare: ^1.4.0 optionator: ^0.9.3 strip-ansi: ^6.0.1 - strip-json-comments: ^3.1.0 text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: d06309ce4aafb9d27d558c8e5e5aa5cba3bbec3ce8ceccbc7d4b7a35f2b67fd40189159155553270e2e6febeb69bd8a3b60d6241c8f5ddc2ef1702ccbd328501 + checksum: f20b359a4f8123fec5c033577368cc020d42978b1b45303974acd8da7a27063168ee3fe297ab5b35327162f6a93154063e3ce6577102f70f9809aff793db9bd0 languageName: node linkType: hard @@ -11519,6 +11699,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + "esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -11821,6 +12012,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.3.1": + version: 3.3.1 + resolution: "fast-glob@npm:3.3.1" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -13532,7 +13736,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.2.1": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -14440,8 +14644,8 @@ __metadata: "@types/supertest": ^2.0.12 "@types/uuid": ^9.0.2 "@types/yaireo__tagify": ^4.17.0 - "@typescript-eslint/eslint-plugin": ^5.61.0 - "@typescript-eslint/parser": ^5.61.0 + "@typescript-eslint/eslint-plugin": ^6.4.1 + "@typescript-eslint/parser": ^6.4.1 "@variantjs/core": ^0.0.90 "@variantjs/vue": ^0.0.22 "@vee-validate/nuxt": ^4.10.5 @@ -14463,13 +14667,13 @@ __metadata: cross-env: ^7.0.3 cross-fetch: ^4.0.0 dotenv: ^16.3.1 - eslint: ^8.44.0 - eslint-config-prettier: ^8.8.0 - eslint-import-resolver-typescript: ^3.5.5 + eslint: ^8.48.0 + eslint-config-prettier: ^9.0.0 + eslint-import-resolver-typescript: ^3.6.0 eslint-plugin-nuxt: ^4.0.0 - eslint-plugin-unused-imports: ^2.0.0 - eslint-plugin-vitest: ^0.2.6 - eslint-plugin-vue: ^9.15.1 + eslint-plugin-unused-imports: ^3.0.0 + eslint-plugin-vitest: ^0.2.8 + eslint-plugin-vue: ^9.17.0 express-session: ^1.17.3 graphql: ^16.7.1 graphql-codegen-typescript-validation-schema: ^0.11.1 @@ -17275,7 +17479,7 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:^2.0.1": +"nth-check@npm:^2.0.1, nth-check@npm:^2.1.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" dependencies: @@ -18868,7 +19072,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": +"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": version: 6.0.13 resolution: "postcss-selector-parser@npm:6.0.13" dependencies: @@ -20435,6 +20639,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + "semver@npm:~7.0.0": version: 7.0.0 resolution: "semver@npm:7.0.0" @@ -21214,7 +21429,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 @@ -21844,6 +22059,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "ts-api-utils@npm:1.0.2" + peerDependencies: + typescript: ">=4.2.0" + checksum: 6375e12ba90b6cbe73f564405248da14c52aa44b62b386e1cbbb1da2640265dd33e99d3e019688dffa874e365cf596b161ccd49351e90638be825c2639697640 + languageName: node + linkType: hard + "ts-dedent@npm:^2.0.0": version: 2.2.0 resolution: "ts-dedent@npm:2.2.0" @@ -23381,6 +23605,23 @@ __metadata: languageName: node linkType: hard +"vue-eslint-parser@npm:^9.3.1": + version: 9.3.1 + resolution: "vue-eslint-parser@npm:9.3.1" + dependencies: + debug: ^4.3.4 + eslint-scope: ^7.1.1 + eslint-visitor-keys: ^3.3.0 + espree: ^9.3.1 + esquery: ^1.4.0 + lodash: ^4.17.21 + semver: ^7.3.6 + peerDependencies: + eslint: ">=6.0.0" + checksum: 6d1476b45fcc5b456a1e5c0f33ec695cf1d392ca6113250d5e3441e6cf3b2a0ec28a9455699363641dfb7c48358f215db07856c98385a31ace9bc58196f4156e + languageName: node + linkType: hard + "vue-inbrowser-compiler-independent-utils@npm:^4.69.0": version: 4.71.1 resolution: "vue-inbrowser-compiler-independent-utils@npm:4.71.1"