payload-plugin-urls 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -0
- package/dist/field.d.ts +11 -0
- package/dist/field.d.ts.map +1 -0
- package/dist/hooks.d.ts +5 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/link.d.ts +10 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/options.d.ts +6 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/resolver.d.ts +3 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/types.d.ts +148 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/update-urls.d.ts +15 -0
- package/dist/update-urls.d.ts.map +1 -0
- package/dist/utils.d.ts +16 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# payload-plugin-urls
|
|
2
|
+
|
|
3
|
+
Payload CMS plugin for localized document URLs, root page prefixes, and categorized collection
|
|
4
|
+
paths.
|
|
5
|
+
|
|
6
|
+
## Usage
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
import { payloadPluginUrls } from "payload-plugin-urls"
|
|
10
|
+
|
|
11
|
+
export default buildConfig({
|
|
12
|
+
plugins: [
|
|
13
|
+
payloadPluginUrls({
|
|
14
|
+
collections: [
|
|
15
|
+
{
|
|
16
|
+
slug: "pages",
|
|
17
|
+
breadcrumbs: true,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
slug: "posts",
|
|
21
|
+
rootPageField: "postsPage",
|
|
22
|
+
category: {
|
|
23
|
+
collection: "post-categories",
|
|
24
|
+
field: "categories",
|
|
25
|
+
prefixStrategy: "category",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
slug: "recipes",
|
|
30
|
+
rootPageField: "recipesPage",
|
|
31
|
+
category: {
|
|
32
|
+
collection: "recipe-categories",
|
|
33
|
+
field: "categories",
|
|
34
|
+
prefixStrategy: "rootPage",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
locales: {
|
|
39
|
+
defaultLocale: "en",
|
|
40
|
+
locales: ["en", "it"],
|
|
41
|
+
},
|
|
42
|
+
rootPages: {
|
|
43
|
+
indexPageField: "homePage",
|
|
44
|
+
fieldOverrides: {
|
|
45
|
+
homePage: {
|
|
46
|
+
label: "Homepage",
|
|
47
|
+
admin: {
|
|
48
|
+
description: "Select the page used as /",
|
|
49
|
+
width: "100%",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
postsPage: {
|
|
53
|
+
label: "Blog index",
|
|
54
|
+
required: true,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
],
|
|
60
|
+
})
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The plugin adds a managed `root-pages` global. Its `indexPage` field defines the homepage by
|
|
64
|
+
default, so that page resolves to `/` for the default locale and `/<locale>` for other locales. Use
|
|
65
|
+
`rootPages.indexPageField` to rename that field, and `rootPages.fieldOverrides` to customize the
|
|
66
|
+
generated root page relationship fields. Collection root fields such as `recipesPage` define URL
|
|
67
|
+
prefixes for documents in that collection.
|
|
68
|
+
|
|
69
|
+
Categorized collections can choose how their prefix is built:
|
|
70
|
+
|
|
71
|
+
- `prefixStrategy: "rootPage"` produces paths like `/blog/hello-world`.
|
|
72
|
+
- `prefixStrategy: "category"` produces paths like `/blog/news/hello-world`.
|
|
73
|
+
|
|
74
|
+
Each configured collection receives a hidden localized `populatedUrl` field and a `beforeChange`
|
|
75
|
+
hook that recalculates it. The plugin also installs an `update-urls` workflow and queues URL updates
|
|
76
|
+
when page, category, or root page relationships change.
|
|
77
|
+
|
|
78
|
+
## Exports
|
|
79
|
+
|
|
80
|
+
- `payloadPluginUrls`
|
|
81
|
+
- `populatedUrlField`
|
|
82
|
+
- `resolvePopulatedUrl`
|
|
83
|
+
- `getDocumentLink`
|
|
84
|
+
- `getDocumentLinkBySlugs`
|
|
85
|
+
- `getRootPageChangeSources`
|
|
86
|
+
- `withLocalePrefix`
|
|
87
|
+
- `withoutTrailingSlash`
|
package/dist/field.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PayloadPluginUrlsOptions } from "./types";
|
|
2
|
+
export declare function populatedUrlField(options?: PayloadPluginUrlsOptions): {
|
|
3
|
+
admin: {
|
|
4
|
+
hidden: boolean;
|
|
5
|
+
};
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
label: boolean;
|
|
9
|
+
localized: boolean;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAEvD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA8C;;;;;;;;EAcxF"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Hook, PayloadPluginUrlsOptions } from "./types";
|
|
2
|
+
export declare function createPopulateUrlHook(options: PayloadPluginUrlsOptions): Hook;
|
|
3
|
+
export declare function createCollectionUrlUpdateHook(options: PayloadPluginUrlsOptions): Hook;
|
|
4
|
+
export declare function createRootPagesUrlUpdateHook(options: PayloadPluginUrlsOptions): Hook;
|
|
5
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAE7D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAqC7E;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CA0CrF;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAqBpF"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var S=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var X=Object.prototype.hasOwnProperty;var Y=(e,o)=>{for(var t in o)S(e,t,{get:o[t],enumerable:!0})},Z=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of Q(o))!X.call(e,n)&&n!==t&&S(e,n,{get:()=>o[n],enumerable:!(r=K(o,n))||r.enumerable});return e};var q=e=>Z(S({},"__esModule",{value:!0}),e);var ce={};Y(ce,{default:()=>v,getBreadcrumbsUrl:()=>p,getDocumentLink:()=>U,getDocumentLinkBySlugs:()=>T,getRootPageChangeSources:()=>I,hasUrlPathChanged:()=>w,payloadPluginUrls:()=>v,populatedUrlField:()=>x,resolvePopulatedUrl:()=>f,withLocalePrefix:()=>b,withoutTrailingSlash:()=>d});module.exports=q(ce);var d=e=>e.replace(/\/$/,"").replace(/^\/?/,"/");function p(e){return(e?.at(-1)?.url??"").replace(/(^\/)|(\/$)/g,"")}function H(e,o){return{...o||{},...oe(e)}}function F(e){let{populatedUrl:o,...t}=e;return t}function $(e){if(!(!e||typeof e!="object"||!("id"in e)))return typeof e.id=="string"?e.id:void 0}function m(e){if(typeof e=="string")return e;if(!(!e||typeof e!="object"||!("id"in e)))return typeof e.id=="string"?e.id:void 0}function h(e){return d(`/${e??""}`.replace(/\/+/g,"/"))}function y(e,o){if(!e||typeof e!="object"||!(o in e))return;let t=e;return typeof t[o]=="string"?t[o]:void 0}function O(e){return e._status==="draft"}function B(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function G(e){let o=new Set;return e.filter(t=>{let r=ee(t);return o.has(r)?!1:(o.add(r),!0)})}function ee(e){switch(e.type){case"category":case"collection":case"page":return`${e.type}:${e.collection}:${e.id??""}`;case"rootPages":return`rootPages:${JSON.stringify(e.current)}:${JSON.stringify(e.previous)}`}}function oe(e){return Object.fromEntries(Object.entries(e).filter(([,o])=>o!==void 0))}function x(e={collections:[]}){return{name:e.field?.name??"populatedUrl",type:"text",label:!1,localized:!0,...e.field?.overrides??{},admin:{hidden:!0,...B(e.field?.overrides?.admin)}}}function u(e){return{...e,field:{name:"populatedUrl",...e.field},locales:{defaultLocale:"en",locales:["en"],...e.locales},rootPages:{slug:"root-pages",indexPageField:"indexPage",...e.rootPages}}}function g(e,o){return e.collections.find(t=>t.slug===o)}function k(e,o){return e.collections.filter(t=>t.category?.collection===o).map(t=>t.slug)}function C(e){let o=u(e),t=[o.rootPages?.indexPageField??"indexPage",...o.collections.flatMap(r=>r.rootPageField?[r.rootPageField]:[])];return[...new Set(t)]}function U(e,{baseUrl:o,locale:t,options:r,urlPrefixStrategy:n}){if(typeof e.value=="string")throw new Error("Reference value is a string");if(e.value.populatedUrl)return d(e.value.populatedUrl);let l=u(r),a=g(l,e.relationTo),i=a?.routeCollection??e.relationTo,s=te(a,e.value,n??a?.category?.prefixStrategy);return T(s,{baseUrl:o,collection:i,locale:t,options:l})}function T(e,{baseUrl:o,locale:t,options:r}){let n=u(r),a=[...(o||(t===n.locales?.defaultLocale?"":t)).split("/"),...e].filter(Boolean);return d(`/${a.join("/")}`)}function b(e,o,t){let r=u(t).locales?.defaultLocale;return o===r?d(e):d(`/${o}${e}`)}function te(e,o,t){return e?.category?t==="rootPage"?[o.slug??""]:[re(o),o.slug??""]:e?.breadcrumbs?[p(o.breadcrumbs)||o.slug||""]:[o.slug??""]}function re(e){let o=e.categories;if(!Array.isArray(o)||o.length===0)return"";let r=o[0];if(!r||typeof r!="object"||typeof r=="string")return"";let n=r;return p(n.breadcrumbs)||(n.slug??"").replace(/(^\/)|(\/$)/g,"")}async function f({collection:e,data:o,locale:t,options:r,originalDoc:n,payload:l,rootPages:a}){let i=u(r),s=g(i,e);if(!s)return;let c=H(o,n),D=i.rootPages?.indexPageField??"indexPage";if(s.breadcrumbs&&!s.rootPageField){let P=await N({field:D,locale:t,payload:l,rootPages:a}),J=$(P);if(c.id&&J===c.id)return b("/",t,i);let L=h(p(c.breadcrumbs)),R=h(p(P?.breadcrumbs)),W=R&&L.startsWith(`${R}/`)?h(L.slice(R.length)):L;return b(W||`/${c.slug??""}`,t,i)}let A=await ne({collectionOptions:s,locale:t,options:i,payload:l,rootPages:a});if(s.category){let P=await le({categories:c[s.category.field??"categories"],collection:s.category.collection,locale:t,payload:l});return U({relationTo:e,value:{...F(c),[s.category.field??"categories"]:P,categories:P}},{baseUrl:A,locale:t,options:i})}return U({relationTo:e,value:F(c)},{baseUrl:A,locale:t,options:i})}async function ne({collectionOptions:e,locale:o,options:t,payload:r,rootPages:n}){if(!e.rootPageField)return;let l=await N({field:e.rootPageField,locale:o,payload:r,rootPages:n});if(l)return f({collection:"pages",data:{},locale:o,options:t,originalDoc:l,payload:r,rootPages:n})}async function N({field:e,locale:o,payload:t,rootPages:r}){let n=r[e];if(n)return typeof n!="string"?n:t?.findByID?.({collection:"pages",id:n,depth:0,locale:o,select:{id:!0,slug:!0,populatedUrl:!0,breadcrumbs:!0}})}async function le({categories:e,collection:o,locale:t,payload:r}){return Array.isArray(e)?Promise.all(e.map(n=>typeof n!="string"?Promise.resolve(n):r?.findByID?.({collection:o,id:n,depth:2,locale:t})??Promise.resolve(n))):[]}function V(e){return async({job:o,req:t})=>{let r=u(e),n=o.input?.sources??[];for(let l of r.locales?.locales??[]){let a=await t.payload.findGlobal?.({slug:r.rootPages?.slug??"root-pages",depth:2,locale:l});if(a)for(let i of ae(n,r))switch(i.type){case"category":await j({collection:i.collection,locale:l,options:r,payload:t.payload,rootPages:a});for(let s of k(r,i.collection))await j({collection:s,locale:l,options:r,payload:t.payload,rootPages:a});break;case"collection":case"page":await j({collection:i.collection,locale:l,options:r,payload:t.payload,rootPages:a});break;case"rootPages":break}}}}function w(e,o){let t=y(e,"populatedUrl"),r=y(o,"populatedUrl");return t&&r?t!==r:y(e,"slug")!==y(o,"slug")}function I(e,o,t){let r=u(t),n=[],l=r.rootPages?.indexPageField??"indexPage",a=m(e[l]),i=m(o?.[l]);a!==i&&(a&&n.push({type:"page",collection:"pages",id:a}),i&&n.push({type:"page",collection:"pages",id:i}));for(let s of r.collections){if(!s.rootPageField)continue;let c=m(e[s.rootPageField]),D=m(o?.[s.rootPageField]);c!==D&&n.push({type:"collection",collection:s.slug})}return G(n)}function z(e,o){let t={};for(let r of C(o))t[r]=e?.[r];return t}function ae(e,o){return e.flatMap(t=>t.type!=="rootPages"?[t]:I(t.current,t.previous,o))}async function j({collection:e,locale:o,options:t,payload:r,rootPages:n}){let l=1;for(;;){let a=await r.find?.({collection:e,depth:2,draft:!1,limit:100,locale:o,overrideAccess:!0,page:l,pagination:!0});if(!a)return;for(let i of a.docs){if(!i.id||O(i))continue;let s=await f({collection:e,data:{},locale:o,options:t,originalDoc:i,payload:r,rootPages:n});!s||i.populatedUrl===s||await r.update?.({collection:e,id:i.id,locale:o,overrideAccess:!0,data:{[t.field?.name??"populatedUrl"]:s},context:{disablePopulateUrl:!0,disableUrlUpdates:!0}})}if(!a.nextPage)return;l=a.nextPage}}function M(e){return async({collection:o,context:t,data:r={},originalDoc:n,req:l})=>{let a=l.locale;if(!a||a==="all"||t?.disablePopulateUrl||l.context?.disablePopulateUrl)return r;let i=await l.payload.findGlobal?.({slug:u(e).rootPages?.slug??"root-pages",depth:2,locale:a});if(!i)return r;let s=await f({collection:o?.slug??"",data:r,locale:a,options:e,originalDoc:n,payload:l.payload,rootPages:i});return s&&(r[e.field?.name??"populatedUrl"]=s),r}}function _(e){return async({collection:o,doc:t,previousDoc:r,req:n})=>{if(n.context?.disableUrlUpdates||!t||O(t)||!w(t,r))return t;let l=g(e,o?.slug??"");if(!l)return t;let a=o?.slug??"",s=k(e,a).length>0?{type:"category",collection:a,id:t.id}:{type:l.breadcrumbs&&!l.rootPageField?"page":"collection",collection:a,id:t.id};return await n.payload.jobs?.queue?.({workflow:"update-urls",input:{sources:[s]}}),t}}function E(e){return async({doc:o,previousDoc:t,req:r})=>(r.context?.disableUrlUpdates||await r.payload.jobs?.queue?.({workflow:"update-urls",input:{sources:[{type:"rootPages",current:z(o,e),previous:z(t,e)}]}}),o)}var v=e=>e?o=>{let t=u(e),r=(o.collections??[]).map(n=>ie(n,t));return{...o,collections:r,globals:[...o.globals??[],se(t)],jobs:{...o.jobs??{},workflows:[...o.jobs?.workflows??[],{slug:"update-urls",handler:V(t)}]}}}:o=>o;function ie(e,o){if(!g(o,e.slug))return e;let r=o.field?.name??"populatedUrl",n=e.fields.some(a=>a.name===r)?e.fields:[...e.fields,x(o)],l=e.hooks??{};return{...e,defaultPopulate:{...e.defaultPopulate??{},[r]:!0},fields:n,hooks:{...l,beforeChange:[...l.beforeChange??[],M(o)],afterChange:[...l.afterChange??[],_(o)]}}}function se(e){let o=u(e).rootPages;return{slug:o?.slug??"root-pages",label:o?.label??"Root pages",fields:C(e).map(t=>ue(t,e)),hooks:{afterChange:[E(e)]}}}function ue(e,o){let t=u(o).rootPages,{name:r,...n}=t?.fieldOverrides?.[e]??{};return{name:e,type:"relationship",relationTo:"pages",hasMany:!1,label:t?.fieldLabels?.[e],admin:{width:"50%"},...n}}0&&(module.exports={getBreadcrumbsUrl,getDocumentLink,getDocumentLinkBySlugs,getRootPageChangeSources,hasUrlPathChanged,payloadPluginUrls,populatedUrlField,resolvePopulatedUrl,withLocalePrefix,withoutTrailingSlash});
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/field.ts","../src/options.ts","../src/link.ts","../src/resolver.ts","../src/update-urls.ts","../src/hooks.ts","../src/plugin.ts"],"sourcesContent":["export { populatedUrlField } from \"./field\"\nexport { getDocumentLink, getDocumentLinkBySlugs, withLocalePrefix } from \"./link\"\nexport { payloadPluginUrls } from \"./plugin\"\nexport { resolvePopulatedUrl } from \"./resolver\"\nexport { getRootPageChangeSources, hasUrlPathChanged } from \"./update-urls\"\nexport { getBreadcrumbsUrl, withoutTrailingSlash } from \"./utils\"\n\nexport type {\n Breadcrumb,\n CollectionConfigLike,\n FieldLike,\n GetDocumentLinkArgs,\n GetDocumentLinkContext,\n GlobalConfigLike,\n Hook,\n HookArgs,\n Locale,\n PayloadLike,\n PayloadPlugin,\n PayloadPluginConfig,\n PayloadPluginUrlsOptions,\n ResolvePopulatedUrlArgs,\n RootPagesDoc,\n UrlCollectionOptions,\n UrlDoc,\n UrlPrefixStrategy,\n UrlUpdateSource,\n WorkflowLike,\n} from \"./types\"\n\nexport { payloadPluginUrls as default } from \"./plugin\"\n","import type { Breadcrumb, UrlDoc, UrlUpdateSource } from \"./types\"\n\nconst withoutTrailingSlash = (path: string) => path.replace(/\\/$/, \"\").replace(/^\\/?/, \"/\")\n\nfunction getBreadcrumbsUrl(breadcrumbs: Breadcrumb[] | null | undefined) {\n const lastItem = breadcrumbs?.at(-1)\n const url = lastItem?.url ?? \"\"\n return url.replace(/(^\\/)|(\\/$)/g, \"\")\n}\n\nfunction mergeDoc<T extends object>(data: Partial<T>, originalDoc?: Partial<T>) {\n return {\n ...(originalDoc || {}),\n ...withoutUndefinedValues(data),\n } as T\n}\n\nfunction withoutPopulatedUrl<T extends object>(doc: T) {\n const { populatedUrl: _populatedUrl, ...rest } = doc as T & { populatedUrl?: unknown }\n return rest\n}\n\nfunction getDocumentId(doc: unknown) {\n if (!doc || typeof doc !== \"object\" || !(\"id\" in doc)) {\n return undefined\n }\n\n return typeof doc.id === \"string\" ? doc.id : undefined\n}\n\nfunction getRelationId(value: unknown) {\n if (typeof value === \"string\") {\n return value\n }\n\n if (!value || typeof value !== \"object\" || !(\"id\" in value)) {\n return undefined\n }\n\n return typeof value.id === \"string\" ? value.id : undefined\n}\n\nfunction normalizePath(path: string | undefined) {\n return withoutTrailingSlash(`/${path ?? \"\"}`.replace(/\\/+/g, \"/\"))\n}\n\nfunction getStringValue(value: unknown, key: \"populatedUrl\" | \"slug\") {\n if (!value || typeof value !== \"object\" || !(key in value)) {\n return undefined\n }\n\n const record = value as Record<\"populatedUrl\" | \"slug\", unknown>\n return typeof record[key] === \"string\" ? record[key] : undefined\n}\n\nfunction isDraftDoc(doc: UrlDoc) {\n return doc._status === \"draft\"\n}\n\nfunction getRecord(value: unknown) {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nfunction dedupeSources<T extends UrlUpdateSource>(sources: T[]) {\n const seen = new Set<string>()\n\n return sources.filter((source) => {\n const key = sourceKey(source)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n\nfunction sourceKey(source: UrlUpdateSource) {\n switch (source.type) {\n case \"category\":\n case \"collection\":\n case \"page\":\n return `${source.type}:${source.collection}:${source.id ?? \"\"}`\n case \"rootPages\":\n return `rootPages:${JSON.stringify(source.current)}:${JSON.stringify(source.previous)}`\n }\n}\n\nfunction withoutUndefinedValues<T extends object>(value: Partial<T>) {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as Partial<T>\n}\n\nexport {\n getBreadcrumbsUrl,\n getRecord,\n dedupeSources,\n isDraftDoc,\n getStringValue,\n normalizePath,\n getRelationId,\n getDocumentId,\n withoutPopulatedUrl,\n mergeDoc,\n withoutTrailingSlash,\n}\n","import { getRecord } from \"./utils\"\n\nimport type { PayloadPluginUrlsOptions } from \"./types\"\n\nexport function populatedUrlField(options: PayloadPluginUrlsOptions = { collections: [] }) {\n const fieldName = options.field?.name ?? \"populatedUrl\"\n\n return {\n name: fieldName,\n type: \"text\",\n label: false,\n localized: true,\n ...(options.field?.overrides ?? {}),\n admin: {\n hidden: true,\n ...getRecord(options.field?.overrides?.admin),\n },\n }\n}\n","import type { PayloadPluginUrlsOptions } from \"./types\"\n\nexport function normalizeOptions(options: PayloadPluginUrlsOptions): PayloadPluginUrlsOptions {\n return {\n ...options,\n field: {\n name: \"populatedUrl\",\n ...options.field,\n },\n locales: {\n defaultLocale: \"en\",\n locales: [\"en\"],\n ...options.locales,\n },\n rootPages: {\n slug: \"root-pages\",\n indexPageField: \"indexPage\",\n ...options.rootPages,\n },\n }\n}\n\nexport function getCollectionOptions(options: PayloadPluginUrlsOptions, collection: string) {\n return options.collections.find((collectionOptions) => collectionOptions.slug === collection)\n}\n\nexport function getCollectionsForCategory(\n options: PayloadPluginUrlsOptions,\n categoryCollection: string,\n) {\n return options.collections\n .filter((collectionOptions) => collectionOptions.category?.collection === categoryCollection)\n .map((collectionOptions) => collectionOptions.slug)\n}\n\nexport function getRootPageFieldNames(options: PayloadPluginUrlsOptions) {\n const normalizedOptions = normalizeOptions(options)\n const fieldNames = [\n normalizedOptions.rootPages?.indexPageField ?? \"indexPage\",\n ...normalizedOptions.collections.flatMap((collection) =>\n collection.rootPageField ? [collection.rootPageField] : [],\n ),\n ]\n\n return [...new Set(fieldNames)]\n}\n","import { getCollectionOptions, normalizeOptions } from \"./options\"\nimport { getBreadcrumbsUrl, withoutTrailingSlash } from \"./utils\"\n\nimport type {\n GetDocumentLinkArgs,\n GetDocumentLinkContext,\n Locale,\n PayloadPluginUrlsOptions,\n UrlCollectionOptions,\n UrlDoc,\n UrlPrefixStrategy,\n} from \"./types\"\n\nexport function getDocumentLink(\n reference: GetDocumentLinkArgs,\n { baseUrl, locale, options, urlPrefixStrategy }: GetDocumentLinkContext,\n) {\n if (typeof reference.value === \"string\") {\n throw new Error(\"Reference value is a string\")\n }\n\n if (reference.value.populatedUrl) {\n return withoutTrailingSlash(reference.value.populatedUrl)\n }\n\n const normalizedOptions = normalizeOptions(options)\n const collectionOptions = getCollectionOptions(normalizedOptions, reference.relationTo)\n const routeCollection = collectionOptions?.routeCollection ?? reference.relationTo\n const slugs = getSlugsForCollection(\n collectionOptions,\n reference.value,\n urlPrefixStrategy ?? collectionOptions?.category?.prefixStrategy,\n )\n\n return getDocumentLinkBySlugs(slugs, {\n baseUrl,\n collection: routeCollection,\n locale,\n options: normalizedOptions,\n })\n}\n\nexport function getDocumentLinkBySlugs(\n slugs: string[],\n {\n baseUrl,\n locale,\n options,\n }: {\n baseUrl?: string\n collection: string\n locale: Locale\n options: PayloadPluginUrlsOptions\n },\n) {\n const normalizedOptions = normalizeOptions(options)\n const prefix = baseUrl || (locale === normalizedOptions.locales?.defaultLocale ? \"\" : locale)\n const segments = [...prefix.split(\"/\"), ...slugs].filter(Boolean)\n return withoutTrailingSlash(`/${segments.join(\"/\")}`)\n}\n\nexport function withLocalePrefix(path: string, locale: Locale, options: PayloadPluginUrlsOptions) {\n const defaultLocale = normalizeOptions(options).locales?.defaultLocale\n if (locale === defaultLocale) {\n return withoutTrailingSlash(path)\n }\n return withoutTrailingSlash(`/${locale}${path}`)\n}\n\nfunction getSlugsForCollection(\n collectionOptions: UrlCollectionOptions | undefined,\n doc: UrlDoc,\n strategy?: UrlPrefixStrategy,\n) {\n if (collectionOptions?.category) {\n return strategy === \"rootPage\"\n ? [doc.slug ?? \"\"]\n : [firstRelatedCategoryPath(doc), doc.slug ?? \"\"]\n }\n\n if (collectionOptions?.breadcrumbs) {\n return [getBreadcrumbsUrl(doc.breadcrumbs) || doc.slug || \"\"]\n }\n\n return [doc.slug ?? \"\"]\n}\n\nfunction firstRelatedCategoryPath(doc: UrlDoc) {\n const categories = doc.categories\n if (!Array.isArray(categories) || categories.length === 0) {\n return \"\"\n }\n\n const categoryItems = categories as unknown[]\n const first = categoryItems[0]\n if (!first || typeof first !== \"object\" || typeof first === \"string\") {\n return \"\"\n }\n\n const categoryDoc = first as UrlDoc\n return (\n getBreadcrumbsUrl(categoryDoc.breadcrumbs) ||\n (categoryDoc.slug ?? \"\").replace(/(^\\/)|(\\/$)/g, \"\")\n )\n}\n","import { getDocumentLink, withLocalePrefix } from \"./link\"\nimport { getCollectionOptions, normalizeOptions } from \"./options\"\nimport {\n getBreadcrumbsUrl,\n getDocumentId,\n mergeDoc,\n normalizePath,\n withoutPopulatedUrl,\n} from \"./utils\"\n\nimport type {\n Locale,\n PayloadLike,\n PayloadPluginUrlsOptions,\n ResolvePopulatedUrlArgs,\n RootPagesDoc,\n UrlCollectionOptions,\n} from \"./types\"\n\nexport async function resolvePopulatedUrl({\n collection,\n data,\n locale,\n options,\n originalDoc,\n payload,\n rootPages,\n}: ResolvePopulatedUrlArgs): Promise<string | undefined> {\n const normalizedOptions = normalizeOptions(options)\n const collectionOptions = getCollectionOptions(normalizedOptions, collection)\n if (!collectionOptions) {\n return undefined\n }\n\n const doc = mergeDoc(data, originalDoc)\n const indexPageField = normalizedOptions.rootPages?.indexPageField ?? \"indexPage\"\n\n if (collectionOptions.breadcrumbs && !collectionOptions.rootPageField) {\n const homepage = await getRootPageDoc({\n field: indexPageField,\n locale,\n payload,\n rootPages,\n })\n const homepageId = getDocumentId(homepage)\n\n if (doc.id && homepageId === doc.id) {\n return withLocalePrefix(\"/\", locale, normalizedOptions)\n }\n\n const breadcrumbsPath = normalizePath(getBreadcrumbsUrl(doc.breadcrumbs))\n const homepagePath = normalizePath(getBreadcrumbsUrl(homepage?.breadcrumbs))\n const pagePath =\n homepagePath && breadcrumbsPath.startsWith(`${homepagePath}/`)\n ? normalizePath(breadcrumbsPath.slice(homepagePath.length))\n : breadcrumbsPath\n\n return withLocalePrefix(pagePath || `/${doc.slug ?? \"\"}`, locale, normalizedOptions)\n }\n\n const rootPageUrl: string | undefined = await getRootPageUrl({\n collectionOptions,\n locale,\n options: normalizedOptions,\n payload,\n rootPages,\n })\n\n if (collectionOptions.category) {\n const categories = await resolveCategories({\n categories: doc[collectionOptions.category.field ?? \"categories\"],\n collection: collectionOptions.category.collection,\n locale,\n payload,\n })\n\n return getDocumentLink(\n {\n relationTo: collection,\n value: {\n ...withoutPopulatedUrl(doc),\n [collectionOptions.category.field ?? \"categories\"]: categories,\n categories,\n },\n },\n {\n baseUrl: rootPageUrl,\n locale,\n options: normalizedOptions,\n },\n )\n }\n\n return getDocumentLink(\n {\n relationTo: collection,\n value: withoutPopulatedUrl(doc),\n },\n {\n baseUrl: rootPageUrl,\n locale,\n options: normalizedOptions,\n },\n )\n}\n\nasync function getRootPageUrl({\n collectionOptions,\n locale,\n options,\n payload,\n rootPages,\n}: {\n collectionOptions: UrlCollectionOptions\n locale: Locale\n options: PayloadPluginUrlsOptions\n payload?: PayloadLike\n rootPages: RootPagesDoc\n}): Promise<string | undefined> {\n if (!collectionOptions.rootPageField) {\n return undefined\n }\n\n const rootPage = await getRootPageDoc({\n field: collectionOptions.rootPageField,\n locale,\n payload,\n rootPages,\n })\n\n if (!rootPage) {\n return undefined\n }\n\n return resolvePopulatedUrl({\n collection: \"pages\",\n data: {},\n locale,\n options,\n originalDoc: rootPage,\n payload,\n rootPages,\n })\n}\n\nasync function getRootPageDoc({\n field,\n locale,\n payload,\n rootPages,\n}: {\n field: string\n locale: Locale\n payload?: PayloadLike\n rootPages: RootPagesDoc\n}) {\n const page = rootPages[field]\n\n if (!page) {\n return undefined\n }\n\n if (typeof page !== \"string\") {\n return page\n }\n\n return payload?.findByID?.({\n collection: \"pages\",\n id: page,\n depth: 0,\n locale,\n select: {\n id: true,\n slug: true,\n populatedUrl: true,\n breadcrumbs: true,\n },\n })\n}\n\nasync function resolveCategories({\n categories,\n collection,\n locale,\n payload,\n}: {\n categories: unknown\n collection: string\n locale: Locale\n payload?: PayloadLike\n}) {\n if (!Array.isArray(categories)) {\n return []\n }\n\n return Promise.all(\n categories.map((category) => {\n if (typeof category !== \"string\") {\n return Promise.resolve(category)\n }\n\n return (\n payload?.findByID?.({\n collection,\n id: category,\n depth: 2,\n locale,\n }) ?? Promise.resolve(category)\n )\n }),\n )\n}\n","import { getCollectionsForCategory, getRootPageFieldNames, normalizeOptions } from \"./options\"\nimport { resolvePopulatedUrl } from \"./resolver\"\nimport { dedupeSources, getRelationId, getStringValue, isDraftDoc } from \"./utils\"\n\nimport type {\n Locale,\n PayloadLike,\n PayloadPluginUrlsOptions,\n RootPagesDoc,\n UrlDoc,\n UrlUpdateSource,\n} from \"./types\"\n\nexport function createUpdateUrlsHandler(options: PayloadPluginUrlsOptions) {\n return async ({\n job,\n req,\n }: {\n job: {\n input?: {\n sources?: UrlUpdateSource[] | null\n }\n }\n req: {\n payload: PayloadLike\n }\n }) => {\n const normalizedOptions = normalizeOptions(options)\n const sources = job.input?.sources ?? []\n\n for (const locale of normalizedOptions.locales?.locales ?? []) {\n const rootPages = await req.payload.findGlobal?.({\n slug: normalizedOptions.rootPages?.slug ?? \"root-pages\",\n depth: 2,\n locale,\n })\n if (!rootPages) {\n continue\n }\n\n for (const source of expandSources(sources, normalizedOptions)) {\n switch (source.type) {\n case \"category\":\n await updateCollectionDocuments({\n collection: source.collection,\n locale,\n options: normalizedOptions,\n payload: req.payload,\n rootPages,\n })\n for (const collection of getCollectionsForCategory(\n normalizedOptions,\n source.collection,\n )) {\n await updateCollectionDocuments({\n collection,\n locale,\n options: normalizedOptions,\n payload: req.payload,\n rootPages,\n })\n }\n break\n case \"collection\":\n case \"page\":\n await updateCollectionDocuments({\n collection: source.collection,\n locale,\n options: normalizedOptions,\n payload: req.payload,\n rootPages,\n })\n break\n case \"rootPages\":\n break\n }\n }\n }\n }\n}\n\nexport function hasUrlPathChanged(doc: unknown, previousDoc: unknown) {\n const docUrl = getStringValue(doc, \"populatedUrl\")\n const previousUrl = getStringValue(previousDoc, \"populatedUrl\")\n\n if (docUrl && previousUrl) {\n return docUrl !== previousUrl\n }\n\n return getStringValue(doc, \"slug\") !== getStringValue(previousDoc, \"slug\")\n}\n\nexport function getRootPageChangeSources(\n current: RootPagesDoc,\n previous: RootPagesDoc | undefined,\n options: PayloadPluginUrlsOptions,\n): UrlUpdateSource[] {\n const normalizedOptions = normalizeOptions(options)\n const sources: UrlUpdateSource[] = []\n const indexPageField = normalizedOptions.rootPages?.indexPageField ?? \"indexPage\"\n const currentIndexPageId = getRelationId(current[indexPageField])\n const previousIndexPageId = getRelationId(previous?.[indexPageField])\n\n if (currentIndexPageId !== previousIndexPageId) {\n if (currentIndexPageId) {\n sources.push({ type: \"page\", collection: \"pages\", id: currentIndexPageId })\n }\n if (previousIndexPageId) {\n sources.push({ type: \"page\", collection: \"pages\", id: previousIndexPageId })\n }\n }\n\n for (const collection of normalizedOptions.collections) {\n if (!collection.rootPageField) {\n continue\n }\n\n const currentRootPageId = getRelationId(current[collection.rootPageField])\n const previousRootPageId = getRelationId(previous?.[collection.rootPageField])\n if (currentRootPageId !== previousRootPageId) {\n sources.push({ type: \"collection\", collection: collection.slug })\n }\n }\n\n return dedupeSources(sources)\n}\n\nexport function getRootPageSnapshot(\n rootPages: UrlDoc | undefined,\n options: PayloadPluginUrlsOptions,\n) {\n const snapshot: RootPagesDoc = {}\n\n for (const fieldName of getRootPageFieldNames(options)) {\n snapshot[fieldName] = rootPages?.[fieldName] as RootPagesDoc[string]\n }\n\n return snapshot\n}\n\nfunction expandSources(sources: UrlUpdateSource[], options: PayloadPluginUrlsOptions) {\n return sources.flatMap((source) => {\n if (source.type !== \"rootPages\") {\n return [source]\n }\n\n return getRootPageChangeSources(source.current, source.previous, options)\n })\n}\n\nasync function updateCollectionDocuments({\n collection,\n locale,\n options,\n payload,\n rootPages,\n}: {\n collection: string\n locale: Locale\n options: PayloadPluginUrlsOptions\n payload: PayloadLike\n rootPages: RootPagesDoc\n}) {\n let page = 1\n\n for (;;) {\n const result = await payload.find?.({\n collection,\n depth: 2,\n draft: false,\n limit: 100,\n locale,\n overrideAccess: true,\n page,\n pagination: true,\n })\n\n if (!result) {\n return\n }\n\n for (const doc of result.docs) {\n if (!doc.id || isDraftDoc(doc)) {\n continue\n }\n\n const populatedUrlValue = await resolvePopulatedUrl({\n collection,\n data: {},\n locale,\n options,\n originalDoc: doc,\n payload,\n rootPages,\n })\n\n if (!populatedUrlValue || doc.populatedUrl === populatedUrlValue) {\n continue\n }\n\n await payload.update?.({\n collection,\n id: doc.id,\n locale,\n overrideAccess: true,\n data: {\n [options.field?.name ?? \"populatedUrl\"]: populatedUrlValue,\n },\n context: {\n disablePopulateUrl: true,\n disableUrlUpdates: true,\n },\n })\n }\n\n if (!result.nextPage) {\n return\n }\n\n page = result.nextPage\n }\n}\n","import { getCollectionOptions, getCollectionsForCategory, normalizeOptions } from \"./options\"\nimport { resolvePopulatedUrl } from \"./resolver\"\nimport { getRootPageSnapshot, hasUrlPathChanged } from \"./update-urls\"\nimport { isDraftDoc } from \"./utils\"\n\nimport type { Hook, PayloadPluginUrlsOptions } from \"./types\"\n\nexport function createPopulateUrlHook(options: PayloadPluginUrlsOptions): Hook {\n return async ({ collection, context, data = {}, originalDoc, req }) => {\n const locale = req.locale\n if (\n !locale ||\n locale === \"all\" ||\n context?.disablePopulateUrl ||\n req.context?.disablePopulateUrl\n ) {\n return data\n }\n\n const rootPages = await req.payload.findGlobal?.({\n slug: normalizeOptions(options).rootPages?.slug ?? \"root-pages\",\n depth: 2,\n locale,\n })\n if (!rootPages) {\n return data\n }\n\n const populatedUrlValue = await resolvePopulatedUrl({\n collection: collection?.slug ?? \"\",\n data,\n locale,\n options,\n originalDoc,\n payload: req.payload,\n rootPages,\n })\n\n if (populatedUrlValue) {\n data[options.field?.name ?? \"populatedUrl\"] = populatedUrlValue\n }\n\n return data\n }\n}\n\nexport function createCollectionUrlUpdateHook(options: PayloadPluginUrlsOptions): Hook {\n return async ({ collection, doc, previousDoc, req }) => {\n if (\n req.context?.disableUrlUpdates ||\n !doc ||\n isDraftDoc(doc) ||\n !hasUrlPathChanged(doc, previousDoc)\n ) {\n return doc\n }\n\n const collectionOptions = getCollectionOptions(options, collection?.slug ?? \"\")\n if (!collectionOptions) {\n return doc\n }\n\n const collectionSlug = collection?.slug ?? \"\"\n const isCategoryCollection = getCollectionsForCategory(options, collectionSlug).length > 0\n const source = isCategoryCollection\n ? {\n type: \"category\",\n collection: collectionSlug,\n id: doc.id,\n }\n : {\n type:\n collectionOptions.breadcrumbs && !collectionOptions.rootPageField\n ? \"page\"\n : \"collection\",\n collection: collectionSlug,\n id: doc.id,\n }\n\n await req.payload.jobs?.queue?.({\n workflow: \"update-urls\",\n input: {\n sources: [source],\n },\n })\n\n return doc\n }\n}\n\nexport function createRootPagesUrlUpdateHook(options: PayloadPluginUrlsOptions): Hook {\n return async ({ doc, previousDoc, req }) => {\n if (req.context?.disableUrlUpdates) {\n return doc\n }\n\n await req.payload.jobs?.queue?.({\n workflow: \"update-urls\",\n input: {\n sources: [\n {\n type: \"rootPages\",\n current: getRootPageSnapshot(doc, options),\n previous: getRootPageSnapshot(previousDoc, options),\n },\n ],\n },\n })\n\n return doc\n }\n}\n","import { populatedUrlField } from \"./field\"\nimport {\n createCollectionUrlUpdateHook,\n createPopulateUrlHook,\n createRootPagesUrlUpdateHook,\n} from \"./hooks\"\nimport { getCollectionOptions, getRootPageFieldNames, normalizeOptions } from \"./options\"\nimport { createUpdateUrlsHandler } from \"./update-urls\"\n\nimport type {\n CollectionConfigLike,\n GlobalConfigLike,\n PayloadPlugin,\n PayloadPluginUrlsOptions,\n} from \"./types\"\n\nexport const payloadPluginUrls = (options?: PayloadPluginUrlsOptions): PayloadPlugin => {\n if (!options) {\n return (config) => config\n }\n\n return (config) => {\n const normalizedOptions = normalizeOptions(options)\n const collections = (config.collections ?? []).map((collection) =>\n applyUrlCollectionConfig(collection, normalizedOptions),\n )\n\n return {\n ...config,\n collections,\n globals: [...(config.globals ?? []), createRootPagesGlobal(normalizedOptions)],\n jobs: {\n ...(config.jobs ?? {}),\n workflows: [\n ...(config.jobs?.workflows ?? []),\n {\n slug: \"update-urls\",\n handler: createUpdateUrlsHandler(normalizedOptions),\n },\n ],\n },\n }\n }\n}\n\nfunction applyUrlCollectionConfig(\n collection: CollectionConfigLike,\n options: PayloadPluginUrlsOptions,\n) {\n const collectionOptions = getCollectionOptions(options, collection.slug)\n if (!collectionOptions) {\n return collection\n }\n\n const fieldName = options.field?.name ?? \"populatedUrl\"\n const fields = collection.fields.some((field) => field.name === fieldName)\n ? collection.fields\n : [...collection.fields, populatedUrlField(options)]\n const hooks = collection.hooks ?? {}\n\n return {\n ...collection,\n defaultPopulate: {\n ...(collection.defaultPopulate ?? {}),\n [fieldName]: true,\n },\n fields,\n hooks: {\n ...hooks,\n beforeChange: [...(hooks.beforeChange ?? []), createPopulateUrlHook(options)],\n afterChange: [...(hooks.afterChange ?? []), createCollectionUrlUpdateHook(options)],\n },\n }\n}\n\nfunction createRootPagesGlobal(options: PayloadPluginUrlsOptions): GlobalConfigLike {\n const rootPagesOptions = normalizeOptions(options).rootPages\n\n return {\n slug: rootPagesOptions?.slug ?? \"root-pages\",\n label: rootPagesOptions?.label ?? \"Root pages\",\n fields: getRootPageFieldNames(options).map((fieldName) =>\n createRootPageField(fieldName, options),\n ),\n hooks: {\n afterChange: [createRootPagesUrlUpdateHook(options)],\n },\n }\n}\n\nfunction createRootPageField(fieldName: string, options: PayloadPluginUrlsOptions) {\n const rootPagesOptions = normalizeOptions(options).rootPages\n const { name: _name, ...override } = rootPagesOptions?.fieldOverrides?.[fieldName] ?? {}\n\n return {\n name: fieldName,\n type: \"relationship\",\n relationTo: \"pages\",\n hasMany: false,\n label: rootPagesOptions?.fieldLabels?.[fieldName],\n admin: {\n width: \"50%\",\n },\n ...override,\n }\n}\n"],"mappings":"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","names":["index_exports","__export","payloadPluginUrls","getBreadcrumbsUrl","getDocumentLink","getDocumentLinkBySlugs","getRootPageChangeSources","hasUrlPathChanged","populatedUrlField","resolvePopulatedUrl","withLocalePrefix","withoutTrailingSlash","__toCommonJS","withoutTrailingSlash","path","getBreadcrumbsUrl","breadcrumbs","mergeDoc","data","originalDoc","withoutUndefinedValues","withoutPopulatedUrl","doc","_populatedUrl","rest","getDocumentId","getRelationId","value","normalizePath","getStringValue","key","record","isDraftDoc","getRecord","dedupeSources","sources","seen","source","sourceKey","entry","populatedUrlField","options","getRecord","normalizeOptions","options","getCollectionOptions","collection","collectionOptions","getCollectionsForCategory","categoryCollection","getRootPageFieldNames","normalizedOptions","fieldNames","getDocumentLink","reference","baseUrl","locale","options","urlPrefixStrategy","withoutTrailingSlash","normalizedOptions","normalizeOptions","collectionOptions","getCollectionOptions","routeCollection","slugs","getSlugsForCollection","getDocumentLinkBySlugs","segments","withLocalePrefix","path","defaultLocale","doc","strategy","firstRelatedCategoryPath","getBreadcrumbsUrl","categories","first","categoryDoc","resolvePopulatedUrl","collection","data","locale","options","originalDoc","payload","rootPages","normalizedOptions","normalizeOptions","collectionOptions","getCollectionOptions","doc","mergeDoc","indexPageField","homepage","getRootPageDoc","homepageId","getDocumentId","withLocalePrefix","breadcrumbsPath","normalizePath","getBreadcrumbsUrl","homepagePath","pagePath","rootPageUrl","getRootPageUrl","categories","resolveCategories","getDocumentLink","withoutPopulatedUrl","rootPage","field","page","category","createUpdateUrlsHandler","options","job","req","normalizedOptions","normalizeOptions","sources","locale","rootPages","source","expandSources","updateCollectionDocuments","collection","getCollectionsForCategory","hasUrlPathChanged","doc","previousDoc","docUrl","getStringValue","previousUrl","getRootPageChangeSources","current","previous","indexPageField","currentIndexPageId","getRelationId","previousIndexPageId","currentRootPageId","previousRootPageId","dedupeSources","getRootPageSnapshot","snapshot","fieldName","getRootPageFieldNames","payload","page","result","isDraftDoc","populatedUrlValue","resolvePopulatedUrl","createPopulateUrlHook","options","collection","context","data","originalDoc","req","locale","rootPages","normalizeOptions","populatedUrlValue","resolvePopulatedUrl","createCollectionUrlUpdateHook","doc","previousDoc","isDraftDoc","hasUrlPathChanged","collectionOptions","getCollectionOptions","collectionSlug","source","getCollectionsForCategory","createRootPagesUrlUpdateHook","getRootPageSnapshot","payloadPluginUrls","options","config","normalizedOptions","normalizeOptions","collections","collection","applyUrlCollectionConfig","createRootPagesGlobal","createUpdateUrlsHandler","getCollectionOptions","fieldName","fields","field","populatedUrlField","hooks","createPopulateUrlHook","createCollectionUrlUpdateHook","rootPagesOptions","getRootPageFieldNames","createRootPageField","createRootPagesUrlUpdateHook","_name","override"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { populatedUrlField } from "./field";
|
|
2
|
+
export { getDocumentLink, getDocumentLinkBySlugs, withLocalePrefix } from "./link";
|
|
3
|
+
export { payloadPluginUrls } from "./plugin";
|
|
4
|
+
export { resolvePopulatedUrl } from "./resolver";
|
|
5
|
+
export { getRootPageChangeSources, hasUrlPathChanged } from "./update-urls";
|
|
6
|
+
export { getBreadcrumbsUrl, withoutTrailingSlash } from "./utils";
|
|
7
|
+
export type { Breadcrumb, CollectionConfigLike, FieldLike, GetDocumentLinkArgs, GetDocumentLinkContext, GlobalConfigLike, Hook, HookArgs, Locale, PayloadLike, PayloadPlugin, PayloadPluginConfig, PayloadPluginUrlsOptions, ResolvePopulatedUrlArgs, RootPagesDoc, UrlCollectionOptions, UrlDoc, UrlPrefixStrategy, UrlUpdateSource, WorkflowLike, } from "./types";
|
|
8
|
+
export { payloadPluginUrls as default } from "./plugin";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEjE,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,YAAY,EACZ,oBAAoB,EACpB,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var p=e=>e.replace(/\/$/,"").replace(/^\/?/,"/");function g(e){return(e?.at(-1)?.url??"").replace(/(^\/)|(\/$)/g,"")}function I(e,o){return{...o||{},...K(e)}}function L(e){let{populatedUrl:o,...t}=e;return t}function z(e){if(!(!e||typeof e!="object"||!("id"in e)))return typeof e.id=="string"?e.id:void 0}function m(e){if(typeof e=="string")return e;if(!(!e||typeof e!="object"||!("id"in e)))return typeof e.id=="string"?e.id:void 0}function U(e){return p(`/${e??""}`.replace(/\/+/g,"/"))}function y(e,o){if(!e||typeof e!="object"||!(o in e))return;let t=e;return typeof t[o]=="string"?t[o]:void 0}function b(e){return e._status==="draft"}function v(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function A(e){let o=new Set;return e.filter(t=>{let r=W(t);return o.has(r)?!1:(o.add(r),!0)})}function W(e){switch(e.type){case"category":case"collection":case"page":return`${e.type}:${e.collection}:${e.id??""}`;case"rootPages":return`rootPages:${JSON.stringify(e.current)}:${JSON.stringify(e.previous)}`}}function K(e){return Object.fromEntries(Object.entries(e).filter(([,o])=>o!==void 0))}function R(e={collections:[]}){return{name:e.field?.name??"populatedUrl",type:"text",label:!1,localized:!0,...e.field?.overrides??{},admin:{hidden:!0,...v(e.field?.overrides?.admin)}}}function u(e){return{...e,field:{name:"populatedUrl",...e.field},locales:{defaultLocale:"en",locales:["en"],...e.locales},rootPages:{slug:"root-pages",indexPageField:"indexPage",...e.rootPages}}}function d(e,o){return e.collections.find(t=>t.slug===o)}function h(e,o){return e.collections.filter(t=>t.category?.collection===o).map(t=>t.slug)}function O(e){let o=u(e),t=[o.rootPages?.indexPageField??"indexPage",...o.collections.flatMap(r=>r.rootPageField?[r.rootPageField]:[])];return[...new Set(t)]}function x(e,{baseUrl:o,locale:t,options:r,urlPrefixStrategy:n}){if(typeof e.value=="string")throw new Error("Reference value is a string");if(e.value.populatedUrl)return p(e.value.populatedUrl);let l=u(r),a=d(l,e.relationTo),i=a?.routeCollection??e.relationTo,s=Q(a,e.value,n??a?.category?.prefixStrategy);return H(s,{baseUrl:o,collection:i,locale:t,options:l})}function H(e,{baseUrl:o,locale:t,options:r}){let n=u(r),a=[...(o||(t===n.locales?.defaultLocale?"":t)).split("/"),...e].filter(Boolean);return p(`/${a.join("/")}`)}function k(e,o,t){let r=u(t).locales?.defaultLocale;return o===r?p(e):p(`/${o}${e}`)}function Q(e,o,t){return e?.category?t==="rootPage"?[o.slug??""]:[X(o),o.slug??""]:e?.breadcrumbs?[g(o.breadcrumbs)||o.slug||""]:[o.slug??""]}function X(e){let o=e.categories;if(!Array.isArray(o)||o.length===0)return"";let r=o[0];if(!r||typeof r!="object"||typeof r=="string")return"";let n=r;return g(n.breadcrumbs)||(n.slug??"").replace(/(^\/)|(\/$)/g,"")}async function f({collection:e,data:o,locale:t,options:r,originalDoc:n,payload:l,rootPages:a}){let i=u(r),s=d(i,e);if(!s)return;let c=I(o,n),C=i.rootPages?.indexPageField??"indexPage";if(s.breadcrumbs&&!s.rootPageField){let P=await $({field:C,locale:t,payload:l,rootPages:a}),E=z(P);if(c.id&&E===c.id)return k("/",t,i);let w=U(g(c.breadcrumbs)),D=U(g(P?.breadcrumbs)),J=D&&w.startsWith(`${D}/`)?U(w.slice(D.length)):w;return k(J||`/${c.slug??""}`,t,i)}let j=await Y({collectionOptions:s,locale:t,options:i,payload:l,rootPages:a});if(s.category){let P=await Z({categories:c[s.category.field??"categories"],collection:s.category.collection,locale:t,payload:l});return x({relationTo:e,value:{...L(c),[s.category.field??"categories"]:P,categories:P}},{baseUrl:j,locale:t,options:i})}return x({relationTo:e,value:L(c)},{baseUrl:j,locale:t,options:i})}async function Y({collectionOptions:e,locale:o,options:t,payload:r,rootPages:n}){if(!e.rootPageField)return;let l=await $({field:e.rootPageField,locale:o,payload:r,rootPages:n});if(l)return f({collection:"pages",data:{},locale:o,options:t,originalDoc:l,payload:r,rootPages:n})}async function $({field:e,locale:o,payload:t,rootPages:r}){let n=r[e];if(n)return typeof n!="string"?n:t?.findByID?.({collection:"pages",id:n,depth:0,locale:o,select:{id:!0,slug:!0,populatedUrl:!0,breadcrumbs:!0}})}async function Z({categories:e,collection:o,locale:t,payload:r}){return Array.isArray(e)?Promise.all(e.map(n=>typeof n!="string"?Promise.resolve(n):r?.findByID?.({collection:o,id:n,depth:2,locale:t})??Promise.resolve(n))):[]}function B(e){return async({job:o,req:t})=>{let r=u(e),n=o.input?.sources??[];for(let l of r.locales?.locales??[]){let a=await t.payload.findGlobal?.({slug:r.rootPages?.slug??"root-pages",depth:2,locale:l});if(a)for(let i of q(n,r))switch(i.type){case"category":await S({collection:i.collection,locale:l,options:r,payload:t.payload,rootPages:a});for(let s of h(r,i.collection))await S({collection:s,locale:l,options:r,payload:t.payload,rootPages:a});break;case"collection":case"page":await S({collection:i.collection,locale:l,options:r,payload:t.payload,rootPages:a});break;case"rootPages":break}}}}function F(e,o){let t=y(e,"populatedUrl"),r=y(o,"populatedUrl");return t&&r?t!==r:y(e,"slug")!==y(o,"slug")}function G(e,o,t){let r=u(t),n=[],l=r.rootPages?.indexPageField??"indexPage",a=m(e[l]),i=m(o?.[l]);a!==i&&(a&&n.push({type:"page",collection:"pages",id:a}),i&&n.push({type:"page",collection:"pages",id:i}));for(let s of r.collections){if(!s.rootPageField)continue;let c=m(e[s.rootPageField]),C=m(o?.[s.rootPageField]);c!==C&&n.push({type:"collection",collection:s.slug})}return A(n)}function T(e,o){let t={};for(let r of O(o))t[r]=e?.[r];return t}function q(e,o){return e.flatMap(t=>t.type!=="rootPages"?[t]:G(t.current,t.previous,o))}async function S({collection:e,locale:o,options:t,payload:r,rootPages:n}){let l=1;for(;;){let a=await r.find?.({collection:e,depth:2,draft:!1,limit:100,locale:o,overrideAccess:!0,page:l,pagination:!0});if(!a)return;for(let i of a.docs){if(!i.id||b(i))continue;let s=await f({collection:e,data:{},locale:o,options:t,originalDoc:i,payload:r,rootPages:n});!s||i.populatedUrl===s||await r.update?.({collection:e,id:i.id,locale:o,overrideAccess:!0,data:{[t.field?.name??"populatedUrl"]:s},context:{disablePopulateUrl:!0,disableUrlUpdates:!0}})}if(!a.nextPage)return;l=a.nextPage}}function N(e){return async({collection:o,context:t,data:r={},originalDoc:n,req:l})=>{let a=l.locale;if(!a||a==="all"||t?.disablePopulateUrl||l.context?.disablePopulateUrl)return r;let i=await l.payload.findGlobal?.({slug:u(e).rootPages?.slug??"root-pages",depth:2,locale:a});if(!i)return r;let s=await f({collection:o?.slug??"",data:r,locale:a,options:e,originalDoc:n,payload:l.payload,rootPages:i});return s&&(r[e.field?.name??"populatedUrl"]=s),r}}function V(e){return async({collection:o,doc:t,previousDoc:r,req:n})=>{if(n.context?.disableUrlUpdates||!t||b(t)||!F(t,r))return t;let l=d(e,o?.slug??"");if(!l)return t;let a=o?.slug??"",s=h(e,a).length>0?{type:"category",collection:a,id:t.id}:{type:l.breadcrumbs&&!l.rootPageField?"page":"collection",collection:a,id:t.id};return await n.payload.jobs?.queue?.({workflow:"update-urls",input:{sources:[s]}}),t}}function M(e){return async({doc:o,previousDoc:t,req:r})=>(r.context?.disableUrlUpdates||await r.payload.jobs?.queue?.({workflow:"update-urls",input:{sources:[{type:"rootPages",current:T(o,e),previous:T(t,e)}]}}),o)}var _=e=>e?o=>{let t=u(e),r=(o.collections??[]).map(n=>ee(n,t));return{...o,collections:r,globals:[...o.globals??[],oe(t)],jobs:{...o.jobs??{},workflows:[...o.jobs?.workflows??[],{slug:"update-urls",handler:B(t)}]}}}:o=>o;function ee(e,o){if(!d(o,e.slug))return e;let r=o.field?.name??"populatedUrl",n=e.fields.some(a=>a.name===r)?e.fields:[...e.fields,R(o)],l=e.hooks??{};return{...e,defaultPopulate:{...e.defaultPopulate??{},[r]:!0},fields:n,hooks:{...l,beforeChange:[...l.beforeChange??[],N(o)],afterChange:[...l.afterChange??[],V(o)]}}}function oe(e){let o=u(e).rootPages;return{slug:o?.slug??"root-pages",label:o?.label??"Root pages",fields:O(e).map(t=>te(t,e)),hooks:{afterChange:[M(e)]}}}function te(e,o){let t=u(o).rootPages,{name:r,...n}=t?.fieldOverrides?.[e]??{};return{name:e,type:"relationship",relationTo:"pages",hasMany:!1,label:t?.fieldLabels?.[e],admin:{width:"50%"},...n}}export{_ as default,g as getBreadcrumbsUrl,x as getDocumentLink,H as getDocumentLinkBySlugs,G as getRootPageChangeSources,F as hasUrlPathChanged,_ as payloadPluginUrls,R as populatedUrlField,f as resolvePopulatedUrl,k as withLocalePrefix,p as withoutTrailingSlash};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/field.ts","../src/options.ts","../src/link.ts","../src/resolver.ts","../src/update-urls.ts","../src/hooks.ts","../src/plugin.ts"],"sourcesContent":["import type { Breadcrumb, UrlDoc, UrlUpdateSource } from \"./types\"\n\nconst withoutTrailingSlash = (path: string) => path.replace(/\\/$/, \"\").replace(/^\\/?/, \"/\")\n\nfunction getBreadcrumbsUrl(breadcrumbs: Breadcrumb[] | null | undefined) {\n const lastItem = breadcrumbs?.at(-1)\n const url = lastItem?.url ?? \"\"\n return url.replace(/(^\\/)|(\\/$)/g, \"\")\n}\n\nfunction mergeDoc<T extends object>(data: Partial<T>, originalDoc?: Partial<T>) {\n return {\n ...(originalDoc || {}),\n ...withoutUndefinedValues(data),\n } as T\n}\n\nfunction withoutPopulatedUrl<T extends object>(doc: T) {\n const { populatedUrl: _populatedUrl, ...rest } = doc as T & { populatedUrl?: unknown }\n return rest\n}\n\nfunction getDocumentId(doc: unknown) {\n if (!doc || typeof doc !== \"object\" || !(\"id\" in doc)) {\n return undefined\n }\n\n return typeof doc.id === \"string\" ? doc.id : undefined\n}\n\nfunction getRelationId(value: unknown) {\n if (typeof value === \"string\") {\n return value\n }\n\n if (!value || typeof value !== \"object\" || !(\"id\" in value)) {\n return undefined\n }\n\n return typeof value.id === \"string\" ? value.id : undefined\n}\n\nfunction normalizePath(path: string | undefined) {\n return withoutTrailingSlash(`/${path ?? \"\"}`.replace(/\\/+/g, \"/\"))\n}\n\nfunction getStringValue(value: unknown, key: \"populatedUrl\" | \"slug\") {\n if (!value || typeof value !== \"object\" || !(key in value)) {\n return undefined\n }\n\n const record = value as Record<\"populatedUrl\" | \"slug\", unknown>\n return typeof record[key] === \"string\" ? record[key] : undefined\n}\n\nfunction isDraftDoc(doc: UrlDoc) {\n return doc._status === \"draft\"\n}\n\nfunction getRecord(value: unknown) {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\n}\n\nfunction dedupeSources<T extends UrlUpdateSource>(sources: T[]) {\n const seen = new Set<string>()\n\n return sources.filter((source) => {\n const key = sourceKey(source)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n\nfunction sourceKey(source: UrlUpdateSource) {\n switch (source.type) {\n case \"category\":\n case \"collection\":\n case \"page\":\n return `${source.type}:${source.collection}:${source.id ?? \"\"}`\n case \"rootPages\":\n return `rootPages:${JSON.stringify(source.current)}:${JSON.stringify(source.previous)}`\n }\n}\n\nfunction withoutUndefinedValues<T extends object>(value: Partial<T>) {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as Partial<T>\n}\n\nexport {\n getBreadcrumbsUrl,\n getRecord,\n dedupeSources,\n isDraftDoc,\n getStringValue,\n normalizePath,\n getRelationId,\n getDocumentId,\n withoutPopulatedUrl,\n mergeDoc,\n withoutTrailingSlash,\n}\n","import { getRecord } from \"./utils\"\n\nimport type { PayloadPluginUrlsOptions } from \"./types\"\n\nexport function populatedUrlField(options: PayloadPluginUrlsOptions = { collections: [] }) {\n const fieldName = options.field?.name ?? \"populatedUrl\"\n\n return {\n name: fieldName,\n type: \"text\",\n label: false,\n localized: true,\n ...(options.field?.overrides ?? {}),\n admin: {\n hidden: true,\n ...getRecord(options.field?.overrides?.admin),\n },\n }\n}\n","import type { PayloadPluginUrlsOptions } from \"./types\"\n\nexport function normalizeOptions(options: PayloadPluginUrlsOptions): PayloadPluginUrlsOptions {\n return {\n ...options,\n field: {\n name: \"populatedUrl\",\n ...options.field,\n },\n locales: {\n defaultLocale: \"en\",\n locales: [\"en\"],\n ...options.locales,\n },\n rootPages: {\n slug: \"root-pages\",\n indexPageField: \"indexPage\",\n ...options.rootPages,\n },\n }\n}\n\nexport function getCollectionOptions(options: PayloadPluginUrlsOptions, collection: string) {\n return options.collections.find((collectionOptions) => collectionOptions.slug === collection)\n}\n\nexport function getCollectionsForCategory(\n options: PayloadPluginUrlsOptions,\n categoryCollection: string,\n) {\n return options.collections\n .filter((collectionOptions) => collectionOptions.category?.collection === categoryCollection)\n .map((collectionOptions) => collectionOptions.slug)\n}\n\nexport function getRootPageFieldNames(options: PayloadPluginUrlsOptions) {\n const normalizedOptions = normalizeOptions(options)\n const fieldNames = [\n normalizedOptions.rootPages?.indexPageField ?? \"indexPage\",\n ...normalizedOptions.collections.flatMap((collection) =>\n collection.rootPageField ? [collection.rootPageField] : [],\n ),\n ]\n\n return [...new Set(fieldNames)]\n}\n","import { getCollectionOptions, normalizeOptions } from \"./options\"\nimport { getBreadcrumbsUrl, withoutTrailingSlash } from \"./utils\"\n\nimport type {\n GetDocumentLinkArgs,\n GetDocumentLinkContext,\n Locale,\n PayloadPluginUrlsOptions,\n UrlCollectionOptions,\n UrlDoc,\n UrlPrefixStrategy,\n} from \"./types\"\n\nexport function getDocumentLink(\n reference: GetDocumentLinkArgs,\n { baseUrl, locale, options, urlPrefixStrategy }: GetDocumentLinkContext,\n) {\n if (typeof reference.value === \"string\") {\n throw new Error(\"Reference value is a string\")\n }\n\n if (reference.value.populatedUrl) {\n return withoutTrailingSlash(reference.value.populatedUrl)\n }\n\n const normalizedOptions = normalizeOptions(options)\n const collectionOptions = getCollectionOptions(normalizedOptions, reference.relationTo)\n const routeCollection = collectionOptions?.routeCollection ?? reference.relationTo\n const slugs = getSlugsForCollection(\n collectionOptions,\n reference.value,\n urlPrefixStrategy ?? collectionOptions?.category?.prefixStrategy,\n )\n\n return getDocumentLinkBySlugs(slugs, {\n baseUrl,\n collection: routeCollection,\n locale,\n options: normalizedOptions,\n })\n}\n\nexport function getDocumentLinkBySlugs(\n slugs: string[],\n {\n baseUrl,\n locale,\n options,\n }: {\n baseUrl?: string\n collection: string\n locale: Locale\n options: PayloadPluginUrlsOptions\n },\n) {\n const normalizedOptions = normalizeOptions(options)\n const prefix = baseUrl || (locale === normalizedOptions.locales?.defaultLocale ? \"\" : locale)\n const segments = [...prefix.split(\"/\"), ...slugs].filter(Boolean)\n return withoutTrailingSlash(`/${segments.join(\"/\")}`)\n}\n\nexport function withLocalePrefix(path: string, locale: Locale, options: PayloadPluginUrlsOptions) {\n const defaultLocale = normalizeOptions(options).locales?.defaultLocale\n if (locale === defaultLocale) {\n return withoutTrailingSlash(path)\n }\n return withoutTrailingSlash(`/${locale}${path}`)\n}\n\nfunction getSlugsForCollection(\n collectionOptions: UrlCollectionOptions | undefined,\n doc: UrlDoc,\n strategy?: UrlPrefixStrategy,\n) {\n if (collectionOptions?.category) {\n return strategy === \"rootPage\"\n ? [doc.slug ?? \"\"]\n : [firstRelatedCategoryPath(doc), doc.slug ?? \"\"]\n }\n\n if (collectionOptions?.breadcrumbs) {\n return [getBreadcrumbsUrl(doc.breadcrumbs) || doc.slug || \"\"]\n }\n\n return [doc.slug ?? \"\"]\n}\n\nfunction firstRelatedCategoryPath(doc: UrlDoc) {\n const categories = doc.categories\n if (!Array.isArray(categories) || categories.length === 0) {\n return \"\"\n }\n\n const categoryItems = categories as unknown[]\n const first = categoryItems[0]\n if (!first || typeof first !== \"object\" || typeof first === \"string\") {\n return \"\"\n }\n\n const categoryDoc = first as UrlDoc\n return (\n getBreadcrumbsUrl(categoryDoc.breadcrumbs) ||\n (categoryDoc.slug ?? \"\").replace(/(^\\/)|(\\/$)/g, \"\")\n )\n}\n","import { getDocumentLink, withLocalePrefix } from \"./link\"\nimport { getCollectionOptions, normalizeOptions } from \"./options\"\nimport {\n getBreadcrumbsUrl,\n getDocumentId,\n mergeDoc,\n normalizePath,\n withoutPopulatedUrl,\n} from \"./utils\"\n\nimport type {\n Locale,\n PayloadLike,\n PayloadPluginUrlsOptions,\n ResolvePopulatedUrlArgs,\n RootPagesDoc,\n UrlCollectionOptions,\n} from \"./types\"\n\nexport async function resolvePopulatedUrl({\n collection,\n data,\n locale,\n options,\n originalDoc,\n payload,\n rootPages,\n}: ResolvePopulatedUrlArgs): Promise<string | undefined> {\n const normalizedOptions = normalizeOptions(options)\n const collectionOptions = getCollectionOptions(normalizedOptions, collection)\n if (!collectionOptions) {\n return undefined\n }\n\n const doc = mergeDoc(data, originalDoc)\n const indexPageField = normalizedOptions.rootPages?.indexPageField ?? \"indexPage\"\n\n if (collectionOptions.breadcrumbs && !collectionOptions.rootPageField) {\n const homepage = await getRootPageDoc({\n field: indexPageField,\n locale,\n payload,\n rootPages,\n })\n const homepageId = getDocumentId(homepage)\n\n if (doc.id && homepageId === doc.id) {\n return withLocalePrefix(\"/\", locale, normalizedOptions)\n }\n\n const breadcrumbsPath = normalizePath(getBreadcrumbsUrl(doc.breadcrumbs))\n const homepagePath = normalizePath(getBreadcrumbsUrl(homepage?.breadcrumbs))\n const pagePath =\n homepagePath && breadcrumbsPath.startsWith(`${homepagePath}/`)\n ? normalizePath(breadcrumbsPath.slice(homepagePath.length))\n : breadcrumbsPath\n\n return withLocalePrefix(pagePath || `/${doc.slug ?? \"\"}`, locale, normalizedOptions)\n }\n\n const rootPageUrl: string | undefined = await getRootPageUrl({\n collectionOptions,\n locale,\n options: normalizedOptions,\n payload,\n rootPages,\n })\n\n if (collectionOptions.category) {\n const categories = await resolveCategories({\n categories: doc[collectionOptions.category.field ?? \"categories\"],\n collection: collectionOptions.category.collection,\n locale,\n payload,\n })\n\n return getDocumentLink(\n {\n relationTo: collection,\n value: {\n ...withoutPopulatedUrl(doc),\n [collectionOptions.category.field ?? \"categories\"]: categories,\n categories,\n },\n },\n {\n baseUrl: rootPageUrl,\n locale,\n options: normalizedOptions,\n },\n )\n }\n\n return getDocumentLink(\n {\n relationTo: collection,\n value: withoutPopulatedUrl(doc),\n },\n {\n baseUrl: rootPageUrl,\n locale,\n options: normalizedOptions,\n },\n )\n}\n\nasync function getRootPageUrl({\n collectionOptions,\n locale,\n options,\n payload,\n rootPages,\n}: {\n collectionOptions: UrlCollectionOptions\n locale: Locale\n options: PayloadPluginUrlsOptions\n payload?: PayloadLike\n rootPages: RootPagesDoc\n}): Promise<string | undefined> {\n if (!collectionOptions.rootPageField) {\n return undefined\n }\n\n const rootPage = await getRootPageDoc({\n field: collectionOptions.rootPageField,\n locale,\n payload,\n rootPages,\n })\n\n if (!rootPage) {\n return undefined\n }\n\n return resolvePopulatedUrl({\n collection: \"pages\",\n data: {},\n locale,\n options,\n originalDoc: rootPage,\n payload,\n rootPages,\n })\n}\n\nasync function getRootPageDoc({\n field,\n locale,\n payload,\n rootPages,\n}: {\n field: string\n locale: Locale\n payload?: PayloadLike\n rootPages: RootPagesDoc\n}) {\n const page = rootPages[field]\n\n if (!page) {\n return undefined\n }\n\n if (typeof page !== \"string\") {\n return page\n }\n\n return payload?.findByID?.({\n collection: \"pages\",\n id: page,\n depth: 0,\n locale,\n select: {\n id: true,\n slug: true,\n populatedUrl: true,\n breadcrumbs: true,\n },\n })\n}\n\nasync function resolveCategories({\n categories,\n collection,\n locale,\n payload,\n}: {\n categories: unknown\n collection: string\n locale: Locale\n payload?: PayloadLike\n}) {\n if (!Array.isArray(categories)) {\n return []\n }\n\n return Promise.all(\n categories.map((category) => {\n if (typeof category !== \"string\") {\n return Promise.resolve(category)\n }\n\n return (\n payload?.findByID?.({\n collection,\n id: category,\n depth: 2,\n locale,\n }) ?? Promise.resolve(category)\n )\n }),\n )\n}\n","import { getCollectionsForCategory, getRootPageFieldNames, normalizeOptions } from \"./options\"\nimport { resolvePopulatedUrl } from \"./resolver\"\nimport { dedupeSources, getRelationId, getStringValue, isDraftDoc } from \"./utils\"\n\nimport type {\n Locale,\n PayloadLike,\n PayloadPluginUrlsOptions,\n RootPagesDoc,\n UrlDoc,\n UrlUpdateSource,\n} from \"./types\"\n\nexport function createUpdateUrlsHandler(options: PayloadPluginUrlsOptions) {\n return async ({\n job,\n req,\n }: {\n job: {\n input?: {\n sources?: UrlUpdateSource[] | null\n }\n }\n req: {\n payload: PayloadLike\n }\n }) => {\n const normalizedOptions = normalizeOptions(options)\n const sources = job.input?.sources ?? []\n\n for (const locale of normalizedOptions.locales?.locales ?? []) {\n const rootPages = await req.payload.findGlobal?.({\n slug: normalizedOptions.rootPages?.slug ?? \"root-pages\",\n depth: 2,\n locale,\n })\n if (!rootPages) {\n continue\n }\n\n for (const source of expandSources(sources, normalizedOptions)) {\n switch (source.type) {\n case \"category\":\n await updateCollectionDocuments({\n collection: source.collection,\n locale,\n options: normalizedOptions,\n payload: req.payload,\n rootPages,\n })\n for (const collection of getCollectionsForCategory(\n normalizedOptions,\n source.collection,\n )) {\n await updateCollectionDocuments({\n collection,\n locale,\n options: normalizedOptions,\n payload: req.payload,\n rootPages,\n })\n }\n break\n case \"collection\":\n case \"page\":\n await updateCollectionDocuments({\n collection: source.collection,\n locale,\n options: normalizedOptions,\n payload: req.payload,\n rootPages,\n })\n break\n case \"rootPages\":\n break\n }\n }\n }\n }\n}\n\nexport function hasUrlPathChanged(doc: unknown, previousDoc: unknown) {\n const docUrl = getStringValue(doc, \"populatedUrl\")\n const previousUrl = getStringValue(previousDoc, \"populatedUrl\")\n\n if (docUrl && previousUrl) {\n return docUrl !== previousUrl\n }\n\n return getStringValue(doc, \"slug\") !== getStringValue(previousDoc, \"slug\")\n}\n\nexport function getRootPageChangeSources(\n current: RootPagesDoc,\n previous: RootPagesDoc | undefined,\n options: PayloadPluginUrlsOptions,\n): UrlUpdateSource[] {\n const normalizedOptions = normalizeOptions(options)\n const sources: UrlUpdateSource[] = []\n const indexPageField = normalizedOptions.rootPages?.indexPageField ?? \"indexPage\"\n const currentIndexPageId = getRelationId(current[indexPageField])\n const previousIndexPageId = getRelationId(previous?.[indexPageField])\n\n if (currentIndexPageId !== previousIndexPageId) {\n if (currentIndexPageId) {\n sources.push({ type: \"page\", collection: \"pages\", id: currentIndexPageId })\n }\n if (previousIndexPageId) {\n sources.push({ type: \"page\", collection: \"pages\", id: previousIndexPageId })\n }\n }\n\n for (const collection of normalizedOptions.collections) {\n if (!collection.rootPageField) {\n continue\n }\n\n const currentRootPageId = getRelationId(current[collection.rootPageField])\n const previousRootPageId = getRelationId(previous?.[collection.rootPageField])\n if (currentRootPageId !== previousRootPageId) {\n sources.push({ type: \"collection\", collection: collection.slug })\n }\n }\n\n return dedupeSources(sources)\n}\n\nexport function getRootPageSnapshot(\n rootPages: UrlDoc | undefined,\n options: PayloadPluginUrlsOptions,\n) {\n const snapshot: RootPagesDoc = {}\n\n for (const fieldName of getRootPageFieldNames(options)) {\n snapshot[fieldName] = rootPages?.[fieldName] as RootPagesDoc[string]\n }\n\n return snapshot\n}\n\nfunction expandSources(sources: UrlUpdateSource[], options: PayloadPluginUrlsOptions) {\n return sources.flatMap((source) => {\n if (source.type !== \"rootPages\") {\n return [source]\n }\n\n return getRootPageChangeSources(source.current, source.previous, options)\n })\n}\n\nasync function updateCollectionDocuments({\n collection,\n locale,\n options,\n payload,\n rootPages,\n}: {\n collection: string\n locale: Locale\n options: PayloadPluginUrlsOptions\n payload: PayloadLike\n rootPages: RootPagesDoc\n}) {\n let page = 1\n\n for (;;) {\n const result = await payload.find?.({\n collection,\n depth: 2,\n draft: false,\n limit: 100,\n locale,\n overrideAccess: true,\n page,\n pagination: true,\n })\n\n if (!result) {\n return\n }\n\n for (const doc of result.docs) {\n if (!doc.id || isDraftDoc(doc)) {\n continue\n }\n\n const populatedUrlValue = await resolvePopulatedUrl({\n collection,\n data: {},\n locale,\n options,\n originalDoc: doc,\n payload,\n rootPages,\n })\n\n if (!populatedUrlValue || doc.populatedUrl === populatedUrlValue) {\n continue\n }\n\n await payload.update?.({\n collection,\n id: doc.id,\n locale,\n overrideAccess: true,\n data: {\n [options.field?.name ?? \"populatedUrl\"]: populatedUrlValue,\n },\n context: {\n disablePopulateUrl: true,\n disableUrlUpdates: true,\n },\n })\n }\n\n if (!result.nextPage) {\n return\n }\n\n page = result.nextPage\n }\n}\n","import { getCollectionOptions, getCollectionsForCategory, normalizeOptions } from \"./options\"\nimport { resolvePopulatedUrl } from \"./resolver\"\nimport { getRootPageSnapshot, hasUrlPathChanged } from \"./update-urls\"\nimport { isDraftDoc } from \"./utils\"\n\nimport type { Hook, PayloadPluginUrlsOptions } from \"./types\"\n\nexport function createPopulateUrlHook(options: PayloadPluginUrlsOptions): Hook {\n return async ({ collection, context, data = {}, originalDoc, req }) => {\n const locale = req.locale\n if (\n !locale ||\n locale === \"all\" ||\n context?.disablePopulateUrl ||\n req.context?.disablePopulateUrl\n ) {\n return data\n }\n\n const rootPages = await req.payload.findGlobal?.({\n slug: normalizeOptions(options).rootPages?.slug ?? \"root-pages\",\n depth: 2,\n locale,\n })\n if (!rootPages) {\n return data\n }\n\n const populatedUrlValue = await resolvePopulatedUrl({\n collection: collection?.slug ?? \"\",\n data,\n locale,\n options,\n originalDoc,\n payload: req.payload,\n rootPages,\n })\n\n if (populatedUrlValue) {\n data[options.field?.name ?? \"populatedUrl\"] = populatedUrlValue\n }\n\n return data\n }\n}\n\nexport function createCollectionUrlUpdateHook(options: PayloadPluginUrlsOptions): Hook {\n return async ({ collection, doc, previousDoc, req }) => {\n if (\n req.context?.disableUrlUpdates ||\n !doc ||\n isDraftDoc(doc) ||\n !hasUrlPathChanged(doc, previousDoc)\n ) {\n return doc\n }\n\n const collectionOptions = getCollectionOptions(options, collection?.slug ?? \"\")\n if (!collectionOptions) {\n return doc\n }\n\n const collectionSlug = collection?.slug ?? \"\"\n const isCategoryCollection = getCollectionsForCategory(options, collectionSlug).length > 0\n const source = isCategoryCollection\n ? {\n type: \"category\",\n collection: collectionSlug,\n id: doc.id,\n }\n : {\n type:\n collectionOptions.breadcrumbs && !collectionOptions.rootPageField\n ? \"page\"\n : \"collection\",\n collection: collectionSlug,\n id: doc.id,\n }\n\n await req.payload.jobs?.queue?.({\n workflow: \"update-urls\",\n input: {\n sources: [source],\n },\n })\n\n return doc\n }\n}\n\nexport function createRootPagesUrlUpdateHook(options: PayloadPluginUrlsOptions): Hook {\n return async ({ doc, previousDoc, req }) => {\n if (req.context?.disableUrlUpdates) {\n return doc\n }\n\n await req.payload.jobs?.queue?.({\n workflow: \"update-urls\",\n input: {\n sources: [\n {\n type: \"rootPages\",\n current: getRootPageSnapshot(doc, options),\n previous: getRootPageSnapshot(previousDoc, options),\n },\n ],\n },\n })\n\n return doc\n }\n}\n","import { populatedUrlField } from \"./field\"\nimport {\n createCollectionUrlUpdateHook,\n createPopulateUrlHook,\n createRootPagesUrlUpdateHook,\n} from \"./hooks\"\nimport { getCollectionOptions, getRootPageFieldNames, normalizeOptions } from \"./options\"\nimport { createUpdateUrlsHandler } from \"./update-urls\"\n\nimport type {\n CollectionConfigLike,\n GlobalConfigLike,\n PayloadPlugin,\n PayloadPluginUrlsOptions,\n} from \"./types\"\n\nexport const payloadPluginUrls = (options?: PayloadPluginUrlsOptions): PayloadPlugin => {\n if (!options) {\n return (config) => config\n }\n\n return (config) => {\n const normalizedOptions = normalizeOptions(options)\n const collections = (config.collections ?? []).map((collection) =>\n applyUrlCollectionConfig(collection, normalizedOptions),\n )\n\n return {\n ...config,\n collections,\n globals: [...(config.globals ?? []), createRootPagesGlobal(normalizedOptions)],\n jobs: {\n ...(config.jobs ?? {}),\n workflows: [\n ...(config.jobs?.workflows ?? []),\n {\n slug: \"update-urls\",\n handler: createUpdateUrlsHandler(normalizedOptions),\n },\n ],\n },\n }\n }\n}\n\nfunction applyUrlCollectionConfig(\n collection: CollectionConfigLike,\n options: PayloadPluginUrlsOptions,\n) {\n const collectionOptions = getCollectionOptions(options, collection.slug)\n if (!collectionOptions) {\n return collection\n }\n\n const fieldName = options.field?.name ?? \"populatedUrl\"\n const fields = collection.fields.some((field) => field.name === fieldName)\n ? collection.fields\n : [...collection.fields, populatedUrlField(options)]\n const hooks = collection.hooks ?? {}\n\n return {\n ...collection,\n defaultPopulate: {\n ...(collection.defaultPopulate ?? {}),\n [fieldName]: true,\n },\n fields,\n hooks: {\n ...hooks,\n beforeChange: [...(hooks.beforeChange ?? []), createPopulateUrlHook(options)],\n afterChange: [...(hooks.afterChange ?? []), createCollectionUrlUpdateHook(options)],\n },\n }\n}\n\nfunction createRootPagesGlobal(options: PayloadPluginUrlsOptions): GlobalConfigLike {\n const rootPagesOptions = normalizeOptions(options).rootPages\n\n return {\n slug: rootPagesOptions?.slug ?? \"root-pages\",\n label: rootPagesOptions?.label ?? \"Root pages\",\n fields: getRootPageFieldNames(options).map((fieldName) =>\n createRootPageField(fieldName, options),\n ),\n hooks: {\n afterChange: [createRootPagesUrlUpdateHook(options)],\n },\n }\n}\n\nfunction createRootPageField(fieldName: string, options: PayloadPluginUrlsOptions) {\n const rootPagesOptions = normalizeOptions(options).rootPages\n const { name: _name, ...override } = rootPagesOptions?.fieldOverrides?.[fieldName] ?? {}\n\n return {\n name: fieldName,\n type: \"relationship\",\n relationTo: \"pages\",\n hasMany: false,\n label: rootPagesOptions?.fieldLabels?.[fieldName],\n admin: {\n width: \"50%\",\n },\n ...override,\n }\n}\n"],"mappings":"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","names":["withoutTrailingSlash","path","getBreadcrumbsUrl","breadcrumbs","mergeDoc","data","originalDoc","withoutUndefinedValues","withoutPopulatedUrl","doc","_populatedUrl","rest","getDocumentId","getRelationId","value","normalizePath","getStringValue","key","record","isDraftDoc","getRecord","dedupeSources","sources","seen","source","sourceKey","entry","populatedUrlField","options","getRecord","normalizeOptions","options","getCollectionOptions","collection","collectionOptions","getCollectionsForCategory","categoryCollection","getRootPageFieldNames","normalizedOptions","fieldNames","getDocumentLink","reference","baseUrl","locale","options","urlPrefixStrategy","withoutTrailingSlash","normalizedOptions","normalizeOptions","collectionOptions","getCollectionOptions","routeCollection","slugs","getSlugsForCollection","getDocumentLinkBySlugs","segments","withLocalePrefix","path","defaultLocale","doc","strategy","firstRelatedCategoryPath","getBreadcrumbsUrl","categories","first","categoryDoc","resolvePopulatedUrl","collection","data","locale","options","originalDoc","payload","rootPages","normalizedOptions","normalizeOptions","collectionOptions","getCollectionOptions","doc","mergeDoc","indexPageField","homepage","getRootPageDoc","homepageId","getDocumentId","withLocalePrefix","breadcrumbsPath","normalizePath","getBreadcrumbsUrl","homepagePath","pagePath","rootPageUrl","getRootPageUrl","categories","resolveCategories","getDocumentLink","withoutPopulatedUrl","rootPage","field","page","category","createUpdateUrlsHandler","options","job","req","normalizedOptions","normalizeOptions","sources","locale","rootPages","source","expandSources","updateCollectionDocuments","collection","getCollectionsForCategory","hasUrlPathChanged","doc","previousDoc","docUrl","getStringValue","previousUrl","getRootPageChangeSources","current","previous","indexPageField","currentIndexPageId","getRelationId","previousIndexPageId","currentRootPageId","previousRootPageId","dedupeSources","getRootPageSnapshot","snapshot","fieldName","getRootPageFieldNames","payload","page","result","isDraftDoc","populatedUrlValue","resolvePopulatedUrl","createPopulateUrlHook","options","collection","context","data","originalDoc","req","locale","rootPages","normalizeOptions","populatedUrlValue","resolvePopulatedUrl","createCollectionUrlUpdateHook","doc","previousDoc","isDraftDoc","hasUrlPathChanged","collectionOptions","getCollectionOptions","collectionSlug","source","getCollectionsForCategory","createRootPagesUrlUpdateHook","getRootPageSnapshot","payloadPluginUrls","options","config","normalizedOptions","normalizeOptions","collections","collection","applyUrlCollectionConfig","createRootPagesGlobal","createUpdateUrlsHandler","getCollectionOptions","fieldName","fields","field","populatedUrlField","hooks","createPopulateUrlHook","createCollectionUrlUpdateHook","rootPagesOptions","getRootPageFieldNames","createRootPageField","createRootPagesUrlUpdateHook","_name","override"]}
|
package/dist/link.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { GetDocumentLinkArgs, GetDocumentLinkContext, Locale, PayloadPluginUrlsOptions } from "./types";
|
|
2
|
+
export declare function getDocumentLink(reference: GetDocumentLinkArgs, { baseUrl, locale, options, urlPrefixStrategy }: GetDocumentLinkContext): string;
|
|
3
|
+
export declare function getDocumentLinkBySlugs(slugs: string[], { baseUrl, locale, options, }: {
|
|
4
|
+
baseUrl?: string;
|
|
5
|
+
collection: string;
|
|
6
|
+
locale: Locale;
|
|
7
|
+
options: PayloadPluginUrlsOptions;
|
|
8
|
+
}): string;
|
|
9
|
+
export declare function withLocalePrefix(path: string, locale: Locale, options: PayloadPluginUrlsOptions): string;
|
|
10
|
+
//# sourceMappingURL=link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,MAAM,EACN,wBAAwB,EAIzB,MAAM,SAAS,CAAA;AAEhB,wBAAgB,eAAe,CAC7B,SAAS,EAAE,mBAAmB,EAC9B,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,sBAAsB,UAyBxE;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,EACE,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,wBAAwB,CAAA;CAClC,UAMF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,UAM/F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PayloadPluginUrlsOptions } from "./types";
|
|
2
|
+
export declare function normalizeOptions(options: PayloadPluginUrlsOptions): PayloadPluginUrlsOptions;
|
|
3
|
+
export declare function getCollectionOptions(options: PayloadPluginUrlsOptions, collection: string): import("./types").UrlCollectionOptions | undefined;
|
|
4
|
+
export declare function getCollectionsForCategory(options: PayloadPluginUrlsOptions, categoryCollection: string): string[];
|
|
5
|
+
export declare function getRootPageFieldNames(options: PayloadPluginUrlsOptions): string[];
|
|
6
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAEvD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,GAAG,wBAAwB,CAkB5F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,sDAEzF;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,wBAAwB,EACjC,kBAAkB,EAAE,MAAM,YAK3B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,wBAAwB,YAUtE"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,aAAa,EACb,wBAAwB,EACzB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,iBAAiB,GAAI,UAAU,wBAAwB,KAAG,aA2BtE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAIV,uBAAuB,EAGxB,MAAM,SAAS,CAAA;AAEhB,wBAAsB,mBAAmB,CAAC,EACxC,UAAU,EACV,IAAI,EACJ,MAAM,EACN,OAAO,EACP,WAAW,EACX,OAAO,EACP,SAAS,GACV,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA6EvD"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
export type Locale = string;
|
|
2
|
+
export type UrlPrefixStrategy = "category" | "rootPage";
|
|
3
|
+
export type Breadcrumb = {
|
|
4
|
+
url?: string | null;
|
|
5
|
+
};
|
|
6
|
+
export type UrlDoc = {
|
|
7
|
+
id?: string | null;
|
|
8
|
+
slug?: string | null;
|
|
9
|
+
populatedUrl?: string | null;
|
|
10
|
+
breadcrumbs?: Breadcrumb[] | null;
|
|
11
|
+
categories?: unknown;
|
|
12
|
+
_status?: "draft" | "published" | null;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
};
|
|
15
|
+
export type RootPagesDoc = {
|
|
16
|
+
id?: string | null;
|
|
17
|
+
[field: string]: string | UrlDoc | null | undefined;
|
|
18
|
+
};
|
|
19
|
+
export type UrlCollectionOptions = {
|
|
20
|
+
slug: string;
|
|
21
|
+
breadcrumbs?: boolean;
|
|
22
|
+
rootPageField?: string;
|
|
23
|
+
category?: {
|
|
24
|
+
collection: string;
|
|
25
|
+
field?: string;
|
|
26
|
+
prefixStrategy?: UrlPrefixStrategy;
|
|
27
|
+
};
|
|
28
|
+
routeCollection?: string;
|
|
29
|
+
};
|
|
30
|
+
export type PayloadPluginUrlsOptions = {
|
|
31
|
+
collections: UrlCollectionOptions[];
|
|
32
|
+
field?: {
|
|
33
|
+
name?: string;
|
|
34
|
+
overrides?: Record<string, unknown>;
|
|
35
|
+
};
|
|
36
|
+
locales?: {
|
|
37
|
+
defaultLocale?: Locale;
|
|
38
|
+
locales?: Locale[];
|
|
39
|
+
};
|
|
40
|
+
rootPages?: {
|
|
41
|
+
slug?: string;
|
|
42
|
+
label?: unknown;
|
|
43
|
+
indexPageField?: string;
|
|
44
|
+
fieldLabels?: Record<string, unknown>;
|
|
45
|
+
fieldOverrides?: Record<string, Partial<FieldLike>>;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export type PayloadLike = {
|
|
49
|
+
find?: (args: Record<string, unknown>) => Promise<{
|
|
50
|
+
docs: UrlDoc[];
|
|
51
|
+
nextPage?: number | null;
|
|
52
|
+
}>;
|
|
53
|
+
findByID?: (args: Record<string, unknown>) => Promise<UrlDoc>;
|
|
54
|
+
findGlobal?: (args: Record<string, unknown>) => Promise<RootPagesDoc>;
|
|
55
|
+
jobs?: {
|
|
56
|
+
queue?: (args: Record<string, unknown>) => Promise<unknown>;
|
|
57
|
+
run?: (args: Record<string, unknown>) => Promise<unknown>;
|
|
58
|
+
};
|
|
59
|
+
logger?: {
|
|
60
|
+
error?: (error: unknown) => void;
|
|
61
|
+
};
|
|
62
|
+
update?: (args: Record<string, unknown>) => Promise<unknown>;
|
|
63
|
+
};
|
|
64
|
+
export type HookArgs = {
|
|
65
|
+
collection?: {
|
|
66
|
+
slug?: string;
|
|
67
|
+
};
|
|
68
|
+
context?: Record<string, unknown>;
|
|
69
|
+
data?: UrlDoc;
|
|
70
|
+
doc?: UrlDoc;
|
|
71
|
+
previousDoc?: UrlDoc;
|
|
72
|
+
originalDoc?: UrlDoc;
|
|
73
|
+
req: {
|
|
74
|
+
locale?: string;
|
|
75
|
+
context?: Record<string, unknown>;
|
|
76
|
+
payload: PayloadLike;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
export type Hook = (args: HookArgs) => unknown;
|
|
80
|
+
export type PayloadPluginConfig = {
|
|
81
|
+
collections?: CollectionConfigLike[];
|
|
82
|
+
globals?: GlobalConfigLike[];
|
|
83
|
+
jobs?: {
|
|
84
|
+
workflows?: WorkflowLike[];
|
|
85
|
+
[key: string]: unknown;
|
|
86
|
+
};
|
|
87
|
+
[key: string]: unknown;
|
|
88
|
+
};
|
|
89
|
+
export type CollectionConfigLike = {
|
|
90
|
+
slug: string;
|
|
91
|
+
fields: FieldLike[];
|
|
92
|
+
defaultPopulate?: Record<string, unknown>;
|
|
93
|
+
hooks?: {
|
|
94
|
+
beforeChange?: Hook[];
|
|
95
|
+
afterChange?: Hook[];
|
|
96
|
+
[key: string]: unknown;
|
|
97
|
+
};
|
|
98
|
+
[key: string]: unknown;
|
|
99
|
+
};
|
|
100
|
+
export type GlobalConfigLike = {
|
|
101
|
+
slug: string;
|
|
102
|
+
fields: FieldLike[];
|
|
103
|
+
hooks?: {
|
|
104
|
+
afterChange?: Hook[];
|
|
105
|
+
[key: string]: unknown;
|
|
106
|
+
};
|
|
107
|
+
[key: string]: unknown;
|
|
108
|
+
};
|
|
109
|
+
export type FieldLike = {
|
|
110
|
+
name?: string;
|
|
111
|
+
type?: string;
|
|
112
|
+
[key: string]: unknown;
|
|
113
|
+
};
|
|
114
|
+
export type WorkflowLike = {
|
|
115
|
+
slug?: string;
|
|
116
|
+
handler?: unknown;
|
|
117
|
+
[key: string]: unknown;
|
|
118
|
+
};
|
|
119
|
+
export type PayloadPlugin = (config: PayloadPluginConfig) => PayloadPluginConfig;
|
|
120
|
+
export type ResolvePopulatedUrlArgs = {
|
|
121
|
+
collection: string;
|
|
122
|
+
data: Partial<UrlDoc>;
|
|
123
|
+
locale: Locale;
|
|
124
|
+
options: PayloadPluginUrlsOptions;
|
|
125
|
+
originalDoc?: Partial<UrlDoc>;
|
|
126
|
+
payload?: PayloadLike;
|
|
127
|
+
rootPages: RootPagesDoc;
|
|
128
|
+
};
|
|
129
|
+
export type GetDocumentLinkArgs = {
|
|
130
|
+
relationTo: string;
|
|
131
|
+
value: string | UrlDoc;
|
|
132
|
+
};
|
|
133
|
+
export type GetDocumentLinkContext = {
|
|
134
|
+
baseUrl?: string;
|
|
135
|
+
locale: Locale;
|
|
136
|
+
options: PayloadPluginUrlsOptions;
|
|
137
|
+
urlPrefixStrategy?: UrlPrefixStrategy;
|
|
138
|
+
};
|
|
139
|
+
export type UrlUpdateSource = {
|
|
140
|
+
collection: string;
|
|
141
|
+
id?: string | null;
|
|
142
|
+
type: "category" | "collection" | "page";
|
|
143
|
+
} | {
|
|
144
|
+
current: RootPagesDoc;
|
|
145
|
+
previous?: RootPagesDoc;
|
|
146
|
+
type: "rootPages";
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PayloadLike, PayloadPluginUrlsOptions, RootPagesDoc, UrlDoc, UrlUpdateSource } from "./types";
|
|
2
|
+
export declare function createUpdateUrlsHandler(options: PayloadPluginUrlsOptions): ({ job, req, }: {
|
|
3
|
+
job: {
|
|
4
|
+
input?: {
|
|
5
|
+
sources?: UrlUpdateSource[] | null;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
req: {
|
|
9
|
+
payload: PayloadLike;
|
|
10
|
+
};
|
|
11
|
+
}) => Promise<void>;
|
|
12
|
+
export declare function hasUrlPathChanged(doc: unknown, previousDoc: unknown): boolean;
|
|
13
|
+
export declare function getRootPageChangeSources(current: RootPagesDoc, previous: RootPagesDoc | undefined, options: PayloadPluginUrlsOptions): UrlUpdateSource[];
|
|
14
|
+
export declare function getRootPageSnapshot(rootPages: UrlDoc | undefined, options: PayloadPluginUrlsOptions): RootPagesDoc;
|
|
15
|
+
//# sourceMappingURL=update-urls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-urls.d.ts","sourceRoot":"","sources":["../src/update-urls.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,WAAW,EACX,wBAAwB,EACxB,YAAY,EACZ,MAAM,EACN,eAAe,EAChB,MAAM,SAAS,CAAA;AAEhB,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,IACzD,eAGX;IACD,GAAG,EAAE;QACH,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;SACnC,CAAA;KACF,CAAA;IACD,GAAG,EAAE;QACH,OAAO,EAAE,WAAW,CAAA;KACrB,CAAA;CACF,mBAqDF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,WASnE;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,OAAO,EAAE,wBAAwB,GAChC,eAAe,EAAE,CA6BnB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,wBAAwB,gBASlC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Breadcrumb, UrlDoc, UrlUpdateSource } from "./types";
|
|
2
|
+
declare const withoutTrailingSlash: (path: string) => string;
|
|
3
|
+
declare function getBreadcrumbsUrl(breadcrumbs: Breadcrumb[] | null | undefined): string;
|
|
4
|
+
declare function mergeDoc<T extends object>(data: Partial<T>, originalDoc?: Partial<T>): T;
|
|
5
|
+
declare function withoutPopulatedUrl<T extends object>(doc: T): Omit<T & {
|
|
6
|
+
populatedUrl?: unknown;
|
|
7
|
+
}, "populatedUrl">;
|
|
8
|
+
declare function getDocumentId(doc: unknown): string | undefined;
|
|
9
|
+
declare function getRelationId(value: unknown): string | undefined;
|
|
10
|
+
declare function normalizePath(path: string | undefined): string;
|
|
11
|
+
declare function getStringValue(value: unknown, key: "populatedUrl" | "slug"): string | undefined;
|
|
12
|
+
declare function isDraftDoc(doc: UrlDoc): boolean;
|
|
13
|
+
declare function getRecord(value: unknown): Record<string, unknown>;
|
|
14
|
+
declare function dedupeSources<T extends UrlUpdateSource>(sources: T[]): T[];
|
|
15
|
+
export { getBreadcrumbsUrl, getRecord, dedupeSources, isDraftDoc, getStringValue, normalizePath, getRelationId, getDocumentId, withoutPopulatedUrl, mergeDoc, withoutTrailingSlash, };
|
|
16
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAElE,QAAA,MAAM,oBAAoB,GAAI,MAAM,MAAM,WAAiD,CAAA;AAE3F,iBAAS,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,SAAS,UAItE;AAED,iBAAS,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAIvE,CAAC,CACP;AAED,iBAAS,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC;mBAC0B,OAAO;mBAErF;AAED,iBAAS,aAAa,CAAC,GAAG,EAAE,OAAO,sBAMlC;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,OAAO,sBAUpC;AAED,iBAAS,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,UAE9C;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,sBAOnE;AAED,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,WAE9B;AAED,iBAAS,SAAS,CAAC,KAAK,EAAE,OAAO,2BAIhC;AAED,iBAAS,aAAa,CAAC,CAAC,SAAS,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,OAW7D;AAmBD,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACR,oBAAoB,GACrB,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "payload-plugin-urls",
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"description": "Payload CMS plugin for URL utilities.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"payload",
|
|
9
|
+
"payloadcms",
|
|
10
|
+
"plugin",
|
|
11
|
+
"urls"
|
|
12
|
+
],
|
|
13
|
+
"author": "Mattia Dalzocchio <mattia@dalzocch.io>",
|
|
14
|
+
"homepage": "https://github.com/uxio-labs/payload-website-plugins/tree/main/packages/payload-plugin-urls#readme",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/uxio-labs/payload-website-plugins.git",
|
|
18
|
+
"directory": "packages/payload-plugin-urls"
|
|
19
|
+
},
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/uxio-labs/payload-website-plugins/issues"
|
|
22
|
+
},
|
|
23
|
+
"main": "./dist/index.cjs",
|
|
24
|
+
"module": "./dist/index.js",
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"import": "./dist/index.js",
|
|
30
|
+
"require": "./dist/index.cjs"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"README.md"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsup --config tsup.config.ts --minify && tsc -p tsconfig.build.json --emitDeclarationOnly",
|
|
39
|
+
"dev": "tsup --config tsup.config.ts --watch",
|
|
40
|
+
"test": "vitest run tests/index.test.ts",
|
|
41
|
+
"typecheck": "tsc --noEmit"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"payload": ">=3.0.0"
|
|
45
|
+
},
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public"
|
|
48
|
+
},
|
|
49
|
+
"sideEffects": false
|
|
50
|
+
}
|