@payloadcms/plugin-seo 3.0.0-canary.23fcb9e → 3.0.0-canary.294ea5c
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/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAoC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAoC,MAAM,SAAS,CAAA;AAIvE,OAAO,KAAK,EAKV,eAAe,EAChB,MAAM,YAAY,CAAA;AASnB,eAAO,MAAM,SAAS,iBACL,eAAe,cACrB,MAAM,KAAG,MA+OjB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { addDataAndFileToRequest } from '@payloadcms/next/utilities';
|
|
2
1
|
import { deepMergeSimple } from 'payload/shared';
|
|
3
2
|
import { MetaDescriptionField } from './fields/MetaDescription/index.js';
|
|
4
3
|
import { MetaImageField } from './fields/MetaImage/index.js';
|
|
@@ -103,7 +102,10 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
|
|
|
103
102
|
...config.endpoints ?? [],
|
|
104
103
|
{
|
|
105
104
|
handler: async (req)=>{
|
|
106
|
-
await
|
|
105
|
+
const data = await req.json();
|
|
106
|
+
if (data) {
|
|
107
|
+
req.data = data;
|
|
108
|
+
}
|
|
107
109
|
const result = pluginConfig.generateTitle ? await pluginConfig.generateTitle({
|
|
108
110
|
...req.data,
|
|
109
111
|
req
|
|
@@ -119,7 +121,10 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
|
|
|
119
121
|
},
|
|
120
122
|
{
|
|
121
123
|
handler: async (req)=>{
|
|
122
|
-
await
|
|
124
|
+
const data = await req.json();
|
|
125
|
+
if (data) {
|
|
126
|
+
req.data = data;
|
|
127
|
+
}
|
|
123
128
|
const result = pluginConfig.generateDescription ? await pluginConfig.generateDescription({
|
|
124
129
|
...req.data,
|
|
125
130
|
req
|
|
@@ -135,7 +140,10 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
|
|
|
135
140
|
},
|
|
136
141
|
{
|
|
137
142
|
handler: async (req)=>{
|
|
138
|
-
await
|
|
143
|
+
const data = await req.json();
|
|
144
|
+
if (data) {
|
|
145
|
+
req.data = data;
|
|
146
|
+
}
|
|
139
147
|
const result = pluginConfig.generateURL ? await pluginConfig.generateURL({
|
|
140
148
|
...req.data,
|
|
141
149
|
req
|
|
@@ -151,7 +159,10 @@ export const seoPlugin = (pluginConfig)=>(config)=>{
|
|
|
151
159
|
},
|
|
152
160
|
{
|
|
153
161
|
handler: async (req)=>{
|
|
154
|
-
await
|
|
162
|
+
const data = await req.json();
|
|
163
|
+
if (data) {
|
|
164
|
+
req.data = data;
|
|
165
|
+
}
|
|
155
166
|
const result = pluginConfig.generateImage ? await pluginConfig.generateImage({
|
|
156
167
|
...req.data,
|
|
157
168
|
req
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import type { Config, GroupField, TabsField, TextField } from 'payload'\n\nimport { addDataAndFileToRequest } from '@payloadcms/next/utilities'\nimport { deepMergeSimple } from 'payload/shared'\n\nimport type {\n GenerateDescription,\n GenerateImage,\n GenerateTitle,\n GenerateURL,\n SEOPluginConfig,\n} from './types.js'\n\nimport { MetaDescriptionField } from './fields/MetaDescription/index.js'\nimport { MetaImageField } from './fields/MetaImage/index.js'\nimport { MetaTitleField } from './fields/MetaTitle/index.js'\nimport { OverviewField } from './fields/Overview/index.js'\nimport { PreviewField } from './fields/Preview/index.js'\nimport { translations } from './translations/index.js'\n\nexport const seoPlugin =\n (pluginConfig: SEOPluginConfig) =>\n (config: Config): Config => {\n const seoFields: GroupField[] = [\n {\n name: 'meta',\n type: 'group',\n fields: [\n OverviewField({}),\n MetaTitleField({\n hasGenerateFn: typeof pluginConfig?.generateTitle === 'function',\n overrides: pluginConfig?.fieldOverrides?.title as unknown as TextField,\n }),\n MetaDescriptionField({\n hasGenerateFn: typeof pluginConfig?.generateDescription === 'function',\n overrides: pluginConfig?.fieldOverrides?.description,\n }),\n ...(pluginConfig?.uploadsCollection\n ? [\n MetaImageField({\n hasGenerateFn: typeof pluginConfig?.generateImage === 'function',\n overrides: pluginConfig?.fieldOverrides?.image,\n relationTo: pluginConfig.uploadsCollection,\n }),\n ]\n : []),\n ...(pluginConfig?.fields || []),\n PreviewField({\n hasGenerateFn: typeof pluginConfig?.generateURL === 'function',\n }),\n ],\n interfaceName: pluginConfig.interfaceName,\n label: 'SEO',\n },\n ]\n\n return {\n ...config,\n collections:\n config.collections?.map((collection) => {\n const { slug } = collection\n const isEnabled = pluginConfig?.collections?.includes(slug)\n\n if (isEnabled) {\n if (pluginConfig?.tabbedUI) {\n // prevent issues with auth enabled collections having an email field that shouldn't be moved to the SEO tab\n const emailField =\n (collection.auth ||\n !(typeof collection.auth === 'object' && collection.auth.disableLocalStrategy)) &&\n collection.fields?.find((field) => 'name' in field && field.name === 'email')\n const hasOnlyEmailField = collection.fields?.length === 1 && emailField\n\n const seoTabs: TabsField[] = hasOnlyEmailField\n ? [\n {\n type: 'tabs',\n tabs: [\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n : [\n {\n type: 'tabs',\n tabs: [\n // append a new tab onto the end of the tabs array, if there is one at the first index\n // if needed, create a new `Content` tab in the first index for this collection's base fields\n ...(collection?.fields?.[0]?.type === 'tabs' &&\n collection?.fields?.[0]?.tabs\n ? collection.fields[0].tabs\n : [\n {\n fields: [\n ...(emailField\n ? collection.fields.filter(\n (field) => 'name' in field && field.name !== 'email',\n )\n : collection.fields),\n ],\n label: collection?.labels?.singular || 'Content',\n },\n ]),\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n\n return {\n ...collection,\n fields: [\n ...(emailField ? [emailField] : []),\n ...seoTabs,\n ...(collection?.fields?.[0]?.type === 'tabs' ? collection.fields.slice(1) : []),\n ],\n }\n }\n\n return {\n ...collection,\n fields: [...(collection?.fields || []), ...seoFields],\n }\n }\n\n return collection\n }) || [],\n endpoints: [\n ...(config.endpoints ?? []),\n {\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n\n const result = pluginConfig.generateTitle\n ? await pluginConfig.generateTitle({\n ...req.data,\n req,\n } as unknown as Parameters<GenerateTitle>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-title',\n },\n {\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n\n const result = pluginConfig.generateDescription\n ? await pluginConfig.generateDescription({\n ...req.data,\n req,\n } as unknown as Parameters<GenerateDescription>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-description',\n },\n {\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n\n const result = pluginConfig.generateURL\n ? await pluginConfig.generateURL({\n ...req.data,\n req,\n } as unknown as Parameters<GenerateURL>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-url',\n },\n {\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n\n const result = pluginConfig.generateImage\n ? await pluginConfig.generateImage({\n ...req.data,\n req,\n } as unknown as Parameters<GenerateImage>[0])\n : ''\n return new Response(result, { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-image',\n },\n ],\n globals:\n config.globals?.map((global) => {\n const { slug } = global\n const isEnabled = pluginConfig?.globals?.includes(slug)\n\n if (isEnabled) {\n if (pluginConfig?.tabbedUI) {\n const seoTabs: TabsField[] = [\n {\n type: 'tabs',\n tabs: [\n // append a new tab onto the end of the tabs array, if there is one at the first index\n // if needed, create a new `Content` tab in the first index for this global's base fields\n ...(global?.fields?.[0].type === 'tabs' && global?.fields?.[0].tabs\n ? global.fields[0].tabs\n : [\n {\n fields: [...(global?.fields || [])],\n label: global?.label || 'Content',\n },\n ]),\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n\n return {\n ...global,\n fields: [\n ...seoTabs,\n ...(global?.fields?.[0].type === 'tabs' ? global.fields.slice(1) : []),\n ],\n }\n }\n\n return {\n ...global,\n fields: [...(global?.fields || []), ...seoFields],\n }\n }\n\n return global\n }) || [],\n i18n: {\n ...config.i18n,\n translations: deepMergeSimple(translations, config.i18n?.translations),\n },\n }\n }\n"],"names":["addDataAndFileToRequest","deepMergeSimple","MetaDescriptionField","MetaImageField","MetaTitleField","OverviewField","PreviewField","translations","seoPlugin","pluginConfig","config","seoFields","name","type","fields","hasGenerateFn","generateTitle","overrides","fieldOverrides","title","generateDescription","description","uploadsCollection","generateImage","image","relationTo","generateURL","interfaceName","label","collections","map","collection","slug","isEnabled","includes","tabbedUI","emailField","auth","disableLocalStrategy","find","field","hasOnlyEmailField","length","seoTabs","tabs","filter","labels","singular","slice","endpoints","handler","req","result","data","Response","JSON","stringify","status","method","path","globals","global","i18n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import type { Config, GroupField, TabsField, TextField } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\n\nimport type {\n GenerateDescription,\n GenerateImage,\n GenerateTitle,\n GenerateURL,\n SEOPluginConfig,\n} from './types.js'\n\nimport { MetaDescriptionField } from './fields/MetaDescription/index.js'\nimport { MetaImageField } from './fields/MetaImage/index.js'\nimport { MetaTitleField } from './fields/MetaTitle/index.js'\nimport { OverviewField } from './fields/Overview/index.js'\nimport { PreviewField } from './fields/Preview/index.js'\nimport { translations } from './translations/index.js'\n\nexport const seoPlugin =\n (pluginConfig: SEOPluginConfig) =>\n (config: Config): Config => {\n const seoFields: GroupField[] = [\n {\n name: 'meta',\n type: 'group',\n fields: [\n OverviewField({}),\n MetaTitleField({\n hasGenerateFn: typeof pluginConfig?.generateTitle === 'function',\n overrides: pluginConfig?.fieldOverrides?.title as unknown as TextField,\n }),\n MetaDescriptionField({\n hasGenerateFn: typeof pluginConfig?.generateDescription === 'function',\n overrides: pluginConfig?.fieldOverrides?.description,\n }),\n ...(pluginConfig?.uploadsCollection\n ? [\n MetaImageField({\n hasGenerateFn: typeof pluginConfig?.generateImage === 'function',\n overrides: pluginConfig?.fieldOverrides?.image,\n relationTo: pluginConfig.uploadsCollection,\n }),\n ]\n : []),\n ...(pluginConfig?.fields || []),\n PreviewField({\n hasGenerateFn: typeof pluginConfig?.generateURL === 'function',\n }),\n ],\n interfaceName: pluginConfig.interfaceName,\n label: 'SEO',\n },\n ]\n\n return {\n ...config,\n collections:\n config.collections?.map((collection) => {\n const { slug } = collection\n const isEnabled = pluginConfig?.collections?.includes(slug)\n\n if (isEnabled) {\n if (pluginConfig?.tabbedUI) {\n // prevent issues with auth enabled collections having an email field that shouldn't be moved to the SEO tab\n const emailField =\n (collection.auth ||\n !(typeof collection.auth === 'object' && collection.auth.disableLocalStrategy)) &&\n collection.fields?.find((field) => 'name' in field && field.name === 'email')\n const hasOnlyEmailField = collection.fields?.length === 1 && emailField\n\n const seoTabs: TabsField[] = hasOnlyEmailField\n ? [\n {\n type: 'tabs',\n tabs: [\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n : [\n {\n type: 'tabs',\n tabs: [\n // append a new tab onto the end of the tabs array, if there is one at the first index\n // if needed, create a new `Content` tab in the first index for this collection's base fields\n ...(collection?.fields?.[0]?.type === 'tabs' &&\n collection?.fields?.[0]?.tabs\n ? collection.fields[0].tabs\n : [\n {\n fields: [\n ...(emailField\n ? collection.fields.filter(\n (field) => 'name' in field && field.name !== 'email',\n )\n : collection.fields),\n ],\n label: collection?.labels?.singular || 'Content',\n },\n ]),\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n\n return {\n ...collection,\n fields: [\n ...(emailField ? [emailField] : []),\n ...seoTabs,\n ...(collection?.fields?.[0]?.type === 'tabs' ? collection.fields.slice(1) : []),\n ],\n }\n }\n\n return {\n ...collection,\n fields: [...(collection?.fields || []), ...seoFields],\n }\n }\n\n return collection\n }) || [],\n endpoints: [\n ...(config.endpoints ?? []),\n {\n handler: async (req) => {\n const data = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateTitle\n ? await pluginConfig.generateTitle({\n ...req.data,\n req,\n } as unknown as Parameters<GenerateTitle>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-title',\n },\n {\n handler: async (req) => {\n const data = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateDescription\n ? await pluginConfig.generateDescription({\n ...req.data,\n req,\n } as unknown as Parameters<GenerateDescription>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-description',\n },\n {\n handler: async (req) => {\n const data = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateURL\n ? await pluginConfig.generateURL({\n ...req.data,\n req,\n } as unknown as Parameters<GenerateURL>[0])\n : ''\n return new Response(JSON.stringify({ result }), { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-url',\n },\n {\n handler: async (req) => {\n const data = await req.json()\n\n if (data) {\n req.data = data\n }\n\n const result = pluginConfig.generateImage\n ? await pluginConfig.generateImage({\n ...req.data,\n req,\n } as unknown as Parameters<GenerateImage>[0])\n : ''\n return new Response(result, { status: 200 })\n },\n method: 'post',\n path: '/plugin-seo/generate-image',\n },\n ],\n globals:\n config.globals?.map((global) => {\n const { slug } = global\n const isEnabled = pluginConfig?.globals?.includes(slug)\n\n if (isEnabled) {\n if (pluginConfig?.tabbedUI) {\n const seoTabs: TabsField[] = [\n {\n type: 'tabs',\n tabs: [\n // append a new tab onto the end of the tabs array, if there is one at the first index\n // if needed, create a new `Content` tab in the first index for this global's base fields\n ...(global?.fields?.[0].type === 'tabs' && global?.fields?.[0].tabs\n ? global.fields[0].tabs\n : [\n {\n fields: [...(global?.fields || [])],\n label: global?.label || 'Content',\n },\n ]),\n {\n fields: seoFields,\n label: 'SEO',\n },\n ],\n },\n ]\n\n return {\n ...global,\n fields: [\n ...seoTabs,\n ...(global?.fields?.[0].type === 'tabs' ? global.fields.slice(1) : []),\n ],\n }\n }\n\n return {\n ...global,\n fields: [...(global?.fields || []), ...seoFields],\n }\n }\n\n return global\n }) || [],\n i18n: {\n ...config.i18n,\n translations: deepMergeSimple(translations, config.i18n?.translations),\n },\n }\n }\n"],"names":["deepMergeSimple","MetaDescriptionField","MetaImageField","MetaTitleField","OverviewField","PreviewField","translations","seoPlugin","pluginConfig","config","seoFields","name","type","fields","hasGenerateFn","generateTitle","overrides","fieldOverrides","title","generateDescription","description","uploadsCollection","generateImage","image","relationTo","generateURL","interfaceName","label","collections","map","collection","slug","isEnabled","includes","tabbedUI","emailField","auth","disableLocalStrategy","find","field","hasOnlyEmailField","length","seoTabs","tabs","filter","labels","singular","slice","endpoints","handler","req","data","json","result","Response","JSON","stringify","status","method","path","globals","global","i18n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-seo",
|
|
3
|
-
"version": "3.0.0-canary.
|
|
3
|
+
"version": "3.0.0-canary.294ea5c",
|
|
4
4
|
"description": "SEO plugin for Payload",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -50,17 +50,17 @@
|
|
|
50
50
|
"@types/react": "npm:types-react@19.0.0-rc.0",
|
|
51
51
|
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.0",
|
|
52
52
|
"@payloadcms/eslint-config": "3.0.0-beta.59",
|
|
53
|
-
"@payloadcms/next": "3.0.0-canary.
|
|
54
|
-
"@payloadcms/
|
|
55
|
-
"@payloadcms/
|
|
56
|
-
"payload": "3.0.0-canary.
|
|
53
|
+
"@payloadcms/next": "3.0.0-canary.294ea5c",
|
|
54
|
+
"@payloadcms/translations": "3.0.0-canary.294ea5c",
|
|
55
|
+
"@payloadcms/ui": "3.0.0-canary.294ea5c",
|
|
56
|
+
"payload": "3.0.0-canary.294ea5c"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"react": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
|
|
60
60
|
"react-dom": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
|
|
61
|
-
"@payloadcms/translations": "3.0.0-canary.
|
|
62
|
-
"
|
|
63
|
-
"
|
|
61
|
+
"@payloadcms/translations": "3.0.0-canary.294ea5c",
|
|
62
|
+
"payload": "3.0.0-canary.294ea5c",
|
|
63
|
+
"@payloadcms/ui": "3.0.0-canary.294ea5c"
|
|
64
64
|
},
|
|
65
65
|
"publishConfig": {
|
|
66
66
|
"registry": "https://registry.npmjs.org/"
|