diff --git a/package.json b/package.json index a4b5642..810e8cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-enchants", - "version": "1.1.19", + "version": "1.1.20", "private": true, "description": "", "keywords": [], diff --git a/packages/better-localized-fields/package.json b/packages/better-localized-fields/package.json index 4333ce8..257aaf8 100644 --- a/packages/better-localized-fields/package.json +++ b/packages/better-localized-fields/package.json @@ -1,6 +1,6 @@ { "name": "@payload-enchants/better-localized-fields", - "version": "1.1.19", + "version": "1.1.20", "private": false, "bugs": "https://github.com/r1tsuu/payload-enchants/issues", "repository": "https://github.com/r1tsuu/payload-enchants", diff --git a/packages/better-use-as-title/package.json b/packages/better-use-as-title/package.json index 3e45ae6..c5f0bb3 100644 --- a/packages/better-use-as-title/package.json +++ b/packages/better-use-as-title/package.json @@ -1,6 +1,6 @@ { "name": "@payload-enchants/better-use-as-title", - "version": "1.1.19", + "version": "1.1.20", "private": false, "bugs": "https://github.com/r1tsuu/payload-enchants/issues", "repository": "https://github.com/r1tsuu/payload-enchants", diff --git a/packages/bump-payload/package.json b/packages/bump-payload/package.json index a7fe0f8..9666d4e 100644 --- a/packages/bump-payload/package.json +++ b/packages/bump-payload/package.json @@ -1,6 +1,6 @@ { "name": "bump-payload", - "version": "1.1.19", + "version": "1.1.20", "private": false, "bugs": "https://github.com/r1tsuu/payload-enchants/issues", "repository": "https://github.com/r1tsuu/payload-enchants", diff --git a/packages/cached-local-api/README.md b/packages/cached-local-api/README.md index c9f2791..3ec3d13 100644 --- a/packages/cached-local-api/README.md +++ b/packages/cached-local-api/README.md @@ -129,10 +129,12 @@ export type Args = { }; export type FindOneFieldConfig = { - /** @default "where: { equals: value }" */ - buildWhere?: (valueToSearch: unknown) => Where; - - /** @default "doc[fieldName]" */ + buildWhere?: (args: { + args: FindOneArgs; + fieldName: string; + shouldCache: boolean; + value: unknown; + }) => Where; getFieldFromDoc?: (doc: Record) => unknown; name: string; }; diff --git a/packages/cached-local-api/package.json b/packages/cached-local-api/package.json index dadbd75..709c0c5 100644 --- a/packages/cached-local-api/package.json +++ b/packages/cached-local-api/package.json @@ -1,6 +1,6 @@ { "name": "@payload-enchants/cached-local-api", - "version": "1.1.19", + "version": "1.1.20", "private": false, "bugs": "https://github.com/r1tsuu/payload-enchants/issues", "repository": "https://github.com/r1tsuu/payload-enchants", diff --git a/packages/cached-local-api/src/operations/findOne.ts b/packages/cached-local-api/src/operations/findOne.ts index b8d5669..37a0140 100644 --- a/packages/cached-local-api/src/operations/findOne.ts +++ b/packages/cached-local-api/src/operations/findOne.ts @@ -35,10 +35,10 @@ export const buildFindOne = ({ { field: 'args.field', message: 'Invalid findOne field' + args.field }, ]); - const where = field.buildWhere(args.value); - const shouldCache = await ctx.shouldCacheFindOperation(args); + const where = field.buildWhere({ args, fieldName: field.name, shouldCache, value: args.value }); + const fullArgs = { ...args, where, diff --git a/packages/cached-local-api/src/plugin/extendCollectionConfig.ts b/packages/cached-local-api/src/plugin/extendCollectionConfig.ts index 9522655..4664ded 100644 --- a/packages/cached-local-api/src/plugin/extendCollectionConfig.ts +++ b/packages/cached-local-api/src/plugin/extendCollectionConfig.ts @@ -1,18 +1,59 @@ -import type { CollectionConfig } from 'payload/types'; +import type { + CollectionAfterChangeHook, + CollectionAfterDeleteHook, + CollectionConfig, +} from 'payload/types'; import type { SanitizedArgsContext } from '../types'; -export const extendCollectionConfig = ({ +const executeHook = async ({ cachedCollectionConfig, collection, ctx, + hookArgs, + type, }: { cachedCollectionConfig: SanitizedArgsContext['collections'][0]; collection: CollectionConfig; ctx: SanitizedArgsContext; -}): CollectionConfig => { + hookArgs: Parameters[0]; + type: 'afterChange' | 'afterDelete'; +}) => { + if (!!hookArgs.doc?.id) return; + const shouldFunction = + type === 'afterDelete' ? ctx.shouldRevalidateOnDelete : ctx.shouldRevalidateOnChange; + + const shouldValidate = await shouldFunction(hookArgs as any); + + if (!shouldValidate) return; + const { slug } = collection; + ctx.revalidateTag(ctx.buildTagFindByID({ id: hookArgs.doc.id, slug: slug as string })); + ctx.revalidateTag(ctx.buildTagFind({ slug })); + + for (const field of cachedCollectionConfig.findOneFields) { + const value = field.getFieldFromDoc(hookArgs.doc); + + ctx.revalidateTag( + ctx.buildTagFindOne({ + fieldName: field.name, + slug, + value, + }), + ); + } +}; + +export const extendCollectionConfig = ({ + cachedCollectionConfig, + collection, + ctx, +}: { + cachedCollectionConfig: SanitizedArgsContext['collections'][0]; + collection: CollectionConfig; + ctx: SanitizedArgsContext; +}): CollectionConfig => { return { ...collection, hooks: { @@ -20,37 +61,25 @@ export const extendCollectionConfig = ({ afterChange: [ ...(collection.hooks?.afterChange ?? []), async (hookArgs) => { - if (!!hookArgs.doc?.id) return; - const shouldValidate = await ctx.shouldRevalidateOnChange(hookArgs); - - if (!shouldValidate) return; - - ctx.revalidateTag(ctx.buildTagFindByID({ id: hookArgs.doc.id, slug })); - ctx.revalidateTag(ctx.buildTagFind({ slug })); - - for (const field of cachedCollectionConfig.findOneFields) { - const value = field.getFieldFromDoc(hookArgs.doc); - - ctx.revalidateTag( - ctx.buildTagFindOne({ - fieldName: field.name, - slug, - value, - }), - ); - } + await executeHook({ + cachedCollectionConfig, + collection, + ctx, + hookArgs, + type: 'afterChange', + }); }, ], afterDelete: [ ...(collection.hooks?.afterDelete ?? []), async (hookArgs) => { - if (!!hookArgs.doc?.id) return; - const shouldValidate = await ctx.shouldRevalidateOnDelete(hookArgs); - - if (!shouldValidate) return; - - ctx.revalidateTag(ctx.buildTagFindByID({ id: hookArgs.doc.id, slug: slug as string })); - ctx.revalidateTag(ctx.buildTagFind({ slug })); + await executeHook({ + cachedCollectionConfig, + collection, + ctx, + hookArgs, + type: 'afterDelete', + }); }, ], }, diff --git a/packages/cached-local-api/src/populate/index.ts b/packages/cached-local-api/src/populate/index.ts index 62be752..0aac5e3 100644 --- a/packages/cached-local-api/src/populate/index.ts +++ b/packages/cached-local-api/src/populate/index.ts @@ -53,8 +53,6 @@ export const populate = async ({ populationList.filter((each) => each.collection.slug === collection).map((each) => each.id), ); - console.log(ids); - ids.forEach((id) => { populatedPromises.push( new Promise(async (resolve) => { diff --git a/packages/cached-local-api/src/populate/traverseRichText.ts b/packages/cached-local-api/src/populate/traverseRichText.ts index dda5d26..3e15e88 100644 --- a/packages/cached-local-api/src/populate/traverseRichText.ts +++ b/packages/cached-local-api/src/populate/traverseRichText.ts @@ -21,8 +21,6 @@ export const traverseRichText = ({ const isRelationship = key === 'value' && 'relationTo' in data; if (isRelationship) { - console.log('here', data); - const id = data[key] && typeof data[key] === 'object' ? data[key].id : data[key]; const collection = payload.collections[data.relationTo]?.config; diff --git a/packages/cached-local-api/src/sanitizedArgsContext.ts b/packages/cached-local-api/src/sanitizedArgsContext.ts index 73e07c0..eebf81a 100644 --- a/packages/cached-local-api/src/sanitizedArgsContext.ts +++ b/packages/cached-local-api/src/sanitizedArgsContext.ts @@ -14,12 +14,14 @@ const defaultBuildTagFindOne: SanitizedArgsContext['buildTagFindOne'] = ({ value, }) => `${slug}-${fieldName}-${value}`; -const defaultBuildWhere: (fieldName: string) => NonNullable = - (fieldName) => (value) => ({ - [fieldName]: { - equals: value, - }, - }); +const defaultBuildWhere: NonNullable = ({ + fieldName, + value, +}) => ({ + [fieldName]: { + equals: value, + }, +}); const defaultGetFieldFromDoc: ( fieldName: string, @@ -39,13 +41,13 @@ export const sanitizedArgsContext = (args: Args): SanitizedArgsContext => { findOneFields: (each.findOneFields ?? []).map((each) => { if (typeof each === 'object') return { - buildWhere: each.buildWhere ?? defaultBuildWhere(each.name), + buildWhere: each.buildWhere ?? defaultBuildWhere, getFieldFromDoc: each.getFieldFromDoc ?? defaultGetFieldFromDoc(each.name), name: each.name, }; return { - buildWhere: defaultBuildWhere(each), + buildWhere: defaultBuildWhere, getFieldFromDoc: defaultGetFieldFromDoc(each), name: each, }; diff --git a/packages/cached-local-api/src/types.ts b/packages/cached-local-api/src/types.ts index 6ca42e8..94412dc 100644 --- a/packages/cached-local-api/src/types.ts +++ b/packages/cached-local-api/src/types.ts @@ -51,19 +51,19 @@ export type Count = Payload['count']; export type CountArgs = Parameters[0]; export type FindOneFieldConfig = { - /** @default "where: {equals: value }" */ - buildWhere?: (valueToSearch: unknown) => Where; - - /** @default "doc[fieldName]" */ + buildWhere?: (args: { + args: FindOneArgs; + fieldName: string; + shouldCache: boolean; + value: unknown; + }) => Where; getFieldFromDoc?: (doc: Record) => unknown; name: string; }; export type Args = { collections?: Array<{ - /** array with the fields to use in findOne (name or config, see below) */ findOneFields?: (FindOneFieldConfig | string)[]; - slug: keyof GeneratedTypes['collections']; }>; globals?: Array<{ diff --git a/packages/docs-reorder/package.json b/packages/docs-reorder/package.json index 7e000b7..80627f1 100644 --- a/packages/docs-reorder/package.json +++ b/packages/docs-reorder/package.json @@ -1,6 +1,6 @@ { "name": "@payload-enchants/docs-reorder", - "version": "1.1.19", + "version": "1.1.20", "private": false, "bugs": "https://github.com/r1tsuu/payload-enchants/issues", "repository": "https://github.com/r1tsuu/payload-enchants", diff --git a/packages/seo/package.json b/packages/seo/package.json index dfbf2af..f3edf1a 100644 --- a/packages/seo/package.json +++ b/packages/seo/package.json @@ -1,6 +1,6 @@ { "name": "@payload-enchants/seo", - "version": "1.1.19", + "version": "1.1.20", "private": false, "bugs": "https://github.com/r1tsuu/payload-enchants/issues", "repository": "https://github.com/r1tsuu/payload-enchants", diff --git a/packages/translator/package.json b/packages/translator/package.json index 9a7482f..b8f78d3 100644 --- a/packages/translator/package.json +++ b/packages/translator/package.json @@ -1,6 +1,6 @@ { "name": "@payload-enchants/translator", - "version": "1.1.19", + "version": "1.1.20", "private": false, "bugs": "https://github.com/r1tsuu/payload-enchants/issues", "repository": "https://github.com/r1tsuu/payload-enchants", diff --git a/test/package.json b/test/package.json index e6135b1..c3dd9c9 100644 --- a/test/package.json +++ b/test/package.json @@ -1,6 +1,6 @@ { "name": "test", - "version": "1.1.19", + "version": "1.1.20", "private": true, "type": "module", "scripts": {