Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
5.5 KiB
Plaintext
1 line
5.5 KiB
Plaintext
{"version":3,"sources":["../../../../src/fields/baseFields/slug/generateSlug.ts"],"sourcesContent":["import type { PayloadRequest } from '../../../types/index.js'\nimport type { FieldHook } from '../../config/types.js'\nimport type { SlugFieldArgs, Slugify } from './index.js'\n\nimport { hasAutosaveEnabled } from '../../../utilities/getVersionsConfig.js'\nimport { slugify as defaultSlugify } from '../../../utilities/slugify.js'\nimport { countVersions } from './countVersions.js'\n\ntype HookArgs = {\n slugFieldName: NonNullable<SlugFieldArgs['name']>\n} & Pick<SlugFieldArgs, 'slugify'> &\n Required<Pick<SlugFieldArgs, 'useAsSlug'>>\n\nconst slugify = ({\n customSlugify,\n data,\n req,\n valueToSlugify,\n}: {\n customSlugify?: Slugify\n data: Record<string, unknown>\n req: PayloadRequest\n valueToSlugify?: string\n}) => {\n if (customSlugify) {\n return customSlugify({ data, req, valueToSlugify })\n }\n\n return defaultSlugify(valueToSlugify)\n}\n\n/**\n * This is a `BeforeChange` field hook used to auto-generate the `slug` field.\n * See `slugField` for more details.\n */\nexport const generateSlug =\n ({ slugFieldName, slugify: customSlugify, useAsSlug }: HookArgs): FieldHook =>\n async ({ collection, data, global, operation, originalDoc, req, value: isChecked }) => {\n if (operation === 'create') {\n if (data) {\n data[slugFieldName] = slugify({\n customSlugify,\n data,\n req,\n // Ensure user-defined slugs are not overwritten during create\n // Use a generic falsy check here to include empty strings\n valueToSlugify: data?.[slugFieldName] || data?.[useAsSlug],\n })\n }\n\n return Boolean(!data?.[slugFieldName])\n }\n\n if (operation === 'update') {\n // Early return to avoid additional processing\n if (!isChecked) {\n return false\n }\n\n if (!hasAutosaveEnabled(collection || global!)) {\n // We can generate the slug at this point\n if (data) {\n data[slugFieldName] = slugify({\n customSlugify,\n data,\n req,\n valueToSlugify: data?.[useAsSlug],\n })\n }\n\n return Boolean(!data?.[slugFieldName])\n } else {\n // If we're publishing, we can avoid querying as we can safely assume we've exceeded the version threshold (2)\n const isPublishing = data?._status === 'published'\n\n // Ensure the user can take over the generated slug themselves without it ever being overridden back\n const userOverride = data?.[slugFieldName] !== originalDoc?.[slugFieldName]\n\n if (!userOverride) {\n if (data) {\n // If the fallback is an empty string, we want the slug to return to `null`\n // This will ensure that live preview conditions continue to run as expected\n data[slugFieldName] = data?.[useAsSlug]\n ? slugify({\n customSlugify,\n data,\n req,\n valueToSlugify: data?.[useAsSlug],\n })\n : null\n }\n }\n\n if (isPublishing || userOverride) {\n return false\n }\n\n // Important: ensure `countVersions` is not called unnecessarily often\n // That is why this is buried beneath all these conditions\n const versionCount = await countVersions({\n collectionSlug: collection?.slug,\n globalSlug: global?.slug,\n parentID: originalDoc?.id,\n req,\n })\n\n if (versionCount <= 2) {\n return true\n } else {\n return false\n }\n }\n }\n }\n"],"names":["hasAutosaveEnabled","slugify","defaultSlugify","countVersions","customSlugify","data","req","valueToSlugify","generateSlug","slugFieldName","useAsSlug","collection","global","operation","originalDoc","value","isChecked","Boolean","isPublishing","_status","userOverride","versionCount","collectionSlug","slug","globalSlug","parentID","id"],"mappings":"AAIA,SAASA,kBAAkB,QAAQ,0CAAyC;AAC5E,SAASC,WAAWC,cAAc,QAAQ,gCAA+B;AACzE,SAASC,aAAa,QAAQ,qBAAoB;AAOlD,MAAMF,UAAU,CAAC,EACfG,aAAa,EACbC,IAAI,EACJC,GAAG,EACHC,cAAc,EAMf;IACC,IAAIH,eAAe;QACjB,OAAOA,cAAc;YAAEC;YAAMC;YAAKC;QAAe;IACnD;IAEA,OAAOL,eAAeK;AACxB;AAEA;;;CAGC,GACD,OAAO,MAAMC,eACX,CAAC,EAAEC,aAAa,EAAER,SAASG,aAAa,EAAEM,SAAS,EAAY,GAC/D,OAAO,EAAEC,UAAU,EAAEN,IAAI,EAAEO,MAAM,EAAEC,SAAS,EAAEC,WAAW,EAAER,GAAG,EAAES,OAAOC,SAAS,EAAE;QAChF,IAAIH,cAAc,UAAU;YAC1B,IAAIR,MAAM;gBACRA,IAAI,CAACI,cAAc,GAAGR,QAAQ;oBAC5BG;oBACAC;oBACAC;oBACA,8DAA8D;oBAC9D,0DAA0D;oBAC1DC,gBAAgBF,MAAM,CAACI,cAAc,IAAIJ,MAAM,CAACK,UAAU;gBAC5D;YACF;YAEA,OAAOO,QAAQ,CAACZ,MAAM,CAACI,cAAc;QACvC;QAEA,IAAII,cAAc,UAAU;YAC1B,8CAA8C;YAC9C,IAAI,CAACG,WAAW;gBACd,OAAO;YACT;YAEA,IAAI,CAAChB,mBAAmBW,cAAcC,SAAU;gBAC9C,yCAAyC;gBACzC,IAAIP,MAAM;oBACRA,IAAI,CAACI,cAAc,GAAGR,QAAQ;wBAC5BG;wBACAC;wBACAC;wBACAC,gBAAgBF,MAAM,CAACK,UAAU;oBACnC;gBACF;gBAEA,OAAOO,QAAQ,CAACZ,MAAM,CAACI,cAAc;YACvC,OAAO;gBACL,8GAA8G;gBAC9G,MAAMS,eAAeb,MAAMc,YAAY;gBAEvC,oGAAoG;gBACpG,MAAMC,eAAef,MAAM,CAACI,cAAc,KAAKK,aAAa,CAACL,cAAc;gBAE3E,IAAI,CAACW,cAAc;oBACjB,IAAIf,MAAM;wBACR,2EAA2E;wBAC3E,4EAA4E;wBAC5EA,IAAI,CAACI,cAAc,GAAGJ,MAAM,CAACK,UAAU,GACnCT,QAAQ;4BACNG;4BACAC;4BACAC;4BACAC,gBAAgBF,MAAM,CAACK,UAAU;wBACnC,KACA;oBACN;gBACF;gBAEA,IAAIQ,gBAAgBE,cAAc;oBAChC,OAAO;gBACT;gBAEA,sEAAsE;gBACtE,0DAA0D;gBAC1D,MAAMC,eAAe,MAAMlB,cAAc;oBACvCmB,gBAAgBX,YAAYY;oBAC5BC,YAAYZ,QAAQW;oBACpBE,UAAUX,aAAaY;oBACvBpB;gBACF;gBAEA,IAAIe,gBAAgB,GAAG;oBACrB,OAAO;gBACT,OAAO;oBACL,OAAO;gBACT;YACF;QACF;IACF,EAAC"} |