@payloadcms/plugin-search 3.0.0-canary.d6053cd → 3.0.0-canary.dc8b1fe

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,3 +1,3 @@
1
- import type { CollectionAfterDeleteHook } from 'payload';
2
- export declare const deleteFromSearch: CollectionAfterDeleteHook;
1
+ import type { DeleteFromSearch } from '../../types.js';
2
+ export declare const deleteFromSearch: DeleteFromSearch;
3
3
  //# sourceMappingURL=deleteFromSearch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deleteFromSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAExD,eAAO,MAAM,gBAAgB,EAAE,yBA+B9B,CAAA"}
1
+ {"version":3,"file":"deleteFromSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,eAAO,MAAM,gBAAgB,EAAE,gBAkC9B,CAAA"}
@@ -1,7 +1,8 @@
1
- export const deleteFromSearch = async ({ doc, req: { payload }, req })=>{
1
+ export const deleteFromSearch = async ({ doc, pluginConfig, req: { payload }, req })=>{
2
+ const searchSlug = pluginConfig?.searchOverrides?.slug || 'search';
2
3
  try {
3
4
  const searchDocQuery = await payload.find({
4
- collection: 'search',
5
+ collection: searchSlug,
5
6
  depth: 0,
6
7
  req,
7
8
  where: {
@@ -13,13 +14,14 @@ export const deleteFromSearch = async ({ doc, req: { payload }, req })=>{
13
14
  if (searchDocQuery?.docs?.[0]) {
14
15
  await payload.delete({
15
16
  id: searchDocQuery?.docs?.[0]?.id,
16
- collection: 'search',
17
+ collection: searchSlug,
17
18
  req
18
19
  });
19
20
  }
20
21
  } catch (err) {
21
22
  payload.logger.error({
22
- err: `Error deleting search doc: ${err}`
23
+ err,
24
+ msg: `Error deleting ${searchSlug} doc.`
23
25
  });
24
26
  }
25
27
  return doc;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"sourcesContent":["import type { CollectionAfterDeleteHook } from 'payload'\n\nexport const deleteFromSearch: CollectionAfterDeleteHook = async ({\n doc,\n req: { payload },\n req,\n}) => {\n try {\n const searchDocQuery = await payload.find({\n collection: 'search',\n depth: 0,\n req,\n where: {\n 'doc.value': {\n equals: doc.id,\n },\n },\n })\n\n if (searchDocQuery?.docs?.[0]) {\n await payload.delete({\n id: searchDocQuery?.docs?.[0]?.id,\n collection: 'search',\n req,\n })\n }\n } catch (err: unknown) {\n payload.logger.error({\n err: `Error deleting search doc: ${err}`,\n })\n }\n\n return doc\n}\n"],"names":["deleteFromSearch","doc","req","payload","searchDocQuery","find","collection","depth","where","equals","id","docs","delete","err","logger","error"],"mappings":"AAEA,OAAO,MAAMA,mBAA8C,OAAO,EAChEC,GAAG,EACHC,KAAK,EAAEC,OAAO,EAAE,EAChBD,GAAG,EACJ;IACC,IAAI;QACF,MAAME,iBAAiB,MAAMD,QAAQE,IAAI,CAAC;YACxCC,YAAY;YACZC,OAAO;YACPL;YACAM,OAAO;gBACL,aAAa;oBACXC,QAAQR,IAAIS,EAAE;gBAChB;YACF;QACF;QAEA,IAAIN,gBAAgBO,MAAM,CAAC,EAAE,EAAE;YAC7B,MAAMR,QAAQS,MAAM,CAAC;gBACnBF,IAAIN,gBAAgBO,MAAM,CAAC,EAAE,EAAED;gBAC/BJ,YAAY;gBACZJ;YACF;QACF;IACF,EAAE,OAAOW,KAAc;QACrBV,QAAQW,MAAM,CAACC,KAAK,CAAC;YACnBF,KAAK,CAAC,2BAA2B,EAAEA,IAAI,CAAC;QAC1C;IACF;IAEA,OAAOZ;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"sourcesContent":["import type { DeleteFromSearch } from '../../types.js'\n\nexport const deleteFromSearch: DeleteFromSearch = async ({\n doc,\n pluginConfig,\n req: { payload },\n req,\n}) => {\n const searchSlug = pluginConfig?.searchOverrides?.slug || 'search'\n try {\n const searchDocQuery = await payload.find({\n collection: searchSlug,\n depth: 0,\n req,\n where: {\n 'doc.value': {\n equals: doc.id,\n },\n },\n })\n\n if (searchDocQuery?.docs?.[0]) {\n await payload.delete({\n id: searchDocQuery?.docs?.[0]?.id,\n collection: searchSlug,\n req,\n })\n }\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error deleting ${searchSlug} doc.`,\n })\n }\n\n return doc\n}\n"],"names":["deleteFromSearch","doc","pluginConfig","req","payload","searchSlug","searchOverrides","slug","searchDocQuery","find","collection","depth","where","equals","id","docs","delete","err","logger","error","msg"],"mappings":"AAEA,OAAO,MAAMA,mBAAqC,OAAO,EACvDC,GAAG,EACHC,YAAY,EACZC,KAAK,EAAEC,OAAO,EAAE,EAChBD,GAAG,EACJ;IACC,MAAME,aAAaH,cAAcI,iBAAiBC,QAAQ;IAC1D,IAAI;QACF,MAAMC,iBAAiB,MAAMJ,QAAQK,IAAI,CAAC;YACxCC,YAAYL;YACZM,OAAO;YACPR;YACAS,OAAO;gBACL,aAAa;oBACXC,QAAQZ,IAAIa,EAAE;gBAChB;YACF;QACF;QAEA,IAAIN,gBAAgBO,MAAM,CAAC,EAAE,EAAE;YAC7B,MAAMX,QAAQY,MAAM,CAAC;gBACnBF,IAAIN,gBAAgBO,MAAM,CAAC,EAAE,EAAED;gBAC/BJ,YAAYL;gBACZF;YACF;QACF;IACF,EAAE,OAAOc,KAAc;QACrBb,QAAQc,MAAM,CAACC,KAAK,CAAC;YACnBF;YACAG,KAAK,CAAC,eAAe,EAAEf,WAAW,KAAK,CAAC;QAC1C;IACF;IAEA,OAAOJ;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"syncWithSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/syncWithSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,cAAc,EAAE,cA6J5B,CAAA"}
1
+ {"version":3,"file":"syncWithSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/syncWithSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,cAAc,EAAE,cAgL5B,CAAA"}
@@ -1,7 +1,8 @@
1
1
  export const syncWithSearch = async (args)=>{
2
2
  const { collection, doc, operation, pluginConfig, req: { payload }, req } = args;
3
3
  const { id, _status: status, title } = doc || {};
4
- const { beforeSync, defaultPriorities, deleteDrafts, syncDrafts } = pluginConfig;
4
+ const { beforeSync, defaultPriorities, deleteDrafts, searchOverrides, syncDrafts } = pluginConfig;
5
+ const searchSlug = searchOverrides?.slug || 'search';
5
6
  let dataToSave = {
6
7
  doc: {
7
8
  relationTo: collection,
@@ -10,8 +11,17 @@ export const syncWithSearch = async (args)=>{
10
11
  title
11
12
  };
12
13
  if (typeof beforeSync === 'function') {
14
+ let docToSyncWith = doc;
15
+ if (payload.config?.localization) {
16
+ docToSyncWith = await payload.findByID({
17
+ id,
18
+ collection,
19
+ locale: req.locale,
20
+ req
21
+ });
22
+ }
13
23
  dataToSave = await beforeSync({
14
- originalDoc: doc,
24
+ originalDoc: docToSyncWith,
15
25
  payload,
16
26
  req,
17
27
  searchDoc: dataToSave
@@ -25,7 +35,7 @@ export const syncWithSearch = async (args)=>{
25
35
  defaultPriority = await priority(doc);
26
36
  } catch (err) {
27
37
  payload.logger.error(err);
28
- payload.logger.error(`Error gathering default priority for search documents related to ${collection}`);
38
+ payload.logger.error(`Error gathering default priority for ${searchSlug} documents related to ${collection}`);
29
39
  }
30
40
  } else {
31
41
  defaultPriority = priority;
@@ -36,11 +46,12 @@ export const syncWithSearch = async (args)=>{
36
46
  if (operation === 'create') {
37
47
  if (doSync) {
38
48
  await payload.create({
39
- collection: 'search',
49
+ collection: searchSlug,
40
50
  data: {
41
51
  ...dataToSave,
42
52
  priority: defaultPriority
43
53
  },
54
+ locale: req.locale,
44
55
  req
45
56
  });
46
57
  }
@@ -49,10 +60,14 @@ export const syncWithSearch = async (args)=>{
49
60
  try {
50
61
  // find the correct doc to sync with
51
62
  const searchDocQuery = await payload.find({
52
- collection: 'search',
63
+ collection: searchSlug,
53
64
  depth: 0,
65
+ locale: req.locale,
54
66
  req,
55
67
  where: {
68
+ 'doc.relationTo': {
69
+ equals: collection
70
+ },
56
71
  'doc.value': {
57
72
  equals: id
58
73
  }
@@ -66,7 +81,7 @@ export const syncWithSearch = async (args)=>{
66
81
  try {
67
82
  const duplicativeDocIDs = duplicativeDocs.map(({ id })=>id);
68
83
  await payload.delete({
69
- collection: 'search',
84
+ collection: searchSlug,
70
85
  req,
71
86
  where: {
72
87
  id: {
@@ -75,7 +90,7 @@ export const syncWithSearch = async (args)=>{
75
90
  }
76
91
  });
77
92
  } catch (err) {
78
- payload.logger.error(`Error deleting duplicative search documents.`);
93
+ payload.logger.error(`Error deleting duplicative ${searchSlug} documents.`);
79
94
  }
80
95
  }
81
96
  if (foundDoc) {
@@ -85,15 +100,16 @@ export const syncWithSearch = async (args)=>{
85
100
  try {
86
101
  await payload.update({
87
102
  id: searchDocID,
88
- collection: 'search',
103
+ collection: searchSlug,
89
104
  data: {
90
105
  ...dataToSave,
91
106
  priority: foundDoc.priority || defaultPriority
92
107
  },
108
+ locale: req.locale,
93
109
  req
94
110
  });
95
111
  } catch (err) {
96
- payload.logger.error(`Error updating search document.`);
112
+ payload.logger.error(`Error updating ${searchSlug} document.`);
97
113
  }
98
114
  }
99
115
  if (deleteDrafts && status === 'draft') {
@@ -101,33 +117,46 @@ export const syncWithSearch = async (args)=>{
101
117
  try {
102
118
  await payload.delete({
103
119
  id: searchDocID,
104
- collection: 'search',
120
+ collection: searchSlug,
105
121
  req
106
122
  });
107
123
  } catch (err) {
108
- payload.logger.error(`Error deleting search document: ${err}`);
124
+ payload.logger.error({
125
+ err,
126
+ msg: `Error deleting ${searchSlug} document.`
127
+ });
109
128
  }
110
129
  }
111
130
  } else if (doSync) {
112
131
  try {
113
132
  await payload.create({
114
- collection: 'search',
133
+ collection: searchSlug,
115
134
  data: {
116
135
  ...dataToSave,
117
136
  priority: defaultPriority
118
137
  },
138
+ locale: req.locale,
119
139
  req
120
140
  });
121
141
  } catch (err) {
122
- payload.logger.error(`Error creating search document: ${err}`);
142
+ payload.logger.error({
143
+ err,
144
+ msg: `Error creating ${searchSlug} document.`
145
+ });
123
146
  }
124
147
  }
125
148
  } catch (err) {
126
- payload.logger.error(`Error finding search document: ${err}`);
149
+ payload.logger.error({
150
+ err,
151
+ msg: `Error finding ${searchSlug} document.`
152
+ });
127
153
  }
128
154
  }
129
155
  } catch (err) {
130
- payload.logger.error(`Error syncing search document related to ${collection} with id: '${id}': ${err}`);
156
+ payload.logger.error({
157
+ err,
158
+ msg: `Error syncing ${searchSlug} document related to ${collection} with id: '${id}'.`
159
+ });
131
160
  }
132
161
  return doc;
133
162
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Search/hooks/syncWithSearch.ts"],"sourcesContent":["import type { DocToSync, SyncWithSearch } from '../../types.js'\n\nexport const syncWithSearch: SyncWithSearch = async (args) => {\n const {\n collection,\n doc,\n operation,\n pluginConfig,\n req: { payload },\n req,\n } = args\n\n const { id, _status: status, title } = doc || {}\n\n const { beforeSync, defaultPriorities, deleteDrafts, syncDrafts } = pluginConfig\n\n let dataToSave: DocToSync = {\n doc: {\n relationTo: collection,\n value: id,\n },\n title,\n }\n\n if (typeof beforeSync === 'function') {\n dataToSave = await beforeSync({\n originalDoc: doc,\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 search 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: 'search',\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\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: 'search',\n depth: 0,\n req,\n where: {\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: 'search',\n req,\n where: { id: { in: duplicativeDocIDs } },\n })\n } catch (err: unknown) {\n payload.logger.error(`Error deleting duplicative search documents.`)\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: 'search',\n data: {\n ...dataToSave,\n priority: foundDoc.priority || defaultPriority,\n },\n req,\n })\n } catch (err: unknown) {\n payload.logger.error(`Error updating search 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: 'search',\n req,\n })\n } catch (err: unknown) {\n payload.logger.error(`Error deleting search document: ${err}`)\n }\n }\n } else if (doSync) {\n try {\n await payload.create({\n collection: 'search',\n data: {\n ...dataToSave,\n priority: defaultPriority,\n },\n req,\n })\n } catch (err: unknown) {\n payload.logger.error(`Error creating search document: ${err}`)\n }\n }\n } catch (err: unknown) {\n payload.logger.error(`Error finding search document: ${err}`)\n }\n }\n } catch (err: unknown) {\n payload.logger.error(\n `Error syncing search document related to ${collection} with id: '${id}': ${err}`,\n )\n }\n\n return doc\n}\n"],"names":["syncWithSearch","args","collection","doc","operation","pluginConfig","req","payload","id","_status","status","title","beforeSync","defaultPriorities","deleteDrafts","syncDrafts","dataToSave","relationTo","value","originalDoc","searchDoc","defaultPriority","priority","err","logger","error","doSync","create","data","searchDocQuery","find","depth","where","equals","docs","foundDoc","duplicativeDocs","length","duplicativeDocIDs","map","delete","in","searchDocID","update"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/Search/hooks/syncWithSearch.ts"],"sourcesContent":["import type { DocToSync, SyncWithSearch } from '../../types.js'\n\nexport const syncWithSearch: SyncWithSearch = async (args) => {\n const {\n collection,\n doc,\n operation,\n pluginConfig,\n req: { payload },\n req,\n } = args\n\n const { id, _status: status, title } = doc || {}\n\n const { beforeSync, defaultPriorities, deleteDrafts, searchOverrides, syncDrafts } = pluginConfig\n\n const searchSlug = searchOverrides?.slug || 'search'\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: req.locale,\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: req.locale,\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: req.locale,\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(`Error deleting duplicative ${searchSlug} documents.`)\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: req.locale,\n req,\n })\n } catch (err: unknown) {\n payload.logger.error(`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: req.locale,\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\n return doc\n}\n"],"names":["syncWithSearch","args","collection","doc","operation","pluginConfig","req","payload","id","_status","status","title","beforeSync","defaultPriorities","deleteDrafts","searchOverrides","syncDrafts","searchSlug","slug","dataToSave","relationTo","value","docToSyncWith","config","localization","findByID","locale","originalDoc","searchDoc","defaultPriority","priority","err","logger","error","doSync","create","data","searchDocQuery","find","depth","where","equals","docs","foundDoc","duplicativeDocs","length","duplicativeDocIDs","map","delete","in","searchDocID","update","msg"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Search/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAKrD,eAAO,MAAM,wBAAwB,iBAAkB,kBAAkB,KAAG,gBAuE3E,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Search/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD,eAAO,MAAM,wBAAwB,iBAAkB,kBAAkB,KAAG,gBAyE3E,CAAA"}
@@ -1,4 +1,3 @@
1
- import { LinkToDoc } from './ui/index.js';
2
1
  // all settings can be overridden by the config
3
2
  export const generateSearchCollection = (pluginConfig)=>{
4
3
  const defaultFields = [
@@ -7,7 +6,8 @@ export const generateSearchCollection = (pluginConfig)=>{
7
6
  type: 'text',
8
7
  admin: {
9
8
  readOnly: true
10
- }
9
+ },
10
+ localized: pluginConfig.localize
11
11
  },
12
12
  {
13
13
  name: 'priority',
@@ -33,7 +33,9 @@ export const generateSearchCollection = (pluginConfig)=>{
33
33
  type: 'ui',
34
34
  admin: {
35
35
  components: {
36
- Field: LinkToDoc
36
+ Field: {
37
+ path: '@payloadcms/plugin-search/client#LinkToDoc'
38
+ }
37
39
  },
38
40
  position: 'sidebar'
39
41
  }
@@ -59,12 +61,11 @@ export const generateSearchCollection = (pluginConfig)=>{
59
61
  fields: pluginConfig?.searchOverrides?.fields && typeof pluginConfig?.searchOverrides?.fields === 'function' ? pluginConfig?.searchOverrides.fields({
60
62
  defaultFields
61
63
  }) : defaultFields,
62
- hooks: {
63
- ...pluginConfig?.searchOverrides?.hooks || {}
64
- },
65
64
  labels: {
66
- plural: 'Search Results',
67
- singular: 'Search Result'
65
+ ...pluginConfig?.searchOverrides?.labels || {
66
+ plural: 'Search Results',
67
+ singular: 'Search Result'
68
+ }
68
69
  }
69
70
  };
70
71
  return newConfig;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Search/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { SearchPluginConfig } from '../types.js'\n\nimport { LinkToDoc } from './ui/index.js'\n\n// all settings can be overridden by the config\nexport const generateSearchCollection = (pluginConfig: SearchPluginConfig): CollectionConfig => {\n const defaultFields: Field[] = [\n {\n name: 'title',\n type: 'text',\n admin: {\n readOnly: true,\n },\n },\n {\n name: 'priority',\n type: 'number',\n admin: {\n position: 'sidebar',\n },\n },\n {\n name: 'doc',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n index: true,\n maxDepth: 0,\n relationTo: pluginConfig?.collections || [],\n required: true,\n },\n {\n name: 'docUrl',\n type: 'ui',\n admin: {\n components: {\n Field: LinkToDoc,\n },\n position: 'sidebar',\n },\n },\n ]\n\n const newConfig: CollectionConfig = {\n ...(pluginConfig?.searchOverrides || {}),\n slug: pluginConfig?.searchOverrides?.slug || 'search',\n access: {\n create: (): boolean => false,\n read: (): boolean => true,\n ...(pluginConfig?.searchOverrides?.access || {}),\n },\n admin: {\n defaultColumns: ['title'],\n description:\n 'This is a collection of automatically created search results. These results are used by the global site search and will be updated automatically as documents in the CMS are created or updated.',\n enableRichTextRelationship: false,\n useAsTitle: 'title',\n ...(pluginConfig?.searchOverrides?.admin || {}),\n },\n fields:\n pluginConfig?.searchOverrides?.fields &&\n typeof pluginConfig?.searchOverrides?.fields === 'function'\n ? pluginConfig?.searchOverrides.fields({ defaultFields })\n : defaultFields,\n hooks: {\n ...(pluginConfig?.searchOverrides?.hooks || {}),\n },\n labels: {\n plural: 'Search Results',\n singular: 'Search Result',\n },\n }\n\n return newConfig\n}\n"],"names":["LinkToDoc","generateSearchCollection","pluginConfig","defaultFields","name","type","admin","readOnly","position","index","maxDepth","relationTo","collections","required","components","Field","newConfig","searchOverrides","slug","access","create","read","defaultColumns","description","enableRichTextRelationship","useAsTitle","fields","hooks","labels","plural","singular"],"mappings":"AAIA,SAASA,SAAS,QAAQ,gBAAe;AAEzC,+CAA+C;AAC/C,OAAO,MAAMC,2BAA2B,CAACC;IACvC,MAAMC,gBAAyB;QAC7B;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,UAAU;YACZ;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLE,UAAU;YACZ;QACF;QACA;YACEJ,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLE,UAAU;gBACVD,UAAU;YACZ;YACAE,OAAO;YACPC,UAAU;YACVC,YAAYT,cAAcU,eAAe,EAAE;YAC3CC,UAAU;QACZ;QACA;YACET,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLQ,YAAY;oBACVC,OAAOf;gBACT;gBACAQ,UAAU;YACZ;QACF;KACD;IAED,MAAMQ,YAA8B;QAClC,GAAId,cAAce,mBAAmB,CAAC,CAAC;QACvCC,MAAMhB,cAAce,iBAAiBC,QAAQ;QAC7CC,QAAQ;YACNC,QAAQ,IAAe;YACvBC,MAAM,IAAe;YACrB,GAAInB,cAAce,iBAAiBE,UAAU,CAAC,CAAC;QACjD;QACAb,OAAO;YACLgB,gBAAgB;gBAAC;aAAQ;YACzBC,aACE;YACFC,4BAA4B;YAC5BC,YAAY;YACZ,GAAIvB,cAAce,iBAAiBX,SAAS,CAAC,CAAC;QAChD;QACAoB,QACExB,cAAce,iBAAiBS,UAC/B,OAAOxB,cAAce,iBAAiBS,WAAW,aAC7CxB,cAAce,gBAAgBS,OAAO;YAAEvB;QAAc,KACrDA;QACNwB,OAAO;YACL,GAAIzB,cAAce,iBAAiBU,SAAS,CAAC,CAAC;QAChD;QACAC,QAAQ;YACNC,QAAQ;YACRC,UAAU;QACZ;IACF;IAEA,OAAOd;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/Search/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { SearchPluginConfig } from '../types.js'\n\n// all settings can be overridden by the config\nexport const generateSearchCollection = (pluginConfig: SearchPluginConfig): CollectionConfig => {\n const defaultFields: Field[] = [\n {\n name: 'title',\n type: 'text',\n admin: {\n readOnly: true,\n },\n localized: pluginConfig.localize,\n },\n {\n name: 'priority',\n type: 'number',\n admin: {\n position: 'sidebar',\n },\n },\n {\n name: 'doc',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n index: true,\n maxDepth: 0,\n relationTo: pluginConfig?.collections || [],\n required: true,\n },\n {\n name: 'docUrl',\n type: 'ui',\n admin: {\n components: {\n Field: {\n path: '@payloadcms/plugin-search/client#LinkToDoc',\n },\n },\n position: 'sidebar',\n },\n },\n ]\n\n const newConfig: CollectionConfig = {\n ...(pluginConfig?.searchOverrides || {}),\n slug: pluginConfig?.searchOverrides?.slug || 'search',\n access: {\n create: (): boolean => false,\n read: (): boolean => true,\n ...(pluginConfig?.searchOverrides?.access || {}),\n },\n admin: {\n defaultColumns: ['title'],\n description:\n 'This is a collection of automatically created search results. These results are used by the global site search and will be updated automatically as documents in the CMS are created or updated.',\n enableRichTextRelationship: false,\n useAsTitle: 'title',\n ...(pluginConfig?.searchOverrides?.admin || {}),\n },\n fields:\n pluginConfig?.searchOverrides?.fields &&\n typeof pluginConfig?.searchOverrides?.fields === 'function'\n ? pluginConfig?.searchOverrides.fields({ defaultFields })\n : defaultFields,\n labels: {\n ...(pluginConfig?.searchOverrides?.labels || {\n plural: 'Search Results',\n singular: 'Search Result',\n }),\n },\n }\n\n return newConfig\n}\n"],"names":["generateSearchCollection","pluginConfig","defaultFields","name","type","admin","readOnly","localized","localize","position","index","maxDepth","relationTo","collections","required","components","Field","path","newConfig","searchOverrides","slug","access","create","read","defaultColumns","description","enableRichTextRelationship","useAsTitle","fields","labels","plural","singular"],"mappings":"AAIA,+CAA+C;AAC/C,OAAO,MAAMA,2BAA2B,CAACC;IACvC,MAAMC,gBAAyB;QAC7B;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,UAAU;YACZ;YACAC,WAAWN,aAAaO,QAAQ;QAClC;QACA;YACEL,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLI,UAAU;YACZ;QACF;QACA;YACEN,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLI,UAAU;gBACVH,UAAU;YACZ;YACAI,OAAO;YACPC,UAAU;YACVC,YAAYX,cAAcY,eAAe,EAAE;YAC3CC,UAAU;QACZ;QACA;YACEX,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLU,YAAY;oBACVC,OAAO;wBACLC,MAAM;oBACR;gBACF;gBACAR,UAAU;YACZ;QACF;KACD;IAED,MAAMS,YAA8B;QAClC,GAAIjB,cAAckB,mBAAmB,CAAC,CAAC;QACvCC,MAAMnB,cAAckB,iBAAiBC,QAAQ;QAC7CC,QAAQ;YACNC,QAAQ,IAAe;YACvBC,MAAM,IAAe;YACrB,GAAItB,cAAckB,iBAAiBE,UAAU,CAAC,CAAC;QACjD;QACAhB,OAAO;YACLmB,gBAAgB;gBAAC;aAAQ;YACzBC,aACE;YACFC,4BAA4B;YAC5BC,YAAY;YACZ,GAAI1B,cAAckB,iBAAiBd,SAAS,CAAC,CAAC;QAChD;QACAuB,QACE3B,cAAckB,iBAAiBS,UAC/B,OAAO3B,cAAckB,iBAAiBS,WAAW,aAC7C3B,cAAckB,gBAAgBS,OAAO;YAAE1B;QAAc,KACrDA;QACN2B,QAAQ;YACN,GAAI5B,cAAckB,iBAAiBU,UAAU;gBAC3CC,QAAQ;gBACRC,UAAU;YACZ,CAAC;QACH;IACF;IAEA,OAAOb;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/Search/ui/index.client.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA6CnC,CAAA"}
1
+ {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/Search/ui/index.client.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EA+CnC,CAAA"}
@@ -1,15 +1,27 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useConfig, useWatchForm } from '@payloadcms/ui';
3
+ import { useConfig, useField } from '@payloadcms/ui';
4
+ import { formatAdminURL } from '@payloadcms/ui/shared';
4
5
  import React from 'react';
6
+ // TODO: fix this import to work in dev mode within the monorepo in a way that is backwards compatible with 1.x
7
+ // import CopyToClipboard from 'payload/dist/admin/components/elements/CopyToClipboard'
5
8
  export const LinkToDocClient = ()=>{
6
- const form = useWatchForm();
7
- const fields = form.fields;
8
- const { doc: { value: { relationTo, value: docId } } } = fields;
9
- const config = useConfig();
9
+ const { config } = useConfig();
10
10
  const { routes: { admin: adminRoute }, serverURL } = config;
11
- const href = `${serverURL}${adminRoute}/collections/${relationTo}/${docId}`;
11
+ const { value } = useField({
12
+ path: 'doc'
13
+ });
14
+ const href = `${serverURL}${formatAdminURL({
15
+ adminRoute,
16
+ path: `/collections/${value.relationTo || ''}/${value.value || ''}`
17
+ })}`;
18
+ if (!value.relationTo || !value.value) {
19
+ return null;
20
+ }
12
21
  return /*#__PURE__*/ _jsxs("div", {
22
+ style: {
23
+ marginBottom: 'var(--spacing-field, 1rem)'
24
+ },
13
25
  children: [
14
26
  /*#__PURE__*/ _jsx("div", {
15
27
  children: /*#__PURE__*/ _jsx("span", {
@@ -28,6 +40,7 @@ export const LinkToDocClient = ()=>{
28
40
  },
29
41
  children: /*#__PURE__*/ _jsx("a", {
30
42
  href: href,
43
+ target: "_blank",
31
44
  children: href
32
45
  })
33
46
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Search/ui/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { FormState } from 'payload'\n\nimport { useConfig, useWatchForm } from '@payloadcms/ui'\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\ntype FieldsWithDoc = {\n doc: {\n value: {\n relationTo: string\n value: string\n }\n }\n} & FormState\n\nexport const LinkToDocClient: React.FC = () => {\n const form = useWatchForm()\n const fields = form.fields as FieldsWithDoc\n\n const {\n doc: {\n value: { relationTo, value: docId },\n },\n } = fields\n\n const config = useConfig()\n\n const {\n routes: {\n admin: adminRoute, // already includes leading slash\n },\n serverURL,\n } = config\n\n const href = `${serverURL}${adminRoute}/collections/${relationTo}/${docId}`\n\n return (\n <div>\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}>{href}</a>\n </div>\n </div>\n )\n}\n"],"names":["useConfig","useWatchForm","React","LinkToDocClient","form","fields","doc","value","relationTo","docId","config","routes","admin","adminRoute","serverURL","href","div","span","className","style","color","fontWeight","overflow","textOverflow","a"],"mappings":"AAAA;;AAIA,SAASA,SAAS,EAAEC,YAAY,QAAQ,iBAAgB;AACxD,OAAOC,WAAW,QAAO;AAazB,OAAO,MAAMC,kBAA4B;IACvC,MAAMC,OAAOH;IACb,MAAMI,SAASD,KAAKC,MAAM;IAE1B,MAAM,EACJC,KAAK,EACHC,OAAO,EAAEC,UAAU,EAAED,OAAOE,KAAK,EAAE,EACpC,EACF,GAAGJ;IAEJ,MAAMK,SAASV;IAEf,MAAM,EACJW,QAAQ,EACNC,OAAOC,UAAU,EAClB,EACDC,SAAS,EACV,GAAGJ;IAEJ,MAAMK,OAAO,CAAC,EAAED,UAAU,EAAED,WAAW,aAAa,EAAEL,WAAW,CAAC,EAAEC,MAAM,CAAC;IAE3E,qBACE,MAACO;;0BACC,KAACA;0BACC,cAAA,KAACC;oBACCC,WAAU;oBACVC,OAAO;wBACLC,OAAO;oBACT;8BACD;;;0BAKH,KAACJ;gBACCG,OAAO;oBACLE,YAAY;oBACZC,UAAU;oBACVC,cAAc;gBAChB;0BAEA,cAAA,KAACC;oBAAET,MAAMA;8BAAOA;;;;;AAIxB,EAAC"}
1
+ {"version":3,"sources":["../../../src/Search/ui/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 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Search/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAMvC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Search/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAEvC,CAAA"}
@@ -2,9 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React from 'react';
3
3
  import { LinkToDocClient } from './index.client.js';
4
4
  export const LinkToDoc = ()=>{
5
- return /*#__PURE__*/ _jsx("div", {
6
- children: /*#__PURE__*/ _jsx(LinkToDocClient, {})
7
- });
5
+ return /*#__PURE__*/ _jsx(LinkToDocClient, {});
8
6
  };
9
7
 
10
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Search/ui/index.tsx"],"sourcesContent":["import type { UIField } from 'payload'\n\nimport React from 'react'\n\nimport { LinkToDocClient } from './index.client.js'\n\nexport const LinkToDoc: React.FC<UIField> = () => {\n return (\n <div>\n <LinkToDocClient />\n </div>\n )\n}\n"],"names":["React","LinkToDocClient","LinkToDoc","div"],"mappings":";AAEA,OAAOA,WAAW,QAAO;AAEzB,SAASC,eAAe,QAAQ,oBAAmB;AAEnD,OAAO,MAAMC,YAA+B;IAC1C,qBACE,KAACC;kBACC,cAAA,KAACF;;AAGP,EAAC"}
1
+ {"version":3,"sources":["../../../src/Search/ui/index.tsx"],"sourcesContent":["import type { UIField } from 'payload'\n\nimport React from 'react'\n\nimport { LinkToDocClient } from './index.client.js'\n\nexport const LinkToDoc: React.FC<UIField> = () => {\n return <LinkToDocClient />\n}\n"],"names":["React","LinkToDocClient","LinkToDoc"],"mappings":";AAEA,OAAOA,WAAW,QAAO;AAEzB,SAASC,eAAe,QAAQ,oBAAmB;AAEnD,OAAO,MAAMC,YAA+B;IAC1C,qBAAO,KAACD;AACV,EAAC"}
@@ -0,0 +1,2 @@
1
+ export { LinkToDoc } from '../Search/ui/index.js';
2
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { LinkToDoc } from '../Search/ui/index.js';
2
+
3
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { LinkToDoc } from '../Search/ui/index.js'\n"],"names":["LinkToDoc"],"mappings":"AAAA,SAASA,SAAS,QAAQ,wBAAuB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAMpD,eAAO,MAAM,YAAY,yBACA,kBAAkB,cAChC,MAAM,KAAG,MAoDjB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwD,MAAM,EAAE,MAAM,SAAS,CAAA;AAE3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AASpD,eAAO,MAAM,YAAY,yBACA,kBAAkB,cAChC,MAAM,KAAG,MAoEjB,CAAA"}
package/dist/index.js CHANGED
@@ -3,11 +3,16 @@ import { syncWithSearch } from './Search/hooks/syncWithSearch.js';
3
3
  import { generateSearchCollection } from './Search/index.js';
4
4
  export const searchPlugin = (incomingPluginConfig)=>(config)=>{
5
5
  const { collections } = config;
6
+ // If the user defines `localize` to either true or false, use that
7
+ // Otherwise, set it based on if their config has localization enabled or disabled
8
+ const shouldLocalize = typeof incomingPluginConfig.localize === 'boolean' ? incomingPluginConfig.localize : Boolean(config.localization);
9
+ incomingPluginConfig.localize = shouldLocalize;
6
10
  if (collections) {
7
11
  const pluginConfig = {
8
- ...incomingPluginConfig,
12
+ // write any config defaults here
9
13
  deleteDrafts: true,
10
- syncDrafts: false
14
+ syncDrafts: false,
15
+ ...incomingPluginConfig
11
16
  };
12
17
  // add afterChange and afterDelete hooks to every search-enabled collection
13
18
  const collectionsWithSearchHooks = config?.collections?.map((collection)=>{
@@ -31,7 +36,12 @@ export const searchPlugin = (incomingPluginConfig)=>(config)=>{
31
36
  ],
32
37
  afterDelete: [
33
38
  ...existingHooks?.afterDelete || [],
34
- deleteFromSearch
39
+ async (args)=>{
40
+ await deleteFromSearch({
41
+ ...args,
42
+ pluginConfig
43
+ });
44
+ }
35
45
  ]
36
46
  }
37
47
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport type { SearchPluginConfig } from './types.js'\n\nimport { deleteFromSearch } from './Search/hooks/deleteFromSearch.js'\nimport { syncWithSearch } from './Search/hooks/syncWithSearch.js'\nimport { generateSearchCollection } from './Search/index.js'\n\nexport const searchPlugin =\n (incomingPluginConfig: SearchPluginConfig) =>\n (config: Config): Config => {\n const { collections } = config\n\n if (collections) {\n const pluginConfig: SearchPluginConfig = {\n ...incomingPluginConfig,\n deleteDrafts: true,\n syncDrafts: false,\n // write any config defaults here\n }\n\n // add afterChange and afterDelete hooks to every search-enabled collection\n const collectionsWithSearchHooks = config?.collections\n ?.map((collection) => {\n const { hooks: existingHooks } = collection\n\n const enabledCollections = pluginConfig.collections || []\n const isEnabled = enabledCollections.indexOf(collection.slug) > -1\n if (isEnabled) {\n return {\n ...collection,\n hooks: {\n ...collection.hooks,\n afterChange: [\n ...(existingHooks?.afterChange || []),\n async (args: any) => {\n await syncWithSearch({\n ...args,\n collection: collection.slug,\n pluginConfig,\n })\n },\n ],\n afterDelete: [...(existingHooks?.afterDelete || []), deleteFromSearch],\n },\n }\n }\n\n return collection\n })\n .filter(Boolean)\n\n return {\n ...config,\n collections: [\n ...(collectionsWithSearchHooks || []),\n generateSearchCollection(pluginConfig),\n ],\n }\n }\n\n return config\n }\n"],"names":["deleteFromSearch","syncWithSearch","generateSearchCollection","searchPlugin","incomingPluginConfig","config","collections","pluginConfig","deleteDrafts","syncDrafts","collectionsWithSearchHooks","map","collection","hooks","existingHooks","enabledCollections","isEnabled","indexOf","slug","afterChange","args","afterDelete","filter","Boolean"],"mappings":"AAIA,SAASA,gBAAgB,QAAQ,qCAAoC;AACrE,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,wBAAwB,QAAQ,oBAAmB;AAE5D,OAAO,MAAMC,eACX,CAACC,uBACD,CAACC;QACC,MAAM,EAAEC,WAAW,EAAE,GAAGD;QAExB,IAAIC,aAAa;YACf,MAAMC,eAAmC;gBACvC,GAAGH,oBAAoB;gBACvBI,cAAc;gBACdC,YAAY;YAEd;YAEA,2EAA2E;YAC3E,MAAMC,6BAA6BL,QAAQC,aACvCK,IAAI,CAACC;gBACL,MAAM,EAAEC,OAAOC,aAAa,EAAE,GAAGF;gBAEjC,MAAMG,qBAAqBR,aAAaD,WAAW,IAAI,EAAE;gBACzD,MAAMU,YAAYD,mBAAmBE,OAAO,CAACL,WAAWM,IAAI,IAAI,CAAC;gBACjE,IAAIF,WAAW;oBACb,OAAO;wBACL,GAAGJ,UAAU;wBACbC,OAAO;4BACL,GAAGD,WAAWC,KAAK;4BACnBM,aAAa;mCACPL,eAAeK,eAAe,EAAE;gCACpC,OAAOC;oCACL,MAAMnB,eAAe;wCACnB,GAAGmB,IAAI;wCACPR,YAAYA,WAAWM,IAAI;wCAC3BX;oCACF;gCACF;6BACD;4BACDc,aAAa;mCAAKP,eAAeO,eAAe,EAAE;gCAAGrB;6BAAiB;wBACxE;oBACF;gBACF;gBAEA,OAAOY;YACT,GACCU,OAAOC;YAEV,OAAO;gBACL,GAAGlB,MAAM;gBACTC,aAAa;uBACPI,8BAA8B,EAAE;oBACpCR,yBAAyBK;iBAC1B;YACH;QACF;QAEA,OAAOF;IACT,EAAC"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, CollectionAfterDeleteHook, Config } from 'payload'\n\nimport type { SearchPluginConfig } from './types.js'\n\nimport { deleteFromSearch } from './Search/hooks/deleteFromSearch.js'\nimport { syncWithSearch } from './Search/hooks/syncWithSearch.js'\nimport { generateSearchCollection } from './Search/index.js'\n\ntype CollectionAfterChangeHookArgs = Parameters<CollectionAfterChangeHook>[0]\ntype CollectionAfterDeleteHookArgs = Parameters<CollectionAfterDeleteHook>[0]\n\nexport const searchPlugin =\n (incomingPluginConfig: SearchPluginConfig) =>\n (config: Config): Config => {\n const { collections } = config\n\n // If the user defines `localize` to either true or false, use that\n // Otherwise, set it based on if their config has localization enabled or disabled\n const shouldLocalize =\n typeof incomingPluginConfig.localize === 'boolean'\n ? incomingPluginConfig.localize\n : Boolean(config.localization)\n incomingPluginConfig.localize = shouldLocalize\n\n if (collections) {\n const pluginConfig: SearchPluginConfig = {\n // write any config defaults here\n deleteDrafts: true,\n syncDrafts: false,\n ...incomingPluginConfig,\n }\n\n // add afterChange and afterDelete hooks to every search-enabled collection\n const collectionsWithSearchHooks = config?.collections\n ?.map((collection) => {\n const { hooks: existingHooks } = collection\n\n const enabledCollections = pluginConfig.collections || []\n const isEnabled = enabledCollections.indexOf(collection.slug) > -1\n if (isEnabled) {\n return {\n ...collection,\n hooks: {\n ...collection.hooks,\n afterChange: [\n ...(existingHooks?.afterChange || []),\n async (args: CollectionAfterChangeHookArgs) => {\n await syncWithSearch({\n ...args,\n collection: collection.slug,\n pluginConfig,\n })\n },\n ],\n afterDelete: [\n ...(existingHooks?.afterDelete || []),\n async (args: CollectionAfterDeleteHookArgs) => {\n await deleteFromSearch({\n ...args,\n pluginConfig,\n })\n },\n ],\n },\n }\n }\n\n return collection\n })\n .filter(Boolean)\n\n return {\n ...config,\n collections: [\n ...(collectionsWithSearchHooks || []),\n generateSearchCollection(pluginConfig),\n ],\n }\n }\n\n return config\n }\n"],"names":["deleteFromSearch","syncWithSearch","generateSearchCollection","searchPlugin","incomingPluginConfig","config","collections","shouldLocalize","localize","Boolean","localization","pluginConfig","deleteDrafts","syncDrafts","collectionsWithSearchHooks","map","collection","hooks","existingHooks","enabledCollections","isEnabled","indexOf","slug","afterChange","args","afterDelete","filter"],"mappings":"AAIA,SAASA,gBAAgB,QAAQ,qCAAoC;AACrE,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,wBAAwB,QAAQ,oBAAmB;AAK5D,OAAO,MAAMC,eACX,CAACC,uBACD,CAACC;QACC,MAAM,EAAEC,WAAW,EAAE,GAAGD;QAExB,mEAAmE;QACnE,kFAAkF;QAClF,MAAME,iBACJ,OAAOH,qBAAqBI,QAAQ,KAAK,YACrCJ,qBAAqBI,QAAQ,GAC7BC,QAAQJ,OAAOK,YAAY;QACjCN,qBAAqBI,QAAQ,GAAGD;QAEhC,IAAID,aAAa;YACf,MAAMK,eAAmC;gBACvC,iCAAiC;gBACjCC,cAAc;gBACdC,YAAY;gBACZ,GAAGT,oBAAoB;YACzB;YAEA,2EAA2E;YAC3E,MAAMU,6BAA6BT,QAAQC,aACvCS,IAAI,CAACC;gBACL,MAAM,EAAEC,OAAOC,aAAa,EAAE,GAAGF;gBAEjC,MAAMG,qBAAqBR,aAAaL,WAAW,IAAI,EAAE;gBACzD,MAAMc,YAAYD,mBAAmBE,OAAO,CAACL,WAAWM,IAAI,IAAI,CAAC;gBACjE,IAAIF,WAAW;oBACb,OAAO;wBACL,GAAGJ,UAAU;wBACbC,OAAO;4BACL,GAAGD,WAAWC,KAAK;4BACnBM,aAAa;mCACPL,eAAeK,eAAe,EAAE;gCACpC,OAAOC;oCACL,MAAMvB,eAAe;wCACnB,GAAGuB,IAAI;wCACPR,YAAYA,WAAWM,IAAI;wCAC3BX;oCACF;gCACF;6BACD;4BACDc,aAAa;mCACPP,eAAeO,eAAe,EAAE;gCACpC,OAAOD;oCACL,MAAMxB,iBAAiB;wCACrB,GAAGwB,IAAI;wCACPb;oCACF;gCACF;6BACD;wBACH;oBACF;gBACF;gBAEA,OAAOK;YACT,GACCU,OAAOjB;YAEV,OAAO;gBACL,GAAGJ,MAAM;gBACTC,aAAa;uBACPQ,8BAA8B,EAAE;oBACpCZ,yBAAyBS;iBAC1B;YACH;QACF;QAEA,OAAON;IACT,EAAC"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CollectionAfterChangeHook, CollectionConfig, Field, Payload, PayloadRequest } from 'payload';
1
+ import type { CollectionAfterChangeHook, CollectionAfterDeleteHook, CollectionConfig, Field, Payload, PayloadRequest } from 'payload';
2
2
  export type DocToSync = {
3
3
  [key: string]: any;
4
4
  doc: {
@@ -22,9 +22,10 @@ export type SearchPluginConfig = {
22
22
  beforeSync?: BeforeSync;
23
23
  collections?: string[];
24
24
  defaultPriorities?: {
25
- [collection: string]: ((doc: any) => Promise<number> | number) | number;
25
+ [collection: string]: ((doc: any) => number | Promise<number>) | number;
26
26
  };
27
27
  deleteDrafts?: boolean;
28
+ localize?: boolean;
28
29
  searchOverrides?: {
29
30
  fields?: FieldsOverride;
30
31
  } & Partial<Omit<CollectionConfig, 'fields'>>;
@@ -34,4 +35,7 @@ export type SyncWithSearch = (Args: {
34
35
  collection: string;
35
36
  pluginConfig: SearchPluginConfig;
36
37
  } & Omit<Parameters<CollectionAfterChangeHook>[0], 'collection'>) => ReturnType<CollectionAfterChangeHook>;
38
+ export type DeleteFromSearch = (Args: {
39
+ pluginConfig: SearchPluginConfig;
40
+ } & Omit<Parameters<CollectionAfterDeleteHook>[0], 'collection'>) => ReturnType<CollectionAfterDeleteHook>;
37
41
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,cAAc,EACf,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE;IAC9B,WAAW,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAA;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAEpC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE;IAAE,aAAa,EAAE,KAAK,EAAE,CAAA;CAAE,KAAK,KAAK,EAAE,CAAA;AAE1E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,iBAAiB,CAAC,EAAE;QAClB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAA;KACxE,CAAA;IACD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAA;IACzF,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAID,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,kBAAkB,CAAA;CACjC,GAAG,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAC7D,UAAU,CAAC,yBAAyB,CAAC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,cAAc,EACf,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE;IAC9B,WAAW,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAA;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAEpC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE;IAAE,aAAa,EAAE,KAAK,EAAE,CAAA;CAAE,KAAK,KAAK,EAAE,CAAA;AAE1E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,iBAAiB,CAAC,EAAE;QAClB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAA;KACxE,CAAA;IACD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAA;IACzF,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAID,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,kBAAkB,CAAA;CACjC,GAAG,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAC7D,UAAU,CAAC,yBAAyB,CAAC,CAAA;AAE1C,MAAM,MAAM,gBAAgB,GAAG,CAC7B,IAAI,EAAE;IACJ,YAAY,EAAE,kBAAkB,CAAA;CACjC,GAAG,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAC7D,UAAU,CAAC,yBAAyB,CAAC,CAAA"}
package/dist/types.js CHANGED
@@ -1,5 +1,3 @@
1
- // Extend the `CollectionAfterChangeHook` with more function args
2
- // Convert the `collection` arg from `SanitizedCollectionConfig` to a string
3
1
  export { };
4
2
 
5
3
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionConfig,\n Field,\n Payload,\n PayloadRequest,\n} from 'payload'\n\nexport type DocToSync = {\n [key: string]: any\n doc: {\n relationTo: string\n value: string\n }\n title: string\n}\n\nexport type BeforeSync = (args: {\n originalDoc: {\n [key: string]: any\n }\n payload: Payload\n req: PayloadRequest\n searchDoc: DocToSync\n}) => DocToSync | Promise<DocToSync>\n\nexport type FieldsOverride = (args: { defaultFields: Field[] }) => Field[]\n\nexport type SearchPluginConfig = {\n beforeSync?: BeforeSync\n collections?: string[]\n defaultPriorities?: {\n [collection: string]: ((doc: any) => Promise<number> | number) | number\n }\n deleteDrafts?: boolean\n searchOverrides?: { fields?: FieldsOverride } & Partial<Omit<CollectionConfig, 'fields'>>\n syncDrafts?: boolean\n}\n\n// Extend the `CollectionAfterChangeHook` with more function args\n// Convert the `collection` arg from `SanitizedCollectionConfig` to a string\nexport type SyncWithSearch = (\n Args: {\n collection: string\n pluginConfig: SearchPluginConfig\n } & Omit<Parameters<CollectionAfterChangeHook>[0], 'collection'>,\n) => ReturnType<CollectionAfterChangeHook>\n"],"names":[],"mappings":"AAuCA,iEAAiE;AACjE,4EAA4E;AAC5E,WAK0C"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionAfterDeleteHook,\n CollectionConfig,\n Field,\n Payload,\n PayloadRequest,\n} from 'payload'\n\nexport type DocToSync = {\n [key: string]: any\n doc: {\n relationTo: string\n value: string\n }\n title: string\n}\n\nexport type BeforeSync = (args: {\n originalDoc: {\n [key: string]: any\n }\n payload: Payload\n req: PayloadRequest\n searchDoc: DocToSync\n}) => DocToSync | Promise<DocToSync>\n\nexport type FieldsOverride = (args: { defaultFields: Field[] }) => Field[]\n\nexport type SearchPluginConfig = {\n beforeSync?: BeforeSync\n collections?: string[]\n defaultPriorities?: {\n [collection: string]: ((doc: any) => number | Promise<number>) | number\n }\n deleteDrafts?: boolean\n localize?: boolean\n searchOverrides?: { fields?: FieldsOverride } & Partial<Omit<CollectionConfig, 'fields'>>\n syncDrafts?: boolean\n}\n\n// Extend the `CollectionAfterChangeHook` with more function args\n// Convert the `collection` arg from `SanitizedCollectionConfig` to a string\nexport type SyncWithSearch = (\n Args: {\n collection: string\n pluginConfig: SearchPluginConfig\n } & Omit<Parameters<CollectionAfterChangeHook>[0], 'collection'>,\n) => ReturnType<CollectionAfterChangeHook>\n\nexport type DeleteFromSearch = (\n Args: {\n pluginConfig: SearchPluginConfig\n } & Omit<Parameters<CollectionAfterDeleteHook>[0], 'collection'>,\n) => ReturnType<CollectionAfterDeleteHook>\n"],"names":[],"mappings":"AAkDA,WAI0C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-search",
3
- "version": "3.0.0-canary.d6053cd",
3
+ "version": "3.0.0-canary.dc8b1fe",
4
4
  "description": "Search plugin for Payload",
5
5
  "keywords": [
6
6
  "payload",
@@ -25,10 +25,15 @@
25
25
  "types": "./dist/index.d.ts",
26
26
  "default": "./dist/index.js"
27
27
  },
28
- "./*": {
29
- "import": "./dist/exports/*.js",
30
- "types": "./dist/exports/*.d.ts",
31
- "default": "./dist/exports/*.js"
28
+ "./types": {
29
+ "import": "./dist/exports/types.js",
30
+ "types": "./dist/exports/types.d.ts",
31
+ "default": "./dist/exports/types.js"
32
+ },
33
+ "./client": {
34
+ "import": "./dist/exports/client.js",
35
+ "types": "./dist/exports/client.d.ts",
36
+ "default": "./dist/exports/client.js"
32
37
  }
33
38
  },
34
39
  "main": "./dist/index.js",
@@ -37,33 +42,34 @@
37
42
  "dist"
38
43
  ],
39
44
  "dependencies": {
40
- "@payloadcms/ui": "3.0.0-canary.d6053cd"
45
+ "@payloadcms/ui": "3.0.0-canary.dc8b1fe"
41
46
  },
42
47
  "devDependencies": {
43
- "@types/express": "^4.17.9",
44
- "@types/react": "npm:types-react@19.0.0-rc.0",
45
- "@types/react-dom": "npm:types-react-dom@19.0.0-rc.0",
46
- "@payloadcms/eslint-config": "3.0.0-beta.59",
47
- "payload": "3.0.0-canary.d6053cd"
48
+ "@types/react": "npm:types-react@19.0.0-rc.1",
49
+ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
50
+ "@payloadcms/eslint-config": "3.0.0-beta.112",
51
+ "payload": "3.0.0-canary.dc8b1fe"
48
52
  },
49
53
  "peerDependencies": {
50
- "react": "^19.0.0 || ^19.0.0-rc-6230622a1a-20240610",
51
- "react-dom": "^19.0.0 || ^19.0.0-rc-6230622a1a-20240610",
52
- "payload": "3.0.0-canary.d6053cd"
54
+ "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
55
+ "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
56
+ "payload": "3.0.0-canary.dc8b1fe"
53
57
  },
54
58
  "publishConfig": {
55
59
  "registry": "https://registry.npmjs.org/"
56
60
  },
57
61
  "homepage:": "https://payloadcms.com",
58
62
  "overrides": {
59
- "@types/react": "npm:types-react@19.0.0-rc.0",
60
- "@types/react-dom": "npm:types-react-dom@19.0.0-rc.0"
63
+ "@types/react": "npm:types-react@19.0.0-rc.1",
64
+ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1"
61
65
  },
62
66
  "scripts": {
63
67
  "build": "pnpm build:types && pnpm build:swc",
64
68
  "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
65
69
  "build:types": "tsc --emitDeclarationOnly --outDir dist",
66
70
  "clean": "rimraf {dist,*.tsbuildinfo}",
71
+ "lint": "eslint .",
72
+ "lint:fix": "eslint . --fix",
67
73
  "test": "echo \"Error: no tests specified\""
68
74
  }
69
75
  }