chore(templates): fix eslint errors in vercel templates (#10768)

This commit is contained in:
Germán Jabloñski
2025-01-29 00:14:41 -03:00
committed by GitHub
parent c562fbfa94
commit 52f86c7780
32 changed files with 50 additions and 140 deletions

31
.vscode/settings.json vendored
View File

@@ -1,34 +1,9 @@
{
"npm.packageManager": "pnpm",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"editor.formatOnSaveMode": "file",
"eslint.rules.customizations": [
@@ -43,12 +18,6 @@
"typescript.tsdk": "node_modules/typescript/lib",
// Load .git-blame-ignore-revs file
"gitlens.advanced.blame.customArguments": ["--ignore-revs-file", ".git-blame-ignore-revs"],
"[javascript][typescript][typescriptreact]": {
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
},
"files.insertFinalNewline": true,
"jestrunner.jestCommand": "pnpm exec cross-env NODE_OPTIONS=\"--no-deprecation\" node 'node_modules/jest/bin/jest.js'",
"jestrunner.debugOptions": {
"runtimeArgs": ["--no-deprecation"]

View File

@@ -1,6 +1,6 @@
import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-vercel-postgres'
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
export async function up({ db }: MigrateUpArgs): Promise<void> {
await db.execute(sql`
CREATE TABLE IF NOT EXISTS "users" (
"id" serial PRIMARY KEY NOT NULL,
@@ -126,7 +126,7 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
CREATE INDEX IF NOT EXISTS "payload_migrations_created_at_idx" ON "payload_migrations" USING btree ("created_at");`)
}
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
export async function down({ db }: MigrateDownArgs): Promise<void> {
await db.execute(sql`
DROP TABLE "users" CASCADE;
DROP TABLE "media" CASCADE;

View File

@@ -2,7 +2,7 @@
import { Header } from '@/payload-types'
import { RowLabelProps, useRowLabel } from '@payloadcms/ui'
export const RowLabel: React.FC<RowLabelProps> = (props) => {
export const RowLabel: React.FC<RowLabelProps> = () => {
const data = useRowLabel<NonNullable<Header['navItems']>[number]>()
const label = data?.data?.link?.label

View File

@@ -2,7 +2,7 @@
import { Header } from '@/payload-types'
import { RowLabelProps, useRowLabel } from '@payloadcms/ui'
export const RowLabel: React.FC<RowLabelProps> = (props) => {
export const RowLabel: React.FC<RowLabelProps> = () => {
const data = useRowLabel<NonNullable<Header['navItems']>[number]>()
const label = data?.data?.link?.label

View File

@@ -4,8 +4,6 @@ import { getPayload, type PayloadRequest } from 'payload'
import configPromise from '@payload-config'
import { CollectionSlug } from 'payload'
const payloadToken = 'payload-token'
export async function GET(
req: Request & {
cookies: {
@@ -16,7 +14,6 @@ export async function GET(
},
): Promise<Response> {
const payload = await getPayload({ config: configPromise })
const token = req.cookies.get(payloadToken)?.value
const { searchParams } = new URL(req.url)
const path = searchParams.get('path')
const collection = searchParams.get('collection') as CollectionSlug

View File

@@ -5,15 +5,7 @@ import { headers } from 'next/headers'
export const maxDuration = 60 // This function can run for a maximum of 60 seconds
export async function POST(
req: Request & {
cookies: {
get: (name: string) => {
value: string
}
}
},
): Promise<Response> {
export async function POST(): Promise<Response> {
const payload = await getPayload({ config })
const requestHeaders = await headers()

View File

@@ -4,7 +4,6 @@ import { CollectionArchive } from '@/components/CollectionArchive'
import configPromise from '@payload-config'
import { getPayload } from 'payload'
import React from 'react'
import { Post } from '@/payload-types'
import { Search } from '@/search/Component'
import PageClient from './page.client'
import { CardPostData } from '@/components/Card'

View File

@@ -12,14 +12,8 @@ import { Width } from '../Width'
export const Checkbox: React.FC<
CheckboxField & {
errors: Partial<
FieldErrorsImpl<{
[x: string]: any
}>
>
getValues: any
errors: Partial<FieldErrorsImpl>
register: UseFormRegister<FieldValues>
setValue: any
}
> = ({ name, defaultValue, errors, label, register, required, width }) => {
const props = register(name, { required: required })

View File

@@ -142,6 +142,7 @@ export const FormBlock: React.FC<
{formFromProps &&
formFromProps.fields &&
formFromProps.fields?.map((field, index) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const Field: React.FC<any> = fields?.[field.blockType]
if (Field) {
return (

View File

@@ -1,5 +1,5 @@
import type { CountryField } from '@payloadcms/plugin-form-builder/types'
import type { Control, FieldErrorsImpl, FieldValues } from 'react-hook-form'
import type { Control, FieldErrorsImpl } from 'react-hook-form'
import { Label } from '@/components/ui/label'
import {
@@ -18,12 +18,8 @@ import { countryOptions } from './options'
export const Country: React.FC<
CountryField & {
control: Control<FieldValues, any>
errors: Partial<
FieldErrorsImpl<{
[x: string]: any
}>
>
control: Control
errors: Partial<FieldErrorsImpl>
}
> = ({ name, control, errors, label, required, width }) => {
return (

View File

@@ -10,11 +10,7 @@ import { Width } from '../Width'
export const Email: React.FC<
EmailField & {
errors: Partial<
FieldErrorsImpl<{
[x: string]: any
}>
>
errors: Partial<FieldErrorsImpl>
register: UseFormRegister<FieldValues>
}
> = ({ name, defaultValue, errors, label, register, required, width }) => {

View File

@@ -9,11 +9,7 @@ import { Error } from '../Error'
import { Width } from '../Width'
export const Number: React.FC<
TextField & {
errors: Partial<
FieldErrorsImpl<{
[x: string]: any
}>
>
errors: Partial<FieldErrorsImpl>
register: UseFormRegister<FieldValues>
}
> = ({ name, defaultValue, errors, label, register, required, width }) => {

View File

@@ -1,5 +1,5 @@
import type { SelectField } from '@payloadcms/plugin-form-builder/types'
import type { Control, FieldErrorsImpl, FieldValues } from 'react-hook-form'
import type { Control, FieldErrorsImpl } from 'react-hook-form'
import { Label } from '@/components/ui/label'
import {
@@ -17,12 +17,8 @@ import { Width } from '../Width'
export const Select: React.FC<
SelectField & {
control: Control<FieldValues, any>
errors: Partial<
FieldErrorsImpl<{
[x: string]: any
}>
>
control: Control
errors: Partial<FieldErrorsImpl>
}
> = ({ name, control, errors, label, options, required, width }) => {
return (

View File

@@ -1,5 +1,5 @@
import type { StateField } from '@payloadcms/plugin-form-builder/types'
import type { Control, FieldErrorsImpl, FieldValues } from 'react-hook-form'
import type { Control, FieldErrorsImpl } from 'react-hook-form'
import { Label } from '@/components/ui/label'
import {
@@ -18,12 +18,8 @@ import { stateOptions } from './options'
export const State: React.FC<
StateField & {
control: Control<FieldValues, any>
errors: Partial<
FieldErrorsImpl<{
[x: string]: any
}>
>
control: Control
errors: Partial<FieldErrorsImpl>
}
> = ({ name, control, errors, label, required, width }) => {
return (

View File

@@ -10,11 +10,7 @@ import { Width } from '../Width'
export const Text: React.FC<
TextField & {
errors: Partial<
FieldErrorsImpl<{
[x: string]: any
}>
>
errors: Partial<FieldErrorsImpl>
register: UseFormRegister<FieldValues>
}
> = ({ name, defaultValue, errors, label, register, required, width }) => {

View File

@@ -10,11 +10,7 @@ import { Width } from '../Width'
export const Textarea: React.FC<
TextField & {
errors: Partial<
FieldErrorsImpl<{
[x: string]: any
}>
>
errors: Partial<FieldErrorsImpl>
register: UseFormRegister<FieldValues>
rows?: number
}

View File

@@ -5,11 +5,12 @@ import RichText from '@/components/RichText'
import type { Post } from '@/payload-types'
import { Card } from '../../components/Card'
import { SerializedEditorState } from '@payloadcms/richtext-lexical/lexical'
export type RelatedPostsProps = {
className?: string
docs?: Post[]
introContent?: any
introContent?: SerializedEditorState
}
export const RelatedPosts: React.FC<RelatedPostsProps> = (props) => {

View File

@@ -1,4 +1,3 @@
import { cn } from '@/utilities/ui'
import React, { Fragment } from 'react'
import type { Page } from '@/payload-types'

View File

@@ -1,8 +1,6 @@
import { cn } from '@/utilities/ui'
import React from 'react'
import type { Post } from '@/payload-types'
import { Card, CardPostData } from '@/components/Card'
export type Props = {

View File

@@ -35,13 +35,7 @@ export const ImageMedia: React.FC<MediaProps> = (props) => {
let src: StaticImageData | string = srcFromProps || ''
if (!src && resource && typeof resource === 'object') {
const {
alt: altFromResource,
filename: fullFilename,
height: fullHeight,
url,
width: fullWidth,
} = resource
const { alt: altFromResource, height: fullHeight, url, width: fullWidth } = resource
width = fullWidth!
height = fullHeight!

View File

@@ -9,7 +9,7 @@ export const Media: React.FC<Props> = (props) => {
const { className, htmlElement = 'div', resource } = props
const isVideo = typeof resource === 'object' && resource?.mimeType?.includes('video')
const Tag = (htmlElement as any) || Fragment
const Tag = htmlElement || Fragment
return (
<Tag

View File

@@ -1,11 +1,6 @@
// @ts-nocheck
//This copy-and-pasted from lexical here: https://github.com/facebook/lexical/blob/c2ceee223f46543d12c574e62155e619f9a18a5d/packages/lexical/src/LexicalConstants.ts
import type { ElementFormatType, TextFormatType } from '@payloadcms/richtext-lexical/lexical'
import type {
TextDetailType,
TextModeType,
} from '@payloadcms/richtext-lexical/lexical/nodes/LexicalTextNode'
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -64,7 +59,6 @@ export const IS_ALIGN_END = 6
// Reconciliation
export const NON_BREAKING_SPACE = '\u00A0'
const ZERO_WIDTH_SPACE = '\u200b'
export const DOUBLE_LINE_BREAK = '\n\n'
@@ -92,7 +86,7 @@ export const TEXT_TYPE_TO_FORMAT: Record<TextFormatType | string, number> = {
underline: IS_UNDERLINE,
}
export const DETAIL_TYPE_TO_DETAIL: Record<TextDetailType | string, number> = {
export const DETAIL_TYPE_TO_DETAIL: Record<string, number> = {
directionless: IS_DIRECTIONLESS,
unmergeable: IS_UNMERGEABLE,
}
@@ -115,13 +109,13 @@ export const ELEMENT_FORMAT_TO_TYPE: Record<number, ElementFormatType> = {
[IS_ALIGN_START]: 'start',
}
export const TEXT_MODE_TO_TYPE: Record<TextModeType, 0 | 1 | 2> = {
export const TEXT_MODE_TO_TYPE: Record<string, 0 | 1 | 2> = {
normal: IS_NORMAL,
segmented: IS_SEGMENTED,
token: IS_TOKEN,
}
export const TEXT_TYPE_TO_MODE: Record<number, TextModeType> = {
export const TEXT_TYPE_TO_MODE: Record<number, string> = {
[IS_NORMAL]: 'normal',
[IS_SEGMENTED]: 'segmented',
[IS_TOKEN]: 'token',

View File

@@ -160,7 +160,6 @@ export function serializeLexical({ nodes }: Props): JSX.Element {
aria-checked={node.checked ? 'true' : 'false'}
className={` ${node.checked ? '' : ''}`}
key={index}
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role
role="checkbox"
tabIndex={-1}
value={node?.value}
@@ -190,7 +189,8 @@ export function serializeLexical({ nodes }: Props): JSX.Element {
<CMSLink
key={index}
newTab={Boolean(fields?.newTab)}
reference={fields.doc as any}
// @ts-expect-error - this should disappear when upgrading to the latest version of Payload
reference={fields.doc}
type={fields.linkType === 'internal' ? 'reference' : 'custom'}
url={fields.url}
>

View File

@@ -10,7 +10,7 @@ export const contact: Partial<Page> = {
{
blockType: 'formBlock',
enableIntro: true,
// @ts-ignore
// @ts-expect-error this should dissapear when upgrading to the latest version of Payload
form: '{{CONTACT_FORM_ID}}',
introContent: {
root: {

View File

@@ -1,7 +1,6 @@
import type { Page } from '@/payload-types'
// Used for pre-seeded content so that the homepage is not empty
// @ts-expect-error
export const homeStatic: Page = {
slug: 'home',
_status: 'published',
@@ -85,4 +84,8 @@ export const homeStatic: Page = {
title: 'Payload Website Template',
},
title: 'Home',
id: 0,
layout: [],
updatedAt: '',
createdAt: '',
}

View File

@@ -23,7 +23,7 @@ export const home: RequiredDataFromCollectionSlug<'pages'> = {
},
},
],
// @ts-ignore
// @ts-expect-error - this should disappear when upgrading to the latest version of Payload
media: '{{IMAGE_1}}',
richText: {
root: {
@@ -502,7 +502,7 @@ export const home: RequiredDataFromCollectionSlug<'pages'> = {
{
blockName: 'Media Block',
blockType: 'mediaBlock',
// @ts-ignore
// @ts-expect-error - this should disappear when upgrading to the latest version of Payload
media: '{{IMAGE_2}}',
},
{
@@ -659,7 +659,7 @@ export const home: RequiredDataFromCollectionSlug<'pages'> = {
],
meta: {
description: 'An open-source website built with Payload and Next.js.',
// @ts-ignore
// @ts-expect-error - this should disappear when upgrading to the latest version of Payload
image: '{{IMAGE_1}}',
title: 'Payload Website Template',
},

View File

@@ -104,9 +104,6 @@ export const seed = async ({
technologyCategory,
newsCategory,
financeCategory,
designCategory,
softwareCategory,
engineeringCategory,
] = await Promise.all([
payload.create({
collection: 'users',

View File

@@ -8,7 +8,7 @@ export const formatSlug = (val: string): string =>
export const formatSlugHook =
(fallback: string): FieldHook =>
({ data, operation, originalDoc, value }) => {
({ data, operation, value }) => {
if (typeof value === 'string') {
return formatSlug(value)
}

View File

@@ -23,8 +23,7 @@ export const slugField: Slug = (fieldToUse = 'title', overrides = {}) => {
...checkboxOverrides,
}
// Expect ts error here because of typescript mismatching Partial<TextField> with TextField
// @ts-expect-error
// @ts-expect-error - ts mismatch Partial<TextField> with TextField
const slugField: TextField = {
name: 'slug',
type: 'text',

View File

@@ -1,6 +1,6 @@
import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-vercel-postgres'
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
export async function up({ db }: MigrateUpArgs): Promise<void> {
await db.execute(sql`
CREATE TYPE "public"."enum_pages_hero_links_link_type" AS ENUM('reference', 'custom');
CREATE TYPE "public"."enum_pages_hero_links_link_appearance" AS ENUM('default', 'outline');
@@ -1558,7 +1558,7 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
CREATE INDEX IF NOT EXISTS "footer_rels_posts_id_idx" ON "footer_rels" USING btree ("posts_id");`)
}
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
export async function down({ db }: MigrateDownArgs): Promise<void> {
await db.execute(sql`
DROP TABLE "pages_hero_links" CASCADE;
DROP TABLE "pages_blocks_cta_links" CASCADE;

View File

@@ -1,11 +1,11 @@
import { BeforeSync, DocToSync } from '@payloadcms/plugin-search/types'
export const beforeSyncWithSearch: BeforeSync = async ({ originalDoc, searchDoc, payload }) => {
export const beforeSyncWithSearch: BeforeSync = async ({ originalDoc, searchDoc }) => {
const {
doc: { relationTo: collection },
} = searchDoc
const { slug, id, categories, title, meta, excerpt } = originalDoc
const { slug, id, categories, title, meta } = originalDoc
const modifiedDoc: DocToSync = {
...searchDoc,
@@ -33,7 +33,7 @@ export const beforeSyncWithSearch: BeforeSync = async ({ originalDoc, searchDoc,
})
modifiedDoc.categories = mappedCategories
} catch (err) {
} catch (_err) {
console.error(
`Failed. Category not found when syncing collection '${collection}' with id: '${id}' to search.`,
)

View File

@@ -1,3 +1,4 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
/**
@@ -5,8 +6,8 @@
* @param item
* @returns {boolean}
*/
export function isObject(item: unknown): boolean {
return item && typeof item === 'object' && !Array.isArray(item)
export function isObject(item: unknown): item is object {
return typeof item === 'object' && !Array.isArray(item)
}
/**