From 83fd4c66222d7846eeb5cc332dfa99bf1e830831 Mon Sep 17 00:00:00 2001 From: Alessio Gravili Date: Thu, 11 Jul 2024 15:27:01 -0400 Subject: [PATCH] chore: run lint and prettier on entire codebase --- .../src/lib/create-project.spec.ts | 31 +- .../create-payload-app/src/lib/init-next.ts | 8 +- .../src/lib/wrap-next-config.spec.ts | 25 +- packages/create-payload-app/src/utils/log.ts | 1 - packages/db-mongodb/src/connect.ts | 3 +- packages/db-mongodb/src/createMigration.ts | 1 - packages/db-mongodb/src/find.ts | 1 - packages/db-mongodb/src/findGlobalVersions.ts | 1 - packages/db-mongodb/src/findVersions.ts | 1 - packages/db-mongodb/src/index.ts | 28 +- packages/db-mongodb/src/init.ts | 1 - packages/db-mongodb/src/models/buildSchema.ts | 5 - .../src/queries/buildAndOrConditions.ts | 3 +- .../queries/getLocalizedSortProperty.spec.ts | 30 +- .../db-mongodb/src/queries/parseParams.ts | 2 - packages/db-mongodb/src/queryDrafts.ts | 1 - .../email-resend/src/email-resend.spec.ts | 18 +- packages/eslint-config/configs/jest/index.mjs | 7 +- .../eslint-config/configs/react/index.mjs | 16 +- .../configs/react/rules/react-a11y.mjs | 1 - packages/eslint-config/index.mjs | 41 +- packages/eslint-plugin/index.mjs | 1 - packages/graphql/src/bin/generateSchema.ts | 1 - packages/graphql/src/index.ts | 1 - .../QueryComplexity.ts | 2 +- .../src/packages/graphql-type-json/index.ts | 1 - .../src/resolvers/collections/count.ts | 1 - .../graphql/src/schema/buildObjectType.ts | 3 - .../graphql/src/schema/buildWhereInputType.ts | 1 - .../graphql/src/schema/initCollections.ts | 10 +- packages/graphql/src/schema/initGlobals.ts | 1 - packages/graphql/src/schema/withOperators.ts | 14 +- .../graphql/src/utilities/formatName.spec.ts | 1 - packages/live-preview/src/mergeData.ts | 4 +- .../DocumentHeader/Tabs/Tab/index.tsx | 2 +- .../DocumentHeader/Tabs/tabs/index.tsx | 4 +- packages/next/src/layouts/Root/index.tsx | 1 - packages/next/src/routes/graphql/handler.ts | 1 - packages/next/src/templates/Default/index.tsx | 4 +- packages/next/src/utilities/getPayloadHMR.ts | 1 - packages/next/src/utilities/meta.ts | 2 +- .../src/views/Dashboard/Default/index.tsx | 4 +- .../src/views/Document/getMetaBySegment.tsx | 4 +- .../src/views/Document/getViewsFromConfig.tsx | 2 +- packages/next/src/views/List/meta.ts | 4 +- .../src/views/LivePreview/Toolbar/index.tsx | 4 +- .../src/views/LivePreview/usePopupWindow.ts | 2 +- packages/next/src/views/Logout/index.tsx | 4 +- packages/next/src/views/NotFound/index.tsx | 1 - .../fields/Select/index.tsx | 4 +- .../RenderFieldsToDiff/fields/Tabs/index.tsx | 4 +- .../views/Version/RenderFieldsToDiff/types.ts | 4 +- packages/payload/src/admin/RichText.ts | 20 +- packages/payload/src/admin/elements/Cell.ts | 4 +- .../payload/src/admin/elements/DatePicker.ts | 38 +- packages/payload/src/auth/getFieldsToSign.ts | 1 - packages/payload/src/auth/index.ts | 4 +- .../src/auth/operations/local/login.ts | 2 +- packages/payload/src/auth/operations/login.ts | 4 +- .../src/auth/operations/registerFirstUser.ts | 4 +- packages/payload/src/auth/strategies/jwt.ts | 2 +- .../src/auth/strategies/local/authenticate.ts | 2 +- .../local/incrementLoginAttempts.ts | 2 +- .../strategies/local/resetLoginAttempts.ts | 2 +- packages/payload/src/bin/loader/compile.ts | 2 +- .../payload/src/collections/config/client.ts | 15 +- .../src/collections/operations/delete.ts | 1 - .../src/collections/operations/findByID.ts | 1 - .../collections/operations/findVersionByID.ts | 1 - .../collections/operations/local/delete.ts | 8 +- .../collections/operations/local/update.ts | 8 +- .../collections/operations/restoreVersion.ts | 1 - .../src/collections/operations/utils.ts | 2 +- packages/payload/src/config/client.ts | 11 +- packages/payload/src/config/find.ts | 1 - packages/payload/src/config/types.ts | 33 +- .../src/database/createDatabaseAdapter.ts | 1 - .../payload/src/database/getLocalizedPaths.ts | 1 - .../database/migrations/createMigration.ts | 1 - .../src/database/migrations/migrate.ts | 3 +- .../src/database/migrations/migrateDown.ts | 1 - .../src/database/migrations/migrateRefresh.ts | 1 - .../src/database/migrations/migrateReset.ts | 1 - .../src/database/migrations/migrateStatus.ts | 2 +- .../queryValidation/validateQueryPaths.ts | 2 - .../queryValidation/validateSearchParams.ts | 3 - packages/payload/src/database/types.ts | 12 +- packages/payload/src/errors/APIError.ts | 1 - packages/payload/src/exports/shared.ts | 4 +- .../src/fields/config/sanitize.spec.ts | 79 +- packages/payload/src/fields/config/types.ts | 329 ++-- .../src/fields/hooks/afterChange/promise.ts | 1 - .../src/fields/hooks/afterRead/promise.ts | 1 - .../fields/hooks/beforeValidate/promise.ts | 1 - .../payload/src/fields/validations.spec.ts | 19 +- packages/payload/src/fields/validations.ts | 3 +- packages/payload/src/globals/config/client.ts | 17 +- .../src/globals/operations/findVersionByID.ts | 1 - packages/payload/src/index.ts | 389 ++-- packages/payload/src/preferences/types.ts | 2 +- packages/payload/src/types/index.ts | 8 +- .../src/uploads/deleteAssociatedFiles.ts | 3 +- .../payload/src/uploads/getSafeFilename.ts | 1 - .../src/utilities/configToJSONSchema.spec.ts | 45 +- packages/payload/src/utilities/convertData.ts | 1 - .../src/utilities/getEntityPolicies.ts | 2 +- .../drafts/replaceWithDraftIfAvailable.ts | 2 +- .../src/versions/getLatestGlobalVersion.ts | 1 - .../src/adapters/azure/staticHandler.ts | 2 +- .../src/adapters/vercelBlob/handleUpload.ts | 4 +- packages/plugin-cloud-storage/src/types.ts | 2 +- packages/plugin-cloud/src/email.spec.ts | 11 +- packages/plugin-cloud/src/plugin.spec.ts | 15 +- packages/plugin-cloud/src/types.ts | 2 +- .../src/collections/Forms/fields.ts | 2 +- packages/plugin-form-builder/src/types.ts | 8 +- .../src/utilities/getPaymentTotal.ts | 4 +- .../src/utilities/lexical/types.ts | 4 +- .../src/utilities/slate/serializeSlate.ts | 2 +- .../plugin-nested-docs/src/fields/parent.ts | 4 +- .../src/utilities/populateBreadcrumbs.ts | 2 +- packages/plugin-redirects/src/types.ts | 2 +- .../src/Search/ui/index.client.tsx | 4 +- packages/plugin-sentry/src/plugin.spec.ts | 7 +- packages/plugin-sentry/src/plugin.ts | 1 - packages/plugin-sentry/src/startSentry.ts | 3 +- .../MetaDescriptionComponent.tsx | 5 +- .../fields/MetaImage/MetaImageComponent.tsx | 5 +- .../fields/MetaTitle/MetaTitleComponent.tsx | 5 +- .../src/fields/Overview/OverviewComponent.tsx | 4 +- .../src/fields/Preview/PreviewComponent.tsx | 4 +- packages/plugin-seo/src/index.tsx | 1 - packages/plugin-seo/src/types.ts | 10 +- .../src/hooks/createNewInStripe.ts | 11 +- .../src/hooks/deleteFromStripe.ts | 8 +- .../src/hooks/syncExistingWithStripe.ts | 11 +- packages/plugin-stripe/src/types.ts | 4 +- .../src/webhooks/handleCreatedOrUpdated.ts | 4 +- .../src/webhooks/handleDeleted.ts | 4 +- .../converters/html/converter/types.ts | 4 +- .../plugins/TableActionMenuPlugin/index.scss | 1 - .../plugins/TablePlugin/index.scss | 5 +- .../src/features/link/feature.server.ts | 4 +- .../src/features/link/nodes/LinkNode.ts | 2 +- .../floatingLinkEditor/LinkEditor/index.tsx | 6 +- .../src/features/link/validate.ts | 1 - .../lexicalPluginToLexical/converter/types.ts | 2 +- .../features/relationship/feature.server.ts | 4 +- .../relationship/nodes/RelationshipNode.tsx | 4 +- .../shared/ToolbarDropdown/DropDown.tsx | 1 - .../src/features/typesClient.ts | 18 +- .../src/features/typesServer.ts | 29 +- .../src/features/upload/feature.server.ts | 6 +- .../src/features/upload/nodes/UploadNode.tsx | 5 +- packages/richtext-lexical/src/field/Field.tsx | 4 +- .../src/lexical/LexicalEditor.tsx | 4 +- .../src/lexical/LexicalProvider.tsx | 4 +- .../config/client/EditorConfigProvider.tsx | 8 +- .../LexicalTypeaheadMenuPlugin/types.ts | 8 +- .../src/populateGraphQL/populate.ts | 4 +- .../populateLexicalPopulationPromises.ts | 6 +- packages/richtext-lexical/src/types.ts | 8 +- .../src/utilities/createServerFeature.ts | 10 +- packages/richtext-slate/src/data/populate.ts | 4 +- .../richtext-slate/src/field/RichText.tsx | 6 +- .../src/field/elements/link/types.ts | 4 +- .../elements/relationship/Element/index.tsx | 4 +- .../src/field/elements/relationship/types.ts | 4 +- .../upload/Element/UploadDrawer/index.tsx | 4 +- .../field/elements/upload/Element/index.tsx | 6 +- .../src/field/elements/upload/types.ts | 4 +- packages/richtext-slate/src/field/index.tsx | 4 +- .../field/providers/ElementButtonProvider.tsx | 8 +- .../src/field/providers/ElementProvider.tsx | 8 +- .../field/providers/LeafButtonProvider.tsx | 8 +- .../src/field/providers/LeafProvider.tsx | 8 +- packages/storage-azure/src/staticHandler.ts | 2 +- packages/storage-uploadthing/src/index.ts | 4 +- .../storage-vercel-blob/src/handleUpload.ts | 4 +- packages/storage-vercel-blob/src/index.ts | 2 +- packages/translations/src/exports/index.ts | 2 +- packages/translations/src/utilities/init.ts | 4 +- packages/ui/src/elements/CodeEditor/types.ts | 4 +- packages/ui/src/elements/DatePicker/types.ts | 16 +- .../ui/src/elements/DocumentDrawer/types.ts | 8 +- .../DraggableSortableItem/index.tsx | 4 +- .../DraggableSortableItem/types.ts | 8 +- packages/ui/src/elements/Drawer/types.ts | 4 +- .../ui/src/elements/FileDetails/index.tsx | 4 +- packages/ui/src/elements/ListDrawer/types.ts | 4 +- packages/ui/src/elements/Pill/index.tsx | 4 +- .../ui/src/elements/PreviewSizes/index.tsx | 8 +- .../elements/ReactSelect/Control/index.tsx | 2 +- .../ReactSelect/DropdownIndicator/index.tsx | 4 +- .../ReactSelect/MultiValueRemove/index.tsx | 4 +- .../ui/src/elements/ReactSelect/index.tsx | 1 - packages/ui/src/elements/ReactSelect/types.ts | 4 +- .../DefaultCell/fields/Relationship/index.tsx | 1 - .../TableColumns/buildColumnState.tsx | 1 - .../ui/src/elements/ThumbnailCard/index.tsx | 2 +- .../WhereBuilder/validateWhereQuery.ts | 2 +- packages/ui/src/fields/Array/ArrayRow.tsx | 4 +- packages/ui/src/fields/Array/index.tsx | 4 +- packages/ui/src/fields/Blocks/BlockRow.tsx | 4 +- packages/ui/src/fields/Blocks/index.tsx | 4 +- packages/ui/src/fields/Checkbox/types.ts | 4 +- packages/ui/src/fields/Code/index.tsx | 5 +- packages/ui/src/fields/Collapsible/index.tsx | 4 +- packages/ui/src/fields/DateTime/index.tsx | 5 +- packages/ui/src/fields/Email/index.tsx | 4 +- packages/ui/src/fields/Group/index.tsx | 4 +- packages/ui/src/fields/Hidden/index.tsx | 4 +- packages/ui/src/fields/JSON/index.tsx | 4 +- packages/ui/src/fields/Number/index.tsx | 7 +- packages/ui/src/fields/Password/index.tsx | 4 +- packages/ui/src/fields/Point/index.tsx | 5 +- packages/ui/src/fields/RadioGroup/index.tsx | 6 +- packages/ui/src/fields/Relationship/types.ts | 4 +- packages/ui/src/fields/RichText/index.tsx | 4 +- packages/ui/src/fields/Row/types.ts | 4 +- packages/ui/src/fields/Select/Input.tsx | 14 +- packages/ui/src/fields/Select/index.tsx | 7 +- packages/ui/src/fields/Tabs/index.tsx | 4 +- packages/ui/src/fields/Text/types.ts | 24 +- packages/ui/src/fields/Textarea/index.tsx | 1 - packages/ui/src/fields/Textarea/types.ts | 8 +- packages/ui/src/fields/Upload/Input.tsx | 4 +- packages/ui/src/fields/Upload/types.ts | 4 +- packages/ui/src/forms/Form/index.tsx | 1 - packages/ui/src/forms/Form/types.ts | 20 +- .../ui/src/forms/RowLabel/Context/index.tsx | 4 +- .../addFieldStatePromise.ts | 1 - .../buildStateFromSchema.spec.js | 1 - .../getFilterOptionsQuery.ts | 2 +- packages/ui/src/hooks/useHotkey.ts | 2 +- packages/ui/src/hooks/useIntersect.ts | 2 +- packages/ui/src/hooks/useThrottledEffect.ts | 1 - .../buildComponentMap/actions.tsx | 9 +- .../buildComponentMap/collections.tsx | 12 +- .../ComponentMap/buildComponentMap/index.tsx | 4 +- .../ComponentMap/buildComponentMap/types.ts | 4 +- .../ui/src/providers/DocumentInfo/index.tsx | 4 +- .../ui/src/providers/DocumentInfo/types.ts | 8 +- packages/ui/src/providers/ListInfo/index.tsx | 4 +- packages/ui/src/providers/ListQuery/index.tsx | 4 +- packages/ui/src/utilities/api.ts | 4 +- packages/ui/src/utilities/buildFormState.ts | 2 - test/_community/config.ts | 6 +- test/_community/eslint.config.js | 5 +- test/_community/payload-types.ts | 161 +- .../collections/Disabled/index.ts | 8 +- test/access-control/eslint.config.js | 5 +- test/admin/collections/CustomIdRow.ts | 16 +- test/admin/collections/CustomIdTab.ts | 18 +- test/admin/collections/CustomViews2.ts | 20 +- test/admin/collections/Posts.ts | 6 +- test/admin/collections/Upload.ts | 6 +- test/admin/config.ts | 12 +- test/admin/e2e/1/e2e.spec.ts | 4 +- test/admin/e2e/2/e2e.spec.ts | 8 +- test/admin/eslint.config.js | 5 +- test/admin/seed.ts | 6 +- test/admin/shared.ts | 2 +- test/array-update/config.ts | 8 +- test/array-update/eslint.config.js | 5 +- test/array-update/int.spec.ts | 10 +- test/auth/custom-strategy/config.ts | 6 +- test/auth/e2e.spec.ts | 4 +- test/auth/eslint.config.js | 5 +- test/auth/int.spec.ts | 4 +- test/collections-graphql/config.ts | 90 +- test/collections-graphql/eslint.config.js | 5 +- test/collections-graphql/int.spec.ts | 12 +- test/collections-rest/config.ts | 124 +- test/collections-rest/eslint.config.js | 5 +- test/config/config.ts | 48 +- test/config/eslint.config.js | 5 +- test/config/int.spec.ts | 2 +- test/create-payload-app/eslint.config.js | 5 +- test/create-payload-app/int.spec.ts | 12 +- test/custom-graphql/config.ts | 24 +- test/custom-graphql/eslint.config.js | 5 +- test/database/config.ts | 38 +- test/database/eslint.config.js | 5 +- test/database/int.spec.ts | 2 +- test/dataloader/config.ts | 16 +- test/dataloader/eslint.config.js | 5 +- test/dataloader/int.spec.ts | 2 +- test/email-nodemailer/config.ts | 4 +- test/email-nodemailer/eslint.config.js | 5 +- test/email-resend/config.ts | 6 +- test/email-resend/eslint.config.js | 5 +- test/email/config.ts | 4 +- test/email/eslint.config.js | 5 +- test/endpoints/config.ts | 8 +- test/endpoints/endpoints/collections.ts | 16 +- test/endpoints/endpoints/globals.ts | 4 +- test/endpoints/endpoints/root.ts | 20 +- test/endpoints/eslint.config.js | 5 +- test/eslint.config.js | 4 +- .../collections/ErrorFields/index.ts | 76 +- .../collections/Upload/index.ts | 14 +- test/field-error-states/e2e.spec.ts | 1 - test/field-error-states/eslint.config.js | 5 +- .../globals/ValidateDraftsOn/index.ts | 2 +- test/field-error-states/shared.ts | 2 +- test/field-perf/eslint.config.js | 5 +- test/fields-relationship/eslint.config.js | 5 +- .../collections/Relationship/e2e.spec.ts | 4 +- test/fields/collections/Tabs/index.ts | 1 - test/fields/eslint.config.js | 5 +- test/fields/int.spec.ts | 6 +- test/fields/payload-types.ts | 1723 ++++++++--------- test/globals/eslint.config.js | 5 +- test/graphql-schema-gen/eslint.config.js | 5 +- test/helpers/NextRESTClient.ts | 6 +- test/helpers/initPayloadInt.ts | 3 +- test/helpers/sdk/types.ts | 8 +- test/hooks/collections/ContextHooks/index.ts | 5 +- test/hooks/collections/Data/index.ts | 2 - test/hooks/collections/Hook/index.ts | 1 - test/hooks/collections/Transform/index.ts | 1 - test/hooks/eslint.config.js | 5 +- test/hooks/globals/Data/index.ts | 2 - test/i18n/eslint.config.js | 5 +- .../_blocks/ArchiveBlock/index.tsx | 4 +- .../_blocks/CallToAction/index.tsx | 4 +- .../live-preview/_blocks/Content/index.tsx | 4 +- .../live-preview/_blocks/MediaBlock/index.tsx | 4 +- .../PopulateByCollection/index.tsx | 6 +- .../_components/CollectionArchive/index.tsx | 4 +- .../live-preview/_components/Media/index.tsx | 6 +- .../_components/RichText/serializeSlate.tsx | 1 - test/live-preview/eslint.config.js | 5 +- test/localization-rtl/eslint.config.js | 5 +- test/localization/config.ts | 4 +- test/localization/eslint.config.js | 5 +- test/migrations-cli/eslint.config.js | 5 +- test/nested-fields/eslint.config.js | 5 +- test/plugin-cloud-storage/eslint.config.js | 5 +- test/plugin-cloud/eslint.config.js | 5 +- test/plugin-form-builder/eslint.config.js | 5 +- test/plugin-nested-docs/eslint.config.js | 5 +- test/plugin-redirects/eslint.config.js | 5 +- .../eslint.config.js | 5 +- test/plugin-search/eslint.config.js | 5 +- test/plugin-sentry/eslint.config.js | 5 +- test/plugin-seo/eslint.config.js | 5 +- test/plugin-seo/payload-types.ts | 177 +- test/plugin-stripe/eslint.config.js | 5 +- test/plugins/eslint.config.js | 5 +- test/relationships/eslint.config.js | 5 +- test/relationships/int.spec.ts | 2 - test/storage-azure/eslint.config.js | 5 +- test/storage-gcs/eslint.config.js | 5 +- test/storage-s3/eslint.config.js | 5 +- test/storage-uploadthing/eslint.config.js | 5 +- test/storage-vercel-blob/eslint.config.js | 5 +- test/tsconfig.json | 25 +- .../components/CustomUpload/index.client.tsx | 2 +- test/uploads/eslint.config.js | 5 +- test/uploads/int.spec.ts | 1 - test/versions/e2e.spec.ts | 12 +- test/versions/eslint.config.js | 5 +- 364 files changed, 2578 insertions(+), 2658 deletions(-) diff --git a/packages/create-payload-app/src/lib/create-project.spec.ts b/packages/create-payload-app/src/lib/create-project.spec.ts index aa3b00cd7..01dad6e8c 100644 --- a/packages/create-payload-app/src/lib/create-project.spec.ts +++ b/packages/create-payload-app/src/lib/create-project.spec.ts @@ -1,18 +1,20 @@ +import { jest } from '@jest/globals' +import fs from 'fs' import fse from 'fs-extra' +import globby from 'globby' +import * as os from 'node:os' import path from 'path' + import type { CliArgs, DbType, ProjectTemplate } from '../types.js' + import { createProject } from './create-project.js' import { dbReplacements } from './replacements.js' import { getValidTemplates } from './templates.js' -import globby from 'globby' -import { jest } from '@jest/globals' -import fs from 'fs' -import * as os from 'node:os' describe('createProject', () => { let projectDir: string beforeAll(() => { - console.log = jest.fn() + jest.spyOn(console, 'log').mockImplementation() }) beforeEach(() => { @@ -27,7 +29,6 @@ describe('createProject', () => { }) describe('#createProject', () => { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const args = { _: ['project-name'], '--db': 'mongodb', @@ -41,15 +42,15 @@ describe('createProject', () => { const template: ProjectTemplate = { name: 'plugin', type: 'plugin', - url: 'https://github.com/payloadcms/payload-plugin-template', description: 'Template for creating a Payload plugin', + url: 'https://github.com/payloadcms/payload-plugin-template', } await createProject({ cliArgs: args, - projectName, - projectDir, - template, packageManager, + projectDir, + projectName, + template, }) const packageJsonPath = path.resolve(projectDir, 'package.json') @@ -84,14 +85,14 @@ describe('createProject', () => { await createProject({ cliArgs, - projectName, - projectDir, - template: template as ProjectTemplate, - packageManager, dbDetails: { - dbUri: `${db}://localhost:27017/create-project-test`, type: db as DbType, + dbUri: `${db}://localhost:27017/create-project-test`, }, + packageManager, + projectDir, + projectName, + template: template as ProjectTemplate, }) const dbReplacement = dbReplacements[db as DbType] diff --git a/packages/create-payload-app/src/lib/init-next.ts b/packages/create-payload-app/src/lib/init-next.ts index 2bb162144..eeb82615a 100644 --- a/packages/create-payload-app/src/lib/init-next.ts +++ b/packages/create-payload-app/src/lib/init-next.ts @@ -24,13 +24,13 @@ const writeFile = promisify(fs.writeFile) const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) -type InitNextArgs = Pick & { +type InitNextArgs = { dbType: DbType nextAppDetails?: NextAppDetails packageManager: PackageManager projectDir: string useDistFiles?: boolean -} +} & Pick type InitNextResult = | { @@ -144,11 +144,11 @@ async function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) } function installAndConfigurePayload( - args: InitNextArgs & { + args: { nextAppDetails: NextAppDetails nextConfigType: NextConfigType useDistFiles?: boolean - }, + } & InitNextArgs, ): | { payloadConfigPath: string; success: true } | { payloadConfigPath?: string; reason: string; success: false } { diff --git a/packages/create-payload-app/src/lib/wrap-next-config.spec.ts b/packages/create-payload-app/src/lib/wrap-next-config.spec.ts index 14871cccf..4f67b5e3d 100644 --- a/packages/create-payload-app/src/lib/wrap-next-config.spec.ts +++ b/packages/create-payload-app/src/lib/wrap-next-config.spec.ts @@ -1,11 +1,16 @@ -import { parseAndModifyConfigContent, withPayloadStatement } from './wrap-next-config.js' import * as p from '@clack/prompts' import { jest } from '@jest/globals' +import { parseAndModifyConfigContent, withPayloadStatement } from './wrap-next-config.js' + const esmConfigs = { defaultNextConfig: `/** @type {import('next').NextConfig} */ const nextConfig = {}; export default nextConfig; +`, + nextConfigExportNamedDefault: `const nextConfig = {}; +const wrapped = someFunc(asdf); +export { wrapped as default }; `, nextConfigWithFunc: `const nextConfig = {}; export default someFunc(nextConfig); @@ -14,10 +19,6 @@ export default someFunc(nextConfig); export default someFunc( nextConfig ); -`, - nextConfigExportNamedDefault: `const nextConfig = {}; -const wrapped = someFunc(asdf); -export { wrapped as default }; `, nextConfigWithSpread: `const nextConfig = { ...someConfig, @@ -27,12 +28,16 @@ export default nextConfig; } const cjsConfigs = { + anonConfig: `module.exports = {};`, defaultNextConfig: ` /** @type {import('next').NextConfig} */ const nextConfig = {}; module.exports = nextConfig; `, - anonConfig: `module.exports = {};`, + nextConfigExportNamedDefault: `const nextConfig = {}; +const wrapped = someFunc(asdf); +module.exports = wrapped; +`, nextConfigWithFunc: `const nextConfig = {}; module.exports = someFunc(nextConfig); `, @@ -40,10 +45,6 @@ module.exports = someFunc(nextConfig); module.exports = someFunc( nextConfig ); -`, - nextConfigExportNamedDefault: `const nextConfig = {}; -const wrapped = someFunc(asdf); -module.exports = wrapped; `, nextConfigWithSpread: `const nextConfig = { ...someConfig }; module.exports = nextConfig; @@ -76,7 +77,7 @@ describe('parseAndInsertWithPayload', () => { configType, ) expect(modifiedConfigContent).toContain(importStatement) - expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n nextConfig\n\)\)/) + expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n {2}nextConfig\n\)\)/) }) it('should parse the config with a spread', () => { @@ -137,7 +138,7 @@ describe('parseAndInsertWithPayload', () => { configType, ) expect(modifiedConfigContent).toContain(requireStatement) - expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n nextConfig\n\)\)/) + expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n {2}nextConfig\n\)\)/) }) it('should parse the config with a named export as default', () => { const { modifiedConfigContent } = parseAndModifyConfigContent( diff --git a/packages/create-payload-app/src/utils/log.ts b/packages/create-payload-app/src/utils/log.ts index ac90478c6..18c8a9fa5 100644 --- a/packages/create-payload-app/src/utils/log.ts +++ b/packages/create-payload-app/src/utils/log.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import * as p from '@clack/prompts' import chalk from 'chalk' diff --git a/packages/db-mongodb/src/connect.ts b/packages/db-mongodb/src/connect.ts index aab57c894..4d17766c7 100644 --- a/packages/db-mongodb/src/connect.ts +++ b/packages/db-mongodb/src/connect.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ import type { ConnectOptions } from 'mongoose' import type { Connect } from 'payload' @@ -24,7 +23,7 @@ export const connect: Connect = async function connect( const urlToConnect = this.url - const connectionOptions: ConnectOptions & { useFacet: undefined } = { + const connectionOptions: { useFacet: undefined } & ConnectOptions = { autoIndex: true, ...this.connectOptions, useFacet: undefined, diff --git a/packages/db-mongodb/src/createMigration.ts b/packages/db-mongodb/src/createMigration.ts index a1d3efe7e..73093a893 100644 --- a/packages/db-mongodb/src/createMigration.ts +++ b/packages/db-mongodb/src/createMigration.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-restricted-syntax, no-await-in-loop */ import type { CreateMigration, MigrationTemplateArgs } from 'payload' import fs from 'fs' diff --git a/packages/db-mongodb/src/find.ts b/packages/db-mongodb/src/find.ts index 7ae16d907..5c931327f 100644 --- a/packages/db-mongodb/src/find.ts +++ b/packages/db-mongodb/src/find.ts @@ -86,7 +86,6 @@ export const find: Find = async function find( return { ...result, docs: docs.map((doc) => { - // eslint-disable-next-line no-param-reassign doc.id = doc._id return sanitizeInternalFields(doc) }), diff --git a/packages/db-mongodb/src/findGlobalVersions.ts b/packages/db-mongodb/src/findGlobalVersions.ts index e8475eef6..bc1515633 100644 --- a/packages/db-mongodb/src/findGlobalVersions.ts +++ b/packages/db-mongodb/src/findGlobalVersions.ts @@ -104,7 +104,6 @@ export const findGlobalVersions: FindGlobalVersions = async function findGlobalV return { ...result, docs: docs.map((doc) => { - // eslint-disable-next-line no-param-reassign doc.id = doc._id return sanitizeInternalFields(doc) }), diff --git a/packages/db-mongodb/src/findVersions.ts b/packages/db-mongodb/src/findVersions.ts index ebbf3049d..48569a7d8 100644 --- a/packages/db-mongodb/src/findVersions.ts +++ b/packages/db-mongodb/src/findVersions.ts @@ -101,7 +101,6 @@ export const findVersions: FindVersions = async function findVersions( return { ...result, docs: docs.map((doc) => { - // eslint-disable-next-line no-param-reassign doc.id = doc._id return sanitizeInternalFields(doc) }), diff --git a/packages/db-mongodb/src/index.ts b/packages/db-mongodb/src/index.ts index 0a6fa72a5..4eda9e3c5 100644 --- a/packages/db-mongodb/src/index.ts +++ b/packages/db-mongodb/src/index.ts @@ -43,10 +43,10 @@ export interface Args { /** Set to false to disable auto-pluralization of collection names, Defaults to true */ autoPluralization?: boolean /** Extra configuration options */ - connectOptions?: ConnectOptions & { + connectOptions?: { /** Set false to disable $facet aggregation in non-supporting databases, Defaults to true */ useFacet?: boolean - } + } & ConnectOptions /** Set to true to disable hinting to MongoDB to use 'id' as index. This is currently done when counting documents for pagination. Disabling this optimization might fix some problems with AWS DocumentDB. Defaults to false */ disableIndexHints?: boolean migrationDir?: string @@ -59,19 +59,19 @@ export interface Args { url: false | string } -export type MongooseAdapter = BaseDatabaseAdapter & - Args & { - collections: { - [slug: string]: CollectionModel - } - connection: Connection - globals: GlobalModel - mongoMemoryServer: MongoMemoryReplSet - sessions: Record - versions: { - [slug: string]: CollectionModel - } +export type MongooseAdapter = { + collections: { + [slug: string]: CollectionModel } + connection: Connection + globals: GlobalModel + mongoMemoryServer: MongoMemoryReplSet + sessions: Record + versions: { + [slug: string]: CollectionModel + } +} & Args & + BaseDatabaseAdapter declare module 'payload' { export interface DatabaseAdapter diff --git a/packages/db-mongodb/src/init.ts b/packages/db-mongodb/src/init.ts index 740e62a32..ee1f9fe38 100644 --- a/packages/db-mongodb/src/init.ts +++ b/packages/db-mongodb/src/init.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import type { PaginateOptions } from 'mongoose' import type { Init, SanitizedCollectionConfig } from 'payload' diff --git a/packages/db-mongodb/src/models/buildSchema.ts b/packages/db-mongodb/src/models/buildSchema.ts index a7ea67cb4..54388ecb9 100644 --- a/packages/db-mongodb/src/models/buildSchema.ts +++ b/packages/db-mongodb/src/models/buildSchema.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -/* eslint-disable class-methods-use-this */ -/* eslint-disable @typescript-eslint/no-use-before-define */ import type { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose' import type { ArrayField, @@ -196,12 +193,10 @@ const fieldToSchemaMap: Record = { if (field.localized && config.localization) { config.localization.localeCodes.forEach((localeCode) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error Possible incorrect typing in mongoose types, this works schema.path(`${field.name}.${localeCode}`).discriminator(blockItem.slug, blockSchema) }) } else { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error Possible incorrect typing in mongoose types, this works schema.path(field.name).discriminator(blockItem.slug, blockSchema) } diff --git a/packages/db-mongodb/src/queries/buildAndOrConditions.ts b/packages/db-mongodb/src/queries/buildAndOrConditions.ts index 1ff5746fc..05e6039b3 100644 --- a/packages/db-mongodb/src/queries/buildAndOrConditions.ts +++ b/packages/db-mongodb/src/queries/buildAndOrConditions.ts @@ -20,11 +20,10 @@ export async function buildAndOrConditions({ const completedConditions = [] // Loop over all AND / OR operations and add them to the AND / OR query param // Operations should come through as an array - // eslint-disable-next-line no-restricted-syntax + for (const condition of where) { // If the operation is properly formatted as an object if (typeof condition === 'object') { - // eslint-disable-next-line no-await-in-loop const result = await parseParams({ collectionSlug, fields, diff --git a/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts b/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts index cfc6302be..f4e2e653f 100644 --- a/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts +++ b/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts @@ -1,22 +1,23 @@ -import { SanitizedConfig, sanitizeConfig } from 'payload' -import { Config } from 'payload' +import type { Config, SanitizedConfig } from 'payload' + +import { sanitizeConfig } from 'payload' + import { getLocalizedSortProperty } from './getLocalizedSortProperty.js' let config: SanitizedConfig describe('get localized sort property', () => { beforeAll(async () => { - config = (await sanitizeConfig({ + config = await sanitizeConfig({ localization: { - locales: ['en', 'es'], defaultLocale: 'en', fallback: true, + locales: ['en', 'es'], }, - } as Config)) as SanitizedConfig + } as Config) }) it('passes through a non-localized sort property', async () => { const result = getLocalizedSortProperty({ - segments: ['title'], config, fields: [ { @@ -25,6 +26,7 @@ describe('get localized sort property', () => { }, ], locale: 'en', + segments: ['title'], }) expect(result).toStrictEqual('title') @@ -32,7 +34,6 @@ describe('get localized sort property', () => { it('properly localizes an un-localized sort property', () => { const result = getLocalizedSortProperty({ - segments: ['title'], config, fields: [ { @@ -42,6 +43,7 @@ describe('get localized sort property', () => { }, ], locale: 'en', + segments: ['title'], }) expect(result).toStrictEqual('title.en') @@ -49,7 +51,6 @@ describe('get localized sort property', () => { it('keeps specifically asked-for localized sort properties', () => { const result = getLocalizedSortProperty({ - segments: ['title', 'es'], config, fields: [ { @@ -59,6 +60,7 @@ describe('get localized sort property', () => { }, ], locale: 'en', + segments: ['title', 'es'], }) expect(result).toStrictEqual('title.es') @@ -66,7 +68,6 @@ describe('get localized sort property', () => { it('properly localizes nested sort properties', () => { const result = getLocalizedSortProperty({ - segments: ['group', 'title'], config, fields: [ { @@ -82,6 +83,7 @@ describe('get localized sort property', () => { }, ], locale: 'en', + segments: ['group', 'title'], }) expect(result).toStrictEqual('group.title.en') @@ -89,7 +91,6 @@ describe('get localized sort property', () => { it('keeps requested locale with nested sort properties', () => { const result = getLocalizedSortProperty({ - segments: ['group', 'title', 'es'], config, fields: [ { @@ -105,6 +106,7 @@ describe('get localized sort property', () => { }, ], locale: 'en', + segments: ['group', 'title', 'es'], }) expect(result).toStrictEqual('group.title.es') @@ -112,7 +114,6 @@ describe('get localized sort property', () => { it('properly localizes field within row', () => { const result = getLocalizedSortProperty({ - segments: ['title'], config, fields: [ { @@ -127,6 +128,7 @@ describe('get localized sort property', () => { }, ], locale: 'en', + segments: ['title'], }) expect(result).toStrictEqual('title.en') @@ -134,7 +136,6 @@ describe('get localized sort property', () => { it('properly localizes field within named tab', () => { const result = getLocalizedSortProperty({ - segments: ['tab', 'title'], config, fields: [ { @@ -154,6 +155,7 @@ describe('get localized sort property', () => { }, ], locale: 'en', + segments: ['tab', 'title'], }) expect(result).toStrictEqual('tab.title.en') @@ -161,14 +163,12 @@ describe('get localized sort property', () => { it('properly localizes field within unnamed tab', () => { const result = getLocalizedSortProperty({ - segments: ['title'], config, fields: [ { type: 'tabs', tabs: [ { - label: 'Tab', fields: [ { name: 'title', @@ -176,11 +176,13 @@ describe('get localized sort property', () => { localized: true, }, ], + label: 'Tab', }, ], }, ], locale: 'en', + segments: ['title'], }) expect(result).toStrictEqual('title.en') diff --git a/packages/db-mongodb/src/queries/parseParams.ts b/packages/db-mongodb/src/queries/parseParams.ts index 1b6dd82de..272be27b8 100644 --- a/packages/db-mongodb/src/queries/parseParams.ts +++ b/packages/db-mongodb/src/queries/parseParams.ts @@ -1,5 +1,3 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable no-await-in-loop */ import type { FilterQuery } from 'mongoose' import type { Field, Operator, Payload, Where } from 'payload' diff --git a/packages/db-mongodb/src/queryDrafts.ts b/packages/db-mongodb/src/queryDrafts.ts index 3bd515250..ce884b5aa 100644 --- a/packages/db-mongodb/src/queryDrafts.ts +++ b/packages/db-mongodb/src/queryDrafts.ts @@ -87,7 +87,6 @@ export const queryDrafts: QueryDrafts = async function queryDrafts( return { ...result, docs: docs.map((doc) => { - // eslint-disable-next-line no-param-reassign doc = { _id: doc.parent, id: doc.parent, diff --git a/packages/email-resend/src/email-resend.spec.ts b/packages/email-resend/src/email-resend.spec.ts index 48c1f4f35..531933e3d 100644 --- a/packages/email-resend/src/email-resend.spec.ts +++ b/packages/email-resend/src/email-resend.spec.ts @@ -1,7 +1,9 @@ -import { resendAdapter } from './index.js' -import { Payload } from 'payload' +import type { Payload } from 'payload' + import { jest } from '@jest/globals' +import { resendAdapter } from './index.js' + describe('email-resend', () => { const defaultFromAddress = 'dev@payloadcms.com' const defaultFromName = 'Payload CMS' @@ -29,16 +31,16 @@ describe('email-resend', () => { ) as jest.Mock const adapter = resendAdapter({ + apiKey, defaultFromAddress, defaultFromName, - apiKey, }) await adapter({ payload: mockPayload }).sendEmail({ from, - to, subject, text, + to, }) // @ts-expect-error @@ -48,16 +50,16 @@ describe('email-resend', () => { expect(request.headers.Authorization).toStrictEqual(`Bearer ${apiKey}`) expect(JSON.parse(request.body)).toMatchObject({ from, - to, subject, text, + to, }) }) it('should throw an error if the email fails to send', async () => { const errorResponse = { - message: 'error information', name: 'validation_error', + message: 'error information', statusCode: 403, } global.fetch = jest.spyOn(global, 'fetch').mockImplementation( @@ -69,17 +71,17 @@ describe('email-resend', () => { ) as jest.Mock const adapter = resendAdapter({ + apiKey, defaultFromAddress, defaultFromName, - apiKey, }) await expect(() => adapter({ payload: mockPayload }).sendEmail({ from, - to, subject, text, + to, }), ).rejects.toThrow( `Error sending email: ${errorResponse.statusCode} ${errorResponse.name} - ${errorResponse.message}`, diff --git a/packages/eslint-config/configs/jest/index.mjs b/packages/eslint-config/configs/jest/index.mjs index 0ebdb96e8..da12e5bd5 100644 --- a/packages/eslint-config/configs/jest/index.mjs +++ b/packages/eslint-config/configs/jest/index.mjs @@ -4,21 +4,20 @@ import jestDom from 'eslint-plugin-jest-dom' import jest from 'eslint-plugin-jest' import { deepMerge } from '../../deepMerge.js' - /** @type {import('eslint').Linter.FlatConfig} */ export const index = deepMerge( { - rules: jestRules + rules: jestRules, }, { - rules: jestDomRules + rules: jestDomRules, }, { plugins: { jest, 'jest-dom': jestDom, }, - } + }, ) export default index diff --git a/packages/eslint-config/configs/react/index.mjs b/packages/eslint-config/configs/react/index.mjs index 0edb174eb..d86db8717 100644 --- a/packages/eslint-config/configs/react/index.mjs +++ b/packages/eslint-config/configs/react/index.mjs @@ -1,19 +1,19 @@ import reactRules from './rules/react.mjs' import reactA11yRules from './rules/react-a11y.mjs' import jsxA11y from 'eslint-plugin-jsx-a11y' -import react from "@eslint-react/eslint-plugin"; +import react from '@eslint-react/eslint-plugin' import reactHooks from 'eslint-plugin-react-hooks' -import globals from 'globals'; +import globals from 'globals' import { deepMerge } from '../../deepMerge.js' /** @type {import('eslint').Linter.FlatConfig} */ export const index = deepMerge( - react.configs["recommended-type-checked"], + react.configs['recommended-type-checked'], { - rules: reactRules + rules: reactRules, }, { - rules: reactA11yRules + rules: reactA11yRules, }, { languageOptions: { @@ -23,8 +23,8 @@ export const index = deepMerge( parserOptions: { ecmaFeatures: { jsx: true, - } - } + }, + }, }, plugins: { 'jsx-a11y': jsxA11y, @@ -35,6 +35,6 @@ export const index = deepMerge( version: 'detect', }, }, - } + }, ) export default index diff --git a/packages/eslint-config/configs/react/rules/react-a11y.mjs b/packages/eslint-config/configs/react/rules/react-a11y.mjs index 9c0ef3833..53232733b 100644 --- a/packages/eslint-config/configs/react/rules/react-a11y.mjs +++ b/packages/eslint-config/configs/react/rules/react-a11y.mjs @@ -1,4 +1,3 @@ - // Sourced from https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb/rules/react-a11y.js /** @type {import('eslint').Linter.FlatConfig} */ diff --git a/packages/eslint-config/index.mjs b/packages/eslint-config/index.mjs index 5c9da8cf2..a14a31983 100644 --- a/packages/eslint-config/index.mjs +++ b/packages/eslint-config/index.mjs @@ -2,11 +2,11 @@ import js from '@eslint/js' import tseslint from 'typescript-eslint' import perfectionistNatural from 'eslint-plugin-perfectionist/configs/recommended-natural' import { configs as regexpPluginConfigs } from 'eslint-plugin-regexp' -import eslintConfigPrettier from 'eslint-config-prettier'; +import eslintConfigPrettier from 'eslint-config-prettier' import payloadPlugin from '@payloadcms/eslint-plugin' import reactExtends from './configs/react/index.mjs' import jestExtends from './configs/jest/index.mjs' -import globals from 'globals'; +import globals from 'globals' import importX from 'eslint-plugin-import-x' import typescriptParser from '@typescript-eslint/parser' import { deepMerge } from './deepMerge.js' @@ -102,9 +102,11 @@ const typescriptRules = { let FlatConfig /** @type {FlatConfig} */ -const baseExtends = deepMerge(js.configs.recommended, perfectionistNatural , regexpPluginConfigs['flat/recommended']) - - +const baseExtends = deepMerge( + js.configs.recommended, + perfectionistNatural, + regexpPluginConfigs['flat/recommended'], +) /** @type {FlatConfig[]} */ export const rootEslintConfig = [ @@ -144,7 +146,7 @@ export const rootEslintConfig = [ ...baseRules, ...typescriptRules, }, - } + }, ), files: ['**/*.ts'], }, @@ -166,31 +168,28 @@ export const rootEslintConfig = [ ...typescriptRules, ...reactA11yRules, }, - } + }, ), files: ['**/*.tsx'], }, { name: 'Unit Tests', - ...deepMerge( - jestExtends, - { - plugins: { - payload: payloadPlugin - }, - rules: { - ...baseRules, - ...typescriptRules, - '@typescript-eslint/unbound-method': 'off', - }, - } - ), + ...deepMerge(jestExtends, { + plugins: { + payload: payloadPlugin, + }, + rules: { + ...baseRules, + ...typescriptRules, + '@typescript-eslint/unbound-method': 'off', + }, + }), files: ['**/*.spec.ts'], }, { name: 'Payload Config', plugins: { - payload: payloadPlugin + payload: payloadPlugin, }, rules: { ...baseRules, diff --git a/packages/eslint-plugin/index.mjs b/packages/eslint-plugin/index.mjs index 0e48a95db..1f54e274c 100644 --- a/packages/eslint-plugin/index.mjs +++ b/packages/eslint-plugin/index.mjs @@ -4,7 +4,6 @@ import noRelativeMonorepoImports from './customRules/no-relative-monorepo-import import noImportsFromExportsDir from './customRules/no-imports-from-exports-dir.js' import noFlakyAssertions from './customRules/no-flaky-assertions.js' - /** * @type {import('eslint').ESLint.Plugin} */ diff --git a/packages/graphql/src/bin/generateSchema.ts b/packages/graphql/src/bin/generateSchema.ts index 0bbb870d5..6df445f98 100644 --- a/packages/graphql/src/bin/generateSchema.ts +++ b/packages/graphql/src/bin/generateSchema.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-floating-promises */ import type { SanitizedConfig } from 'payload' import fs from 'fs' diff --git a/packages/graphql/src/index.ts b/packages/graphql/src/index.ts index 7081012e2..7cf4c64c1 100644 --- a/packages/graphql/src/index.ts +++ b/packages/graphql/src/index.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import type { OperationArgs } from 'graphql-http' import type { GraphQLInfo, SanitizedConfig } from 'payload' diff --git a/packages/graphql/src/packages/graphql-query-complexity/QueryComplexity.ts b/packages/graphql/src/packages/graphql-query-complexity/QueryComplexity.ts index 4c28a862f..4d96a0ebd 100644 --- a/packages/graphql/src/packages/graphql-query-complexity/QueryComplexity.ts +++ b/packages/graphql/src/packages/graphql-query-complexity/QueryComplexity.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/no-use-before-define */ + /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */ /** * Created by Ivo Meißner on 28.07.17. diff --git a/packages/graphql/src/packages/graphql-type-json/index.ts b/packages/graphql/src/packages/graphql-type-json/index.ts index 88d7d4526..c6fe7ad9d 100644 --- a/packages/graphql/src/packages/graphql-type-json/index.ts +++ b/packages/graphql/src/packages/graphql-type-json/index.ts @@ -16,7 +16,6 @@ function ensureObject(value) { function parseObject(typeName, ast, variables) { const value = Object.create(null) ast.fields.forEach((field) => { - // eslint-disable-next-line no-use-before-define value[field.name.value] = parseLiteral(typeName, field.value, variables) }) diff --git a/packages/graphql/src/resolvers/collections/count.ts b/packages/graphql/src/resolvers/collections/count.ts index faf781688..0a928b464 100644 --- a/packages/graphql/src/resolvers/collections/count.ts +++ b/packages/graphql/src/resolvers/collections/count.ts @@ -14,7 +14,6 @@ export type Resolver = ( context: { req: PayloadRequest }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any ) => Promise<{ totalDocs: number }> export function countResolver(collection: Collection): Resolver { diff --git a/packages/graphql/src/schema/buildObjectType.ts b/packages/graphql/src/schema/buildObjectType.ts index a718e8c74..e17d87aab 100644 --- a/packages/graphql/src/schema/buildObjectType.ts +++ b/packages/graphql/src/schema/buildObjectType.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/no-use-before-define */ -/* eslint-disable no-await-in-loop */ -/* eslint-disable no-restricted-syntax */ import type { GraphQLFieldConfig, GraphQLType } from 'graphql' import type { ArrayField, diff --git a/packages/graphql/src/schema/buildWhereInputType.ts b/packages/graphql/src/schema/buildWhereInputType.ts index 9a14337fd..36627f7f9 100644 --- a/packages/graphql/src/schema/buildWhereInputType.ts +++ b/packages/graphql/src/schema/buildWhereInputType.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-use-before-define */ import type { Field, FieldAffectingData } from 'payload' import { GraphQLInputObjectType, GraphQLList } from 'graphql' diff --git a/packages/graphql/src/schema/initCollections.ts b/packages/graphql/src/schema/initCollections.ts index 913480e05..c682de2fe 100644 --- a/packages/graphql/src/schema/initCollections.ts +++ b/packages/graphql/src/schema/initCollections.ts @@ -1,6 +1,10 @@ -/* eslint-disable no-param-reassign */ -import type { GraphQLInfo } from 'payload' -import type { Collection, Field, SanitizedCollectionConfig, SanitizedConfig } from 'payload' +import type { + Collection, + Field, + GraphQLInfo, + SanitizedCollectionConfig, + SanitizedConfig, +} from 'payload' import { GraphQLBoolean, diff --git a/packages/graphql/src/schema/initGlobals.ts b/packages/graphql/src/schema/initGlobals.ts index 808e7515a..1c8604d8a 100644 --- a/packages/graphql/src/schema/initGlobals.ts +++ b/packages/graphql/src/schema/initGlobals.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import { GraphQLBoolean, GraphQLInt, GraphQLNonNull, GraphQLString } from 'graphql' import pluralize from 'pluralize' const { singular } = pluralize diff --git a/packages/graphql/src/schema/withOperators.ts b/packages/graphql/src/schema/withOperators.ts index 8e0d153d5..f1e7b9dcd 100644 --- a/packages/graphql/src/schema/withOperators.ts +++ b/packages/graphql/src/schema/withOperators.ts @@ -45,19 +45,19 @@ const GeoJSONObject = new GraphQLInputObjectType({ }) type DefaultsType = { - [key in staticTypes]: { - operators: { - name: string - type: ((field: FieldAffectingData, parentName: string) => GraphQLType) | GraphQLType - }[] - } -} & { [key in dynamicTypes]: { operators: { name: string type: (field: FieldAffectingData, parentName: string) => GraphQLType }[] } +} & { + [key in staticTypes]: { + operators: { + name: string + type: ((field: FieldAffectingData, parentName: string) => GraphQLType) | GraphQLType + }[] + } } const defaults: DefaultsType = { diff --git a/packages/graphql/src/utilities/formatName.spec.ts b/packages/graphql/src/utilities/formatName.spec.ts index dc8e05084..8ebb4a332 100644 --- a/packages/graphql/src/utilities/formatName.spec.ts +++ b/packages/graphql/src/utilities/formatName.spec.ts @@ -1,4 +1,3 @@ -/* eslint-disable indent */ /* eslint-disable jest/prefer-strict-equal */ import formatName from './formatName' diff --git a/packages/live-preview/src/mergeData.ts b/packages/live-preview/src/mergeData.ts index a40a2e2d1..fe099355a 100644 --- a/packages/live-preview/src/mergeData.ts +++ b/packages/live-preview/src/mergeData.ts @@ -34,9 +34,9 @@ export const mergeData = async (args: { returnNumberOfRequests?: boolean serverURL: string }): Promise< - T & { + { _numberOfRequests?: number - } + } & T > => { const { apiRoute, diff --git a/packages/next/src/elements/DocumentHeader/Tabs/Tab/index.tsx b/packages/next/src/elements/DocumentHeader/Tabs/Tab/index.tsx index 46b48e442..121aabc66 100644 --- a/packages/next/src/elements/DocumentHeader/Tabs/Tab/index.tsx +++ b/packages/next/src/elements/DocumentHeader/Tabs/Tab/index.tsx @@ -7,7 +7,7 @@ import './index.scss' export const baseClass = 'doc-tab' -export const DocumentTab: React.FC = (props) => { +export const DocumentTab: React.FC = (props) => { const { Pill, apiURL, diff --git a/packages/next/src/elements/DocumentHeader/Tabs/tabs/index.tsx b/packages/next/src/elements/DocumentHeader/Tabs/tabs/index.tsx index 913945ad5..e2c414f71 100644 --- a/packages/next/src/elements/DocumentHeader/Tabs/tabs/index.tsx +++ b/packages/next/src/elements/DocumentHeader/Tabs/tabs/index.tsx @@ -16,9 +16,9 @@ export type DocumentViewKey = (typeof documentViewKeys)[number] export const tabs: Record< DocumentViewKey, - DocumentTabConfig & { + { order?: number // TODO: expose this to the globalConfig config - } + } & DocumentTabConfig > = { API: { condition: ({ collectionConfig, globalConfig }) => diff --git a/packages/next/src/layouts/Root/index.tsx b/packages/next/src/layouts/Root/index.tsx index 8d440c75e..56f11ad58 100644 --- a/packages/next/src/layouts/Root/index.tsx +++ b/packages/next/src/layouts/Root/index.tsx @@ -109,7 +109,6 @@ export const RootLayout = async ({ fallbackLang={clientConfig.i18n.fallbackLanguage} languageCode={languageCode} languageOptions={languageOptions} - // eslint-disable-next-line react/jsx-no-bind switchLanguageServerAction={switchLanguageServerAction} theme={theme} translations={i18n.translations} diff --git a/packages/next/src/routes/graphql/handler.ts b/packages/next/src/routes/graphql/handler.ts index be8395752..7609d0654 100644 --- a/packages/next/src/routes/graphql/handler.ts +++ b/packages/next/src/routes/graphql/handler.ts @@ -50,7 +50,6 @@ const handleError = async ( let cached = global._payload_graphql if (!cached) { - // eslint-disable-next-line no-multi-assign cached = global._payload_graphql = { graphql: null, promise: null } } diff --git a/packages/next/src/templates/Default/index.tsx b/packages/next/src/templates/Default/index.tsx index 7c7b21aa1..5d3dff909 100644 --- a/packages/next/src/templates/Default/index.tsx +++ b/packages/next/src/templates/Default/index.tsx @@ -11,11 +11,11 @@ import './index.scss' const baseClass = 'template-default' -export type DefaultTemplateProps = ServerProps & { +export type DefaultTemplateProps = { children?: React.ReactNode className?: string visibleEntities: VisibleEntities -} +} & ServerProps export const DefaultTemplate: React.FC = ({ children, diff --git a/packages/next/src/utilities/getPayloadHMR.ts b/packages/next/src/utilities/getPayloadHMR.ts index 9ffb722ff..30a27664c 100644 --- a/packages/next/src/utilities/getPayloadHMR.ts +++ b/packages/next/src/utilities/getPayloadHMR.ts @@ -10,7 +10,6 @@ let cached: { } = global._payload if (!cached) { - // eslint-disable-next-line no-multi-assign cached = global._payload = { payload: null, promise: null, reload: false } } diff --git a/packages/next/src/utilities/meta.ts b/packages/next/src/utilities/meta.ts index a2852bbcf..df27015cb 100644 --- a/packages/next/src/utilities/meta.ts +++ b/packages/next/src/utilities/meta.ts @@ -12,7 +12,7 @@ const defaultOpenGraph = { title: 'Payload App', } -export const meta = async (args: MetaConfig & { serverURL: string }): Promise => { +export const meta = async (args: { serverURL: string } & MetaConfig): Promise => { const { defaultOGImageType, description, diff --git a/packages/next/src/views/Dashboard/Default/index.tsx b/packages/next/src/views/Dashboard/Default/index.tsx index 8232ce3bd..b0e26c5c9 100644 --- a/packages/next/src/views/Dashboard/Default/index.tsx +++ b/packages/next/src/views/Dashboard/Default/index.tsx @@ -10,12 +10,12 @@ import './index.scss' const baseClass = 'dashboard' -export type DashboardProps = ServerProps & { +export type DashboardProps = { Link: React.ComponentType navGroups?: ReturnType permissions: Permissions visibleEntities: VisibleEntities -} +} & ServerProps export const DefaultDashboard: React.FC = (props) => { const { diff --git a/packages/next/src/views/Document/getMetaBySegment.tsx b/packages/next/src/views/Document/getMetaBySegment.tsx index 119ca1db5..d5afad7e5 100644 --- a/packages/next/src/views/Document/getMetaBySegment.tsx +++ b/packages/next/src/views/Document/getMetaBySegment.tsx @@ -12,10 +12,10 @@ import { generateMetadata as versionMeta } from '../Version/meta.js' import { generateMetadata as versionsMeta } from '../Versions/meta.js' export type GenerateEditViewMetadata = ( - args: Parameters[0] & { + args: { collectionConfig?: SanitizedCollectionConfig | null globalConfig?: SanitizedGlobalConfig | null - }, + } & Parameters[0], ) => Promise export const getMetaBySegment: GenerateEditViewMetadata = async ({ diff --git a/packages/next/src/views/Document/getViewsFromConfig.tsx b/packages/next/src/views/Document/getViewsFromConfig.tsx index a9f4399fe..3bc468ac1 100644 --- a/packages/next/src/views/Document/getViewsFromConfig.tsx +++ b/packages/next/src/views/Document/getViewsFromConfig.tsx @@ -28,7 +28,7 @@ export const getViewsFromConfig = ({ }: { collectionConfig?: SanitizedCollectionConfig config: SanitizedConfig - // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents + docPermissions: CollectionPermission | GlobalPermission globalConfig?: SanitizedGlobalConfig routeSegments: string[] diff --git a/packages/next/src/views/List/meta.ts b/packages/next/src/views/List/meta.ts index 0b499dc57..0f5c300ed 100644 --- a/packages/next/src/views/List/meta.ts +++ b/packages/next/src/views/List/meta.ts @@ -8,9 +8,9 @@ import type { GenerateViewMetadata } from '../Root/index.js' import { meta } from '../../utilities/meta.js' export const generateListMetadata = async ( - args: Parameters[0] & { + args: { collectionConfig: SanitizedCollectionConfig - }, + } & Parameters[0], ): Promise => { const { collectionConfig, config, i18n } = args diff --git a/packages/next/src/views/LivePreview/Toolbar/index.tsx b/packages/next/src/views/LivePreview/Toolbar/index.tsx index a3cf974ae..a4c0cddfb 100644 --- a/packages/next/src/views/LivePreview/Toolbar/index.tsx +++ b/packages/next/src/views/LivePreview/Toolbar/index.tsx @@ -56,9 +56,9 @@ const StaticToolbar: React.FC = (props) => { } export const LivePreviewToolbar: React.FC< - EditViewProps & { + { draggable?: boolean - } + } & EditViewProps > = (props) => { const { draggable } = props diff --git a/packages/next/src/views/LivePreview/usePopupWindow.ts b/packages/next/src/views/LivePreview/usePopupWindow.ts index 1947190ee..d018a6712 100644 --- a/packages/next/src/views/LivePreview/usePopupWindow.ts +++ b/packages/next/src/views/LivePreview/usePopupWindow.ts @@ -14,7 +14,7 @@ export interface PopupMessage { export const usePopupWindow = (props: { eventType?: string - // eslint-disable-next-line @typescript-eslint/no-explicit-any + onMessage?: (searchParams: PopupMessage['searchParams']) => Promise url: string }): { diff --git a/packages/next/src/views/Logout/index.tsx b/packages/next/src/views/Logout/index.tsx index cb3c3dbe9..315bb8771 100644 --- a/packages/next/src/views/Logout/index.tsx +++ b/packages/next/src/views/Logout/index.tsx @@ -10,9 +10,9 @@ const baseClass = 'logout' export { generateLogoutMetadata } from './meta.js' export const LogoutView: React.FC< - AdminViewProps & { + { inactivity?: boolean - } + } & AdminViewProps > = ({ inactivity, initPageResult, searchParams }) => { const { req: { diff --git a/packages/next/src/views/NotFound/index.tsx b/packages/next/src/views/NotFound/index.tsx index 0c5a9959d..5abe6e54f 100644 --- a/packages/next/src/views/NotFound/index.tsx +++ b/packages/next/src/views/NotFound/index.tsx @@ -15,7 +15,6 @@ export const generatePageMetadata = async ({ }: { config: Promise | SanitizedConfig params?: { [key: string]: string | string[] } - //eslint-disable-next-line @typescript-eslint/require-await }): Promise => { const config = await configPromise diff --git a/packages/next/src/views/Version/RenderFieldsToDiff/fields/Select/index.tsx b/packages/next/src/views/Version/RenderFieldsToDiff/fields/Select/index.tsx index febb9ba46..85b294cdf 100644 --- a/packages/next/src/views/Version/RenderFieldsToDiff/fields/Select/index.tsx +++ b/packages/next/src/views/Version/RenderFieldsToDiff/fields/Select/index.tsx @@ -47,9 +47,9 @@ const getTranslatedOptions = ( } const Select: React.FC< - Omit & { + { field: MappedField & SelectFieldProps - } + } & Omit > = ({ comparison, diffMethod, field, i18n, locale, version }) => { let placeholder = '' diff --git a/packages/next/src/views/Version/RenderFieldsToDiff/fields/Tabs/index.tsx b/packages/next/src/views/Version/RenderFieldsToDiff/fields/Tabs/index.tsx index 9a87f95d2..adc5a689a 100644 --- a/packages/next/src/views/Version/RenderFieldsToDiff/fields/Tabs/index.tsx +++ b/packages/next/src/views/Version/RenderFieldsToDiff/fields/Tabs/index.tsx @@ -10,9 +10,9 @@ import Nested from '../Nested/index.js' const baseClass = 'tabs-diff' const Tabs: React.FC< - Omit & { + { field: MappedField & TabsFieldProps - } + } & Omit > = ({ comparison, diffComponents, field, i18n, locale, locales, permissions, version }) => { return (
diff --git a/packages/next/src/views/Version/RenderFieldsToDiff/types.ts b/packages/next/src/views/Version/RenderFieldsToDiff/types.ts index c62610780..a9205769e 100644 --- a/packages/next/src/views/Version/RenderFieldsToDiff/types.ts +++ b/packages/next/src/views/Version/RenderFieldsToDiff/types.ts @@ -15,8 +15,8 @@ export type Props = { version: Record } -export type FieldDiffProps = Props & { +export type FieldDiffProps = { diffMethod: DiffMethod field: MappedField isRichText: boolean -} +} & Props diff --git a/packages/payload/src/admin/RichText.ts b/packages/payload/src/admin/RichText.ts index ee62c4776..8675f437e 100644 --- a/packages/payload/src/admin/RichText.ts +++ b/packages/payload/src/admin/RichText.ts @@ -9,13 +9,9 @@ import type { SanitizedGlobalConfig } from '../globals/config/types.js' import type { PayloadRequest, RequestContext } from '../types/index.js' import type { WithServerSidePropsComponentProps } from './elements/WithServerSideProps.js' -export type RichTextFieldProps< - Value extends object, - AdapterProps, - ExtraFieldProperties = {}, -> = Omit, 'type'> & { +export type RichTextFieldProps = { path?: string -} +} & Omit, 'type'> export type AfterReadRichTextHookArgs< TData extends TypeWithID = any, @@ -146,8 +142,8 @@ export type AfterReadRichTextHook< TValue = any, TSiblingData = any, > = ( - args: BaseRichTextHookArgs & - AfterReadRichTextHookArgs, + args: AfterReadRichTextHookArgs & + BaseRichTextHookArgs, ) => Promise | TValue export type AfterChangeRichTextHook< @@ -155,8 +151,8 @@ export type AfterChangeRichTextHook< TValue = any, TSiblingData = any, > = ( - args: BaseRichTextHookArgs & - AfterChangeRichTextHookArgs, + args: AfterChangeRichTextHookArgs & + BaseRichTextHookArgs, ) => Promise | TValue export type BeforeChangeRichTextHook< @@ -252,10 +248,10 @@ export type RichTextAdapter< Value extends object = object, AdapterProps = any, ExtraFieldProperties = {}, -> = RichTextAdapterBase & { +> = { CellComponent: React.FC FieldComponent: React.FC> -} +} & RichTextAdapterBase export type RichTextAdapterProvider< Value extends object = object, diff --git a/packages/payload/src/admin/elements/Cell.ts b/packages/payload/src/admin/elements/Cell.ts index c857cbc3f..97fc349f2 100644 --- a/packages/payload/src/admin/elements/Cell.ts +++ b/packages/payload/src/admin/elements/Cell.ts @@ -35,11 +35,11 @@ export type CellComponentProps = { schemaPath: string } -export type DefaultCellComponentProps = CellComponentProps & { +export type DefaultCellComponentProps = { cellData: T customCellContext?: { collectionSlug?: SanitizedCollectionConfig['slug'] uploadConfig?: SanitizedCollectionConfig['upload'] } rowData: RowData -} +} & CellComponentProps diff --git a/packages/payload/src/admin/elements/DatePicker.ts b/packages/payload/src/admin/elements/DatePicker.ts index 084cbe5a9..2a44319c9 100644 --- a/packages/payload/src/admin/elements/DatePicker.ts +++ b/packages/payload/src/admin/elements/DatePicker.ts @@ -25,23 +25,23 @@ export type MonthPickerProps = { } export type ConditionalDateProps = - | (SharedProps & - DayPickerProps & - TimePickerProps & { - pickerAppearance?: 'dayAndTime' - }) - | (SharedProps & - DayPickerProps & { - pickerAppearance: 'dayOnly' - }) - | (SharedProps & - MonthPickerProps & { - pickerAppearance: 'monthOnly' - }) - | (SharedProps & - TimePickerProps & { - pickerAppearance: 'timeOnly' - }) - | (SharedProps & { + | ({ + pickerAppearance: 'dayOnly' + } & DayPickerProps & + SharedProps) + | ({ + pickerAppearance: 'monthOnly' + } & MonthPickerProps & + SharedProps) + | ({ + pickerAppearance: 'timeOnly' + } & SharedProps & + TimePickerProps) + | ({ + pickerAppearance?: 'dayAndTime' + } & DayPickerProps & + SharedProps & + TimePickerProps) + | ({ pickerAppearance?: 'default' - }) + } & SharedProps) diff --git a/packages/payload/src/auth/getFieldsToSign.ts b/packages/payload/src/auth/getFieldsToSign.ts index a9fa9646f..f1b3cc3e2 100644 --- a/packages/payload/src/auth/getFieldsToSign.ts +++ b/packages/payload/src/auth/getFieldsToSign.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import type { CollectionConfig } from '../collections/config/types.js' import type { Field, TabAsField } from '../fields/config/types.js' import type { PayloadRequest } from '../types/index.js' diff --git a/packages/payload/src/auth/index.ts b/packages/payload/src/auth/index.ts index 6b6bbec0d..9fb0a6f3f 100644 --- a/packages/payload/src/auth/index.ts +++ b/packages/payload/src/auth/index.ts @@ -1,4 +1,4 @@ -export * from './types.js' +export * from './cookies.js' export { extractJWT } from './extractJWT.js' -export * from './cookies.js' +export * from './types.js' diff --git a/packages/payload/src/auth/operations/local/login.ts b/packages/payload/src/auth/operations/local/login.ts index ad839710e..5192dfaad 100644 --- a/packages/payload/src/auth/operations/local/login.ts +++ b/packages/payload/src/auth/operations/local/login.ts @@ -27,7 +27,7 @@ export type Options = { async function localLogin( payload: Payload, options: Options, -): Promise }> { +): Promise<{ user: DataFromCollectionSlug } & Result> { const { collection: collectionSlug, data, diff --git a/packages/payload/src/auth/operations/login.ts b/packages/payload/src/auth/operations/login.ts index 550405d60..00d814604 100644 --- a/packages/payload/src/auth/operations/login.ts +++ b/packages/payload/src/auth/operations/login.ts @@ -39,7 +39,7 @@ export type Arguments = { export const loginOperation = async ( incomingArgs: Arguments, -): Promise }> => { +): Promise<{ user: DataFromCollectionSlug } & Result> => { let args = incomingArgs try { @@ -253,7 +253,7 @@ export const loginOperation = async ( })) || user }, Promise.resolve()) - let result: Result & { user: DataFromCollectionSlug } = { + let result: { user: DataFromCollectionSlug } & Result = { exp: (jwt.decode(token) as jwt.JwtPayload).exp, token, user, diff --git a/packages/payload/src/auth/operations/registerFirstUser.ts b/packages/payload/src/auth/operations/registerFirstUser.ts index bc8a7f8c8..90b351481 100644 --- a/packages/payload/src/auth/operations/registerFirstUser.ts +++ b/packages/payload/src/auth/operations/registerFirstUser.ts @@ -14,8 +14,8 @@ import { killTransaction } from '../../utilities/killTransaction.js' export type Arguments = { collection: Collection - data: RequiredDataFromCollectionSlug & - AuthOperationsFromCollectionSlug['registerFirstUser'] + data: AuthOperationsFromCollectionSlug['registerFirstUser'] & + RequiredDataFromCollectionSlug req: PayloadRequest } diff --git a/packages/payload/src/auth/strategies/jwt.ts b/packages/payload/src/auth/strategies/jwt.ts index 1b3ec2783..2d77fba60 100644 --- a/packages/payload/src/auth/strategies/jwt.ts +++ b/packages/payload/src/auth/strategies/jwt.ts @@ -16,7 +16,7 @@ export const JWTAuthentication: AuthStrategyFunction = async ({ }) => { try { const token = extractJWT({ headers, payload }) - const decodedPayload = jwt.verify(token, payload.secret) as jwt.JwtPayload & JWTToken + const decodedPayload = jwt.verify(token, payload.secret) as JWTToken & jwt.JwtPayload const collection = payload.collections[decodedPayload.collection] diff --git a/packages/payload/src/auth/strategies/local/authenticate.ts b/packages/payload/src/auth/strategies/local/authenticate.ts index 03d742023..16df3213f 100644 --- a/packages/payload/src/auth/strategies/local/authenticate.ts +++ b/packages/payload/src/auth/strategies/local/authenticate.ts @@ -3,7 +3,7 @@ import scmp from 'scmp' import type { TypeWithID } from '../../../collections/config/types.js' -type Doc = TypeWithID & Record +type Doc = Record & TypeWithID type Args = { doc: Doc diff --git a/packages/payload/src/auth/strategies/local/incrementLoginAttempts.ts b/packages/payload/src/auth/strategies/local/incrementLoginAttempts.ts index 7538b79d4..df0311f77 100644 --- a/packages/payload/src/auth/strategies/local/incrementLoginAttempts.ts +++ b/packages/payload/src/auth/strategies/local/incrementLoginAttempts.ts @@ -4,7 +4,7 @@ import type { PayloadRequest } from '../../../types/index.js' type Args = { collection: SanitizedCollectionConfig - doc: TypeWithID & Record + doc: Record & TypeWithID payload: Payload req: PayloadRequest } diff --git a/packages/payload/src/auth/strategies/local/resetLoginAttempts.ts b/packages/payload/src/auth/strategies/local/resetLoginAttempts.ts index 142fa31a3..739323447 100644 --- a/packages/payload/src/auth/strategies/local/resetLoginAttempts.ts +++ b/packages/payload/src/auth/strategies/local/resetLoginAttempts.ts @@ -4,7 +4,7 @@ import type { PayloadRequest } from '../../../types/index.js' type Args = { collection: SanitizedCollectionConfig - doc: TypeWithID & Record + doc: Record & TypeWithID payload: Payload req: PayloadRequest } diff --git a/packages/payload/src/bin/loader/compile.ts b/packages/payload/src/bin/loader/compile.ts index a2895d7d7..3c4812550 100644 --- a/packages/payload/src/bin/loader/compile.ts +++ b/packages/payload/src/bin/loader/compile.ts @@ -26,7 +26,7 @@ const injectInlineSourceMap = ({ export async function compile( sourcecode: string, filename: string, - options: ts.CompilerOptions & { fallbackToTs?: (filename: string) => boolean }, + options: { fallbackToTs?: (filename: string) => boolean } & ts.CompilerOptions, ): Promise { if (filename.endsWith('.d.ts')) { return '' diff --git a/packages/payload/src/collections/config/client.ts b/packages/payload/src/collections/config/client.ts index 5ca0f2646..3358117dd 100644 --- a/packages/payload/src/collections/config/client.ts +++ b/packages/payload/src/collections/config/client.ts @@ -10,18 +10,15 @@ export type ServerOnlyCollectionAdminProperties = keyof Pick< 'components' | 'hidden' | 'preview' > -export type ClientCollectionConfig = Omit< - SanitizedCollectionConfig, - 'admin' | 'fields' | ServerOnlyCollectionProperties -> & { - admin: Omit< +export type ClientCollectionConfig = { + admin: { + livePreview?: Omit + } & Omit< SanitizedCollectionConfig['admin'], 'fields' | 'livePreview' | ServerOnlyCollectionAdminProperties - > & { - livePreview?: Omit - } + > fields: ClientFieldConfig[] -} +} & Omit import type { TFunction } from '@payloadcms/translations' diff --git a/packages/payload/src/collections/operations/delete.ts b/packages/payload/src/collections/operations/delete.ts index 780fdc2a6..1682a368b 100644 --- a/packages/payload/src/collections/operations/delete.ts +++ b/packages/payload/src/collections/operations/delete.ts @@ -111,7 +111,6 @@ export const deleteOperation = async ( const errors = [] - /* eslint-disable no-param-reassign */ const promises = docs.map(async (doc) => { let result diff --git a/packages/payload/src/collections/operations/findByID.ts b/packages/payload/src/collections/operations/findByID.ts index 75ed4fefe..8c3a5bdd1 100644 --- a/packages/payload/src/collections/operations/findByID.ts +++ b/packages/payload/src/collections/operations/findByID.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-underscore-dangle */ import type { FindOneArgs } from '../../database/types.js' import type { CollectionSlug } from '../../index.js' import type { PayloadRequest } from '../../types/index.js' diff --git a/packages/payload/src/collections/operations/findVersionByID.ts b/packages/payload/src/collections/operations/findVersionByID.ts index 46b771ca4..8bb78f75b 100644 --- a/packages/payload/src/collections/operations/findVersionByID.ts +++ b/packages/payload/src/collections/operations/findVersionByID.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-underscore-dangle */ import httpStatus from 'http-status' import type { PayloadRequest } from '../../types/index.js' diff --git a/packages/payload/src/collections/operations/local/delete.ts b/packages/payload/src/collections/operations/local/delete.ts index 33cc1f26f..bdde6be8d 100644 --- a/packages/payload/src/collections/operations/local/delete.ts +++ b/packages/payload/src/collections/operations/local/delete.ts @@ -22,15 +22,15 @@ export type BaseOptions = { user?: Document } -export type ByIDOptions = BaseOptions & { +export type ByIDOptions = { id: number | string where?: never -} +} & BaseOptions -export type ManyOptions = BaseOptions & { +export type ManyOptions = { id?: never where: Where -} +} & BaseOptions export type Options = ByIDOptions | ManyOptions diff --git a/packages/payload/src/collections/operations/local/update.ts b/packages/payload/src/collections/operations/local/update.ts index eb9ef3410..31ea589d7 100644 --- a/packages/payload/src/collections/operations/local/update.ts +++ b/packages/payload/src/collections/operations/local/update.ts @@ -36,15 +36,15 @@ export type BaseOptions = { user?: Document } -export type ByIDOptions = BaseOptions & { +export type ByIDOptions = { id: number | string where?: never -} +} & BaseOptions -export type ManyOptions = BaseOptions & { +export type ManyOptions = { id?: never where: Where -} +} & BaseOptions export type Options = ByIDOptions | ManyOptions diff --git a/packages/payload/src/collections/operations/restoreVersion.ts b/packages/payload/src/collections/operations/restoreVersion.ts index fba874a02..353e9e214 100644 --- a/packages/payload/src/collections/operations/restoreVersion.ts +++ b/packages/payload/src/collections/operations/restoreVersion.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-underscore-dangle */ import httpStatus from 'http-status' import type { FindOneArgs } from '../../database/types.js' diff --git a/packages/payload/src/collections/operations/utils.ts b/packages/payload/src/collections/operations/utils.ts index eeceb9aa3..80b747de8 100644 --- a/packages/payload/src/collections/operations/utils.ts +++ b/packages/payload/src/collections/operations/utils.ts @@ -98,7 +98,7 @@ export const buildAfterOperation = async < TOperationGeneric extends CollectionSlug, O extends keyof AfterOperationMap = keyof AfterOperationMap, >( - operationArgs: Omit, 'req'> & { operation: O }, + operationArgs: { operation: O } & Omit, 'req'>, ): Promise | any> => { const { args, collection, operation, result } = operationArgs diff --git a/packages/payload/src/config/client.ts b/packages/payload/src/config/client.ts index 76e270121..01fa5a341 100644 --- a/packages/payload/src/config/client.ts +++ b/packages/payload/src/config/client.ts @@ -34,17 +34,14 @@ export type ServerOnlyRootProperties = keyof Pick< export type ServerOnlyRootAdminProperties = keyof Pick -export type ClientConfig = Omit< - SanitizedConfig, - 'admin' | 'collections' | 'globals' | ServerOnlyRootProperties -> & { - admin: Omit & { +export type ClientConfig = { + admin: { livePreview?: Omit - } + } & Omit collections: ClientCollectionConfig[] custom?: Record globals: ClientGlobalConfig[] -} +} & Omit export const createClientConfig = async ({ config, diff --git a/packages/payload/src/config/find.ts b/packages/payload/src/config/find.ts index 637a4130c..e4745ff83 100644 --- a/packages/payload/src/config/find.ts +++ b/packages/payload/src/config/find.ts @@ -73,7 +73,6 @@ export const findConfig = (): string => { ? [configPath, outPath, srcPath, rootPath] : [configPath, srcPath, rootPath] - // eslint-disable-next-line no-restricted-syntax for (const searchPath of searchPaths) { if (!searchPath) continue diff --git a/packages/payload/src/config/types.ts b/packages/payload/src/config/types.ts index 520c53bf2..e95caf3e2 100644 --- a/packages/payload/src/config/types.ts +++ b/packages/payload/src/config/types.ts @@ -41,7 +41,6 @@ type Prettify = { [K in keyof T]: T[K] } & NonNullable -// eslint-disable-next-line no-use-before-define export type Plugin = (config: Config) => Config | Promise export type LivePreviewConfig = { @@ -347,7 +346,7 @@ export const serverProps: (keyof ServerProps)[] = [ ] export type CustomComponent = React.ComponentType< - TAdditionalProps & Partial + Partial & TAdditionalProps > export type Locale = { @@ -382,17 +381,17 @@ export type BaseLocalizationConfig = { } export type LocalizationConfigWithNoLabels = Prettify< - BaseLocalizationConfig & { + { /** * List of supported locales * @example `["en", "es", "fr", "nl", "de", "jp"]` */ locales: string[] - } + } & BaseLocalizationConfig > export type LocalizationConfigWithLabels = Prettify< - BaseLocalizationConfig & { + { /** * List of supported locales with labels * @example { @@ -402,17 +401,17 @@ export type LocalizationConfigWithLabels = Prettify< * } */ locales: Locale[] - } + } & BaseLocalizationConfig > export type SanitizedLocalizationConfig = Prettify< - LocalizationConfigWithLabels & { + { /** * List of supported locales * @example `["en", "es", "fr", "nl", "de", "jp"]` */ localeCodes: string[] - } + } & LocalizationConfigWithLabels > /** @@ -547,10 +546,10 @@ export type Config = { dateFormat?: string /** If set to true, the entire Admin panel will be disabled. */ disable?: boolean - livePreview?: LivePreviewConfig & { + livePreview?: { collections?: string[] globals?: string[] - } + } & LivePreviewConfig /** Base meta data to use for the Admin Panel. Included properties are titleSuffix, ogImage, and favicon. */ meta?: MetaConfig routes?: { @@ -758,10 +757,7 @@ export type Config = { upload?: ExpressFileUploadOptions } -export type SanitizedConfig = Omit< - DeepRequired, - 'collections' | 'editor' | 'endpoint' | 'globals' | 'i18n' | 'localization' | 'upload' -> & { +export type SanitizedConfig = { collections: SanitizedCollectionConfig[] /** Default richtext editor to use for richText fields */ editor?: RichTextAdapter @@ -774,13 +770,16 @@ export type SanitizedConfig = Omit< configDir: string rawConfig: string } - upload: ExpressFileUploadOptions & { + upload: { /** * Deduped list of adapters used in the project */ adapters: string[] - } -} + } & ExpressFileUploadOptions +} & Omit< + DeepRequired, + 'collections' | 'editor' | 'endpoint' | 'globals' | 'i18n' | 'localization' | 'upload' +> export type EditConfig = | ( diff --git a/packages/payload/src/database/createDatabaseAdapter.ts b/packages/payload/src/database/createDatabaseAdapter.ts index 344593026..1879e8a10 100644 --- a/packages/payload/src/database/createDatabaseAdapter.ts +++ b/packages/payload/src/database/createDatabaseAdapter.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import type { MarkOptional } from 'ts-essentials' import type { diff --git a/packages/payload/src/database/getLocalizedPaths.ts b/packages/payload/src/database/getLocalizedPaths.ts index 453146db3..f920b7435 100644 --- a/packages/payload/src/database/getLocalizedPaths.ts +++ b/packages/payload/src/database/getLocalizedPaths.ts @@ -129,7 +129,6 @@ export async function getLocalizedPaths({ if (nestedPathToQuery) { const relatedCollection = payload.collections[matchedField.relationTo].config - // eslint-disable-next-line no-await-in-loop const remainingPaths = await getLocalizedPaths({ collectionSlug: relatedCollection.slug, fields: relatedCollection.fields, diff --git a/packages/payload/src/database/migrations/createMigration.ts b/packages/payload/src/database/migrations/createMigration.ts index 17266c107..423141873 100644 --- a/packages/payload/src/database/migrations/createMigration.ts +++ b/packages/payload/src/database/migrations/createMigration.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-restricted-syntax, no-await-in-loop */ import fs from 'fs' import type { CreateMigration } from '../types.js' diff --git a/packages/payload/src/database/migrations/migrate.ts b/packages/payload/src/database/migrations/migrate.ts index 505345b6a..2bddddf3a 100644 --- a/packages/payload/src/database/migrations/migrate.ts +++ b/packages/payload/src/database/migrations/migrate.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-restricted-syntax, no-await-in-loop */ import type { PayloadRequest } from '../../types/index.js' import type { BaseDatabaseAdapter } from '../types.js' @@ -23,7 +22,7 @@ export async function migrate(this: BaseDatabaseAdapter): Promise { // Run migration if not found in database if (existingMigration) { - continue // eslint-disable-line no-continue + continue } const start = Date.now() diff --git a/packages/payload/src/database/migrations/migrateDown.ts b/packages/payload/src/database/migrations/migrateDown.ts index d7f121025..352a765b3 100644 --- a/packages/payload/src/database/migrations/migrateDown.ts +++ b/packages/payload/src/database/migrations/migrateDown.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-restricted-syntax, no-await-in-loop */ import type { PayloadRequest } from '../../types/index.js' import type { BaseDatabaseAdapter } from '../types.js' diff --git a/packages/payload/src/database/migrations/migrateRefresh.ts b/packages/payload/src/database/migrations/migrateRefresh.ts index 363b31fde..82d90191d 100644 --- a/packages/payload/src/database/migrations/migrateRefresh.ts +++ b/packages/payload/src/database/migrations/migrateRefresh.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-restricted-syntax, no-await-in-loop */ import type { PayloadRequest } from '../../types/index.js' import type { BaseDatabaseAdapter } from '../types.js' diff --git a/packages/payload/src/database/migrations/migrateReset.ts b/packages/payload/src/database/migrations/migrateReset.ts index 6a40bb1d0..070a35716 100644 --- a/packages/payload/src/database/migrations/migrateReset.ts +++ b/packages/payload/src/database/migrations/migrateReset.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-restricted-syntax, no-await-in-loop */ import type { PayloadRequest } from '../../types/index.js' import type { BaseDatabaseAdapter } from '../types.js' diff --git a/packages/payload/src/database/migrations/migrateStatus.ts b/packages/payload/src/database/migrations/migrateStatus.ts index dd6525ff2..3a717fee8 100644 --- a/packages/payload/src/database/migrations/migrateStatus.ts +++ b/packages/payload/src/database/migrations/migrateStatus.ts @@ -25,7 +25,7 @@ export async function migrateStatus(this: BaseDatabaseAdapter): Promise { const existingMigration = existingMigrations.find((m) => m.name === migration.name) return { Name: migration.name, - // eslint-disable-next-line perfectionist/sort-objects + Batch: existingMigration?.batch, Ran: existingMigration ? 'Yes' : 'No', } diff --git a/packages/payload/src/database/queryValidation/validateQueryPaths.ts b/packages/payload/src/database/queryValidation/validateQueryPaths.ts index 302102313..1639fb425 100644 --- a/packages/payload/src/database/queryValidation/validateQueryPaths.ts +++ b/packages/payload/src/database/queryValidation/validateQueryPaths.ts @@ -1,8 +1,6 @@ -/* eslint-disable no-restricted-syntax */ import type { SanitizedCollectionConfig } from '../../collections/config/types.js' import type { Field, FieldAffectingData } from '../../fields/config/types.js' import type { SanitizedGlobalConfig } from '../../globals/config/types.js' -/* eslint-disable no-await-in-loop */ import type { Operator, PayloadRequest, Where, WhereField } from '../../types/index.js' import type { EntityPolicies } from './types.js' diff --git a/packages/payload/src/database/queryValidation/validateSearchParams.ts b/packages/payload/src/database/queryValidation/validateSearchParams.ts index 6709a6a91..f18845834 100644 --- a/packages/payload/src/database/queryValidation/validateSearchParams.ts +++ b/packages/payload/src/database/queryValidation/validateSearchParams.ts @@ -51,10 +51,8 @@ export async function validateSearchParam({ const { slug } = collectionConfig || globalConfig if (globalConfig && !policies.globals[slug]) { - // eslint-disable-next-line no-param-reassign globalConfig.fields = fields - // eslint-disable-next-line no-param-reassign policies.globals[slug] = await getEntityPolicies({ type: 'global', entity: globalConfig, @@ -85,7 +83,6 @@ export async function validateSearchParam({ if (!overrideAccess && fieldAffectsData(field)) { if (collectionSlug) { if (!policies.collections[collectionSlug]) { - // eslint-disable-next-line no-param-reassign policies.collections[collectionSlug] = await getEntityPolicies({ type: 'collection', entity: req.payload.collections[collectionSlug].config, diff --git a/packages/payload/src/database/types.ts b/packages/payload/src/database/types.ts index 28096296f..b0a92ba56 100644 --- a/packages/payload/src/database/types.ts +++ b/packages/payload/src/database/types.ts @@ -222,17 +222,17 @@ type BaseVersionArgs = { where?: Where } -export type FindVersionsArgs = BaseVersionArgs & { +export type FindVersionsArgs = { collection: string -} +} & BaseVersionArgs export type FindVersions = ( args: FindVersionsArgs, ) => Promise>> -export type FindGlobalVersionsArgs = BaseVersionArgs & { +export type FindGlobalVersionsArgs = { global: string -} +} & BaseVersionArgs export type FindGlobalArgs = { locale?: string @@ -395,10 +395,10 @@ export type DeleteManyArgs = { export type DeleteMany = (args: DeleteManyArgs) => Promise -export type Migration = MigrationData & { +export type Migration = { down: ({ payload, req }: { payload: Payload; req: PayloadRequest }) => Promise up: ({ payload, req }: { payload: Payload; req: PayloadRequest }) => Promise -} +} & MigrationData export type MigrationData = { batch?: number diff --git a/packages/payload/src/errors/APIError.ts b/packages/payload/src/errors/APIError.ts index eb77ec156..369f17869 100644 --- a/packages/payload/src/errors/APIError.ts +++ b/packages/payload/src/errors/APIError.ts @@ -1,4 +1,3 @@ -/* eslint-disable max-classes-per-file */ import httpStatus from 'http-status' class ExtendableError extends Error { diff --git a/packages/payload/src/exports/shared.ts b/packages/payload/src/exports/shared.ts index bc03fb8f6..e4c429bed 100644 --- a/packages/payload/src/exports/shared.ts +++ b/packages/payload/src/exports/shared.ts @@ -1,7 +1,5 @@ -export * from '../fields/validations.js' export { defaults as collectionDefaults } from '../collections/config/defaults.js' export { serverProps } from '../config/types.js' - export { fieldAffectsData, fieldHasMaxDepth, @@ -19,6 +17,8 @@ export { valueIsValueWithRelation, } from '../fields/config/types.js' +export * from '../fields/validations.js' + export { validOperators } from '../types/constants.js' export { formatFilesize } from '../uploads/formatFilesize.js' diff --git a/packages/payload/src/fields/config/sanitize.spec.ts b/packages/payload/src/fields/config/sanitize.spec.ts index 9007f3638..623aabbe8 100644 --- a/packages/payload/src/fields/config/sanitize.spec.ts +++ b/packages/payload/src/fields/config/sanitize.spec.ts @@ -1,6 +1,4 @@ -import { Config } from '../../config/types.js' -import { InvalidFieldName, InvalidFieldRelationship, MissingFieldType } from '../../errors/index.js' -import { sanitizeFields } from './sanitize.js' +import type { Config } from '../../config/types.js' import type { ArrayField, Block, @@ -11,14 +9,17 @@ import type { TextField, } from './types.js' +import { InvalidFieldName, InvalidFieldRelationship, MissingFieldType } from '../../errors/index.js' +import { sanitizeFields } from './sanitize.js' + describe('sanitizeFields', () => { const config = {} as Config it('should throw on missing type field', async () => { const fields: Field[] = [ // @ts-expect-error { - label: 'some-collection', name: 'Some Collection', + label: 'some-collection', }, ] await expect(async () => { @@ -32,9 +33,9 @@ describe('sanitizeFields', () => { it('should throw on invalid field name', async () => { const fields: Field[] = [ { - label: 'some.collection', name: 'some.collection', type: 'text', + label: 'some.collection', }, ] await expect(async () => { @@ -68,9 +69,9 @@ describe('sanitizeFields', () => { it('should allow auto-label override', async () => { const fields: Field[] = [ { - label: 'Do not label', name: 'someField', type: 'text', + label: 'Do not label', }, ] const sanitizedField = ( @@ -89,9 +90,9 @@ describe('sanitizeFields', () => { it('should allow label opt-out', async () => { const fields: Field[] = [ { - label: false, name: 'someField', type: 'text', + label: false, }, ] const sanitizedField = ( @@ -108,6 +109,8 @@ describe('sanitizeFields', () => { it('should allow label opt-out for arrays', async () => { const arrayField: ArrayField = { + name: 'items', + type: 'array', fields: [ { name: 'itemName', @@ -115,8 +118,6 @@ describe('sanitizeFields', () => { }, ], label: false, - name: 'items', - type: 'array', } const sanitizedField = ( await sanitizeFields({ @@ -133,20 +134,20 @@ describe('sanitizeFields', () => { it('should allow label opt-out for blocks', async () => { const fields: Field[] = [ { + name: 'noLabelBlock', + type: 'blocks', blocks: [ { + slug: 'number', fields: [ { name: 'testNumber', type: 'number', }, ], - slug: 'number', }, ], label: false, - name: 'noLabelBlock', - type: 'blocks', }, ] const sanitizedField = ( @@ -166,14 +167,14 @@ describe('sanitizeFields', () => { it('should label arrays with plural and singular', async () => { const fields: Field[] = [ { + name: 'items', + type: 'array', fields: [ { name: 'itemName', type: 'text', }, ], - name: 'items', - type: 'array', }, ] const sanitizedField = ( @@ -192,14 +193,14 @@ describe('sanitizeFields', () => { it('should label blocks with plural and singular', async () => { const fields: Field[] = [ { - blocks: [ - { - fields: [{ name: 'testNumber', type: 'number' }], - slug: 'number', - }, - ], name: 'specialBlock', type: 'blocks', + blocks: [ + { + slug: 'number', + fields: [{ name: 'testNumber', type: 'number' }], + }, + ], }, ] const sanitizedField = ( @@ -225,10 +226,10 @@ describe('sanitizeFields', () => { const validRelationships = ['some-collection'] const fields: Field[] = [ { - label: 'my-relationship', name: 'My Relationship', - relationTo: 'some-collection', type: 'relationship', + label: 'my-relationship', + relationTo: 'some-collection', }, ] await expect(async () => { @@ -240,10 +241,10 @@ describe('sanitizeFields', () => { const validRelationships = ['some-collection', 'another-collection'] const fields: Field[] = [ { - label: 'my-relationship', name: 'My Relationship', - relationTo: ['some-collection', 'another-collection'], type: 'relationship', + label: 'my-relationship', + relationTo: ['some-collection', 'another-collection'], }, ] await expect(async () => { @@ -254,22 +255,22 @@ describe('sanitizeFields', () => { it('should not throw on valid relationship inside blocks', async () => { const validRelationships = ['some-collection'] const relationshipBlock: Block = { + slug: 'relationshipBlock', fields: [ { - label: 'my-relationship', name: 'My Relationship', - relationTo: 'some-collection', type: 'relationship', + label: 'my-relationship', + relationTo: 'some-collection', }, ], - slug: 'relationshipBlock', } const fields: Field[] = [ { - blocks: [relationshipBlock], - label: 'Layout Blocks', name: 'layout', type: 'blocks', + blocks: [relationshipBlock], + label: 'Layout Blocks', }, ] await expect(async () => { @@ -281,10 +282,10 @@ describe('sanitizeFields', () => { const validRelationships = ['some-collection'] const fields: Field[] = [ { - label: 'my-relationship', name: 'My Relationship', - relationTo: 'not-valid', type: 'relationship', + label: 'my-relationship', + relationTo: 'not-valid', }, ] await expect(async () => { @@ -296,10 +297,10 @@ describe('sanitizeFields', () => { const validRelationships = ['some-collection', 'another-collection'] const fields: Field[] = [ { - label: 'my-relationship', name: 'My Relationship', - relationTo: ['some-collection', 'not-valid'], type: 'relationship', + label: 'my-relationship', + relationTo: ['some-collection', 'not-valid'], }, ] await expect(async () => { @@ -310,22 +311,22 @@ describe('sanitizeFields', () => { it('should throw on invalid relationship inside blocks', async () => { const validRelationships = ['some-collection'] const relationshipBlock: Block = { + slug: 'relationshipBlock', fields: [ { - label: 'my-relationship', name: 'My Relationship', - relationTo: 'not-valid', type: 'relationship', + label: 'my-relationship', + relationTo: 'not-valid', }, ], - slug: 'relationshipBlock', } const fields: Field[] = [ { - blocks: [relationshipBlock], - label: 'Layout Blocks', name: 'layout', type: 'blocks', + blocks: [relationshipBlock], + label: 'Layout Blocks', }, ] await expect(async () => { @@ -337,8 +338,8 @@ describe('sanitizeFields', () => { const fields: Field[] = [ { name: 'My Checkbox', - required: true, type: 'checkbox', + required: true, }, ] diff --git a/packages/payload/src/fields/config/types.ts b/packages/payload/src/fields/config/types.ts index bd2723373..6883982c6 100644 --- a/packages/payload/src/fields/config/types.ts +++ b/packages/payload/src/fields/config/types.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable no-use-before-define */ + import type { EditorProps } from '@monaco-editor/react' import type { CSSProperties } from 'react' @@ -241,8 +241,8 @@ export interface FieldBase { validate?: Validate } -export type NumberField = FieldBase & { - admin?: Admin & { +export type NumberField = { + admin?: { /** Set this property to a string that will be used for browser autocomplete. */ autoComplete?: string components?: { @@ -255,33 +255,34 @@ export type NumberField = FieldBase & { placeholder?: Record | string /** Set a value for the number field to increment / decrement using browser controls. */ step?: number - } + } & Admin /** Maximum value accepted. Used in the default `validation` function. */ max?: number /** Minimum value accepted. Used in the default `validation` function. */ min?: number type: 'number' } & ( - | { - /** Makes this field an ordered array of numbers instead of just a single number. */ - hasMany: true - /** Maximum number of numbers in the numbers array, if `hasMany` is set to true. */ - maxRows?: number - /** Minimum number of numbers in the numbers array, if `hasMany` is set to true. */ - minRows?: number - } - | { - /** Makes this field an ordered array of numbers instead of just a single number. */ - hasMany?: false | undefined - /** Maximum number of numbers in the numbers array, if `hasMany` is set to true. */ - maxRows?: undefined - /** Minimum number of numbers in the numbers array, if `hasMany` is set to true. */ - minRows?: undefined - } - ) + | { + /** Makes this field an ordered array of numbers instead of just a single number. */ + hasMany: true + /** Maximum number of numbers in the numbers array, if `hasMany` is set to true. */ + maxRows?: number + /** Minimum number of numbers in the numbers array, if `hasMany` is set to true. */ + minRows?: number + } + | { + /** Makes this field an ordered array of numbers instead of just a single number. */ + hasMany?: false | undefined + /** Maximum number of numbers in the numbers array, if `hasMany` is set to true. */ + maxRows?: undefined + /** Minimum number of numbers in the numbers array, if `hasMany` is set to true. */ + minRows?: undefined + } +) & + FieldBase -export type TextField = FieldBase & { - admin?: Admin & { +export type TextField = { + admin?: { autoComplete?: string components?: { Error?: CustomComponent @@ -291,31 +292,32 @@ export type TextField = FieldBase & { } placeholder?: Record | string rtl?: boolean - } + } & Admin maxLength?: number minLength?: number type: 'text' } & ( - | { - /** Makes this field an ordered array of strings instead of just a single string. */ - hasMany: true - /** Maximum number of strings in the strings array, if `hasMany` is set to true. */ - maxRows?: number - /** Minimum number of strings in the strings array, if `hasMany` is set to true. */ - minRows?: number - } - | { - /** Makes this field an ordered array of strings instead of just a single string. */ - hasMany?: false | undefined - /** Maximum number of strings in the strings array, if `hasMany` is set to true. */ - maxRows?: undefined - /** Minimum number of strings in the strings array, if `hasMany` is set to true. */ - minRows?: undefined - } - ) + | { + /** Makes this field an ordered array of strings instead of just a single string. */ + hasMany: true + /** Maximum number of strings in the strings array, if `hasMany` is set to true. */ + maxRows?: number + /** Minimum number of strings in the strings array, if `hasMany` is set to true. */ + minRows?: number + } + | { + /** Makes this field an ordered array of strings instead of just a single string. */ + hasMany?: false | undefined + /** Maximum number of strings in the strings array, if `hasMany` is set to true. */ + maxRows?: undefined + /** Minimum number of strings in the strings array, if `hasMany` is set to true. */ + minRows?: undefined + } +) & + FieldBase -export type EmailField = FieldBase & { - admin?: Admin & { +export type EmailField = { + admin?: { autoComplete?: string components?: { Error?: CustomComponent @@ -324,12 +326,12 @@ export type EmailField = FieldBase & { beforeInput?: CustomComponent[] } placeholder?: Record | string - } + } & Admin type: 'email' -} +} & FieldBase -export type TextareaField = FieldBase & { - admin?: Admin & { +export type TextareaField = { + admin?: { components?: { Error?: CustomComponent Label?: CustomComponent @@ -339,26 +341,26 @@ export type TextareaField = FieldBase & { placeholder?: Record | string rows?: number rtl?: boolean - } + } & Admin maxLength?: number minLength?: number type: 'textarea' -} +} & FieldBase -export type CheckboxField = FieldBase & { - admin?: Admin & { +export type CheckboxField = { + admin?: { components?: { Error?: CustomComponent Label?: CustomComponent afterInput?: CustomComponent[] beforeInput?: CustomComponent[] } - } + } & Admin type: 'checkbox' -} +} & FieldBase -export type DateField = FieldBase & { - admin?: Admin & { +export type DateField = { + admin?: { components?: { Error?: CustomComponent Label?: CustomComponent @@ -367,14 +369,14 @@ export type DateField = FieldBase & { } date?: ConditionalDateProps placeholder?: Record | string - } + } & Admin type: 'date' -} +} & FieldBase -export type GroupField = Omit & { - admin?: Admin & { +export type GroupField = { + admin?: { hideGutter?: boolean - } + } & Admin fields: Field[] /** Customize generated GraphQL and Typescript schema names. * By default, it is bound to the collection. @@ -384,47 +386,48 @@ export type GroupField = Omit & { */ interfaceName?: string type: 'group' -} +} & Omit export type RowAdmin = Omit -export type RowField = Omit & { +export type RowField = { admin?: RowAdmin fields: Field[] type: 'row' -} +} & Omit -export type CollapsibleField = Omit & { +export type CollapsibleField = { fields: Field[] type: 'collapsible' } & ( - | { - admin: Admin & { - components: { - RowLabel: RowLabelComponent - } & Admin['components'] - initCollapsed?: boolean - } - label?: Required - } - | { - admin?: Admin & { - initCollapsed?: boolean - } - label: Required - } - ) + | { + admin: { + components: { + RowLabel: RowLabelComponent + } & Admin['components'] + initCollapsed?: boolean + } & Admin + label?: Required + } + | { + admin?: { + initCollapsed?: boolean + } & Admin + label: Required + } +) & + Omit export type TabsAdmin = Omit -type TabBase = Omit & { +type TabBase = { description?: Description fields: Field[] interfaceName?: string saveToJWT?: boolean | string -} +} & Omit -export type NamedTab = TabBase & { +export type NamedTab = { /** Customize generated GraphQL and Typescript schema names. * The slug is used by default. * @@ -432,9 +435,9 @@ export type NamedTab = TabBase & { * **Note**: Top level types can collide, ensure they are unique amongst collections, arrays, groups, blocks, tabs. */ interfaceName?: string -} +} & TabBase -export type UnnamedTab = Omit & { +export type UnnamedTab = { interfaceName?: never /** * Can be either: @@ -448,20 +451,20 @@ export type UnnamedTab = Omit & { | LabelFunction | string localized?: never -} +} & Omit export type Tab = NamedTab | UnnamedTab -export type TabsField = Omit & { +export type TabsField = { admin?: TabsAdmin tabs: Tab[] type: 'tabs' -} +} & Omit -export type TabAsField = Tab & { +export type TabAsField = { name?: string type: 'tab' -} +} & Tab export type UIField = { admin: { @@ -492,7 +495,7 @@ export type UIField = { type: 'ui' } -export type UploadField = FieldBase & { +export type UploadField = { admin?: { components?: { Error?: CustomComponent @@ -508,33 +511,33 @@ export type UploadField = FieldBase & { maxDepth?: number relationTo: CollectionSlug type: 'upload' -} +} & FieldBase -type CodeAdmin = Admin & { +type CodeAdmin = { components?: { Error?: CustomComponent Label?: CustomComponent } editorOptions?: EditorProps['options'] language?: string -} +} & Admin -export type CodeField = Omit & { +export type CodeField = { admin?: CodeAdmin maxLength?: number minLength?: number type: 'code' -} +} & Omit -type JSONAdmin = Admin & { +type JSONAdmin = { components?: { Error?: CustomComponent Label?: CustomComponent } editorOptions?: EditorProps['options'] -} +} & Admin -export type JSONField = Omit & { +export type JSONField = { admin?: JSONAdmin jsonSchema?: { fileMatch: string[] @@ -542,17 +545,17 @@ export type JSONField = Omit & { uri: string } type: 'json' -} +} & Omit -export type SelectField = FieldBase & { - admin?: Admin & { +export type SelectField = { + admin?: { components?: { Error?: CustomComponent Label?: CustomComponent } isClearable?: boolean isSortable?: boolean - } + } & Admin /** * Customize the SQL table name */ @@ -564,9 +567,9 @@ export type SelectField = FieldBase & { hasMany?: boolean options: Option[] type: 'select' -} +} & FieldBase -type SharedRelationshipProperties = FieldBase & { +type SharedRelationshipProperties = { filterOptions?: FilterOptions hasMany?: boolean /** @@ -577,54 +580,55 @@ type SharedRelationshipProperties = FieldBase & { maxDepth?: number type: 'relationship' } & ( - | { - hasMany: true - /** - * @deprecated Use 'maxRows' instead - */ - max?: number - maxRows?: number - /** - * @deprecated Use 'minRows' instead - */ - min?: number - minRows?: number - } - | { - hasMany?: false | undefined - /** - * @deprecated Use 'maxRows' instead - */ - max?: undefined - maxRows?: undefined - /** - * @deprecated Use 'minRows' instead - */ - min?: undefined - minRows?: undefined - } - ) + | { + hasMany: true + /** + * @deprecated Use 'maxRows' instead + */ + max?: number + maxRows?: number + /** + * @deprecated Use 'minRows' instead + */ + min?: number + minRows?: number + } + | { + hasMany?: false | undefined + /** + * @deprecated Use 'maxRows' instead + */ + max?: undefined + maxRows?: undefined + /** + * @deprecated Use 'minRows' instead + */ + min?: undefined + minRows?: undefined + } +) & + FieldBase -type RelationshipAdmin = Admin & { +type RelationshipAdmin = { allowCreate?: boolean components?: { Error?: CustomComponent Label?: CustomComponent } isSortable?: boolean -} -export type PolymorphicRelationshipField = SharedRelationshipProperties & { - admin?: RelationshipAdmin & { +} & Admin +export type PolymorphicRelationshipField = { + admin?: { sortOptions?: { [collectionSlug: CollectionSlug]: string } - } + } & RelationshipAdmin relationTo: CollectionSlug[] -} -export type SingleRelationshipField = SharedRelationshipProperties & { - admin?: RelationshipAdmin & { +} & SharedRelationshipProperties +export type SingleRelationshipField = { + admin?: { sortOptions?: string - } + } & RelationshipAdmin relationTo: CollectionSlug -} +} & SharedRelationshipProperties export type RelationshipField = PolymorphicRelationshipField | SingleRelationshipField export type ValueWithRelation = { @@ -646,13 +650,13 @@ export type RichTextField< Value extends object = any, AdapterProps = any, ExtraProperties = object, -> = FieldBase & { - admin?: Admin & { +> = { + admin?: { components?: { Error?: CustomComponent Label?: CustomComponent } - } + } & Admin editor?: | RichTextAdapter | RichTextAdapterProvider @@ -663,10 +667,11 @@ export type RichTextField< */ maxDepth?: number type: 'richText' -} & ExtraProperties +} & ExtraProperties & + FieldBase -export type ArrayField = FieldBase & { - admin?: Admin & { +export type ArrayField = { + admin?: { components?: { RowLabel?: RowLabelComponent } & Admin['components'] @@ -675,7 +680,7 @@ export type ArrayField = FieldBase & { * Disable drag and drop sorting */ isSortable?: boolean - } + } & Admin /** * Customize the SQL table name */ @@ -692,16 +697,16 @@ export type ArrayField = FieldBase & { maxRows?: number minRows?: number type: 'array' -} +} & FieldBase -export type RadioField = FieldBase & { - admin?: Admin & { +export type RadioField = { + admin?: { components?: { Error?: CustomComponent Label?: CustomComponent } layout?: 'horizontal' | 'vertical' - } + } & Admin /** * Customize the SQL table name */ @@ -712,7 +717,7 @@ export type RadioField = FieldBase & { enumName?: DBIdentifierName options: Option[] type: 'radio' -} +} & FieldBase export type Block = { admin?: { @@ -743,25 +748,25 @@ export type Block = { slug: string } -export type BlockField = FieldBase & { - admin?: Admin & { +export type BlockField = { + admin?: { initCollapsed?: boolean /** * Disable drag and drop sorting */ isSortable?: boolean - } + } & Admin blocks: Block[] defaultValue?: unknown labels?: Labels maxRows?: number minRows?: number type: 'blocks' -} +} & FieldBase -export type PointField = FieldBase & { +export type PointField = { type: 'point' -} +} & FieldBase export type Field = | ArrayField @@ -828,9 +833,9 @@ export type NonPresentationalField = | TextareaField | UploadField -export type FieldWithPath = Field & { +export type FieldWithPath = { path?: string -} +} & Field export type FieldWithSubFields = ArrayField | CollapsibleField | GroupField | RowField diff --git a/packages/payload/src/fields/hooks/afterChange/promise.ts b/packages/payload/src/fields/hooks/afterChange/promise.ts index 6af7cd845..a0f43b486 100644 --- a/packages/payload/src/fields/hooks/afterChange/promise.ts +++ b/packages/payload/src/fields/hooks/afterChange/promise.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import type { RichTextAdapter } from '../../../admin/RichText.js' import type { SanitizedCollectionConfig } from '../../../collections/config/types.js' import type { SanitizedGlobalConfig } from '../../../globals/config/types.js' diff --git a/packages/payload/src/fields/hooks/afterRead/promise.ts b/packages/payload/src/fields/hooks/afterRead/promise.ts index 3a60aa715..c38beff64 100644 --- a/packages/payload/src/fields/hooks/afterRead/promise.ts +++ b/packages/payload/src/fields/hooks/afterRead/promise.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import type { RichTextAdapter } from '../../../admin/RichText.js' import type { SanitizedCollectionConfig } from '../../../collections/config/types.js' import type { SanitizedGlobalConfig } from '../../../globals/config/types.js' diff --git a/packages/payload/src/fields/hooks/beforeValidate/promise.ts b/packages/payload/src/fields/hooks/beforeValidate/promise.ts index b569afe5a..b1553b31f 100644 --- a/packages/payload/src/fields/hooks/beforeValidate/promise.ts +++ b/packages/payload/src/fields/hooks/beforeValidate/promise.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import type { RichTextAdapter } from '../../../admin/RichText.js' import type { SanitizedCollectionConfig } from '../../../collections/config/types.js' import type { SanitizedGlobalConfig } from '../../../globals/config/types.js' diff --git a/packages/payload/src/fields/validations.spec.ts b/packages/payload/src/fields/validations.spec.ts index f3331e7c4..bda65e215 100644 --- a/packages/payload/src/fields/validations.spec.ts +++ b/packages/payload/src/fields/validations.spec.ts @@ -1,6 +1,7 @@ -import type { ValidateOptions } from './config/types.js' import { jest } from '@jest/globals' +import type { ValidateOptions } from './config/types.js' + import { number, password, point, relationship, select, text, textarea } from './validations.js' const t = jest.fn((string) => string) @@ -8,9 +9,7 @@ const t = jest.fn((string) => string) let options: ValidateOptions = { data: undefined, operation: 'create', - siblingData: undefined, req: { - t, context: {}, payload: { config: { @@ -20,7 +19,9 @@ let options: ValidateOptions = { }, }, }, + t, }, + siblingData: undefined, } describe('Field Validations', () => { @@ -216,32 +217,32 @@ describe('Field Validations', () => { describe('relationship', () => { const relationCollection = { + slug: 'relation', fields: [ { name: 'id', type: 'text', }, ], - slug: 'relation', } const relationshipOptions = { ...options, + relationTo: 'relation', req: { ...options.req, payload: { ...options.req.payload, - config: { - collections: [relationCollection], - }, collections: { relation: { config: relationCollection, }, }, + config: { + collections: [relationCollection], + }, }, }, - relationTo: 'relation', } it('should handle required', async () => { const val = undefined @@ -292,8 +293,8 @@ describe('Field Validations', () => { describe('select', () => { const selectOptions = { ...options, - options: ['one', 'two', 'three'], type: 'select', + options: ['one', 'two', 'three'], } const optionsRequired = { ...selectOptions, diff --git a/packages/payload/src/fields/validations.ts b/packages/payload/src/fields/validations.ts index c1bd2aaea..af4050f93 100644 --- a/packages/payload/src/fields/validations.ts +++ b/packages/payload/src/fields/validations.ts @@ -168,7 +168,7 @@ export const code: Validate = ( return true } -export const json: Validate = async ( +export const json: Validate = async ( value, { jsonError, jsonSchema, req: { t }, required }, ) => { @@ -250,7 +250,6 @@ export const date: Validate = ( { req: { t }, required }, ) => { if (value && !isNaN(Date.parse(value.toString()))) { - /* eslint-disable-line */ return true } diff --git a/packages/payload/src/globals/config/client.ts b/packages/payload/src/globals/config/client.ts index dc3b12c69..2c65d75d8 100644 --- a/packages/payload/src/globals/config/client.ts +++ b/packages/payload/src/globals/config/client.ts @@ -19,18 +19,15 @@ export type ServerOnlyGlobalAdminProperties = keyof Pick< 'components' | 'hidden' | 'preview' > -export type ClientGlobalConfig = Omit< - SanitizedGlobalConfig, - 'admin' | 'fields' | ServerOnlyGlobalProperties -> & { - admin: Omit< - SanitizedGlobalConfig['admin'], - ServerOnlyGlobalAdminProperties & 'fields' & 'livePreview' - > & { +export type ClientGlobalConfig = { + admin: { livePreview?: Omit - } + } & Omit< + SanitizedGlobalConfig['admin'], + 'fields' & 'livePreview' & ServerOnlyGlobalAdminProperties + > fields: ClientFieldConfig[] -} +} & Omit export const createClientGlobalConfig = ({ global, diff --git a/packages/payload/src/globals/operations/findVersionByID.ts b/packages/payload/src/globals/operations/findVersionByID.ts index 6cd2710d1..7bc29606f 100644 --- a/packages/payload/src/globals/operations/findVersionByID.ts +++ b/packages/payload/src/globals/operations/findVersionByID.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-underscore-dangle */ import type { FindGlobalVersionsArgs } from '../../database/types.js' import type { PayloadRequest } from '../../types/index.js' import type { TypeWithVersion } from '../../versions/types.js' diff --git a/packages/payload/src/index.ts b/packages/payload/src/index.ts index 58c15a013..856e0ee69 100644 --- a/packages/payload/src/index.ts +++ b/packages/payload/src/index.ts @@ -83,7 +83,7 @@ export interface GeneratedTypes { } } collectionsUntyped: { - [slug: string]: TypeWithID & Record + [slug: string]: Record & TypeWithID } globalsUntyped: { [slug: string]: Record @@ -293,7 +293,7 @@ export class BasePayload { login = async ( options: LoginOptions, - ): Promise }> => { + ): Promise<{ user: DataFromCollectionSlug } & LoginResult> => { const { login } = localOperations.auth return login(this, options) } @@ -632,7 +632,6 @@ export default initialized let cached = global._payload if (!cached) { - // eslint-disable-next-line no-multi-assign cached = global._payload = { payload: null, promise: null } } @@ -669,14 +668,52 @@ export interface DatabaseAdapter extends BaseDatabaseAdapter {} export type { Payload, RequestContext } -export * from './types/index.js' +export type { FieldTypes } from './admin/forms/FieldTypes.js' export type * from './admin/types.js' -export type * from './uploads/types.js' +export { default as executeAccess } from './auth/executeAccess.js' + +export { executeAuthStrategies } from './auth/executeAuthStrategies.js' + +export { getAccessResults } from './auth/getAccessResults.js' + +export { getFieldsToSign } from './auth/getFieldsToSign.js' + +export * from './auth/index.js' + +export { accessOperation } from './auth/operations/access.js' +export { forgotPasswordOperation } from './auth/operations/forgotPassword.js' +export { initOperation } from './auth/operations/init.js' + +export { loginOperation } from './auth/operations/login.js' + +export { logoutOperation } from './auth/operations/logout.js' export type { MeOperationResult } from './auth/operations/me.js' +export { meOperation } from './auth/operations/me.js' +export { refreshOperation } from './auth/operations/refresh.js' + +export { registerFirstUserOperation } from './auth/operations/registerFirstUser.js' +export { resetPasswordOperation } from './auth/operations/resetPassword.js' +export { unlockOperation } from './auth/operations/unlock.js' +export { verifyEmailOperation } from './auth/operations/verifyEmail.js' + +export type { + AuthStrategyFunction, + AuthStrategyFunctionArgs, + CollectionPermission, + DocumentPermissions, + FieldPermissions, + GlobalPermission, + IncomingAuthType, + Permission, + Permissions, + User, + VerifyConfig, +} from './auth/types.js' export type { ClientCollectionConfig } from './collections/config/client.js' +export { createClientCollectionConfig } from './collections/config/client.js' export type { AfterChangeHook as CollectionAfterChangeHook, AfterDeleteHook as CollectionAfterDeleteHook, @@ -712,9 +749,30 @@ export type { } from './collections/config/types.js' export { createDataloaderCacheKey, getDataLoader } from './collections/dataloader.js' +export { countOperation } from './collections/operations/count.js' +export { createOperation } from './collections/operations/create.js' + +export { deleteOperation } from './collections/operations/delete.js' +export { deleteByIDOperation } from './collections/operations/deleteByID.js' +export { docAccessOperation } from './collections/operations/docAccess.js' + +export { duplicateOperation } from './collections/operations/duplicate.js' + +export { findOperation } from './collections/operations/find.js' + +export { findByIDOperation } from './collections/operations/findByID.js' +export { findVersionByIDOperation } from './collections/operations/findVersionByID.js' +export { findVersionsOperation } from './collections/operations/findVersions.js' +export { restoreVersionOperation } from './collections/operations/restoreVersion.js' +export { updateOperation } from './collections/operations/update.js' +export { updateByIDOperation } from './collections/operations/updateByID.js' export { buildConfig } from './config/build.js' + export type { ClientConfig } from './config/client.js' +export { createClientConfig } from './config/client.js' +export { defaults } from './config/defaults.js' +export { sanitizeConfig } from './config/sanitize.js' export type { Access, AccessArgs, @@ -724,7 +782,85 @@ export type { EntityDescriptionFunction, SanitizedConfig, } from './config/types.js' +export * from './config/types.js' +export { combineQueries } from './database/combineQueries.js' +export { createDatabaseAdapter } from './database/createDatabaseAdapter.js' +export { default as flattenWhereToOperators } from './database/flattenWhereToOperators.js' +export { getLocalizedPaths } from './database/getLocalizedPaths.js' +export { createMigration } from './database/migrations/createMigration.js' + +export { getMigrations } from './database/migrations/getMigrations.js' +export { getPredefinedMigration } from './database/migrations/getPredefinedMigration.js' +export { migrate } from './database/migrations/migrate.js' +export { migrateDown } from './database/migrations/migrateDown.js' + +export { migrateRefresh } from './database/migrations/migrateRefresh.js' +export { migrateReset } from './database/migrations/migrateReset.js' +export { migrateStatus } from './database/migrations/migrateStatus.js' +export { migrationTemplate } from './database/migrations/migrationTemplate.js' +export { migrationsCollection } from './database/migrations/migrationsCollection.js' +export { readMigrationFiles } from './database/migrations/readMigrationFiles.js' + +export type * from './database/queryValidation/types.js' + +export type { EntityPolicies, PathToQuery } from './database/queryValidation/types.js' + +export { validateQueryPaths } from './database/queryValidation/validateQueryPaths.js' +export { validateSearchParam } from './database/queryValidation/validateSearchParams.js' +export type { + BaseDatabaseAdapter, + BeginTransaction, + CommitTransaction, + Connect, + Count, + CountArgs, + Create, + CreateArgs, + CreateGlobal, + CreateGlobalArgs, + CreateGlobalVersion, + CreateGlobalVersionArgs, + CreateMigration, + CreateVersion, + CreateVersionArgs, + DBIdentifierName, + DatabaseAdapterResult as DatabaseAdapterObj, + DeleteMany, + DeleteManyArgs, + DeleteOne, + DeleteOneArgs, + DeleteVersions, + DeleteVersionsArgs, + Destroy, + Find, + FindArgs, + FindGlobal, + FindGlobalArgs, + FindGlobalVersions, + FindGlobalVersionsArgs, + FindOne, + FindOneArgs, + FindVersions, + FindVersionsArgs, + Init, + Migration, + MigrationData, + MigrationTemplateArgs, + PaginatedDocs, + QueryDrafts, + QueryDraftsArgs, + RollbackTransaction, + Transaction, + UpdateGlobal, + UpdateGlobalArgs, + UpdateGlobalVersion, + UpdateGlobalVersionArgs, + UpdateOne, + UpdateOneArgs, + UpdateVersion, + UpdateVersionArgs, +} from './database/types.js' export type { EmailAdapter as PayloadEmailAdapter, SendEmailOptions } from './email/types.js' export { @@ -750,9 +886,11 @@ export { QueryError, ValidationError, } from './errors/index.js' - +export { baseBlockFields } from './fields/baseFields/baseBlockFields.js' +export { baseIDField } from './fields/baseFields/baseIDField.js' export type { ClientFieldConfig } from './fields/config/client.js' - +export { createClientFieldConfig } from './fields/config/client.js' +export { sanitizeFields } from './fields/config/sanitize.js' export type { ArrayField, Block, @@ -809,14 +947,16 @@ export type { ValidateOptions, ValueWithRelation, } from './fields/config/types.js' +export { default as getDefaultValue } from './fields/getDefaultValue.js' export { traverseFields as afterChangeTraverseFields } from './fields/hooks/afterChange/traverseFields.js' - export { promise as afterReadPromise } from './fields/hooks/afterRead/promise.js' export { traverseFields as afterReadTraverseFields } from './fields/hooks/afterRead/traverseFields.js' export { traverseFields as beforeChangeTraverseFields } from './fields/hooks/beforeChange/traverseFields.js' -export { traverseFields as beforeValidateTraverseFields } from './fields/hooks/beforeValidate/traverseFields.js' +export { traverseFields as beforeValidateTraverseFields } from './fields/hooks/beforeValidate/traverseFields.js' +export { default as sortableFieldTypes } from './fields/sortableFieldTypes.js' export type { ClientGlobalConfig } from './globals/config/client.js' +export { createClientGlobalConfig } from './globals/config/client.js' export type { AfterChangeHook as GlobalAfterChangeHook, AfterReadHook as GlobalAfterReadHook, @@ -828,7 +968,12 @@ export type { GlobalConfig, SanitizedGlobalConfig, } from './globals/config/types.js' - +export { docAccessOperation as docAccessOperationGlobal } from './globals/operations/docAccess.js' +export { findOneOperation } from './globals/operations/findOne.js' +export { findVersionByIDOperation as findVersionByIDOperationGlobal } from './globals/operations/findVersionByID.js' +export { findVersionsOperation as findVersionsOperationGlobal } from './globals/operations/findVersions.js' +export { restoreVersionOperation as restoreVersionOperationGlobal } from './globals/operations/restoreVersion.js' +export { updateOperation as updateOperationGlobal } from './globals/operations/update.js' export type { CollapsedPreferences, DocumentPreferences, @@ -838,210 +983,64 @@ export type { PreferenceUpdateRequest, TabsPreferences, } from './preferences/types.js' -export { getLocalI18n } from './translations/getLocalI18n.js' +export { getLocalI18n } from './translations/getLocalI18n.js' +export * from './types/index.js' +export { getFileByPath } from './uploads/getFileByPath.js' +export type * from './uploads/types.js' export { combineMerge } from './utilities/combineMerge.js' +export { commitTransaction } from './utilities/commitTransaction.js' + export { configToJSONSchema, entityToJSONSchema, fieldsToJSONSchema, withNullableJSONSchemaType, } from './utilities/configToJSONSchema.js' - export { createArrayFromCommaDelineated } from './utilities/createArrayFromCommaDelineated.js' - export { createLocalReq } from './utilities/createLocalReq.js' export { deepCopyObject } from './utilities/deepCopyObject.js' export { deepMerge } from './utilities/deepMerge.js' - export { default as flattenTopLevelFields } from './utilities/flattenTopLevelFields.js' export { formatLabels, formatNames, toWords } from './utilities/formatLabels.js' export { getCollectionIDFieldTypes } from './utilities/getCollectionIDFieldTypes.js' + export { getObjectDotNotation } from './utilities/getObjectDotNotation.js' -export { isEntityHidden } from './utilities/isEntityHidden.js' -export { isPlainObject } from './utilities/isPlainObject.js' -export { isValidID } from './utilities/isValidID.js' -export { default as isolateObjectProperty } from './utilities/isolateObjectProperty.js' -export { mapAsync } from './utilities/mapAsync.js' - -export { mergeListSearchAndWhere } from './utilities/mergeListSearchAndWhere.js' -export { buildVersionCollectionFields } from './versions/buildCollectionFields.js' -export { buildVersionGlobalFields } from './versions/buildGlobalFields.js' -export { versionDefaults } from './versions/defaults.js' -export { deleteCollectionVersions } from './versions/deleteCollectionVersions.js' -export { enforceMaxVersions } from './versions/enforceMaxVersions.js' -export { getLatestCollectionVersion } from './versions/getLatestCollectionVersion.js' -export { getLatestGlobalVersion } from './versions/getLatestGlobalVersion.js' - -export { saveVersion } from './versions/saveVersion.js' -export type { TypeWithVersion } from './versions/types.js' -export * from './config/types.js' - -export type { FieldTypes } from './admin/forms/FieldTypes.js' -export type { - AuthStrategyFunction, - AuthStrategyFunctionArgs, - CollectionPermission, - DocumentPermissions, - FieldPermissions, - GlobalPermission, - IncomingAuthType, - Permission, - Permissions, - User, - VerifyConfig, -} from './auth/types.js' -export { createClientCollectionConfig } from './collections/config/client.js' -export { createClientConfig } from './config/client.js' - -export { defaults } from './config/defaults.js' -export type { - BaseDatabaseAdapter, - BeginTransaction, - CommitTransaction, - Connect, - Count, - CountArgs, - Create, - CreateArgs, - CreateGlobal, - CreateGlobalArgs, - CreateGlobalVersion, - CreateGlobalVersionArgs, - CreateMigration, - CreateVersion, - CreateVersionArgs, - DBIdentifierName, - DatabaseAdapterResult as DatabaseAdapterObj, - DeleteMany, - DeleteManyArgs, - DeleteOne, - DeleteOneArgs, - DeleteVersions, - DeleteVersionsArgs, - Destroy, - Find, - FindArgs, - FindGlobal, - FindGlobalArgs, - FindGlobalVersions, - FindGlobalVersionsArgs, - FindOne, - FindOneArgs, - FindVersions, - FindVersionsArgs, - Init, - Migration, - MigrationData, - MigrationTemplateArgs, - PaginatedDocs, - QueryDrafts, - QueryDraftsArgs, - RollbackTransaction, - Transaction, - UpdateGlobal, - UpdateGlobalArgs, - UpdateGlobalVersion, - UpdateGlobalVersionArgs, - UpdateOne, - UpdateOneArgs, - UpdateVersion, - UpdateVersionArgs, -} from './database/types.js' -export { baseBlockFields } from './fields/baseFields/baseBlockFields.js' -export { baseIDField } from './fields/baseFields/baseIDField.js' -export { createClientFieldConfig } from './fields/config/client.js' -export { sanitizeFields } from './fields/config/sanitize.js' - -export { createClientGlobalConfig } from './globals/config/client.js' - -export type * from './database/queryValidation/types.js' - -export { accessOperation } from './auth/operations/access.js' -export { forgotPasswordOperation } from './auth/operations/forgotPassword.js' -export { initOperation } from './auth/operations/init.js' -export { loginOperation } from './auth/operations/login.js' - -export { logoutOperation } from './auth/operations/logout.js' -export { meOperation } from './auth/operations/me.js' -export { refreshOperation } from './auth/operations/refresh.js' -export { registerFirstUserOperation } from './auth/operations/registerFirstUser.js' -export { resetPasswordOperation } from './auth/operations/resetPassword.js' -export { unlockOperation } from './auth/operations/unlock.js' -export { verifyEmailOperation } from './auth/operations/verifyEmail.js' -export { countOperation } from './collections/operations/count.js' -export { createOperation } from './collections/operations/create.js' -export { deleteOperation } from './collections/operations/delete.js' -export { deleteByIDOperation } from './collections/operations/deleteByID.js' -export { docAccessOperation } from './collections/operations/docAccess.js' - -export { duplicateOperation } from './collections/operations/duplicate.js' -export { findOperation } from './collections/operations/find.js' -export { findByIDOperation } from './collections/operations/findByID.js' -export { findVersionByIDOperation } from './collections/operations/findVersionByID.js' -export { findVersionsOperation } from './collections/operations/findVersions.js' -export { restoreVersionOperation } from './collections/operations/restoreVersion.js' -export { updateOperation } from './collections/operations/update.js' -export { updateByIDOperation } from './collections/operations/updateByID.js' -export { sanitizeConfig } from './config/sanitize.js' -export type { EntityPolicies, PathToQuery } from './database/queryValidation/types.js' -export { default as getDefaultValue } from './fields/getDefaultValue.js' -export { default as sortableFieldTypes } from './fields/sortableFieldTypes.js' - -export { docAccessOperation as docAccessOperationGlobal } from './globals/operations/docAccess.js' -export { findOneOperation } from './globals/operations/findOne.js' -export { findVersionByIDOperation as findVersionByIDOperationGlobal } from './globals/operations/findVersionByID.js' -export { findVersionsOperation as findVersionsOperationGlobal } from './globals/operations/findVersions.js' -export { restoreVersionOperation as restoreVersionOperationGlobal } from './globals/operations/restoreVersion.js' -export { updateOperation as updateOperationGlobal } from './globals/operations/update.js' - -export * from './auth/index.js' -export { default as executeAccess } from './auth/executeAccess.js' -export { executeAuthStrategies } from './auth/executeAuthStrategies.js' -export { getAccessResults } from './auth/getAccessResults.js' -export { getFieldsToSign } from './auth/getFieldsToSign.js' -export { combineQueries } from './database/combineQueries.js' - -export { createDatabaseAdapter } from './database/createDatabaseAdapter.js' - -export { default as flattenWhereToOperators } from './database/flattenWhereToOperators.js' - -export { getLocalizedPaths } from './database/getLocalizedPaths.js' - -export { createMigration } from './database/migrations/createMigration.js' - -export { getMigrations } from './database/migrations/getMigrations.js' - -export { getPredefinedMigration } from './database/migrations/getPredefinedMigration.js' - -export { migrate } from './database/migrations/migrate.js' - -export { migrateDown } from './database/migrations/migrateDown.js' - -export { migrateRefresh } from './database/migrations/migrateRefresh.js' - -export { migrateReset } from './database/migrations/migrateReset.js' - -export { migrateStatus } from './database/migrations/migrateStatus.js' - -export { migrationTemplate } from './database/migrations/migrationTemplate.js' - -export { migrationsCollection } from './database/migrations/migrationsCollection.js' - -export { readMigrationFiles } from './database/migrations/readMigrationFiles.js' - -export { validateQueryPaths } from './database/queryValidation/validateQueryPaths.js' - -export { validateSearchParam } from './database/queryValidation/validateSearchParams.js' - -export { getFileByPath } from './uploads/getFileByPath.js' - -export { commitTransaction } from './utilities/commitTransaction.js' - -export { getDependencies } export { initTransaction } from './utilities/initTransaction.js' +export { isEntityHidden } from './utilities/isEntityHidden.js' + +export { isPlainObject } from './utilities/isPlainObject.js' + +export { isValidID } from './utilities/isValidID.js' + +export { default as isolateObjectProperty } from './utilities/isolateObjectProperty.js' + export { killTransaction } from './utilities/killTransaction.js' + +export { mapAsync } from './utilities/mapAsync.js' + +export { mergeListSearchAndWhere } from './utilities/mergeListSearchAndWhere.js' + +export { buildVersionCollectionFields } from './versions/buildCollectionFields.js' + +export { buildVersionGlobalFields } from './versions/buildGlobalFields.js' + +export { versionDefaults } from './versions/defaults.js' + +export { deleteCollectionVersions } from './versions/deleteCollectionVersions.js' + +export { enforceMaxVersions } from './versions/enforceMaxVersions.js' + +export { getLatestCollectionVersion } from './versions/getLatestCollectionVersion.js' + +export { getLatestGlobalVersion } from './versions/getLatestGlobalVersion.js' + +export { getDependencies } + +export { saveVersion } from './versions/saveVersion.js' + +export type { TypeWithVersion } from './versions/types.js' diff --git a/packages/payload/src/preferences/types.ts b/packages/payload/src/preferences/types.ts index b1819b961..754e55adb 100644 --- a/packages/payload/src/preferences/types.ts +++ b/packages/payload/src/preferences/types.ts @@ -8,7 +8,7 @@ export type PreferenceRequest = { user: PayloadRequest['user'] } -export type PreferenceUpdateRequest = PreferenceRequest & { value: unknown } +export type PreferenceUpdateRequest = { value: unknown } & PreferenceRequest export type CollapsedPreferences = string[] diff --git a/packages/payload/src/types/index.ts b/packages/payload/src/types/index.ts index 92719317a..72042eb23 100644 --- a/packages/payload/src/types/index.ts +++ b/packages/payload/src/types/index.ts @@ -78,10 +78,10 @@ type PayloadRequestData = { tempFilePath?: string } } -export type PayloadRequest = Partial & - Required> & - CustomPayloadRequestProperties & - PayloadRequestData +export type PayloadRequest = CustomPayloadRequestProperties & + Partial & + PayloadRequestData & + Required> export interface RequestContext { [key: string]: unknown diff --git a/packages/payload/src/uploads/deleteAssociatedFiles.ts b/packages/payload/src/uploads/deleteAssociatedFiles.ts index 0cb8dbd58..b4ce6d3db 100644 --- a/packages/payload/src/uploads/deleteAssociatedFiles.ts +++ b/packages/payload/src/uploads/deleteAssociatedFiles.ts @@ -43,11 +43,10 @@ export const deleteAssociatedFiles: (args: Args) => Promise = async ({ // Since forEach will not wait until unlink is finished it could // happen that two operations will try to delete the same file. // To avoid this it is recommended to use "sync" instead - // eslint-disable-next-line no-restricted-syntax + for (const size of sizes) { const sizeToDelete = `${staticPath}/${size.filename}` try { - // eslint-disable-next-line no-await-in-loop if (await fileExists(sizeToDelete)) { fs.unlinkSync(sizeToDelete) } diff --git a/packages/payload/src/uploads/getSafeFilename.ts b/packages/payload/src/uploads/getSafeFilename.ts index a33697f38..1b2e100ee 100644 --- a/packages/payload/src/uploads/getSafeFilename.ts +++ b/packages/payload/src/uploads/getSafeFilename.ts @@ -37,7 +37,6 @@ export async function getSafeFileName({ }: Args): Promise { let modifiedFilename = desiredFilename - // eslint-disable-next-line no-await-in-loop while ( (await docWithFilenameExists({ collectionSlug, diff --git a/packages/payload/src/utilities/configToJSONSchema.spec.ts b/packages/payload/src/utilities/configToJSONSchema.spec.ts index b8238c2c4..a50446efe 100644 --- a/packages/payload/src/utilities/configToJSONSchema.spec.ts +++ b/packages/payload/src/utilities/configToJSONSchema.spec.ts @@ -1,8 +1,9 @@ +import type { JSONSchema4 } from 'json-schema' + import type { Config } from '../config/types.js' import { sanitizeConfig } from '../config/sanitize.js' import { configToJSONSchema } from './configToJSONSchema.js' -import { JSONSchema4 } from 'json-schema' describe('configToJSONSchema', () => { it('should handle optional arrays with required fields', async () => { @@ -10,6 +11,7 @@ describe('configToJSONSchema', () => { const config: Config = { collections: [ { + slug: 'test', fields: [ { name: 'someRequiredField', @@ -17,13 +19,12 @@ describe('configToJSONSchema', () => { fields: [ { name: 'someRequiredField', - required: true, type: 'text', + required: true, }, ], }, ], - slug: 'test', timestamps: false, }, ], @@ -33,13 +34,16 @@ describe('configToJSONSchema', () => { const schema = configToJSONSchema(sanitizedConfig, 'text') expect(schema?.definitions?.test).toStrictEqual({ + type: 'object', additionalProperties: false, properties: { id: { type: 'string', }, someRequiredField: { + type: ['array', 'null'], items: { + type: 'object', additionalProperties: false, properties: { id: { @@ -50,14 +54,11 @@ describe('configToJSONSchema', () => { }, }, required: ['someRequiredField'], - type: 'object', }, - type: ['array', 'null'], }, }, required: ['id'], title: 'Test', - type: 'object', }) }) @@ -66,44 +67,44 @@ describe('configToJSONSchema', () => { const config: Config = { collections: [ { + slug: 'test', fields: [ { type: 'tabs', tabs: [ { - label: 'unnamedTab', fields: [ { - type: 'text', name: 'fieldInUnnamedTab', + type: 'text', }, ], + label: 'unnamedTab', }, { - label: 'namedTab', name: 'namedTab', fields: [ { - type: 'text', name: 'fieldInNamedTab', + type: 'text', }, ], + label: 'namedTab', }, { - label: 'namedTabWithRequired', name: 'namedTabWithRequired', fields: [ { - type: 'text', name: 'fieldInNamedTab', + type: 'text', required: true, }, ], + label: 'namedTabWithRequired', }, ], }, ], - slug: 'test', timestamps: false, }, ], @@ -113,6 +114,7 @@ describe('configToJSONSchema', () => { const schema = configToJSONSchema(sanitizedConfig, 'text') expect(schema?.definitions?.test).toStrictEqual({ + type: 'object', additionalProperties: false, properties: { id: { @@ -122,8 +124,8 @@ describe('configToJSONSchema', () => { type: ['string', 'null'], }, namedTab: { - additionalProperties: false, type: 'object', + additionalProperties: false, properties: { fieldInNamedTab: { type: ['string', 'null'], @@ -132,8 +134,8 @@ describe('configToJSONSchema', () => { required: [], }, namedTabWithRequired: { - additionalProperties: false, type: 'object', + additionalProperties: false, properties: { fieldInNamedTab: { type: 'string', @@ -144,7 +146,6 @@ describe('configToJSONSchema', () => { }, required: ['id', 'namedTabWithRequired'], title: 'Test', - type: 'object', }) }) @@ -162,23 +163,23 @@ describe('configToJSONSchema', () => { const config: Partial = { collections: [ { + slug: 'test', fields: [ { - type: 'text', name: 'withCustom', + type: 'text', typescriptSchema: [() => customSchema], }, { - type: 'json', name: 'jsonWithSchema', + type: 'json', jsonSchema: { - uri: 'a://b/foo.json', fileMatch: ['a://b/foo.json'], schema: customSchema, + uri: 'a://b/foo.json', }, }, ], - slug: 'test', timestamps: false, }, ], @@ -188,17 +189,17 @@ describe('configToJSONSchema', () => { const schema = configToJSONSchema(sanitizedConfig, 'text') expect(schema?.definitions?.test).toStrictEqual({ + type: 'object', additionalProperties: false, properties: { id: { type: 'string', }, - withCustom: customSchema, jsonWithSchema: customSchema, + withCustom: customSchema, }, required: ['id'], title: 'Test', - type: 'object', }) }) }) diff --git a/packages/payload/src/utilities/convertData.ts b/packages/payload/src/utilities/convertData.ts index 3ee427f60..d86d1ab94 100644 --- a/packages/payload/src/utilities/convertData.ts +++ b/packages/payload/src/utilities/convertData.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ const convertArrayToObject = (arr, key) => arr.reduce((obj, item) => { if (key) { diff --git a/packages/payload/src/utilities/getEntityPolicies.ts b/packages/payload/src/utilities/getEntityPolicies.ts index f5452cc53..4ae8b6371 100644 --- a/packages/payload/src/utilities/getEntityPolicies.ts +++ b/packages/payload/src/utilities/getEntityPolicies.ts @@ -40,7 +40,7 @@ export async function getEntityPolicies(args: T): Promise { + async function getEntityDoc({ where }: { where?: Where } = {}): Promise { if (entity.slug) { if (type === 'global') { return payload.findGlobal({ diff --git a/packages/payload/src/versions/drafts/replaceWithDraftIfAvailable.ts b/packages/payload/src/versions/drafts/replaceWithDraftIfAvailable.ts index 01eea49a2..494a045b3 100644 --- a/packages/payload/src/versions/drafts/replaceWithDraftIfAvailable.ts +++ b/packages/payload/src/versions/drafts/replaceWithDraftIfAvailable.ts @@ -60,7 +60,7 @@ const replaceWithDraftIfAvailable = async ({ versionAccessResult = appendVersionToQueryKey(accessResult) } - const findVersionsArgs: FindVersionsArgs & FindGlobalVersionsArgs = { + const findVersionsArgs: FindGlobalVersionsArgs & FindVersionsArgs = { collection: entity.slug, global: entity.slug, limit: 1, diff --git a/packages/payload/src/versions/getLatestGlobalVersion.ts b/packages/payload/src/versions/getLatestGlobalVersion.ts index 534fb98d6..42303c059 100644 --- a/packages/payload/src/versions/getLatestGlobalVersion.ts +++ b/packages/payload/src/versions/getLatestGlobalVersion.ts @@ -23,7 +23,6 @@ export const getLatestGlobalVersion = async ({ let latestVersion if (config.versions?.drafts) { - // eslint-disable-next-line prefer-destructuring latestVersion = ( await payload.db.findGlobalVersions({ global: slug, diff --git a/packages/plugin-cloud-storage/src/adapters/azure/staticHandler.ts b/packages/plugin-cloud-storage/src/adapters/azure/staticHandler.ts index ece33650e..d8997bbaa 100644 --- a/packages/plugin-cloud-storage/src/adapters/azure/staticHandler.ts +++ b/packages/plugin-cloud-storage/src/adapters/azure/staticHandler.ts @@ -24,7 +24,7 @@ export const getHandler = ({ collection, getStorageClient }: Args): StaticHandle const { end, start } = await getRangeFromHeader(blockBlobClient, req.headers.get('range')) const blob = await blockBlobClient.download(start, end) - // eslint-disable-next-line no-underscore-dangle + const response = blob._response // Manually create a ReadableStream for the web from a Node.js stream. diff --git a/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleUpload.ts b/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleUpload.ts index 9d127f417..a7f877a6b 100644 --- a/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleUpload.ts +++ b/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleUpload.ts @@ -5,11 +5,11 @@ import path from 'path' import type { VercelBlobAdapterUploadOptions } from './index.js' -type HandleUploadArgs = VercelBlobAdapterUploadOptions & { +type HandleUploadArgs = { baseUrl: string prefix?: string token: string -} +} & VercelBlobAdapterUploadOptions export const getHandleUpload = ({ access = 'public', diff --git a/packages/plugin-cloud-storage/src/types.ts b/packages/plugin-cloud-storage/src/types.ts index 568b4e4ff..c9019a0e3 100644 --- a/packages/plugin-cloud-storage/src/types.ts +++ b/packages/plugin-cloud-storage/src/types.ts @@ -28,7 +28,7 @@ export interface TypeWithPrefix { export type HandleDelete = (args: { collection: CollectionConfig - doc: TypeWithID & FileData & TypeWithPrefix + doc: FileData & TypeWithID & TypeWithPrefix filename: string req: PayloadRequest }) => Promise | void diff --git a/packages/plugin-cloud/src/email.spec.ts b/packages/plugin-cloud/src/email.spec.ts index 8e01eb5fe..9dbc5bf28 100644 --- a/packages/plugin-cloud/src/email.spec.ts +++ b/packages/plugin-cloud/src/email.spec.ts @@ -1,8 +1,7 @@ -import type { Config } from 'payload' -import type { Payload } from 'payload' -import nodemailer from 'nodemailer' -import { jest } from '@jest/globals' +import type { Config, Payload } from 'payload' +import { jest } from '@jest/globals' +import nodemailer from 'nodemailer' import { defaults } from 'payload' import { payloadCloudEmail } from './email.js' @@ -70,9 +69,9 @@ describe('email', () => { apiKey, config: configWithFrom, defaultDomain, - skipVerify, - defaultFromName, defaultFromAddress, + defaultFromName, + skipVerify, }) const initializedEmail = email({ payload: mockedPayload }) diff --git a/packages/plugin-cloud/src/plugin.spec.ts b/packages/plugin-cloud/src/plugin.spec.ts index ee99dc5e5..cb2a4d1e2 100644 --- a/packages/plugin-cloud/src/plugin.spec.ts +++ b/packages/plugin-cloud/src/plugin.spec.ts @@ -1,12 +1,11 @@ -import type { Config } from 'payload' -import type { Payload } from 'payload' -import { jest } from '@jest/globals' +import type { Config, Payload } from 'payload' +import { jest } from '@jest/globals' +import { nodemailerAdapter } from '@payloadcms/email-nodemailer' import nodemailer from 'nodemailer' import { defaults } from 'payload' import { payloadCloudPlugin } from './plugin.js' -import { nodemailerAdapter } from '@payloadcms/email-nodemailer' const mockedPayload: Payload = jest.fn() as unknown as Payload @@ -18,10 +17,10 @@ describe('plugin', () => { beforeEach(() => { createTransportSpy = jest.spyOn(nodemailer, 'createTransport').mockImplementationOnce(() => { return { - verify: jest.fn(), transporter: { name: 'Nodemailer - SMTP', }, + verify: jest.fn(), } as unknown as ReturnType }) @@ -33,7 +32,6 @@ describe('plugin', () => { }) describe('not in Payload Cloud', () => { - // eslint-disable-next-line jest/expect-expect it('should return unmodified config', async () => { const plugin = payloadCloudPlugin() const config = await plugin(createConfig()) @@ -69,7 +67,6 @@ describe('plugin', () => { }) describe('email', () => { - // eslint-disable-next-line jest/expect-expect it('should default to using payload cloud email', async () => { const plugin = payloadCloudPlugin() const config = await plugin(createConfig()) @@ -81,7 +78,6 @@ describe('plugin', () => { ) }) - // eslint-disable-next-line jest/expect-expect it('should allow opt-out', async () => { const plugin = payloadCloudPlugin({ email: false }) const config = await plugin(createConfig()) @@ -89,7 +85,6 @@ describe('plugin', () => { expect(config.email).toBeUndefined() }) - // eslint-disable-next-line jest/expect-expect it('should allow PAYLOAD_CLOUD_EMAIL_* env vars to be unset', async () => { delete process.env.PAYLOAD_CLOUD_EMAIL_API_KEY delete process.env.PAYLOAD_CLOUD_DEFAULT_DOMAIN @@ -116,8 +111,8 @@ describe('plugin', () => { email: await nodemailerAdapter({ defaultFromAddress: 'test@test.com', defaultFromName: 'Test', - transport: existingTransport, skipVerify, + transport: existingTransport, }), }) diff --git a/packages/plugin-cloud/src/types.ts b/packages/plugin-cloud/src/types.ts index f067b2536..7665a7556 100644 --- a/packages/plugin-cloud/src/types.ts +++ b/packages/plugin-cloud/src/types.ts @@ -21,7 +21,7 @@ export interface TypeWithPrefix { export type HandleDelete = (args: { collection: CollectionConfig - doc: TypeWithID & FileData & TypeWithPrefix + doc: FileData & TypeWithID & TypeWithPrefix filename: string req: PayloadRequest }) => Promise | void diff --git a/packages/plugin-form-builder/src/collections/Forms/fields.ts b/packages/plugin-form-builder/src/collections/Forms/fields.ts index 8b393b873..c3e528094 100644 --- a/packages/plugin-form-builder/src/collections/Forms/fields.ts +++ b/packages/plugin-form-builder/src/collections/Forms/fields.ts @@ -572,7 +572,7 @@ const Message: Block = { }, } -// eslint-disable-next-line @typescript-eslint/consistent-type-assertions + export const fields = { checkbox: Checkbox, country: Country, diff --git a/packages/plugin-form-builder/src/types.ts b/packages/plugin-form-builder/src/types.ts index e8090eb0a..86b3237c7 100644 --- a/packages/plugin-form-builder/src/types.ts +++ b/packages/plugin-form-builder/src/types.ts @@ -17,9 +17,9 @@ export interface FieldValues { [key: string]: boolean | null | number | string | undefined } -export type PaymentFieldConfig = Partial & { +export type PaymentFieldConfig = { paymentProcessor: Partial -} +} & Partial export type FieldConfig = Partial | PaymentFieldConfig @@ -44,8 +44,8 @@ export type FieldsOverride = (args: { defaultFields: Field[] }) => Field[] export type FormBuilderPluginConfig = { beforeEmail?: BeforeEmail fields?: FieldsConfig - formOverrides?: Partial> & { fields?: FieldsOverride } - formSubmissionOverrides?: Partial> & { fields?: FieldsOverride } + formOverrides?: { fields?: FieldsOverride } & Partial> + formSubmissionOverrides?: { fields?: FieldsOverride } & Partial> handlePayment?: HandlePayment redirectRelationships?: string[] } diff --git a/packages/plugin-form-builder/src/utilities/getPaymentTotal.ts b/packages/plugin-form-builder/src/utilities/getPaymentTotal.ts index 0250a6534..6b74c02ae 100644 --- a/packages/plugin-form-builder/src/utilities/getPaymentTotal.ts +++ b/packages/plugin-form-builder/src/utilities/getPaymentTotal.ts @@ -1,9 +1,9 @@ import type { FieldValues, PaymentField, PriceCondition } from '../types.js' export const getPaymentTotal = ( - args: Partial & { + args: { fieldValues: FieldValues - }, + } & Partial, ): number => { const { basePrice = 0, fieldValues, priceConditions } = args diff --git a/packages/plugin-form-builder/src/utilities/lexical/types.ts b/packages/plugin-form-builder/src/utilities/lexical/types.ts index d6f95fdb5..d22aae1fc 100644 --- a/packages/plugin-form-builder/src/utilities/lexical/types.ts +++ b/packages/plugin-form-builder/src/utilities/lexical/types.ts @@ -15,6 +15,6 @@ export type HTMLConverter = { nodeTypes: string[] } -export type SerializedLexicalNodeWithParent = any & { +export type SerializedLexicalNodeWithParent = { parent?: any -} +} & any diff --git a/packages/plugin-form-builder/src/utilities/slate/serializeSlate.ts b/packages/plugin-form-builder/src/utilities/slate/serializeSlate.ts index 83c913939..493c7ba3b 100644 --- a/packages/plugin-form-builder/src/utilities/slate/serializeSlate.ts +++ b/packages/plugin-form-builder/src/utilities/slate/serializeSlate.ts @@ -12,7 +12,7 @@ interface Node { url?: string } -const isTextNode = (node: Node): node is Node & { text: string } => { +const isTextNode = (node: Node): node is { text: string } & Node => { return 'text' in node } diff --git a/packages/plugin-nested-docs/src/fields/parent.ts b/packages/plugin-nested-docs/src/fields/parent.ts index 3e982d1ec..422f6b0ce 100644 --- a/packages/plugin-nested-docs/src/fields/parent.ts +++ b/packages/plugin-nested-docs/src/fields/parent.ts @@ -3,9 +3,9 @@ import type { SingleRelationshipField } from 'payload' export const createParentField = ( relationTo: string, overrides?: Partial< - SingleRelationshipField & { + { hasMany: false - } + } & SingleRelationshipField >, ): SingleRelationshipField => ({ name: 'parent', diff --git a/packages/plugin-nested-docs/src/utilities/populateBreadcrumbs.ts b/packages/plugin-nested-docs/src/utilities/populateBreadcrumbs.ts index 671db1d51..c02455380 100644 --- a/packages/plugin-nested-docs/src/utilities/populateBreadcrumbs.ts +++ b/packages/plugin-nested-docs/src/utilities/populateBreadcrumbs.ts @@ -33,7 +33,7 @@ export const populateBreadcrumbs = async ( const breadcrumbs = breadcrumbDocs.map((_, i) => formatBreadcrumb(pluginConfig, collection, breadcrumbDocs.slice(0, i + 1)), - ) // eslint-disable-line function-paren-newline + ) return { ...newData, diff --git a/packages/plugin-redirects/src/types.ts b/packages/plugin-redirects/src/types.ts index b75008011..3a6d90af4 100644 --- a/packages/plugin-redirects/src/types.ts +++ b/packages/plugin-redirects/src/types.ts @@ -4,5 +4,5 @@ export type FieldsOverride = (args: { defaultFields: Field[] }) => Field[] export type RedirectsPluginConfig = { collections?: string[] - overrides?: Partial> & { fields?: FieldsOverride } + overrides?: { fields?: FieldsOverride } & Partial> } diff --git a/packages/plugin-search/src/Search/ui/index.client.tsx b/packages/plugin-search/src/Search/ui/index.client.tsx index 9b06f7e77..1e0b956c1 100644 --- a/packages/plugin-search/src/Search/ui/index.client.tsx +++ b/packages/plugin-search/src/Search/ui/index.client.tsx @@ -7,14 +7,14 @@ import React from 'react' // TODO: fix this import to work in dev mode within the monorepo in a way that is backwards compatible with 1.x // import CopyToClipboard from 'payload/dist/admin/components/elements/CopyToClipboard' -type FieldsWithDoc = FormState & { +type FieldsWithDoc = { doc: { value: { relationTo: string value: string } } -} +} & FormState export const LinkToDocClient: React.FC = () => { const form = useWatchForm() diff --git a/packages/plugin-sentry/src/plugin.spec.ts b/packages/plugin-sentry/src/plugin.spec.ts index 8961c0a00..9c6dd96f7 100644 --- a/packages/plugin-sentry/src/plugin.spec.ts +++ b/packages/plugin-sentry/src/plugin.spec.ts @@ -1,11 +1,12 @@ import type { Config } from 'payload' + import { defaults } from 'payload' import { sentryPlugin } from './plugin' describe('plugin', () => { it('should run the plugin', () => { - const plugin = sentryPlugin({ enabled: true, dsn: 'asdf' }) + const plugin = sentryPlugin({ dsn: 'asdf', enabled: true }) const config = plugin(createConfig()) assertPluginRan(config) @@ -19,14 +20,14 @@ describe('plugin', () => { }) it('should not run if dsn is not provided', () => { - const plugin = sentryPlugin({ enabled: true, dsn: null }) + const plugin = sentryPlugin({ dsn: null, enabled: true }) const config = plugin(createConfig()) assertPluginDidNotRun(config) }) it('should respect enabled: false', () => { - const plugin = sentryPlugin({ enabled: false, dsn: null }) + const plugin = sentryPlugin({ dsn: null, enabled: false }) const config = plugin(createConfig()) assertPluginDidNotRun(config) diff --git a/packages/plugin-sentry/src/plugin.ts b/packages/plugin-sentry/src/plugin.ts index 4761623dd..26c0e5afd 100644 --- a/packages/plugin-sentry/src/plugin.ts +++ b/packages/plugin-sentry/src/plugin.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import type { Config } from 'payload' import type { PluginOptions } from './types.js' diff --git a/packages/plugin-sentry/src/startSentry.ts b/packages/plugin-sentry/src/startSentry.ts index fbaf726d6..ab9eadbc1 100644 --- a/packages/plugin-sentry/src/startSentry.ts +++ b/packages/plugin-sentry/src/startSentry.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ import type { NextFunction, Request, Response } from 'express' import type express from 'express' import type { Payload } from 'payload' @@ -50,7 +49,7 @@ export const startSentry = (pluginOptions: PluginOptions, payload: Payload): voi app.use(function onError( _err: unknown, _req: Request, - res: Response & { sentry?: string }, + res: { sentry?: string } & Response, _next: NextFunction, ) { res.statusCode = 500 diff --git a/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx b/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx index 71cc934cc..826e7c0ab 100644 --- a/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx @@ -22,11 +22,10 @@ import { LengthIndicator } from '../../ui/LengthIndicator.js' const { maxLength, minLength } = defaults.description -// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -type MetaDescriptionProps = FormFieldBase & { +type MetaDescriptionProps = { hasGenerateDescriptionFn: boolean path: string -} +} & FormFieldBase export const MetaDescriptionComponent: React.FC = (props) => { const { CustomLabel, hasGenerateDescriptionFn, label, labelProps, required } = props diff --git a/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx b/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx index b3b11c605..d162e1639 100644 --- a/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx @@ -20,10 +20,9 @@ import type { GenerateImage } from '../../types.js' import { Pill } from '../../ui/Pill.js' -// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -type MetaImageProps = UploadInputProps & { +type MetaImageProps = { hasGenerateImageFn: boolean -} +} & UploadInputProps export const MetaImageComponent: React.FC = (props) => { const { CustomLabel, hasGenerateImageFn, label, labelProps, relationTo, required } = props || {} diff --git a/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx b/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx index 3b071ea58..aec97f4f0 100644 --- a/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx @@ -23,10 +23,9 @@ import '../index.scss' const { maxLength, minLength } = defaults.title -// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -type MetaTitleProps = FormFieldBase & { +type MetaTitleProps = { hasGenerateTitleFn: boolean -} +} & FormFieldBase export const MetaTitleComponent: React.FC = (props) => { const { CustomLabel, hasGenerateTitleFn, label, labelProps, required } = props || {} diff --git a/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx b/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx index 9e79cf87f..57ac51c00 100644 --- a/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx +++ b/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx @@ -14,11 +14,11 @@ const { title: { maxLength: maxTitle, minLength: minTitle }, } = defaults -type OverviewProps = UIField & { +type OverviewProps = { descriptionPath?: string imagePath?: string titlePath?: string -} +} & UIField export const OverviewComponent: React.FC = ({ descriptionPath: descriptionPathFromContext, diff --git a/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx b/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx index 3f081be2c..18be06254 100644 --- a/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx +++ b/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx @@ -15,11 +15,11 @@ import React, { useEffect, useState } from 'react' import type { PluginSEOTranslationKeys, PluginSEOTranslations } from '../../translations/index.js' import type { GenerateURL } from '../../types.js' -type PreviewProps = UIField & { +type PreviewProps = { descriptionPath?: string hasGenerateURLFn: boolean titlePath?: string -} +} & UIField export const PreviewComponent: React.FC = ({ descriptionPath: descriptionPathFromContext, diff --git a/packages/plugin-seo/src/index.tsx b/packages/plugin-seo/src/index.tsx index b030223c6..407c7dba5 100644 --- a/packages/plugin-seo/src/index.tsx +++ b/packages/plugin-seo/src/index.tsx @@ -74,7 +74,6 @@ export const seoPlugin = }, ...(pluginConfig?.uploadsCollection ? [ - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions { name: 'image', type: 'upload', diff --git a/packages/plugin-seo/src/types.ts b/packages/plugin-seo/src/types.ts index dd376a167..932e811dd 100644 --- a/packages/plugin-seo/src/types.ts +++ b/packages/plugin-seo/src/types.ts @@ -2,22 +2,22 @@ import type { DocumentInfoContext } from '@payloadcms/ui' import type { Field, TextField, TextareaField, UploadField } from 'payload' export type GenerateTitle = ( - args: DocumentInfoContext & { doc: T; locale?: string }, + args: { doc: T; locale?: string } & DocumentInfoContext, ) => Promise | string export type GenerateDescription = ( - args: DocumentInfoContext & { + args: { doc: T locale?: string - }, + } & DocumentInfoContext, ) => Promise | string export type GenerateImage = ( - args: DocumentInfoContext & { doc: T; locale?: string }, + args: { doc: T; locale?: string } & DocumentInfoContext, ) => Promise | string export type GenerateURL = ( - args: DocumentInfoContext & { doc: T; locale?: string }, + args: { doc: T; locale?: string } & DocumentInfoContext, ) => Promise | string export type SEOPluginConfig = { diff --git a/packages/plugin-stripe/src/hooks/createNewInStripe.ts b/packages/plugin-stripe/src/hooks/createNewInStripe.ts index c6e67c3d4..5ee18aee5 100644 --- a/packages/plugin-stripe/src/hooks/createNewInStripe.ts +++ b/packages/plugin-stripe/src/hooks/createNewInStripe.ts @@ -11,18 +11,15 @@ const stripeSecretKey = process.env.STRIPE_SECRET_KEY // api version can only be the latest, stripe recommends ts ignoring it const stripe = new Stripe(stripeSecretKey || '', { apiVersion: '2022-08-01' }) -type HookArgsWithCustomCollection = Omit< - Parameters[0], - 'collection' -> & { +type HookArgsWithCustomCollection = { collection: CollectionConfig -} +} & Omit[0], 'collection'> export type CollectionBeforeValidateHookWithArgs = ( - args: HookArgsWithCustomCollection & { + args: { collection?: CollectionConfig pluginConfig?: StripePluginConfig - }, + } & HookArgsWithCustomCollection, ) => void export const createNewInStripe: CollectionBeforeValidateHookWithArgs = async (args) => { diff --git a/packages/plugin-stripe/src/hooks/deleteFromStripe.ts b/packages/plugin-stripe/src/hooks/deleteFromStripe.ts index 8b6cee68e..1f739aa72 100644 --- a/packages/plugin-stripe/src/hooks/deleteFromStripe.ts +++ b/packages/plugin-stripe/src/hooks/deleteFromStripe.ts @@ -9,15 +9,15 @@ const stripeSecretKey = process.env.STRIPE_SECRET_KEY // api version can only be the latest, stripe recommends ts ignoring it const stripe = new Stripe(stripeSecretKey || '', { apiVersion: '2022-08-01' }) -type HookArgsWithCustomCollection = Omit[0], 'collection'> & { +type HookArgsWithCustomCollection = { collection: CollectionConfig -} +} & Omit[0], 'collection'> export type CollectionAfterDeleteHookWithArgs = ( - args: HookArgsWithCustomCollection & { + args: { collection?: CollectionConfig pluginConfig?: StripePluginConfig - }, + } & HookArgsWithCustomCollection, ) => void export const deleteFromStripe: CollectionAfterDeleteHookWithArgs = async (args) => { diff --git a/packages/plugin-stripe/src/hooks/syncExistingWithStripe.ts b/packages/plugin-stripe/src/hooks/syncExistingWithStripe.ts index 12ceae887..1b1446d98 100644 --- a/packages/plugin-stripe/src/hooks/syncExistingWithStripe.ts +++ b/packages/plugin-stripe/src/hooks/syncExistingWithStripe.ts @@ -11,18 +11,15 @@ const stripeSecretKey = process.env.STRIPE_SECRET_KEY // api version can only be the latest, stripe recommends ts ignoring it const stripe = new Stripe(stripeSecretKey || '', { apiVersion: '2022-08-01' }) -type HookArgsWithCustomCollection = Omit< - Parameters[0], - 'collection' -> & { +type HookArgsWithCustomCollection = { collection: CollectionConfig -} +} & Omit[0], 'collection'> export type CollectionBeforeChangeHookWithArgs = ( - args: HookArgsWithCustomCollection & { + args: { collection?: CollectionConfig pluginConfig?: StripePluginConfig - }, + } & HookArgsWithCustomCollection, ) => void export const syncExistingWithStripe: CollectionBeforeChangeHookWithArgs = async (args) => { diff --git a/packages/plugin-stripe/src/types.ts b/packages/plugin-stripe/src/types.ts index f1901e556..fd4056f10 100644 --- a/packages/plugin-stripe/src/types.ts +++ b/packages/plugin-stripe/src/types.ts @@ -37,9 +37,9 @@ export type StripePluginConfig = { webhooks?: StripeWebhookHandler | StripeWebhookHandlers } -export type SanitizedStripePluginConfig = StripePluginConfig & { +export type SanitizedStripePluginConfig = { sync: SyncConfig[] // convert to required -} +} & StripePluginConfig export type StripeProxy = (args: { stripeArgs: any[] diff --git a/packages/plugin-stripe/src/webhooks/handleCreatedOrUpdated.ts b/packages/plugin-stripe/src/webhooks/handleCreatedOrUpdated.ts index fd03f262a..0b6a21552 100644 --- a/packages/plugin-stripe/src/webhooks/handleCreatedOrUpdated.ts +++ b/packages/plugin-stripe/src/webhooks/handleCreatedOrUpdated.ts @@ -5,10 +5,10 @@ import type { SanitizedStripePluginConfig, StripeWebhookHandler } from '../types import { deepen } from '../utilities/deepen.js' type HandleCreatedOrUpdated = ( - args: Parameters[0] & { + args: { resourceType: string syncConfig: SanitizedStripePluginConfig['sync'][0] - }, + } & Parameters[0], ) => void export const handleCreatedOrUpdated: HandleCreatedOrUpdated = async (args) => { diff --git a/packages/plugin-stripe/src/webhooks/handleDeleted.ts b/packages/plugin-stripe/src/webhooks/handleDeleted.ts index e90a65eae..7dc3ddab7 100644 --- a/packages/plugin-stripe/src/webhooks/handleDeleted.ts +++ b/packages/plugin-stripe/src/webhooks/handleDeleted.ts @@ -1,10 +1,10 @@ import type { SanitizedStripePluginConfig, StripeWebhookHandler } from '../types.js' type HandleDeleted = ( - args: Parameters[0] & { + args: { resourceType: string syncConfig: SanitizedStripePluginConfig['sync'][0] - }, + } & Parameters[0], ) => void export const handleDeleted: HandleDeleted = async (args) => { diff --git a/packages/richtext-lexical/src/features/converters/html/converter/types.ts b/packages/richtext-lexical/src/features/converters/html/converter/types.ts index 925467c37..a9d7a3e08 100644 --- a/packages/richtext-lexical/src/features/converters/html/converter/types.ts +++ b/packages/richtext-lexical/src/features/converters/html/converter/types.ts @@ -21,6 +21,6 @@ export type HTMLConverter({}) + const [stateData, setStateData] = useState<({ id?: string; text: string } & LinkFields) | {}>({}) const { closeModal, toggleModal } = useModal() const editDepth = useEditDepth() @@ -102,7 +102,7 @@ export function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.R } // Initial state: - const data: LinkFields & { text: string } = { + const data: { text: string } & LinkFields = { doc: undefined, linkType: undefined, newTab: undefined, @@ -321,7 +321,7 @@ export function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.R handleDrawerSubmit={(fields: FormState, data: Data) => { closeModal(drawerSlug) - const newLinkPayload = data as LinkFields & { text: string } + const newLinkPayload = data as { text: string } & LinkFields const bareLinkFields: LinkFields = { ...newLinkPayload, diff --git a/packages/richtext-lexical/src/features/link/validate.ts b/packages/richtext-lexical/src/features/link/validate.ts index aa01d8e0c..43addabbf 100644 --- a/packages/richtext-lexical/src/features/link/validate.ts +++ b/packages/richtext-lexical/src/features/link/validate.ts @@ -9,7 +9,6 @@ import type { SerializedAutoLinkNode, SerializedLinkNode } from './nodes/types.j export const linkValidation = ( props: LinkFeatureServerProps, sanitizedFieldsWithoutText: Field[], - // eslint-disable-next-line @typescript-eslint/no-duplicate-type-constituents ): NodeValidation => { return async ({ node, diff --git a/packages/richtext-lexical/src/features/migrations/lexicalPluginToLexical/converter/types.ts b/packages/richtext-lexical/src/features/migrations/lexicalPluginToLexical/converter/types.ts index e0cdce061..388882f0a 100644 --- a/packages/richtext-lexical/src/features/migrations/lexicalPluginToLexical/converter/types.ts +++ b/packages/richtext-lexical/src/features/migrations/lexicalPluginToLexical/converter/types.ts @@ -10,7 +10,7 @@ export type LexicalPluginNodeConverter T nodeTypes: string[] diff --git a/packages/richtext-lexical/src/features/relationship/feature.server.ts b/packages/richtext-lexical/src/features/relationship/feature.server.ts index bfacbd41b..91d72e9d2 100644 --- a/packages/richtext-lexical/src/features/relationship/feature.server.ts +++ b/packages/richtext-lexical/src/features/relationship/feature.server.ts @@ -31,7 +31,7 @@ export type ExclusiveRelationshipFeatureProps = enabledCollections?: CollectionSlug[] } -export type RelationshipFeatureProps = ExclusiveRelationshipFeatureProps & { +export type RelationshipFeatureProps = { /** * Sets a maximum population depth for this relationship, regardless of the remaining depth when the respective field is reached. * This behaves exactly like the maxDepth properties of relationship and upload fields. @@ -39,7 +39,7 @@ export type RelationshipFeatureProps = ExclusiveRelationshipFeatureProps & { * {@link https://payloadcms.com/docs/getting-started/concepts#field-level-max-depth} */ maxDepth?: number -} +} & ExclusiveRelationshipFeatureProps export const RelationshipFeature = createServerFeature< RelationshipFeatureProps, diff --git a/packages/richtext-lexical/src/features/relationship/nodes/RelationshipNode.tsx b/packages/richtext-lexical/src/features/relationship/nodes/RelationshipNode.tsx index 4110ebba9..adb766aef 100644 --- a/packages/richtext-lexical/src/features/relationship/nodes/RelationshipNode.tsx +++ b/packages/richtext-lexical/src/features/relationship/nodes/RelationshipNode.tsx @@ -27,10 +27,10 @@ export type RelationshipData = { value: number | string } -export type SerializedRelationshipNode = Spread & { +export type SerializedRelationshipNode = { children?: never // required so that our typed editor state doesn't automatically add children type: 'relationship' -} +} & Spread function $relationshipElementToNode(domNode: HTMLDivElement): DOMConversionOutput | null { const id = domNode.getAttribute('data-lexical-relationship-id') diff --git a/packages/richtext-lexical/src/features/toolbars/shared/ToolbarDropdown/DropDown.tsx b/packages/richtext-lexical/src/features/toolbars/shared/ToolbarDropdown/DropDown.tsx index 7f4bf78dc..58b7c5885 100644 --- a/packages/richtext-lexical/src/features/toolbars/shared/ToolbarDropdown/DropDown.tsx +++ b/packages/richtext-lexical/src/features/toolbars/shared/ToolbarDropdown/DropDown.tsx @@ -216,7 +216,6 @@ export function DropDown({ const handle = (event: MouseEvent): void => { const { target } = event if (stopCloseOnClickSelf != null) { - // eslint-disable-next-line @typescript-eslint/prefer-optional-chain if (dropDownRef.current != null && dropDownRef.current.contains(target as Node)) { return } diff --git a/packages/richtext-lexical/src/features/typesClient.ts b/packages/richtext-lexical/src/features/typesClient.ts index 7ff469718..96997fee1 100644 --- a/packages/richtext-lexical/src/features/typesClient.ts +++ b/packages/richtext-lexical/src/features/typesClient.ts @@ -153,10 +153,10 @@ export type ClientComponentProps = ClientFeatureProps extend order: number } & ClientFeatureProps -export type ResolvedClientFeature = ClientFeature & { +export type ResolvedClientFeature = { key: string order: number -} +} & ClientFeature export type ResolvedClientFeatureMap = Map> @@ -208,12 +208,7 @@ export type SanitizedPlugin = position: 'belowContainer' } -export type SanitizedClientFeatures = Required< - Pick< - ResolvedClientFeature, - 'markdownTransformers' | 'nodes' | 'providers' | 'toolbarFixed' | 'toolbarInline' - > -> & { +export type SanitizedClientFeatures = { /** The keys of all enabled features */ enabledFeatures: string[] hooks: { @@ -252,4 +247,9 @@ export type SanitizedClientFeatures = Required< */ groups: SlashMenuGroup[] } -} +} & Required< + Pick< + ResolvedClientFeature, + 'markdownTransformers' | 'nodes' | 'providers' | 'toolbarFixed' | 'toolbarInline' + > +> diff --git a/packages/richtext-lexical/src/features/typesServer.ts b/packages/richtext-lexical/src/features/typesServer.ts index 9b35c8e7f..54dec607a 100644 --- a/packages/richtext-lexical/src/features/typesServer.ts +++ b/packages/richtext-lexical/src/features/typesServer.ts @@ -211,11 +211,11 @@ export type AfterChangeNodeHook = ( ) => Promise | T export type BeforeChangeNodeHook = ( - args: BeforeChangeNodeHookArgs & BaseNodeHookArgs, + args: BaseNodeHookArgs & BeforeChangeNodeHookArgs, ) => Promise | T export type BeforeValidateNodeHook = ( - args: BeforeValidateNodeHookArgs & BaseNodeHookArgs, + args: BaseNodeHookArgs & BeforeValidateNodeHookArgs, ) => Promise | T // Define the node with hooks that use the node's exportJSON return type @@ -343,26 +343,21 @@ export type ServerFeature = { sanitizedServerFeatureProps?: ServerProps } -export type ResolvedServerFeature = ServerFeature< - ServerProps, - ClientFeatureProps +export type ResolvedServerFeature = { + order: number +} & Required< + Pick< + FeatureProviderServer, + 'dependencies' | 'dependenciesPriority' | 'dependenciesSoft' | 'key' + > > & - Required< - Pick< - FeatureProviderServer, - 'dependencies' | 'dependenciesPriority' | 'dependenciesSoft' | 'key' - > - > & { - order: number - } + ServerFeature export type ResolvedServerFeatureMap = Map> export type ServerFeatureProviderMap = Map> -export type SanitizedServerFeatures = Required< - Pick, 'i18n' | 'markdownTransformers' | 'nodes'> -> & { +export type SanitizedServerFeatures = { /** The node types mapped to their converters */ converters: { html: HTMLConverter[] @@ -413,4 +408,4 @@ export type SanitizedServerFeatures = Required< } /** The node types mapped to their populationPromises */ /** The node types mapped to their validations */ validations: Map> -} +} & Required, 'i18n' | 'markdownTransformers' | 'nodes'>> diff --git a/packages/richtext-lexical/src/features/upload/feature.server.ts b/packages/richtext-lexical/src/features/upload/feature.server.ts index a404769ff..388a77594 100644 --- a/packages/richtext-lexical/src/features/upload/feature.server.ts +++ b/packages/richtext-lexical/src/features/upload/feature.server.ts @@ -105,7 +105,7 @@ export const UploadFeature = createServerFeature< if (req?.payload) { const uploadDocument: { - value?: TypeWithID & FileData + value?: FileData & TypeWithID } = {} try { @@ -158,9 +158,9 @@ export const UploadFeature = createServerFeature< // Iterate through each size in the data.sizes object for (const size in uploadDocument.value?.sizes) { - const imageSize: FileSize & { + const imageSize: { url?: string - } = uploadDocument.value?.sizes[size] + } & FileSize = uploadDocument.value?.sizes[size] // Skip if any property of the size object is null if ( diff --git a/packages/richtext-lexical/src/features/upload/nodes/UploadNode.tsx b/packages/richtext-lexical/src/features/upload/nodes/UploadNode.tsx index b78361479..c42cef801 100644 --- a/packages/richtext-lexical/src/features/upload/nodes/UploadNode.tsx +++ b/packages/richtext-lexical/src/features/upload/nodes/UploadNode.tsx @@ -67,10 +67,10 @@ function $convertUploadElement(domNode: HTMLImageElement): DOMConversionOutput | return null } -export type SerializedUploadNode = Spread & { +export type SerializedUploadNode = { children?: never // required so that our typed editor state doesn't automatically add children type: 'upload' -} +} & Spread export class UploadNode extends DecoratorBlockNode { __data: UploadData @@ -166,7 +166,6 @@ export class UploadNode extends DecoratorBlockNode { writable.__data = data } - // eslint-disable-next-line class-methods-use-this updateDOM(): false { return false } diff --git a/packages/richtext-lexical/src/field/Field.tsx b/packages/richtext-lexical/src/field/Field.tsx index be407d05a..b0710cb4b 100644 --- a/packages/richtext-lexical/src/field/Field.tsx +++ b/packages/richtext-lexical/src/field/Field.tsx @@ -22,12 +22,12 @@ import './index.scss' const baseClass = 'rich-text-lexical' const _RichText: React.FC< - FormFieldBase & { + { editorConfig: SanitizedClientEditorConfig // With rendered features n stuff name: string richTextComponentMap: Map width?: string - } + } & FormFieldBase > = (props) => { const { name, diff --git a/packages/richtext-lexical/src/lexical/LexicalEditor.tsx b/packages/richtext-lexical/src/lexical/LexicalEditor.tsx index e305ff228..66c0521f1 100644 --- a/packages/richtext-lexical/src/lexical/LexicalEditor.tsx +++ b/packages/richtext-lexical/src/lexical/LexicalEditor.tsx @@ -22,9 +22,9 @@ import { DraggableBlockPlugin } from './plugins/handles/DraggableBlockPlugin/ind import { LexicalContentEditable } from './ui/ContentEditable.js' export const LexicalEditor: React.FC< - Pick & { + { editorContainerRef: React.RefObject - } + } & Pick > = (props) => { const { editorConfig, editorContainerRef, onChange } = props const editorConfigContext = useEditorConfigContext() diff --git a/packages/richtext-lexical/src/lexical/LexicalProvider.tsx b/packages/richtext-lexical/src/lexical/LexicalProvider.tsx index edef3d104..60837ea4b 100644 --- a/packages/richtext-lexical/src/lexical/LexicalProvider.tsx +++ b/packages/richtext-lexical/src/lexical/LexicalProvider.tsx @@ -18,11 +18,11 @@ import { getEnabledNodes } from './nodes/index.js' export type LexicalProviderProps = { editorConfig: SanitizedClientEditorConfig - fieldProps: FormFieldBase & { + fieldProps: { editorConfig: SanitizedClientEditorConfig // With rendered features n stuff name: string richTextComponentMap: Map - } + } & FormFieldBase onChange: (editorState: EditorState, editor: LexicalEditor, tags: Set) => void path: string readOnly: boolean diff --git a/packages/richtext-lexical/src/lexical/config/client/EditorConfigProvider.tsx b/packages/richtext-lexical/src/lexical/config/client/EditorConfigProvider.tsx index 1ecd9b38a..e1a9ce208 100644 --- a/packages/richtext-lexical/src/lexical/config/client/EditorConfigProvider.tsx +++ b/packages/richtext-lexical/src/lexical/config/client/EditorConfigProvider.tsx @@ -21,11 +21,11 @@ export interface EditorConfigContextType { editor: LexicalEditor editorConfig: SanitizedClientEditorConfig editorContainerRef: React.RefObject - field: FormFieldBase & { + field: { editorConfig: SanitizedClientEditorConfig // With rendered features n stuff name: string richTextComponentMap: Map - } + } & FormFieldBase // Editor focus handling focusEditor: (editorContext: EditorConfigContextType) => void focusedEditor: EditorConfigContextType | null @@ -51,11 +51,11 @@ export const EditorConfigProvider = ({ children: React.ReactNode editorConfig: SanitizedClientEditorConfig editorContainerRef: React.RefObject - fieldProps: FormFieldBase & { + fieldProps: { editorConfig: SanitizedClientEditorConfig // With rendered features n stuff name: string richTextComponentMap: Map - } + } & FormFieldBase parentContext?: EditorConfigContextType }): React.ReactNode => { const [editor] = useLexicalComposerContext() diff --git a/packages/richtext-lexical/src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.ts b/packages/richtext-lexical/src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.ts index f1c556eac..483aa3425 100644 --- a/packages/richtext-lexical/src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.ts +++ b/packages/richtext-lexical/src/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.ts @@ -33,10 +33,10 @@ export type SlashMenuGroup = { label?: (({ i18n }: { i18n: I18nClient<{}, string> }) => string) | string } -export type SlashMenuItemInternal = SlashMenuItem & { +export type SlashMenuItemInternal = { ref: MutableRefObject -} +} & SlashMenuItem -export type SlashMenuGroupInternal = SlashMenuGroup & { +export type SlashMenuGroupInternal = { items: Array -} +} & SlashMenuGroup diff --git a/packages/richtext-lexical/src/populateGraphQL/populate.ts b/packages/richtext-lexical/src/populateGraphQL/populate.ts index 67821a6d5..9f78a0b74 100644 --- a/packages/richtext-lexical/src/populateGraphQL/populate.ts +++ b/packages/richtext-lexical/src/populateGraphQL/populate.ts @@ -24,10 +24,10 @@ export const populate = async ({ overrideAccess, req, showHiddenFields, -}: Arguments & { +}: { collectionSlug: string id: number | string -}): Promise => { +} & Arguments): Promise => { const shouldPopulate = depth && currentDepth <= depth // usually depth is checked within recursivelyPopulateFieldsForGraphQL. But since this populate function can be called outside of that (in rest afterRead node hooks) we need to check here too if (!shouldPopulate) { diff --git a/packages/richtext-lexical/src/populateGraphQL/populateLexicalPopulationPromises.ts b/packages/richtext-lexical/src/populateGraphQL/populateLexicalPopulationPromises.ts index 09a0b7c05..50365409c 100644 --- a/packages/richtext-lexical/src/populateGraphQL/populateLexicalPopulationPromises.ts +++ b/packages/richtext-lexical/src/populateGraphQL/populateLexicalPopulationPromises.ts @@ -6,11 +6,9 @@ import type { AdapterProps } from '../types.js' import { recurseNodes } from '../utilities/forEachNodeRecursively.js' -export type Args = Parameters< - RichTextAdapter['graphQLPopulationPromises'] ->[0] & { +export type Args = { editorPopulationPromises: Map> -} +} & Parameters['graphQLPopulationPromises']>[0] /** * Appends all new populationPromises to the populationPromises prop diff --git a/packages/richtext-lexical/src/types.ts b/packages/richtext-lexical/src/types.ts index b50e8b392..40b0ff044 100644 --- a/packages/richtext-lexical/src/types.ts +++ b/packages/richtext-lexical/src/types.ts @@ -55,10 +55,10 @@ export type LexicalEditorProps = { lexical?: LexicalEditorConfig } -export type LexicalRichTextAdapter = RichTextAdapter & { +export type LexicalRichTextAdapter = { editorConfig: SanitizedServerEditorConfig features: FeatureProviderServer[] -} +} & RichTextAdapter export type LexicalRichTextAdapterProvider = /** @@ -72,12 +72,12 @@ export type LexicalRichTextAdapterProvider = isRoot?: boolean }) => Promise -export type FieldProps = RichTextFieldProps & { +export type FieldProps = { fieldTypes: FieldTypes indexPath: string path?: string permissions: FieldPermissions -} +} & RichTextFieldProps export type AdapterProps = { editorConfig: SanitizedServerEditorConfig diff --git a/packages/richtext-lexical/src/utilities/createServerFeature.ts b/packages/richtext-lexical/src/utilities/createServerFeature.ts index 858f5b928..06498cafd 100644 --- a/packages/richtext-lexical/src/utilities/createServerFeature.ts +++ b/packages/richtext-lexical/src/utilities/createServerFeature.ts @@ -9,10 +9,7 @@ import type { } from '../features/typesServer.js' import type { ServerEditorConfig } from '../lexical/config/types.js' -export type CreateServerFeatureArgs = Pick< - FeatureProviderServer, - 'dependencies' | 'dependenciesPriority' | 'dependenciesSoft' | 'key' -> & { +export type CreateServerFeatureArgs = { feature: | ((props: { config: SanitizedConfig @@ -28,7 +25,10 @@ export type CreateServerFeatureArgs> | ServerFeature) | Omit, 'sanitizedServerFeatureProps'> -} +} & Pick< + FeatureProviderServer, + 'dependencies' | 'dependenciesPriority' | 'dependenciesSoft' | 'key' +> export const createServerFeature: < UnSanitizedProps = undefined, diff --git a/packages/richtext-slate/src/data/populate.ts b/packages/richtext-slate/src/data/populate.ts index 5c6540c5a..593da378d 100644 --- a/packages/richtext-slate/src/data/populate.ts +++ b/packages/richtext-slate/src/data/populate.ts @@ -27,11 +27,11 @@ export const populate = async ({ overrideAccess, req, showHiddenFields, -}: Omit & { +}: { collection: Collection field: Field id: string -}): Promise => { +} & Omit): Promise => { const dataRef = data as Record const doc = await req.payloadDataLoader.load( diff --git a/packages/richtext-slate/src/field/RichText.tsx b/packages/richtext-slate/src/field/RichText.tsx index 6c1fb9d5d..6de60a712 100644 --- a/packages/richtext-slate/src/field/RichText.tsx +++ b/packages/richtext-slate/src/field/RichText.tsx @@ -43,14 +43,14 @@ const baseClass = 'rich-text' declare module 'slate' { interface CustomTypes { - Editor: BaseEditor & ReactEditor & HistoryEditor + Editor: BaseEditor & HistoryEditor & ReactEditor Element: ElementNode Text: TextNode } } const RichTextField: React.FC< - FormFieldBase & { + { elements: EnabledFeatures['elements'] leaves: EnabledFeatures['leaves'] name: string @@ -58,7 +58,7 @@ const RichTextField: React.FC< plugins: RichTextPlugin[] richTextComponentMap: Map width?: string - } + } & FormFieldBase > = (props) => { const { name, diff --git a/packages/richtext-slate/src/field/elements/link/types.ts b/packages/richtext-slate/src/field/elements/link/types.ts index 8242f9f0d..bb852ac44 100644 --- a/packages/richtext-slate/src/field/elements/link/types.ts +++ b/packages/richtext-slate/src/field/elements/link/types.ts @@ -1,9 +1,9 @@ import type { Element } from 'slate' -export type LinkElementType = Element & { +export type LinkElementType = { doc: Record fields: Record linkType: string newTab: boolean url: string -} +} & Element diff --git a/packages/richtext-slate/src/field/elements/relationship/Element/index.tsx b/packages/richtext-slate/src/field/elements/relationship/Element/index.tsx index 22fd491a5..60df6aed7 100644 --- a/packages/richtext-slate/src/field/elements/relationship/Element/index.tsx +++ b/packages/richtext-slate/src/field/elements/relationship/Element/index.tsx @@ -27,10 +27,10 @@ const initialParams = { depth: 0, } -type Props = FormFieldBase & { +type Props = { name: string richTextComponentMap: Map -} +} & FormFieldBase const RelationshipElement: React.FC = () => { const { diff --git a/packages/richtext-slate/src/field/elements/relationship/types.ts b/packages/richtext-slate/src/field/elements/relationship/types.ts index 66a7ff947..48300ac07 100644 --- a/packages/richtext-slate/src/field/elements/relationship/types.ts +++ b/packages/richtext-slate/src/field/elements/relationship/types.ts @@ -1,8 +1,8 @@ import type { Element } from 'slate' -export type RelationshipElementType = Element & { +export type RelationshipElementType = { relationTo: string value: { id: number | string } | null -} +} & Element diff --git a/packages/richtext-slate/src/field/elements/upload/Element/UploadDrawer/index.tsx b/packages/richtext-slate/src/field/elements/upload/Element/UploadDrawer/index.tsx index d08f069cf..0a0f50171 100644 --- a/packages/richtext-slate/src/field/elements/upload/Element/UploadDrawer/index.tsx +++ b/packages/richtext-slate/src/field/elements/upload/Element/UploadDrawer/index.tsx @@ -29,10 +29,10 @@ import { uploadFieldsSchemaPath } from '../../shared.js' export const UploadDrawer: React.FC<{ drawerSlug: string element: UploadElementType - fieldProps: FormFieldBase & { + fieldProps: { name: string richTextComponentMap: Map - } + } & FormFieldBase relatedCollection: ClientCollectionConfig schemaPath: string }> = (props) => { diff --git a/packages/richtext-slate/src/field/elements/upload/Element/index.tsx b/packages/richtext-slate/src/field/elements/upload/Element/index.tsx index dd4620f1d..7b9738ba3 100644 --- a/packages/richtext-slate/src/field/elements/upload/Element/index.tsx +++ b/packages/richtext-slate/src/field/elements/upload/Element/index.tsx @@ -33,12 +33,12 @@ const initialParams = { depth: 0, } -type Props = FormFieldBase & { +type Props = { name: string richTextComponentMap: Map -} +} & FormFieldBase -const UploadElement: React.FC = ({ +const UploadElement: React.FC<{ enabledCollectionSlugs?: string[] } & Props> = ({ enabledCollectionSlugs, }) => { const { diff --git a/packages/richtext-slate/src/field/elements/upload/types.ts b/packages/richtext-slate/src/field/elements/upload/types.ts index 0012c0ab4..d6d5ca0a6 100644 --- a/packages/richtext-slate/src/field/elements/upload/types.ts +++ b/packages/richtext-slate/src/field/elements/upload/types.ts @@ -1,9 +1,9 @@ import type { Element } from 'slate' -export type UploadElementType = Element & { +export type UploadElementType = { fields: Record relationTo: string value: { id: number | string } | null -} +} & Element diff --git a/packages/richtext-slate/src/field/index.tsx b/packages/richtext-slate/src/field/index.tsx index 5a738bb06..cbdd5164f 100644 --- a/packages/richtext-slate/src/field/index.tsx +++ b/packages/richtext-slate/src/field/index.tsx @@ -17,10 +17,10 @@ const RichTextEditor = lazy(() => ) export const RichTextField: React.FC< - FormFieldBase & { + { name: string richTextComponentMap: Map - } + } & FormFieldBase > = (props) => { const { richTextComponentMap } = props diff --git a/packages/richtext-slate/src/field/providers/ElementButtonProvider.tsx b/packages/richtext-slate/src/field/providers/ElementButtonProvider.tsx index 7208214c2..3ff82e44e 100644 --- a/packages/richtext-slate/src/field/providers/ElementButtonProvider.tsx +++ b/packages/richtext-slate/src/field/providers/ElementButtonProvider.tsx @@ -6,10 +6,10 @@ import React from 'react' type ElementButtonContextType = { disabled?: boolean - fieldProps: FormFieldBase & { + fieldProps: { name: string richTextComponentMap: Map - } + } & FormFieldBase path: string schemaPath: string } @@ -21,9 +21,9 @@ const ElementButtonContext = React.createContext({ }) export const ElementButtonProvider: React.FC< - ElementButtonContextType & { + { children: React.ReactNode - } + } & ElementButtonContextType > = (props) => { const { children, ...rest } = props diff --git a/packages/richtext-slate/src/field/providers/ElementProvider.tsx b/packages/richtext-slate/src/field/providers/ElementProvider.tsx index 34859ca06..8d0064bb1 100644 --- a/packages/richtext-slate/src/field/providers/ElementProvider.tsx +++ b/packages/richtext-slate/src/field/providers/ElementProvider.tsx @@ -9,10 +9,10 @@ type ElementContextType = { children: React.ReactNode editorRef: React.MutableRefObject element: T - fieldProps: FormFieldBase & { + fieldProps: { name: string richTextComponentMap: Map - } + } & FormFieldBase path: string schemaPath: string } @@ -28,9 +28,9 @@ const ElementContext = React.createContext>({ }) export const ElementProvider: React.FC< - ElementContextType & { + { childNodes: React.ReactNode - } + } & ElementContextType > = (props) => { const { childNodes, children, ...rest } = props diff --git a/packages/richtext-slate/src/field/providers/LeafButtonProvider.tsx b/packages/richtext-slate/src/field/providers/LeafButtonProvider.tsx index 453d04cf0..ec33422d0 100644 --- a/packages/richtext-slate/src/field/providers/LeafButtonProvider.tsx +++ b/packages/richtext-slate/src/field/providers/LeafButtonProvider.tsx @@ -5,9 +5,9 @@ import type { FormFieldBase } from '@payloadcms/ui' import React from 'react' type LeafButtonContextType = { - fieldProps: FormFieldBase & { + fieldProps: { name: string - } + } & FormFieldBase path: string schemaPath: string } @@ -19,9 +19,9 @@ const LeafButtonContext = React.createContext({ }) export const LeafButtonProvider: React.FC< - LeafButtonContextType & { + { children: React.ReactNode - } + } & LeafButtonContextType > = (props) => { const { children, ...rest } = props diff --git a/packages/richtext-slate/src/field/providers/LeafProvider.tsx b/packages/richtext-slate/src/field/providers/LeafProvider.tsx index 38da43b14..3f52a5f9a 100644 --- a/packages/richtext-slate/src/field/providers/LeafProvider.tsx +++ b/packages/richtext-slate/src/field/providers/LeafProvider.tsx @@ -8,9 +8,9 @@ type LeafContextType = { attributes: Record children: React.ReactNode editorRef: React.MutableRefObject - fieldProps: FormFieldBase & { + fieldProps: { name: string - } + } & FormFieldBase leaf: string path: string schemaPath: string @@ -27,9 +27,9 @@ const LeafContext = React.createContext({ }) export const LeafProvider: React.FC< - LeafContextType & { + { result: React.ReactNode - } + } & LeafContextType > = (props) => { const { children, result, ...rest } = props diff --git a/packages/storage-azure/src/staticHandler.ts b/packages/storage-azure/src/staticHandler.ts index b05c493df..f24f4a14b 100644 --- a/packages/storage-azure/src/staticHandler.ts +++ b/packages/storage-azure/src/staticHandler.ts @@ -26,7 +26,7 @@ export const getHandler = ({ collection, getStorageClient }: Args): StaticHandle ) const blob = await blockBlobClient.download(start, end) - // eslint-disable-next-line no-underscore-dangle + const response = blob._response // Manually create a ReadableStream for the web from a Node.js stream. diff --git a/packages/storage-uploadthing/src/index.ts b/packages/storage-uploadthing/src/index.ts index fbc15386f..5a9cc5732 100644 --- a/packages/storage-uploadthing/src/index.ts +++ b/packages/storage-uploadthing/src/index.ts @@ -31,12 +31,12 @@ export type UploadthingStorageOptions = { /** * Uploadthing Options */ - options: UTApiOptions & { + options: { /** * @default 'public-read' */ acl?: ACL - } + } & UTApiOptions } type UploadthingPlugin = (uploadthingStorageOptions: UploadthingStorageOptions) => Plugin diff --git a/packages/storage-vercel-blob/src/handleUpload.ts b/packages/storage-vercel-blob/src/handleUpload.ts index e5b0afb32..f6291a26a 100644 --- a/packages/storage-vercel-blob/src/handleUpload.ts +++ b/packages/storage-vercel-blob/src/handleUpload.ts @@ -5,10 +5,10 @@ import path from 'path' import type { VercelBlobStorageOptions } from './index.js' -type HandleUploadArgs = Omit & { +type HandleUploadArgs = { baseUrl: string prefix?: string -} +} & Omit export const getHandleUpload = ({ access = 'public', diff --git a/packages/storage-vercel-blob/src/index.ts b/packages/storage-vercel-blob/src/index.ts index aacf4885b..dc89cf31c 100644 --- a/packages/storage-vercel-blob/src/index.ts +++ b/packages/storage-vercel-blob/src/index.ts @@ -132,7 +132,7 @@ export const vercelBlobStorage: VercelBlobStoragePlugin = } function vercelBlobStorageInternal( - options: VercelBlobStorageOptions & { baseUrl: string }, + options: { baseUrl: string } & VercelBlobStorageOptions, ): Adapter { return ({ collection, prefix }): GeneratedAdapter => { const { access, addRandomSuffix, baseUrl, cacheControlMaxAge, token } = options diff --git a/packages/translations/src/exports/index.ts b/packages/translations/src/exports/index.ts index 416cec3c0..b2cad1383 100644 --- a/packages/translations/src/exports/index.ts +++ b/packages/translations/src/exports/index.ts @@ -1,5 +1,5 @@ export { importDateFNSLocale } from '../importDateFNSLocale.js' +export type * from '../types.js' export { getTranslation } from '../utilities/getTranslation.js' export { initI18n, t } from '../utilities/init.js' export { acceptedLanguages, extractHeaderLanguage, rtlLanguages } from '../utilities/languages.js' -export type * from '../types.js' diff --git a/packages/translations/src/utilities/init.ts b/packages/translations/src/utilities/init.ts index ded7cebce..59c8ba6ea 100644 --- a/packages/translations/src/utilities/init.ts +++ b/packages/translations/src/utilities/init.ts @@ -161,9 +161,9 @@ function memoize( fn: (args: Parameters[0]) => Promise, keys: string[], ): ( - args: Parameters[0] & { + args: { context: 'api' | 'client' - }, + } & Parameters[0], ) => Promise { const cacheMap = new Map() diff --git a/packages/ui/src/elements/CodeEditor/types.ts b/packages/ui/src/elements/CodeEditor/types.ts index 6914cdc22..538a34727 100644 --- a/packages/ui/src/elements/CodeEditor/types.ts +++ b/packages/ui/src/elements/CodeEditor/types.ts @@ -1,5 +1,5 @@ import type { EditorProps } from '@monaco-editor/react' -export type Props = EditorProps & { +export type Props = { readOnly?: boolean -} +} & EditorProps diff --git a/packages/ui/src/elements/DatePicker/types.ts b/packages/ui/src/elements/DatePicker/types.ts index 37f76731f..ab1625400 100644 --- a/packages/ui/src/elements/DatePicker/types.ts +++ b/packages/ui/src/elements/DatePicker/types.ts @@ -1,10 +1,10 @@ import type { DayPickerProps, SharedProps, TimePickerProps } from 'payload' -export type Props = SharedProps & - DayPickerProps & - TimePickerProps & { - onChange?: (val: Date) => void - placeholder?: string - readOnly?: boolean - value?: Date - } +export type Props = { + onChange?: (val: Date) => void + placeholder?: string + readOnly?: boolean + value?: Date +} & DayPickerProps & + SharedProps & + TimePickerProps diff --git a/packages/ui/src/elements/DocumentDrawer/types.ts b/packages/ui/src/elements/DocumentDrawer/types.ts index 4b1876018..b10a3e216 100644 --- a/packages/ui/src/elements/DocumentDrawer/types.ts +++ b/packages/ui/src/elements/DocumentDrawer/types.ts @@ -4,21 +4,21 @@ import type { HTMLAttributes } from 'react' import type { DocumentInfoContext } from '../../providers/DocumentInfo/types.js' import type { Props as DrawerProps } from '../Drawer/types.js' -export type DocumentDrawerProps = Pick & { +export type DocumentDrawerProps = { collectionSlug: string drawerSlug?: string id?: null | number | string onSave?: DocumentInfoContext['onSave'] -} +} & Pick -export type DocumentTogglerProps = HTMLAttributes & { +export type DocumentTogglerProps = { children?: React.ReactNode className?: string collectionSlug: string disabled?: boolean drawerSlug?: string id?: string -} +} & HTMLAttributes export type UseDocumentDrawer = (args: { collectionSlug: string; id?: number | string }) => [ React.FC>, // drawer diff --git a/packages/ui/src/elements/DraggableSortable/DraggableSortableItem/index.tsx b/packages/ui/src/elements/DraggableSortable/DraggableSortableItem/index.tsx index 905dd4f32..f020f627f 100644 --- a/packages/ui/src/elements/DraggableSortable/DraggableSortableItem/index.tsx +++ b/packages/ui/src/elements/DraggableSortable/DraggableSortableItem/index.tsx @@ -8,9 +8,9 @@ import type { ChildFunction } from './types.js' import { useDraggableSortable } from '../useDraggableSortable/index.js' export const DraggableSortableItem: React.FC< - UseDraggableArguments & { + { children: ChildFunction - } + } & UseDraggableArguments > = (props) => { const { id, children, disabled } = props diff --git a/packages/ui/src/elements/DraggableSortable/DraggableSortableItem/types.ts b/packages/ui/src/elements/DraggableSortable/DraggableSortableItem/types.ts index 0425710f7..a19d0ad92 100644 --- a/packages/ui/src/elements/DraggableSortable/DraggableSortableItem/types.ts +++ b/packages/ui/src/elements/DraggableSortable/DraggableSortableItem/types.ts @@ -4,13 +4,13 @@ import type React from 'react' import type { UseDraggableSortableReturn } from '../useDraggableSortable/types.js' -export type DragHandleProps = UseDraggableArguments & { +export type DragHandleProps = { attributes: UseDraggableArguments['attributes'] listeners: SyntheticListenerMap -} +} & UseDraggableArguments export type ChildFunction = (args: UseDraggableSortableReturn) => React.ReactNode -export type Props = UseDraggableArguments & { +export type Props = { children: ChildFunction -} +} & UseDraggableArguments diff --git a/packages/ui/src/elements/Drawer/types.ts b/packages/ui/src/elements/Drawer/types.ts index b93821963..3dd410999 100644 --- a/packages/ui/src/elements/Drawer/types.ts +++ b/packages/ui/src/elements/Drawer/types.ts @@ -10,9 +10,9 @@ export type Props = { title?: string } -export type TogglerProps = HTMLAttributes & { +export type TogglerProps = { children: React.ReactNode className?: string disabled?: boolean slug: string -} +} & HTMLAttributes diff --git a/packages/ui/src/elements/FileDetails/index.tsx b/packages/ui/src/elements/FileDetails/index.tsx index 0f0a4aec6..dea5e5306 100644 --- a/packages/ui/src/elements/FileDetails/index.tsx +++ b/packages/ui/src/elements/FileDetails/index.tsx @@ -14,9 +14,9 @@ import type { Data, FileSizes, SanitizedCollectionConfig } from 'payload' export type FileDetailsProps = { collectionSlug: string customUploadActions?: React.ReactNode[] - doc: Data & { + doc: { sizes?: FileSizes - } + } & Data enableAdjustments?: boolean handleRemove?: () => void hasImageSizes?: boolean diff --git a/packages/ui/src/elements/ListDrawer/types.ts b/packages/ui/src/elements/ListDrawer/types.ts index f3def70dd..52f95ca21 100644 --- a/packages/ui/src/elements/ListDrawer/types.ts +++ b/packages/ui/src/elements/ListDrawer/types.ts @@ -11,12 +11,12 @@ export type ListDrawerProps = { selectedCollection?: string } -export type ListTogglerProps = HTMLAttributes & { +export type ListTogglerProps = { children?: React.ReactNode className?: string disabled?: boolean drawerSlug?: string -} +} & HTMLAttributes export type UseListDrawer = (args: { collectionSlugs?: string[] diff --git a/packages/ui/src/elements/Pill/index.tsx b/packages/ui/src/elements/Pill/index.tsx index 6d66e6969..6447d2a06 100644 --- a/packages/ui/src/elements/Pill/index.tsx +++ b/packages/ui/src/elements/Pill/index.tsx @@ -14,9 +14,9 @@ export type PillProps = { children?: React.ReactNode className?: string draggable?: boolean - elementProps?: HTMLAttributes & { + elementProps?: { ref: React.RefCallback - } + } & HTMLAttributes icon?: React.ReactNode id?: string onClick?: () => void diff --git a/packages/ui/src/elements/PreviewSizes/index.tsx b/packages/ui/src/elements/PreviewSizes/index.tsx index bfda2c129..da43faa37 100644 --- a/packages/ui/src/elements/PreviewSizes/index.tsx +++ b/packages/ui/src/elements/PreviewSizes/index.tsx @@ -8,9 +8,9 @@ import './index.scss' const baseClass = 'preview-sizes' -type FileInfo = FileSize & { +type FileInfo = { url: string -} +} & FileSize type FilesSizesWithUrl = { [key: string]: FileInfo } @@ -68,9 +68,9 @@ const PreviewSizeCard: React.FC = ({ } export type PreviewSizesProps = { - doc: Data & { + doc: { sizes?: FilesSizesWithUrl - } + } & Data imageCacheTag?: string uploadConfig: SanitizedCollectionConfig['upload'] } diff --git a/packages/ui/src/elements/ReactSelect/Control/index.tsx b/packages/ui/src/elements/ReactSelect/Control/index.tsx index 6715d22e8..e66ff29b5 100644 --- a/packages/ui/src/elements/ReactSelect/Control/index.tsx +++ b/packages/ui/src/elements/ReactSelect/Control/index.tsx @@ -31,7 +31,7 @@ export const Control: React.FC> = (props) => { }, // react-select has this typed incorrectly so we disable the linting rule // we need to prevent react-select from hijacking the 'onKeyDown' event while modals are open (i.e. the 'Relationship' field component) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment + onMouseDown: (e) => { // we need to prevent react-select from hijacking the 'onMouseDown' event while modals are open (i.e. the 'Relationship' field component) if (!disableMouseDown) { diff --git a/packages/ui/src/elements/ReactSelect/DropdownIndicator/index.tsx b/packages/ui/src/elements/ReactSelect/DropdownIndicator/index.tsx index 639620715..addcd8bc6 100644 --- a/packages/ui/src/elements/ReactSelect/DropdownIndicator/index.tsx +++ b/packages/ui/src/elements/ReactSelect/DropdownIndicator/index.tsx @@ -10,9 +10,9 @@ import './index.scss' const baseClass = 'dropdown-indicator' export const DropdownIndicator: React.FC< - DropdownIndicatorProps & { + { innerProps: JSX.IntrinsicElements['button'] - } + } & DropdownIndicatorProps > = (props) => { const { innerProps: { ref, ...restInnerProps }, diff --git a/packages/ui/src/elements/ReactSelect/MultiValueRemove/index.tsx b/packages/ui/src/elements/ReactSelect/MultiValueRemove/index.tsx index b09546361..5c25cfe71 100644 --- a/packages/ui/src/elements/ReactSelect/MultiValueRemove/index.tsx +++ b/packages/ui/src/elements/ReactSelect/MultiValueRemove/index.tsx @@ -13,9 +13,9 @@ import './index.scss' const baseClass = 'multi-value-remove' export const MultiValueRemove: React.FC< - MultiValueRemoveProps & { + { innerProps: JSX.IntrinsicElements['button'] - } + } & MultiValueRemoveProps > = (props) => { const { innerProps: { className, onClick, onTouchEnd }, diff --git a/packages/ui/src/elements/ReactSelect/index.tsx b/packages/ui/src/elements/ReactSelect/index.tsx index 34462ccea..5cfc6a918 100644 --- a/packages/ui/src/elements/ReactSelect/index.tsx +++ b/packages/ui/src/elements/ReactSelect/index.tsx @@ -111,7 +111,6 @@ const SelectAdapter: React.FC = (props) => { ) } const handleKeyDown: KeyboardEventHandler = (event) => { - // eslint-disable-next-line no-restricted-globals if (numberOnly === true) { const acceptableKeys = [ 'Tab', diff --git a/packages/ui/src/elements/ReactSelect/types.ts b/packages/ui/src/elements/ReactSelect/types.ts index 51538c818..60e50ab92 100644 --- a/packages/ui/src/elements/ReactSelect/types.ts +++ b/packages/ui/src/elements/ReactSelect/types.ts @@ -29,7 +29,7 @@ declare module 'react-select/dist/declarations/src' { IsMulti extends boolean, Group extends GroupBase