@payloadcms/plugin-search 3.2.3-canary.673b4b5 → 3.3.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/Search/ui/LinkToDoc/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { useConfig, useField } from '@payloadcms/ui'\nimport { formatAdminURL } from '@payloadcms/ui/shared'\nimport React from 'react'\n// TODO: fix this import to work in dev mode within the monorepo in a way that is backwards compatible with 1.x\n// import CopyToClipboard from 'payload/dist/admin/components/elements/CopyToClipboard'\n\nexport const LinkToDocClient: React.FC = () => {\n const { config } = useConfig()\n\n const {\n routes: {\n admin: adminRoute, // already includes leading slash\n },\n serverURL,\n } = config\n\n const { value } = useField<{ relationTo?: string; value?: string }>({ path: 'doc' })\n\n const href = `${serverURL}${formatAdminURL({\n adminRoute,\n path: `/collections/${value.relationTo || ''}/${value.value || ''}`,\n })}`\n\n if (!value.relationTo || !value.value) {\n return null\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacing-field, 1rem)' }}>\n <div>\n <span\n className=\"label\"\n style={{\n color: '#9A9A9A',\n }}\n >\n Doc URL\n </span>\n {/* <CopyToClipboard value={href} /> */}\n </div>\n <div\n style={{\n fontWeight: '600',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n <a href={href} target=\"_blank\">\n {href}\n </a>\n </div>\n </div>\n )\n}\n"],"names":["useConfig","useField","formatAdminURL","React","LinkToDocClient","config","routes","admin","adminRoute","serverURL","value","path","href","relationTo","div","style","marginBottom","span","className","color","fontWeight","overflow","textOverflow","a","target"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,iBAAgB;AACpD,SAASC,cAAc,QAAQ,wBAAuB;AACtD,OAAOC,WAAW,QAAO;AACzB,+GAA+G;AAC/G,uFAAuF;AAEvF,OAAO,MAAMC,kBAA4B;IACvC,MAAM,EAAEC,MAAM,EAAE,GAAGL;IAEnB,MAAM,EACJM,QAAQ,EACNC,OAAOC,UAAU,EAClB,EACDC,SAAS,EACV,GAAGJ;IAEJ,MAAM,EAAEK,KAAK,EAAE,GAAGT,SAAkD;QAAEU,MAAM;IAAM;IAElF,MAAMC,OAAO,CAAC,EAAEH,UAAU,EAAEP,eAAe;QACzCM;QACAG,MAAM,CAAC,aAAa,EAAED,MAAMG,UAAU,IAAI,GAAG,CAAC,EAAEH,MAAMA,KAAK,IAAI,GAAG,CAAC;IACrE,GAAG,CAAC;IAEJ,IAAI,CAACA,MAAMG,UAAU,IAAI,CAACH,MAAMA,KAAK,EAAE;QACrC,OAAO;IACT;IAEA,qBACE,MAACI;QAAIC,OAAO;YAAEC,cAAc;QAA6B;;0BACvD,KAACF;0BACC,cAAA,KAACG;oBACCC,WAAU;oBACVH,OAAO;wBACLI,OAAO;oBACT;8BACD;;;0BAKH,KAACL;gBACCC,OAAO;oBACLK,YAAY;oBACZC,UAAU;oBACVC,cAAc;gBAChB;0BAEA,cAAA,KAACC;oBAAEX,MAAMA;oBAAMY,QAAO;8BACnBZ;;;;;AAKX,EAAC"}
1
+ {"version":3,"sources":["../../../../src/Search/ui/LinkToDoc/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { useConfig, useField } from '@payloadcms/ui'\nimport { formatAdminURL } from '@payloadcms/ui/shared'\nimport React from 'react'\n// TODO: fix this import to work in dev mode within the monorepo in a way that is backwards compatible with 1.x\n// import CopyToClipboard from 'payload/dist/admin/components/elements/CopyToClipboard'\n\nexport const LinkToDocClient: React.FC = () => {\n const { config } = useConfig()\n\n const {\n routes: {\n admin: adminRoute, // already includes leading slash\n },\n serverURL,\n } = config\n\n const { value } = useField<{ relationTo?: string; value?: string }>({ path: 'doc' })\n\n const href = `${serverURL}${formatAdminURL({\n adminRoute,\n path: `/collections/${value.relationTo || ''}/${value.value || ''}`,\n })}`\n\n if (!value.relationTo || !value.value) {\n return null\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacing-field, 1rem)' }}>\n <div>\n <span\n className=\"label\"\n style={{\n color: '#9A9A9A',\n }}\n >\n Doc URL\n </span>\n {/* <CopyToClipboard value={href} /> */}\n </div>\n <div\n style={{\n fontWeight: '600',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n <a href={href} target=\"_blank\">\n {href}\n </a>\n </div>\n </div>\n )\n}\n"],"names":["useConfig","useField","formatAdminURL","React","LinkToDocClient","config","routes","admin","adminRoute","serverURL","value","path","href","relationTo","div","style","marginBottom","span","className","color","fontWeight","overflow","textOverflow","a","target"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,iBAAgB;AACpD,SAASC,cAAc,QAAQ,wBAAuB;AACtD,OAAOC,WAAW,QAAO;AACzB,+GAA+G;AAC/G,uFAAuF;AAEvF,OAAO,MAAMC,kBAA4B;IACvC,MAAM,EAAEC,MAAM,EAAE,GAAGL;IAEnB,MAAM,EACJM,QAAQ,EACNC,OAAOC,UAAU,EAClB,EACDC,SAAS,EACV,GAAGJ;IAEJ,MAAM,EAAEK,KAAK,EAAE,GAAGT,SAAkD;QAAEU,MAAM;IAAM;IAElF,MAAMC,OAAO,GAAGH,YAAYP,eAAe;QACzCM;QACAG,MAAM,CAAC,aAAa,EAAED,MAAMG,UAAU,IAAI,GAAG,CAAC,EAAEH,MAAMA,KAAK,IAAI,IAAI;IACrE,IAAI;IAEJ,IAAI,CAACA,MAAMG,UAAU,IAAI,CAACH,MAAMA,KAAK,EAAE;QACrC,OAAO;IACT;IAEA,qBACE,MAACI;QAAIC,OAAO;YAAEC,cAAc;QAA6B;;0BACvD,KAACF;0BACC,cAAA,KAACG;oBACCC,WAAU;oBACVH,OAAO;wBACLI,OAAO;oBACT;8BACD;;;0BAKH,KAACL;gBACCC,OAAO;oBACLK,YAAY;oBACZC,UAAU;oBACVC,cAAc;gBAChB;0BAEA,cAAA,KAACC;oBAAEX,MAAMA;oBAAMY,QAAO;8BACnBZ;;;;;AAKX,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/Search/ui/ReindexButton/ReindexConfirmModal/index.tsx"],"sourcesContent":["import { Button, Modal, useTranslation } from '@payloadcms/ui'\n\nimport './index.scss'\n\ntype Props = {\n description: string\n onCancel: () => void\n onConfirm: () => void\n slug: string\n title: string\n}\n\nconst baseClass = 'reindex-confirm-modal'\n\nexport const ReindexConfirmModal = ({ slug, description, onCancel, onConfirm, title }: Props) => {\n const {\n i18n: { t },\n } = useTranslation()\n return (\n <Modal className={baseClass} slug={slug}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{title}</h1>\n <p>{description}</p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button buttonStyle=\"secondary\" onClick={onCancel} size=\"large\">\n {t('general:cancel')}\n </Button>\n <Button onClick={onConfirm} size=\"large\">\n {t('general:confirm')}\n </Button>\n </div>\n </div>\n </Modal>\n )\n}\n"],"names":["Button","Modal","useTranslation","baseClass","ReindexConfirmModal","slug","description","onCancel","onConfirm","title","i18n","t","className","div","h1","p","buttonStyle","onClick","size"],"mappings":";AAAA,SAASA,MAAM,EAAEC,KAAK,EAAEC,cAAc,QAAQ,iBAAgB;AAE9D,OAAO,eAAc;AAUrB,MAAMC,YAAY;AAElB,OAAO,MAAMC,sBAAsB,CAAC,EAAEC,IAAI,EAAEC,WAAW,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,KAAK,EAAS;IAC1F,MAAM,EACJC,MAAM,EAAEC,CAAC,EAAE,EACZ,GAAGT;IACJ,qBACE,KAACD;QAAMW,WAAWT;QAAWE,MAAMA;kBACjC,cAAA,MAACQ;YAAID,WAAW,CAAC,EAAET,UAAU,SAAS,CAAC;;8BACrC,MAACU;oBAAID,WAAW,CAAC,EAAET,UAAU,SAAS,CAAC;;sCACrC,KAACW;sCAAIL;;sCACL,KAACM;sCAAGT;;;;8BAEN,MAACO;oBAAID,WAAW,CAAC,EAAET,UAAU,UAAU,CAAC;;sCACtC,KAACH;4BAAOgB,aAAY;4BAAYC,SAASV;4BAAUW,MAAK;sCACrDP,EAAE;;sCAEL,KAACX;4BAAOiB,SAAST;4BAAWU,MAAK;sCAC9BP,EAAE;;;;;;;AAMf,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/Search/ui/ReindexButton/ReindexConfirmModal/index.tsx"],"sourcesContent":["import { Button, Modal, useTranslation } from '@payloadcms/ui'\n\nimport './index.scss'\n\ntype Props = {\n description: string\n onCancel: () => void\n onConfirm: () => void\n slug: string\n title: string\n}\n\nconst baseClass = 'reindex-confirm-modal'\n\nexport const ReindexConfirmModal = ({ slug, description, onCancel, onConfirm, title }: Props) => {\n const {\n i18n: { t },\n } = useTranslation()\n return (\n <Modal className={baseClass} slug={slug}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{title}</h1>\n <p>{description}</p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button buttonStyle=\"secondary\" onClick={onCancel} size=\"large\">\n {t('general:cancel')}\n </Button>\n <Button onClick={onConfirm} size=\"large\">\n {t('general:confirm')}\n </Button>\n </div>\n </div>\n </Modal>\n )\n}\n"],"names":["Button","Modal","useTranslation","baseClass","ReindexConfirmModal","slug","description","onCancel","onConfirm","title","i18n","t","className","div","h1","p","buttonStyle","onClick","size"],"mappings":";AAAA,SAASA,MAAM,EAAEC,KAAK,EAAEC,cAAc,QAAQ,iBAAgB;AAE9D,OAAO,eAAc;AAUrB,MAAMC,YAAY;AAElB,OAAO,MAAMC,sBAAsB,CAAC,EAAEC,IAAI,EAAEC,WAAW,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,KAAK,EAAS;IAC1F,MAAM,EACJC,MAAM,EAAEC,CAAC,EAAE,EACZ,GAAGT;IACJ,qBACE,KAACD;QAAMW,WAAWT;QAAWE,MAAMA;kBACjC,cAAA,MAACQ;YAAID,WAAW,GAAGT,UAAU,SAAS,CAAC;;8BACrC,MAACU;oBAAID,WAAW,GAAGT,UAAU,SAAS,CAAC;;sCACrC,KAACW;sCAAIL;;sCACL,KAACM;sCAAGT;;;;8BAEN,MAACO;oBAAID,WAAW,GAAGT,UAAU,UAAU,CAAC;;sCACtC,KAACH;4BAAOgB,aAAY;4BAAYC,SAASV;4BAAUW,MAAK;sCACrDP,EAAE;;sCAEL,KAACX;4BAAOiB,SAAST;4BAAWU,MAAK;sCAC9BP,EAAE;;;;;;;AAMf,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/Search/ui/ReindexButton/index.client.tsx"],"sourcesContent":["'use client'\n\nimport {\n LoadingOverlay,\n Popup,\n PopupList,\n toast,\n useLocale,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback, useMemo, useState } from 'react'\n\nimport type { ReindexButtonProps } from './types.js'\n\nimport { ReindexButtonLabel } from './ReindexButtonLabel/index.js'\nimport { ReindexConfirmModal } from './ReindexConfirmModal/index.js'\n\nconst confirmReindexModalSlug = 'confirm-reindex-modal'\n\nexport const ReindexButtonClient: React.FC<ReindexButtonProps> = ({\n collectionLabels,\n searchCollections,\n searchSlug,\n}) => {\n const { closeModal, openModal } = useModal()\n const {\n i18n: { t },\n } = useTranslation()\n const locale = useLocale()\n const router = useRouter()\n\n const [reindexCollections, setReindexCollections] = useState<string[]>([])\n const [isLoading, setLoading] = useState<boolean>(false)\n\n const openConfirmModal = useCallback(() => openModal(confirmReindexModalSlug), [openModal])\n const closeConfirmModal = useCallback(() => closeModal(confirmReindexModalSlug), [closeModal])\n\n const handleReindexSubmit = useCallback(async () => {\n if (isLoading || !reindexCollections.length) {\n return\n }\n\n closeConfirmModal()\n setLoading(true)\n\n try {\n const endpointRes = await fetch(`/api/${searchSlug}/reindex?locale=${locale.code}`, {\n body: JSON.stringify({\n collections: reindexCollections,\n }),\n method: 'POST',\n })\n\n const { message } = (await endpointRes.json()) as { message: string }\n\n if (!endpointRes.ok) {\n toast.error(message)\n } else {\n toast.success(message)\n router.refresh()\n }\n } catch (err: unknown) {\n // swallow error, toast shown above\n } finally {\n setReindexCollections([])\n setLoading(false)\n }\n }, [closeConfirmModal, isLoading, reindexCollections, router, searchSlug, locale])\n\n const handleShowConfirmModal = useCallback(\n (collections: string | string[] = searchCollections) => {\n setReindexCollections(typeof collections === 'string' ? [collections] : collections)\n openConfirmModal()\n },\n [openConfirmModal, searchCollections],\n )\n\n const handlePopupButtonClick = useCallback(\n (closePopup: () => void, slug?: string) => {\n closePopup()\n handleShowConfirmModal(slug)\n },\n [handleShowConfirmModal],\n )\n\n const getPluralizedLabel = useCallback(\n (slug: string) => {\n const label = collectionLabels[slug]\n if (typeof label === 'string') {\n return label\n } else {\n return Object.hasOwn(label, locale.code) ? label[locale.code] : slug\n }\n },\n [collectionLabels, locale.code],\n )\n\n const pluralizedLabels = useMemo(() => {\n return searchCollections.reduce<Record<string, string>>((acc, slug) => {\n acc[slug] = getPluralizedLabel(slug)\n return acc\n }, {})\n }, [searchCollections, getPluralizedLabel])\n\n const selectedAll = reindexCollections.length === searchCollections.length\n const selectedLabels = reindexCollections.map((slug) => pluralizedLabels[slug]).join(', ')\n\n const modalTitle = selectedAll\n ? t('general:confirmReindexAll')\n : t('general:confirmReindex', { collections: selectedLabels })\n const modalDescription = selectedAll\n ? t('general:confirmReindexDescriptionAll')\n : t('general:confirmReindexDescription', { collections: selectedLabels })\n const loadingText = selectedAll\n ? t('general:reindexingAll', { collections: t('general:collections') })\n : t('general:reindexingAll', { collections: selectedLabels })\n\n return (\n <div>\n <Popup\n button={<ReindexButtonLabel />}\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {searchCollections.map((collectionSlug) => (\n <PopupList.Button\n key={collectionSlug}\n onClick={() => handlePopupButtonClick(close, collectionSlug)}\n >\n {pluralizedLabels[collectionSlug]}\n </PopupList.Button>\n ))}\n <PopupList.Button onClick={() => handlePopupButtonClick(close)}>\n {t('general:allCollections')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n showScrollbar\n size=\"large\"\n verticalAlign=\"bottom\"\n />\n <ReindexConfirmModal\n description={modalDescription}\n onCancel={closeConfirmModal}\n onConfirm={handleReindexSubmit}\n slug={confirmReindexModalSlug}\n title={modalTitle}\n />\n {isLoading && <LoadingOverlay loadingText={loadingText} />}\n </div>\n )\n}\n"],"names":["LoadingOverlay","Popup","PopupList","toast","useLocale","useModal","useTranslation","useRouter","React","useCallback","useMemo","useState","ReindexButtonLabel","ReindexConfirmModal","confirmReindexModalSlug","ReindexButtonClient","collectionLabels","searchCollections","searchSlug","closeModal","openModal","i18n","t","locale","router","reindexCollections","setReindexCollections","isLoading","setLoading","openConfirmModal","closeConfirmModal","handleReindexSubmit","length","endpointRes","fetch","code","body","JSON","stringify","collections","method","message","json","ok","error","success","refresh","err","handleShowConfirmModal","handlePopupButtonClick","closePopup","slug","getPluralizedLabel","label","Object","hasOwn","pluralizedLabels","reduce","acc","selectedAll","selectedLabels","map","join","modalTitle","modalDescription","loadingText","div","button","render","close","ButtonGroup","collectionSlug","Button","onClick","showScrollbar","size","verticalAlign","description","onCancel","onConfirm","title"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/Search/ui/ReindexButton/index.client.tsx"],"sourcesContent":["'use client'\n\nimport {\n LoadingOverlay,\n Popup,\n PopupList,\n toast,\n useLocale,\n useModal,\n useTranslation,\n} from '@payloadcms/ui'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback, useMemo, useState } from 'react'\n\nimport type { ReindexButtonProps } from './types.js'\n\nimport { ReindexButtonLabel } from './ReindexButtonLabel/index.js'\nimport { ReindexConfirmModal } from './ReindexConfirmModal/index.js'\n\nconst confirmReindexModalSlug = 'confirm-reindex-modal'\n\nexport const ReindexButtonClient: React.FC<ReindexButtonProps> = ({\n collectionLabels,\n searchCollections,\n searchSlug,\n}) => {\n const { closeModal, openModal } = useModal()\n const {\n i18n: { t },\n } = useTranslation()\n const locale = useLocale()\n const router = useRouter()\n\n const [reindexCollections, setReindexCollections] = useState<string[]>([])\n const [isLoading, setLoading] = useState<boolean>(false)\n\n const openConfirmModal = useCallback(() => openModal(confirmReindexModalSlug), [openModal])\n const closeConfirmModal = useCallback(() => closeModal(confirmReindexModalSlug), [closeModal])\n\n const handleReindexSubmit = useCallback(async () => {\n if (isLoading || !reindexCollections.length) {\n return\n }\n\n closeConfirmModal()\n setLoading(true)\n\n try {\n const endpointRes = await fetch(`/api/${searchSlug}/reindex?locale=${locale.code}`, {\n body: JSON.stringify({\n collections: reindexCollections,\n }),\n method: 'POST',\n })\n\n const { message } = (await endpointRes.json()) as { message: string }\n\n if (!endpointRes.ok) {\n toast.error(message)\n } else {\n toast.success(message)\n router.refresh()\n }\n } catch (err: unknown) {\n // swallow error, toast shown above\n } finally {\n setReindexCollections([])\n setLoading(false)\n }\n }, [closeConfirmModal, isLoading, reindexCollections, router, searchSlug, locale])\n\n const handleShowConfirmModal = useCallback(\n (collections: string | string[] = searchCollections) => {\n setReindexCollections(typeof collections === 'string' ? [collections] : collections)\n openConfirmModal()\n },\n [openConfirmModal, searchCollections],\n )\n\n const handlePopupButtonClick = useCallback(\n (closePopup: () => void, slug?: string) => {\n closePopup()\n handleShowConfirmModal(slug)\n },\n [handleShowConfirmModal],\n )\n\n const getPluralizedLabel = useCallback(\n (slug: string) => {\n const label = collectionLabels[slug]\n if (typeof label === 'string') {\n return label\n } else {\n return Object.hasOwn(label, locale.code) ? label[locale.code] : slug\n }\n },\n [collectionLabels, locale.code],\n )\n\n const pluralizedLabels = useMemo(() => {\n return searchCollections.reduce<Record<string, string>>((acc, slug) => {\n acc[slug] = getPluralizedLabel(slug)\n return acc\n }, {})\n }, [searchCollections, getPluralizedLabel])\n\n const selectedAll = reindexCollections.length === searchCollections.length\n const selectedLabels = reindexCollections.map((slug) => pluralizedLabels[slug]).join(', ')\n\n const modalTitle = selectedAll\n ? t('general:confirmReindexAll')\n : t('general:confirmReindex', { collections: selectedLabels })\n const modalDescription = selectedAll\n ? t('general:confirmReindexDescriptionAll')\n : t('general:confirmReindexDescription', { collections: selectedLabels })\n const loadingText = selectedAll\n ? t('general:reindexingAll', { collections: t('general:collections') })\n : t('general:reindexingAll', { collections: selectedLabels })\n\n return (\n <div>\n <Popup\n button={<ReindexButtonLabel />}\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {searchCollections.map((collectionSlug) => (\n <PopupList.Button\n key={collectionSlug}\n onClick={() => handlePopupButtonClick(close, collectionSlug)}\n >\n {pluralizedLabels[collectionSlug]}\n </PopupList.Button>\n ))}\n <PopupList.Button onClick={() => handlePopupButtonClick(close)}>\n {t('general:allCollections')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n showScrollbar\n size=\"large\"\n verticalAlign=\"bottom\"\n />\n <ReindexConfirmModal\n description={modalDescription}\n onCancel={closeConfirmModal}\n onConfirm={handleReindexSubmit}\n slug={confirmReindexModalSlug}\n title={modalTitle}\n />\n {isLoading && <LoadingOverlay loadingText={loadingText} />}\n </div>\n )\n}\n"],"names":["LoadingOverlay","Popup","PopupList","toast","useLocale","useModal","useTranslation","useRouter","React","useCallback","useMemo","useState","ReindexButtonLabel","ReindexConfirmModal","confirmReindexModalSlug","ReindexButtonClient","collectionLabels","searchCollections","searchSlug","closeModal","openModal","i18n","t","locale","router","reindexCollections","setReindexCollections","isLoading","setLoading","openConfirmModal","closeConfirmModal","handleReindexSubmit","length","endpointRes","fetch","code","body","JSON","stringify","collections","method","message","json","ok","error","success","refresh","err","handleShowConfirmModal","handlePopupButtonClick","closePopup","slug","getPluralizedLabel","label","Object","hasOwn","pluralizedLabels","reduce","acc","selectedAll","selectedLabels","map","join","modalTitle","modalDescription","loadingText","div","button","render","close","ButtonGroup","collectionSlug","Button","onClick","showScrollbar","size","verticalAlign","description","onCancel","onConfirm","title"],"mappings":"AAAA;;AAEA,SACEA,cAAc,EACdC,KAAK,EACLC,SAAS,EACTC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACRC,cAAc,QACT,iBAAgB;AACvB,SAASC,SAAS,QAAQ,qBAAoB;AAC9C,OAAOC,SAASC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAO;AAI7D,SAASC,kBAAkB,QAAQ,gCAA+B;AAClE,SAASC,mBAAmB,QAAQ,iCAAgC;AAEpE,MAAMC,0BAA0B;AAEhC,OAAO,MAAMC,sBAAoD,CAAC,EAChEC,gBAAgB,EAChBC,iBAAiB,EACjBC,UAAU,EACX;IACC,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGf;IAClC,MAAM,EACJgB,MAAM,EAAEC,CAAC,EAAE,EACZ,GAAGhB;IACJ,MAAMiB,SAASnB;IACf,MAAMoB,SAASjB;IAEf,MAAM,CAACkB,oBAAoBC,sBAAsB,GAAGf,SAAmB,EAAE;IACzE,MAAM,CAACgB,WAAWC,WAAW,GAAGjB,SAAkB;IAElD,MAAMkB,mBAAmBpB,YAAY,IAAMW,UAAUN,0BAA0B;QAACM;KAAU;IAC1F,MAAMU,oBAAoBrB,YAAY,IAAMU,WAAWL,0BAA0B;QAACK;KAAW;IAE7F,MAAMY,sBAAsBtB,YAAY;QACtC,IAAIkB,aAAa,CAACF,mBAAmBO,MAAM,EAAE;YAC3C;QACF;QAEAF;QACAF,WAAW;QAEX,IAAI;YACF,MAAMK,cAAc,MAAMC,MAAM,CAAC,KAAK,EAAEhB,WAAW,gBAAgB,EAAEK,OAAOY,IAAI,EAAE,EAAE;gBAClFC,MAAMC,KAAKC,SAAS,CAAC;oBACnBC,aAAad;gBACf;gBACAe,QAAQ;YACV;YAEA,MAAM,EAAEC,OAAO,EAAE,GAAI,MAAMR,YAAYS,IAAI;YAE3C,IAAI,CAACT,YAAYU,EAAE,EAAE;gBACnBxC,MAAMyC,KAAK,CAACH;YACd,OAAO;gBACLtC,MAAM0C,OAAO,CAACJ;gBACdjB,OAAOsB,OAAO;YAChB;QACF,EAAE,OAAOC,KAAc;QACrB,mCAAmC;QACrC,SAAU;YACRrB,sBAAsB,EAAE;YACxBE,WAAW;QACb;IACF,GAAG;QAACE;QAAmBH;QAAWF;QAAoBD;QAAQN;QAAYK;KAAO;IAEjF,MAAMyB,yBAAyBvC,YAC7B,CAAC8B,cAAiCtB,iBAAiB;QACjDS,sBAAsB,OAAOa,gBAAgB,WAAW;YAACA;SAAY,GAAGA;QACxEV;IACF,GACA;QAACA;QAAkBZ;KAAkB;IAGvC,MAAMgC,yBAAyBxC,YAC7B,CAACyC,YAAwBC;QACvBD;QACAF,uBAAuBG;IACzB,GACA;QAACH;KAAuB;IAG1B,MAAMI,qBAAqB3C,YACzB,CAAC0C;QACC,MAAME,QAAQrC,gBAAgB,CAACmC,KAAK;QACpC,IAAI,OAAOE,UAAU,UAAU;YAC7B,OAAOA;QACT,OAAO;YACL,OAAOC,OAAOC,MAAM,CAACF,OAAO9B,OAAOY,IAAI,IAAIkB,KAAK,CAAC9B,OAAOY,IAAI,CAAC,GAAGgB;QAClE;IACF,GACA;QAACnC;QAAkBO,OAAOY,IAAI;KAAC;IAGjC,MAAMqB,mBAAmB9C,QAAQ;QAC/B,OAAOO,kBAAkBwC,MAAM,CAAyB,CAACC,KAAKP;YAC5DO,GAAG,CAACP,KAAK,GAAGC,mBAAmBD;YAC/B,OAAOO;QACT,GAAG,CAAC;IACN,GAAG;QAACzC;QAAmBmC;KAAmB;IAE1C,MAAMO,cAAclC,mBAAmBO,MAAM,KAAKf,kBAAkBe,MAAM;IAC1E,MAAM4B,iBAAiBnC,mBAAmBoC,GAAG,CAAC,CAACV,OAASK,gBAAgB,CAACL,KAAK,EAAEW,IAAI,CAAC;IAErF,MAAMC,aAAaJ,cACfrC,EAAE,+BACFA,EAAE,0BAA0B;QAAEiB,aAAaqB;IAAe;IAC9D,MAAMI,mBAAmBL,cACrBrC,EAAE,0CACFA,EAAE,qCAAqC;QAAEiB,aAAaqB;IAAe;IACzE,MAAMK,cAAcN,cAChBrC,EAAE,yBAAyB;QAAEiB,aAAajB,EAAE;IAAuB,KACnEA,EAAE,yBAAyB;QAAEiB,aAAaqB;IAAe;IAE7D,qBACE,MAACM;;0BACC,KAACjE;gBACCkE,sBAAQ,KAACvD;gBACTwD,QAAQ,CAAC,EAAEC,KAAK,EAAE,iBAChB,MAACnE,UAAUoE,WAAW;;4BACnBrD,kBAAkB4C,GAAG,CAAC,CAACU,+BACtB,KAACrE,UAAUsE,MAAM;oCAEfC,SAAS,IAAMxB,uBAAuBoB,OAAOE;8CAE5Cf,gBAAgB,CAACe,eAAe;mCAH5BA;0CAMT,KAACrE,UAAUsE,MAAM;gCAACC,SAAS,IAAMxB,uBAAuBoB;0CACrD/C,EAAE;;;;gBAIToD,aAAa;gBACbC,MAAK;gBACLC,eAAc;;0BAEhB,KAAC/D;gBACCgE,aAAab;gBACbc,UAAUhD;gBACViD,WAAWhD;gBACXoB,MAAMrC;gBACNkE,OAAOjB;;YAERpC,2BAAa,KAAC3B;gBAAeiE,aAAaA;;;;AAGjD,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/syncDocAsSearchIndex.ts"],"sourcesContent":["import type { DocToSync, SyncDocArgs } from '../types.js'\n\nexport const syncDocAsSearchIndex = async ({\n collection,\n doc,\n locale,\n onSyncError,\n operation,\n pluginConfig,\n req: { payload },\n req,\n}: SyncDocArgs) => {\n const { id, _status: status, title } = doc || {}\n\n const { beforeSync, defaultPriorities, deleteDrafts, searchOverrides, syncDrafts } = pluginConfig\n\n const searchSlug = searchOverrides?.slug || 'search'\n const syncLocale = locale || req.locale\n\n let dataToSave: DocToSync = {\n doc: {\n relationTo: collection,\n value: id,\n },\n title,\n }\n\n if (typeof beforeSync === 'function') {\n let docToSyncWith = doc\n if (payload.config?.localization) {\n docToSyncWith = await payload.findByID({\n id,\n collection,\n locale: syncLocale,\n req,\n })\n }\n dataToSave = await beforeSync({\n originalDoc: docToSyncWith,\n payload,\n req,\n searchDoc: dataToSave,\n })\n }\n\n let defaultPriority = 0\n if (defaultPriorities) {\n const { [collection]: priority } = defaultPriorities\n\n if (typeof priority === 'function') {\n try {\n defaultPriority = await priority(doc)\n } catch (err: unknown) {\n payload.logger.error(err)\n payload.logger.error(\n `Error gathering default priority for ${searchSlug} documents related to ${collection}`,\n )\n }\n } else {\n defaultPriority = priority\n }\n }\n\n const doSync = syncDrafts || (!syncDrafts && status !== 'draft')\n\n try {\n if (operation === 'create') {\n if (doSync) {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n locale: syncLocale,\n req,\n })\n }\n }\n\n if (operation === 'update') {\n try {\n // find the correct doc to sync with\n const searchDocQuery = await payload.find({\n collection: searchSlug,\n depth: 0,\n locale: syncLocale,\n req,\n where: {\n 'doc.relationTo': {\n equals: collection,\n },\n 'doc.value': {\n equals: id,\n },\n },\n })\n\n const docs: Array<{\n id: number | string\n priority?: number\n }> = searchDocQuery?.docs || []\n\n const [foundDoc, ...duplicativeDocs] = docs\n\n // delete all duplicative search docs (docs that reference the same page)\n // to ensure the same, out-of-date result does not appear twice (where only syncing the first found doc)\n if (duplicativeDocs.length > 0) {\n try {\n const duplicativeDocIDs = duplicativeDocs.map(({ id }) => id)\n await payload.delete({\n collection: searchSlug,\n req,\n where: { id: { in: duplicativeDocIDs } },\n })\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting duplicative ${searchSlug} documents.`,\n })\n }\n }\n\n if (foundDoc) {\n const { id: searchDocID } = foundDoc\n\n if (doSync) {\n // update the doc normally\n try {\n await payload.update({\n id: searchDocID,\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: foundDoc.priority || defaultPriority,\n },\n locale: syncLocale,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error updating ${searchSlug} document.` })\n }\n }\n if (deleteDrafts && status === 'draft') {\n // do not include draft docs in search results, so delete the record\n try {\n await payload.delete({\n id: searchDocID,\n collection: searchSlug,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error deleting ${searchSlug} document.` })\n }\n }\n } else if (doSync) {\n try {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n locale: syncLocale,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error creating ${searchSlug} document.` })\n }\n }\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error finding ${searchSlug} document.` })\n }\n }\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error syncing ${searchSlug} document related to ${collection} with id: '${id}'.`,\n })\n\n if (onSyncError) {\n onSyncError()\n }\n }\n\n return doc\n}\n"],"names":["syncDocAsSearchIndex","collection","doc","locale","onSyncError","operation","pluginConfig","req","payload","id","_status","status","title","beforeSync","defaultPriorities","deleteDrafts","searchOverrides","syncDrafts","searchSlug","slug","syncLocale","dataToSave","relationTo","value","docToSyncWith","config","localization","findByID","originalDoc","searchDoc","defaultPriority","priority","err","logger","error","doSync","create","data","searchDocQuery","find","depth","where","equals","docs","foundDoc","duplicativeDocs","length","duplicativeDocIDs","map","delete","in","msg","searchDocID","update"],"mappings":"AAEA,OAAO,MAAMA,uBAAuB,OAAO,EACzCC,UAAU,EACVC,GAAG,EACHC,MAAM,EACNC,WAAW,EACXC,SAAS,EACTC,YAAY,EACZC,KAAK,EAAEC,OAAO,EAAE,EAChBD,GAAG,EACS;IACZ,MAAM,EAAEE,EAAE,EAAEC,SAASC,MAAM,EAAEC,KAAK,EAAE,GAAGV,OAAO,CAAC;IAE/C,MAAM,EAAEW,UAAU,EAAEC,iBAAiB,EAAEC,YAAY,EAAEC,eAAe,EAAEC,UAAU,EAAE,GAAGX;IAErF,MAAMY,aAAaF,iBAAiBG,QAAQ;IAC5C,MAAMC,aAAajB,UAAUI,IAAIJ,MAAM;IAEvC,IAAIkB,aAAwB;QAC1BnB,KAAK;YACHoB,YAAYrB;YACZsB,OAAOd;QACT;QACAG;IACF;IAEA,IAAI,OAAOC,eAAe,YAAY;QACpC,IAAIW,gBAAgBtB;QACpB,IAAIM,QAAQiB,MAAM,EAAEC,cAAc;YAChCF,gBAAgB,MAAMhB,QAAQmB,QAAQ,CAAC;gBACrClB;gBACAR;gBACAE,QAAQiB;gBACRb;YACF;QACF;QACAc,aAAa,MAAMR,WAAW;YAC5Be,aAAaJ;YACbhB;YACAD;YACAsB,WAAWR;QACb;IACF;IAEA,IAAIS,kBAAkB;IACtB,IAAIhB,mBAAmB;QACrB,MAAM,EAAE,CAACb,WAAW,EAAE8B,QAAQ,EAAE,GAAGjB;QAEnC,IAAI,OAAOiB,aAAa,YAAY;YAClC,IAAI;gBACFD,kBAAkB,MAAMC,SAAS7B;YACnC,EAAE,OAAO8B,KAAc;gBACrBxB,QAAQyB,MAAM,CAACC,KAAK,CAACF;gBACrBxB,QAAQyB,MAAM,CAACC,KAAK,CAClB,CAAC,qCAAqC,EAAEhB,WAAW,sBAAsB,EAAEjB,WAAW,CAAC;YAE3F;QACF,OAAO;YACL6B,kBAAkBC;QACpB;IACF;IAEA,MAAMI,SAASlB,cAAe,CAACA,cAAcN,WAAW;IAExD,IAAI;QACF,IAAIN,cAAc,UAAU;YAC1B,IAAI8B,QAAQ;gBACV,MAAM3B,QAAQ4B,MAAM,CAAC;oBACnBnC,YAAYiB;oBACZmB,MAAM;wBACJ,GAAGhB,UAAU;wBACbU,UAAUD;oBACZ;oBACA3B,QAAQiB;oBACRb;gBACF;YACF;QACF;QAEA,IAAIF,cAAc,UAAU;YAC1B,IAAI;gBACF,oCAAoC;gBACpC,MAAMiC,iBAAiB,MAAM9B,QAAQ+B,IAAI,CAAC;oBACxCtC,YAAYiB;oBACZsB,OAAO;oBACPrC,QAAQiB;oBACRb;oBACAkC,OAAO;wBACL,kBAAkB;4BAChBC,QAAQzC;wBACV;wBACA,aAAa;4BACXyC,QAAQjC;wBACV;oBACF;gBACF;gBAEA,MAAMkC,OAGDL,gBAAgBK,QAAQ,EAAE;gBAE/B,MAAM,CAACC,UAAU,GAAGC,gBAAgB,GAAGF;gBAEvC,yEAAyE;gBACzE,wGAAwG;gBACxG,IAAIE,gBAAgBC,MAAM,GAAG,GAAG;oBAC9B,IAAI;wBACF,MAAMC,oBAAoBF,gBAAgBG,GAAG,CAAC,CAAC,EAAEvC,EAAE,EAAE,GAAKA;wBAC1D,MAAMD,QAAQyC,MAAM,CAAC;4BACnBhD,YAAYiB;4BACZX;4BACAkC,OAAO;gCAAEhC,IAAI;oCAAEyC,IAAIH;gCAAkB;4BAAE;wBACzC;oBACF,EAAE,OAAOf,KAAc;wBACrBxB,QAAQyB,MAAM,CAACC,KAAK,CAAC;4BACnBF;4BACAmB,KAAK,CAAC,2BAA2B,EAAEjC,WAAW,WAAW,CAAC;wBAC5D;oBACF;gBACF;gBAEA,IAAI0B,UAAU;oBACZ,MAAM,EAAEnC,IAAI2C,WAAW,EAAE,GAAGR;oBAE5B,IAAIT,QAAQ;wBACV,0BAA0B;wBAC1B,IAAI;4BACF,MAAM3B,QAAQ6C,MAAM,CAAC;gCACnB5C,IAAI2C;gCACJnD,YAAYiB;gCACZmB,MAAM;oCACJ,GAAGhB,UAAU;oCACbU,UAAUa,SAASb,QAAQ,IAAID;gCACjC;gCACA3B,QAAQiB;gCACRb;4BACF;wBACF,EAAE,OAAOyB,KAAc;4BACrBxB,QAAQyB,MAAM,CAACC,KAAK,CAAC;gCAAEF;gCAAKmB,KAAK,CAAC,eAAe,EAAEjC,WAAW,UAAU,CAAC;4BAAC;wBAC5E;oBACF;oBACA,IAAIH,gBAAgBJ,WAAW,SAAS;wBACtC,oEAAoE;wBACpE,IAAI;4BACF,MAAMH,QAAQyC,MAAM,CAAC;gCACnBxC,IAAI2C;gCACJnD,YAAYiB;gCACZX;4BACF;wBACF,EAAE,OAAOyB,KAAc;4BACrBxB,QAAQyB,MAAM,CAACC,KAAK,CAAC;gCAAEF;gCAAKmB,KAAK,CAAC,eAAe,EAAEjC,WAAW,UAAU,CAAC;4BAAC;wBAC5E;oBACF;gBACF,OAAO,IAAIiB,QAAQ;oBACjB,IAAI;wBACF,MAAM3B,QAAQ4B,MAAM,CAAC;4BACnBnC,YAAYiB;4BACZmB,MAAM;gCACJ,GAAGhB,UAAU;gCACbU,UAAUD;4BACZ;4BACA3B,QAAQiB;4BACRb;wBACF;oBACF,EAAE,OAAOyB,KAAc;wBACrBxB,QAAQyB,MAAM,CAACC,KAAK,CAAC;4BAAEF;4BAAKmB,KAAK,CAAC,eAAe,EAAEjC,WAAW,UAAU,CAAC;wBAAC;oBAC5E;gBACF;YACF,EAAE,OAAOc,KAAc;gBACrBxB,QAAQyB,MAAM,CAACC,KAAK,CAAC;oBAAEF;oBAAKmB,KAAK,CAAC,cAAc,EAAEjC,WAAW,UAAU,CAAC;gBAAC;YAC3E;QACF;IACF,EAAE,OAAOc,KAAc;QACrBxB,QAAQyB,MAAM,CAACC,KAAK,CAAC;YACnBF;YACAmB,KAAK,CAAC,cAAc,EAAEjC,WAAW,qBAAqB,EAAEjB,WAAW,WAAW,EAAEQ,GAAG,EAAE,CAAC;QACxF;QAEA,IAAIL,aAAa;YACfA;QACF;IACF;IAEA,OAAOF;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/syncDocAsSearchIndex.ts"],"sourcesContent":["import type { DocToSync, SyncDocArgs } from '../types.js'\n\nexport const syncDocAsSearchIndex = async ({\n collection,\n doc,\n locale,\n onSyncError,\n operation,\n pluginConfig,\n req: { payload },\n req,\n}: SyncDocArgs) => {\n const { id, _status: status, title } = doc || {}\n\n const { beforeSync, defaultPriorities, deleteDrafts, searchOverrides, syncDrafts } = pluginConfig\n\n const searchSlug = searchOverrides?.slug || 'search'\n const syncLocale = locale || req.locale\n\n let dataToSave: DocToSync = {\n doc: {\n relationTo: collection,\n value: id,\n },\n title,\n }\n\n if (typeof beforeSync === 'function') {\n let docToSyncWith = doc\n if (payload.config?.localization) {\n docToSyncWith = await payload.findByID({\n id,\n collection,\n locale: syncLocale,\n req,\n })\n }\n dataToSave = await beforeSync({\n originalDoc: docToSyncWith,\n payload,\n req,\n searchDoc: dataToSave,\n })\n }\n\n let defaultPriority = 0\n if (defaultPriorities) {\n const { [collection]: priority } = defaultPriorities\n\n if (typeof priority === 'function') {\n try {\n defaultPriority = await priority(doc)\n } catch (err: unknown) {\n payload.logger.error(err)\n payload.logger.error(\n `Error gathering default priority for ${searchSlug} documents related to ${collection}`,\n )\n }\n } else {\n defaultPriority = priority\n }\n }\n\n const doSync = syncDrafts || (!syncDrafts && status !== 'draft')\n\n try {\n if (operation === 'create') {\n if (doSync) {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n locale: syncLocale,\n req,\n })\n }\n }\n\n if (operation === 'update') {\n try {\n // find the correct doc to sync with\n const searchDocQuery = await payload.find({\n collection: searchSlug,\n depth: 0,\n locale: syncLocale,\n req,\n where: {\n 'doc.relationTo': {\n equals: collection,\n },\n 'doc.value': {\n equals: id,\n },\n },\n })\n\n const docs: Array<{\n id: number | string\n priority?: number\n }> = searchDocQuery?.docs || []\n\n const [foundDoc, ...duplicativeDocs] = docs\n\n // delete all duplicative search docs (docs that reference the same page)\n // to ensure the same, out-of-date result does not appear twice (where only syncing the first found doc)\n if (duplicativeDocs.length > 0) {\n try {\n const duplicativeDocIDs = duplicativeDocs.map(({ id }) => id)\n await payload.delete({\n collection: searchSlug,\n req,\n where: { id: { in: duplicativeDocIDs } },\n })\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting duplicative ${searchSlug} documents.`,\n })\n }\n }\n\n if (foundDoc) {\n const { id: searchDocID } = foundDoc\n\n if (doSync) {\n // update the doc normally\n try {\n await payload.update({\n id: searchDocID,\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: foundDoc.priority || defaultPriority,\n },\n locale: syncLocale,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error updating ${searchSlug} document.` })\n }\n }\n if (deleteDrafts && status === 'draft') {\n // do not include draft docs in search results, so delete the record\n try {\n await payload.delete({\n id: searchDocID,\n collection: searchSlug,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error deleting ${searchSlug} document.` })\n }\n }\n } else if (doSync) {\n try {\n await payload.create({\n collection: searchSlug,\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n locale: syncLocale,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error creating ${searchSlug} document.` })\n }\n }\n } catch (err: unknown) {\n payload.logger.error({ err, msg: `Error finding ${searchSlug} document.` })\n }\n }\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error syncing ${searchSlug} document related to ${collection} with id: '${id}'.`,\n })\n\n if (onSyncError) {\n onSyncError()\n }\n }\n\n return doc\n}\n"],"names":["syncDocAsSearchIndex","collection","doc","locale","onSyncError","operation","pluginConfig","req","payload","id","_status","status","title","beforeSync","defaultPriorities","deleteDrafts","searchOverrides","syncDrafts","searchSlug","slug","syncLocale","dataToSave","relationTo","value","docToSyncWith","config","localization","findByID","originalDoc","searchDoc","defaultPriority","priority","err","logger","error","doSync","create","data","searchDocQuery","find","depth","where","equals","docs","foundDoc","duplicativeDocs","length","duplicativeDocIDs","map","delete","in","msg","searchDocID","update"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-search",
3
- "version": "3.2.3-canary.673b4b5",
3
+ "version": "3.3.0",
4
4
  "description": "Search plugin for Payload",
5
5
  "keywords": [
6
6
  "payload",
@@ -49,19 +49,19 @@
49
49
  "dist"
50
50
  ],
51
51
  "dependencies": {
52
- "@payloadcms/next": "3.2.3-canary.673b4b5",
53
- "@payloadcms/ui": "3.2.3-canary.673b4b5"
52
+ "@payloadcms/next": "3.3.0",
53
+ "@payloadcms/ui": "3.3.0"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/react": "npm:types-react@19.0.0-rc.1",
57
57
  "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
58
- "payload": "3.2.3-canary.673b4b5",
59
- "@payloadcms/eslint-config": "3.0.0"
58
+ "@payloadcms/eslint-config": "3.0.0",
59
+ "payload": "3.3.0"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
63
63
  "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
64
- "payload": "3.2.3-canary.673b4b5"
64
+ "payload": "3.3.0"
65
65
  },
66
66
  "publishConfig": {
67
67
  "registry": "https://registry.npmjs.org/"