@payloadcms/plugin-search 1.0.1 → 3.0.0-alpha.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -119
- package/dist/Search/hooks/deleteFromSearch.d.ts +1 -0
- package/dist/Search/hooks/deleteFromSearch.d.ts.map +1 -0
- package/dist/Search/hooks/deleteFromSearch.js +20 -69
- package/dist/Search/hooks/deleteFromSearch.js.map +1 -1
- package/dist/Search/hooks/syncWithSearch.d.ts +2 -1
- package/dist/Search/hooks/syncWithSearch.d.ts.map +1 -0
- package/dist/Search/hooks/syncWithSearch.js +105 -167
- package/dist/Search/hooks/syncWithSearch.js.map +1 -1
- package/dist/Search/index.d.ts +2 -1
- package/dist/Search/index.d.ts.map +1 -0
- package/dist/Search/index.js +29 -35
- package/dist/Search/index.js.map +1 -1
- package/dist/Search/ui/index.d.ts +2 -1
- package/dist/Search/ui/index.d.ts.map +1 -0
- package/dist/Search/ui/index.js +24 -30
- package/dist/Search/ui/index.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -86
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +12 -8
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/package.json +23 -32
- package/types.d.ts +1 -1
- package/types.js +1 -1
- package/dist/collections/FormSubmissions/hooks/createCharge.d.ts +0 -3
- package/dist/collections/FormSubmissions/hooks/createCharge.js +0 -53
- package/dist/collections/FormSubmissions/hooks/createCharge.js.map +0 -1
- package/dist/collections/FormSubmissions/hooks/sendEmail.d.ts +0 -3
- package/dist/collections/FormSubmissions/hooks/sendEmail.js +0 -151
- package/dist/collections/FormSubmissions/hooks/sendEmail.js.map +0 -1
- package/dist/collections/FormSubmissions/index.d.ts +0 -3
- package/dist/collections/FormSubmissions/index.js +0 -137
- package/dist/collections/FormSubmissions/index.js.map +0 -1
- package/dist/collections/Forms/DynamicFieldSelector.d.ts +0 -3
- package/dist/collections/Forms/DynamicFieldSelector.js +0 -62
- package/dist/collections/Forms/DynamicFieldSelector.js.map +0 -1
- package/dist/collections/Forms/DynamicPriceSelector.d.ts +0 -3
- package/dist/collections/Forms/DynamicPriceSelector.js +0 -77
- package/dist/collections/Forms/DynamicPriceSelector.js.map +0 -1
- package/dist/collections/Forms/fields.d.ts +0 -6
- package/dist/collections/Forms/fields.js +0 -456
- package/dist/collections/Forms/fields.js.map +0 -1
- package/dist/collections/Forms/index.d.ts +0 -3
- package/dist/collections/Forms/index.js +0 -194
- package/dist/collections/Forms/index.js.map +0 -1
- package/dist/collections/Search/index.d.ts +0 -3
- package/dist/collections/Search/index.js +0 -63
- package/dist/collections/Search/index.js.map +0 -1
- package/dist/mocks/serverModule.d.ts +0 -2
- package/dist/mocks/serverModule.js +0 -4
- package/dist/mocks/serverModule.js.map +0 -1
- package/dist/utilities/calculatePaymentTotal.d.ts +0 -4
- package/dist/utilities/calculatePaymentTotal.js +0 -47
- package/dist/utilities/calculatePaymentTotal.js.map +0 -1
- package/dist/utilities/deepMerge.d.ts +0 -2
- package/dist/utilities/deepMerge.js +0 -44
- package/dist/utilities/deepMerge.js.map +0 -1
- package/dist/utilities/getPaymentTotal.d.ts +0 -4
- package/dist/utilities/getPaymentTotal.js +0 -44
- package/dist/utilities/getPaymentTotal.js.map +0 -1
- package/dist/utilities/replaceDoubleCurlys.d.ts +0 -7
- package/dist/utilities/replaceDoubleCurlys.js +0 -20
- package/dist/utilities/replaceDoubleCurlys.js.map +0 -1
- package/dist/utilities/serializeRichText.d.ts +0 -10
- package/dist/utilities/serializeRichText.js +0 -49
- package/dist/utilities/serializeRichText.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,122 +1,7 @@
|
|
|
1
1
|
# Payload Search Plugin
|
|
2
2
|
|
|
3
|
-
[
|
|
3
|
+
A plugin for [Payload](https://github.com/payloadcms/payload) to generate records of your documents that are extremely fast to search on.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- Creates a `search` collection that:
|
|
10
|
-
- Automatically creates, syncs, and deletes search results related to your documents
|
|
11
|
-
- Serves search results extremely quickly by saving only search-critical data that you define
|
|
12
|
-
- Allows you to sort search results by priority
|
|
13
|
-
|
|
14
|
-
## Installation
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
yarn add @payloadcms/plugin-search
|
|
18
|
-
# OR
|
|
19
|
-
npm i @payloadcms/plugin-search
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Basic Usage
|
|
23
|
-
|
|
24
|
-
In the `plugins` array of your [Payload config](https://payloadcms.com/docs/configuration/overview), call the plugin with [options](#options):
|
|
25
|
-
|
|
26
|
-
```js
|
|
27
|
-
import { buildConfig } from "payload/config";
|
|
28
|
-
import search from "@payloadcms/plugin-search";
|
|
29
|
-
|
|
30
|
-
const config = buildConfig({
|
|
31
|
-
collections: [
|
|
32
|
-
{
|
|
33
|
-
slug: "pages",
|
|
34
|
-
fields: [],
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
slug: "posts",
|
|
38
|
-
fields: [],
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
plugins: [
|
|
42
|
-
search({
|
|
43
|
-
collections: ["pages", "posts"],
|
|
44
|
-
defaultPriorities: {
|
|
45
|
-
pages: 10,
|
|
46
|
-
posts: 20,
|
|
47
|
-
},
|
|
48
|
-
}),
|
|
49
|
-
],
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
export default config;
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Options
|
|
56
|
-
|
|
57
|
-
#### `collections`
|
|
58
|
-
|
|
59
|
-
An array of collections slugs to enable sync-to-search. Enabled collections receive a `beforeChange` and `afterDelete` hook that creates, syncs, and deleted the document to its related search document as it changes over time, and also an `afterDelete` hook that deletes.
|
|
60
|
-
|
|
61
|
-
#### `defaultPriorities`
|
|
62
|
-
|
|
63
|
-
The default priorities first set on `create` operations. Send an object of collection slugs, and set them to either a number or a function.
|
|
64
|
-
|
|
65
|
-
```js
|
|
66
|
-
plugins: [
|
|
67
|
-
searchPlugin({
|
|
68
|
-
defaultPriorities: {
|
|
69
|
-
pages: ({ doc }) => (doc.title.startsWith("Hello, world!") ? 1 : 10),
|
|
70
|
-
posts: 20,
|
|
71
|
-
},
|
|
72
|
-
}),
|
|
73
|
-
];
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
#### `searchOverrides`
|
|
77
|
-
|
|
78
|
-
Override anything on the search collection by sending a [Payload Collection Config](https://payloadcms.com/docs/configuration/collections).
|
|
79
|
-
|
|
80
|
-
```js
|
|
81
|
-
plugins: [
|
|
82
|
-
searchPlugin({
|
|
83
|
-
searchOverrides: {
|
|
84
|
-
slug: "search-results",
|
|
85
|
-
},
|
|
86
|
-
}),
|
|
87
|
-
];
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
#### `beforeSync`
|
|
91
|
-
|
|
92
|
-
An [afterChange](<[afterChange](https://payloadcms.com/docs/hooks/globals#afterchange)>) hook that is called before creating or syncing the document to search. This allows you to modify the data in any way before doing so.
|
|
93
|
-
|
|
94
|
-
```js
|
|
95
|
-
plugins: [
|
|
96
|
-
searchPlugin({
|
|
97
|
-
beforeSync: ({ originalDoc, searchDoc }) => ({
|
|
98
|
-
...searchDoc,
|
|
99
|
-
// Modify your docs in any way here, this can be async
|
|
100
|
-
excerpt: originalDoc?.excerpt || "This is a fallback excerpt",
|
|
101
|
-
}),
|
|
102
|
-
}),
|
|
103
|
-
];
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
#### `syncDrafts`
|
|
107
|
-
|
|
108
|
-
If true, will sync draft documents to search. By default, this plugin will only sync published documents. False by default. You must have [Payload Drafts](https://payloadcms.com/docs/versions/drafts) enabled for this to apply.
|
|
109
|
-
|
|
110
|
-
#### `deleteDrafts`
|
|
111
|
-
|
|
112
|
-
If true, will delete documents from search that change to draft status. True by default. You must have [Payload Drafts](https://payloadcms.com/docs/versions/drafts) enabled for this to apply.
|
|
113
|
-
|
|
114
|
-
## TypeScript
|
|
115
|
-
|
|
116
|
-
All types can be directly imported:
|
|
117
|
-
|
|
118
|
-
```js
|
|
119
|
-
import { SearchConfig, BeforeSync } from "@payloadcms/plugin-search/dist/types";
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Screenshots
|
|
5
|
+
- [Source code](https://github.com/payloadcms/payload/tree/main/packages/plugin-search)
|
|
6
|
+
- [Documentation](https://payloadcms.com/docs/plugins/search)
|
|
7
|
+
- [Documentation source](https://github.com/payloadcms/payload/tree/main/docs/plugins/search.mdx)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deleteFromSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAE9D,QAAA,MAAM,gBAAgB,EAAE,yBA2BvB,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -1,78 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
var deleteFromSearch = function (_a) {
|
|
40
|
-
var payload = _a.req.payload, doc = _a.doc;
|
|
1
|
+
const deleteFromSearch = async ({ doc, req: { payload }, req })=>{
|
|
41
2
|
try {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
where: {
|
|
50
|
-
'doc.value': {
|
|
51
|
-
equals: doc.id,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
depth: 0,
|
|
55
|
-
})];
|
|
56
|
-
case 1:
|
|
57
|
-
searchDocQuery = _d.sent();
|
|
58
|
-
if ((_a = searchDocQuery === null || searchDocQuery === void 0 ? void 0 : searchDocQuery.docs) === null || _a === void 0 ? void 0 : _a[0]) {
|
|
59
|
-
payload.delete({
|
|
60
|
-
collection: 'search',
|
|
61
|
-
id: (_c = (_b = searchDocQuery === null || searchDocQuery === void 0 ? void 0 : searchDocQuery.docs) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.id,
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
return [2 /*return*/];
|
|
3
|
+
const searchDocQuery = await payload.find({
|
|
4
|
+
collection: 'search',
|
|
5
|
+
depth: 0,
|
|
6
|
+
req,
|
|
7
|
+
where: {
|
|
8
|
+
'doc.value': {
|
|
9
|
+
equals: doc.id
|
|
65
10
|
}
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
if (searchDocQuery?.docs?.[0]) {
|
|
14
|
+
await payload.delete({
|
|
15
|
+
id: searchDocQuery?.docs?.[0]?.id,
|
|
16
|
+
collection: 'search',
|
|
17
|
+
req
|
|
66
18
|
});
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
catch (err) {
|
|
19
|
+
}
|
|
20
|
+
} catch (err) {
|
|
71
21
|
payload.logger.error({
|
|
72
|
-
err:
|
|
22
|
+
err: `Error deleting search doc: ${err}`
|
|
73
23
|
});
|
|
74
24
|
}
|
|
75
25
|
return doc;
|
|
76
26
|
};
|
|
77
|
-
|
|
27
|
+
export default deleteFromSearch;
|
|
28
|
+
|
|
78
29
|
//# sourceMappingURL=deleteFromSearch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/Search/hooks/deleteFromSearch.ts"],"sourcesContent":["import type { CollectionAfterDeleteHook } from 'payload/types'\n\nconst deleteFromSearch: CollectionAfterDeleteHook = async ({ doc, req: { payload }, req }) => {\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\nexport default deleteFromSearch\n"],"names":["deleteFromSearch","doc","req","payload","searchDocQuery","find","collection","depth","where","equals","id","docs","delete","err","logger","error"],"mappings":"AAEA,MAAMA,mBAA8C,OAAO,EAAEC,GAAG,EAAEC,KAAK,EAAEC,OAAO,EAAE,EAAED,GAAG,EAAE;IACvF,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;AAEA,eAAeD,iBAAgB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncWithSearch.d.ts","sourceRoot":"","sources":["../../../src/Search/hooks/syncWithSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE7E,QAAA,MAAM,cAAc,EAAE,cA8JrB,CAAA;AAED,eAAe,cAAc,CAAA"}
|
|
@@ -1,200 +1,138 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
const syncWithSearch = async (args)=>{
|
|
2
|
+
const { collection, doc, operation, req: { payload }, req, // @ts-expect-error
|
|
3
|
+
searchConfig } = args;
|
|
4
|
+
const { id, _status: status, title } = doc || {};
|
|
5
|
+
const { beforeSync, defaultPriorities, deleteDrafts, syncDrafts } = searchConfig// todo fix SyncWithSearch type, see note in ./types.ts
|
|
6
|
+
;
|
|
7
|
+
let dataToSave = {
|
|
8
|
+
doc: {
|
|
9
|
+
relationTo: collection,
|
|
10
|
+
value: id
|
|
11
|
+
},
|
|
12
|
+
title
|
|
10
13
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
-
switch (op[0]) {
|
|
32
|
-
case 0: case 1: t = op; break;
|
|
33
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
-
default:
|
|
37
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
-
if (t[2]) _.ops.pop();
|
|
42
|
-
_.trys.pop(); continue;
|
|
14
|
+
if (typeof beforeSync === 'function') {
|
|
15
|
+
dataToSave = await beforeSync({
|
|
16
|
+
originalDoc: doc,
|
|
17
|
+
payload,
|
|
18
|
+
req,
|
|
19
|
+
searchDoc: dataToSave
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
let defaultPriority = 0;
|
|
23
|
+
if (defaultPriorities) {
|
|
24
|
+
const { [collection]: priority } = defaultPriorities;
|
|
25
|
+
if (typeof priority === 'function') {
|
|
26
|
+
try {
|
|
27
|
+
defaultPriority = await priority(doc);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
payload.logger.error(err);
|
|
30
|
+
payload.logger.error(`Error gathering default priority for search documents related to ${collection}`);
|
|
43
31
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
32
|
+
} else {
|
|
33
|
+
defaultPriority = priority;
|
|
34
|
+
}
|
|
47
35
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
switch (_e.label) {
|
|
58
|
-
case 0:
|
|
59
|
-
payload = args.req.payload, doc = args.doc, operation = args.operation, collection = args.collection, searchConfig = args.searchConfig;
|
|
60
|
-
_a = doc || {}, title = _a.title, id = _a.id, status = _a._status;
|
|
61
|
-
_b = searchConfig // todo fix SyncWithSearch type, see note in ./types.ts
|
|
62
|
-
, beforeSync = _b.beforeSync, syncDrafts = _b.syncDrafts, deleteDrafts = _b.deleteDrafts, defaultPriorities = _b.defaultPriorities;
|
|
63
|
-
dataToSave = {
|
|
64
|
-
title: title,
|
|
65
|
-
doc: {
|
|
66
|
-
relationTo: collection,
|
|
67
|
-
value: id,
|
|
36
|
+
const doSync = syncDrafts || !syncDrafts && status !== 'draft';
|
|
37
|
+
try {
|
|
38
|
+
if (operation === 'create') {
|
|
39
|
+
if (doSync) {
|
|
40
|
+
await payload.create({
|
|
41
|
+
collection: 'search',
|
|
42
|
+
data: {
|
|
43
|
+
...dataToSave,
|
|
44
|
+
priority: defaultPriority
|
|
68
45
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
_e.label = 3;
|
|
85
|
-
case 3:
|
|
86
|
-
_e.trys.push([3, 5, , 6]);
|
|
87
|
-
return [4 /*yield*/, priority(doc)];
|
|
88
|
-
case 4:
|
|
89
|
-
defaultPriority = _e.sent();
|
|
90
|
-
return [3 /*break*/, 6];
|
|
91
|
-
case 5:
|
|
92
|
-
err_1 = _e.sent();
|
|
93
|
-
payload.logger.error(err_1);
|
|
94
|
-
payload.logger.error("Error gathering default priority for search documents related to ".concat(collection));
|
|
95
|
-
return [3 /*break*/, 6];
|
|
96
|
-
case 6: return [3 /*break*/, 8];
|
|
97
|
-
case 7:
|
|
98
|
-
defaultPriority = priority;
|
|
99
|
-
_e.label = 8;
|
|
100
|
-
case 8:
|
|
101
|
-
doSync = syncDrafts || (!syncDrafts && status !== 'draft');
|
|
102
|
-
_e.label = 9;
|
|
103
|
-
case 9:
|
|
104
|
-
_e.trys.push([9, 14, , 15]);
|
|
105
|
-
if (operation === 'create') {
|
|
106
|
-
if (doSync) {
|
|
107
|
-
payload.create({
|
|
108
|
-
collection: 'search',
|
|
109
|
-
data: __assign(__assign({}, dataToSave), { priority: defaultPriority }),
|
|
110
|
-
});
|
|
46
|
+
req
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (operation === 'update') {
|
|
51
|
+
try {
|
|
52
|
+
// find the correct doc to sync with
|
|
53
|
+
const searchDocQuery = await payload.find({
|
|
54
|
+
collection: 'search',
|
|
55
|
+
depth: 0,
|
|
56
|
+
req,
|
|
57
|
+
where: {
|
|
58
|
+
'doc.value': {
|
|
59
|
+
equals: id
|
|
60
|
+
}
|
|
111
61
|
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
case 10:
|
|
116
|
-
_e.trys.push([10, 12, , 13]);
|
|
117
|
-
return [4 /*yield*/, payload.find({
|
|
118
|
-
collection: 'search',
|
|
119
|
-
where: {
|
|
120
|
-
'doc.value': {
|
|
121
|
-
equals: id,
|
|
122
|
-
},
|
|
123
|
-
},
|
|
124
|
-
depth: 0,
|
|
125
|
-
})];
|
|
126
|
-
case 11:
|
|
127
|
-
searchDocQuery = _e.sent();
|
|
128
|
-
docs = (searchDocQuery === null || searchDocQuery === void 0 ? void 0 : searchDocQuery.docs) || [];
|
|
129
|
-
foundDoc = docs[0], duplicativeDocs = docs.slice(1);
|
|
62
|
+
});
|
|
63
|
+
const docs = searchDocQuery?.docs || [];
|
|
64
|
+
const [foundDoc, ...duplicativeDocs] = docs;
|
|
130
65
|
// delete all duplicative search docs (docs that reference the same page)
|
|
131
66
|
// to ensure the same, out-of-date result does not appear twice (where only syncing the first found doc)
|
|
132
67
|
if (duplicativeDocs.length > 0) {
|
|
133
68
|
try {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
69
|
+
const duplicativeDocIDs = duplicativeDocs.map(({ id })=>id);
|
|
70
|
+
await payload.delete({
|
|
71
|
+
collection: 'search',
|
|
72
|
+
req,
|
|
73
|
+
where: {
|
|
74
|
+
id: {
|
|
75
|
+
in: duplicativeDocIDs
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
} catch (err) {
|
|
80
|
+
payload.logger.error(`Error deleting duplicative search documents.`);
|
|
144
81
|
}
|
|
145
82
|
}
|
|
146
83
|
if (foundDoc) {
|
|
147
|
-
searchDocID = foundDoc
|
|
84
|
+
const { id: searchDocID } = foundDoc;
|
|
148
85
|
if (doSync) {
|
|
149
86
|
// update the doc normally
|
|
150
87
|
try {
|
|
151
|
-
payload.update({
|
|
152
|
-
collection: 'search',
|
|
88
|
+
await payload.update({
|
|
153
89
|
id: searchDocID,
|
|
154
|
-
|
|
90
|
+
collection: 'search',
|
|
91
|
+
data: {
|
|
92
|
+
...dataToSave,
|
|
93
|
+
priority: foundDoc.priority || defaultPriority
|
|
94
|
+
},
|
|
95
|
+
req
|
|
155
96
|
});
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
payload.logger.error("Error updating search document.");
|
|
97
|
+
} catch (err) {
|
|
98
|
+
payload.logger.error(`Error updating search document.`);
|
|
159
99
|
}
|
|
160
100
|
}
|
|
161
101
|
if (deleteDrafts && status === 'draft') {
|
|
162
102
|
// do not include draft docs in search results, so delete the record
|
|
163
103
|
try {
|
|
164
|
-
payload.delete({
|
|
165
|
-
collection: 'search',
|
|
104
|
+
await payload.delete({
|
|
166
105
|
id: searchDocID,
|
|
106
|
+
collection: 'search',
|
|
107
|
+
req
|
|
167
108
|
});
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
payload.logger.error("Error deleting search document: ".concat(err));
|
|
109
|
+
} catch (err) {
|
|
110
|
+
payload.logger.error(`Error deleting search document: ${err}`);
|
|
171
111
|
}
|
|
172
112
|
}
|
|
173
|
-
}
|
|
174
|
-
else if (doSync) {
|
|
113
|
+
} else if (doSync) {
|
|
175
114
|
try {
|
|
176
|
-
payload.create({
|
|
115
|
+
await payload.create({
|
|
177
116
|
collection: 'search',
|
|
178
|
-
data:
|
|
117
|
+
data: {
|
|
118
|
+
...dataToSave,
|
|
119
|
+
priority: defaultPriority
|
|
120
|
+
},
|
|
121
|
+
req
|
|
179
122
|
});
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
payload.logger.error("Error creating search document: ".concat(err));
|
|
123
|
+
} catch (err) {
|
|
124
|
+
payload.logger.error(`Error creating search document: ${err}`);
|
|
183
125
|
}
|
|
184
126
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
payload.logger.error("Error finding search document: ".concat(err_2));
|
|
189
|
-
return [3 /*break*/, 13];
|
|
190
|
-
case 13: return [3 /*break*/, 15];
|
|
191
|
-
case 14:
|
|
192
|
-
err_3 = _e.sent();
|
|
193
|
-
payload.logger.error("Error syncing search document related to ".concat(collection, " with id: '").concat(id, "': ").concat(err_3));
|
|
194
|
-
return [3 /*break*/, 15];
|
|
195
|
-
case 15: return [2 /*return*/, doc];
|
|
127
|
+
} catch (err) {
|
|
128
|
+
payload.logger.error(`Error finding search document: ${err}`);
|
|
129
|
+
}
|
|
196
130
|
}
|
|
197
|
-
})
|
|
198
|
-
}
|
|
199
|
-
|
|
131
|
+
} catch (err) {
|
|
132
|
+
payload.logger.error(`Error syncing search document related to ${collection} with id: '${id}': ${err}`);
|
|
133
|
+
}
|
|
134
|
+
return doc;
|
|
135
|
+
};
|
|
136
|
+
export default syncWithSearch;
|
|
137
|
+
|
|
200
138
|
//# sourceMappingURL=syncWithSearch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/Search/hooks/syncWithSearch.ts"],"sourcesContent":["import type { DocToSync, SearchConfig, SyncWithSearch } from '../../types.js'\n\nconst syncWithSearch: SyncWithSearch = async (args) => {\n const {\n collection,\n doc,\n operation,\n req: { payload },\n req,\n // @ts-expect-error\n searchConfig,\n } = args\n\n const { id, _status: status, title } = doc || {}\n\n const { beforeSync, defaultPriorities, deleteDrafts, syncDrafts } = searchConfig as SearchConfig // todo fix SyncWithSearch type, see note in ./types.ts\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\nexport default syncWithSearch\n"],"names":["syncWithSearch","args","collection","doc","operation","req","payload","searchConfig","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":"AAEA,MAAMA,iBAAiC,OAAOC;IAC5C,MAAM,EACJC,UAAU,EACVC,GAAG,EACHC,SAAS,EACTC,KAAK,EAAEC,OAAO,EAAE,EAChBD,GAAG,EACH,mBAAmB;IACnBE,YAAY,EACb,GAAGN;IAEJ,MAAM,EAAEO,EAAE,EAAEC,SAASC,MAAM,EAAEC,KAAK,EAAE,GAAGR,OAAO,CAAC;IAE/C,MAAM,EAAES,UAAU,EAAEC,iBAAiB,EAAEC,YAAY,EAAEC,UAAU,EAAE,GAAGR,YAA6B,uDAAuD;;IAExJ,IAAIS,aAAwB;QAC1Bb,KAAK;YACHc,YAAYf;YACZgB,OAAOV;QACT;QACAG;IACF;IAEA,IAAI,OAAOC,eAAe,YAAY;QACpCI,aAAa,MAAMJ,WAAW;YAC5BO,aAAahB;YACbG;YACAD;YACAe,WAAWJ;QACb;IACF;IAEA,IAAIK,kBAAkB;IACtB,IAAIR,mBAAmB;QACrB,MAAM,EAAE,CAACX,WAAW,EAAEoB,QAAQ,EAAE,GAAGT;QAEnC,IAAI,OAAOS,aAAa,YAAY;YAClC,IAAI;gBACFD,kBAAkB,MAAMC,SAASnB;YACnC,EAAE,OAAOoB,KAAc;gBACrBjB,QAAQkB,MAAM,CAACC,KAAK,CAACF;gBACrBjB,QAAQkB,MAAM,CAACC,KAAK,CAClB,CAAC,iEAAiE,EAAEvB,WAAW,CAAC;YAEpF;QACF,OAAO;YACLmB,kBAAkBC;QACpB;IACF;IAEA,MAAMI,SAASX,cAAe,CAACA,cAAcL,WAAW;IAExD,IAAI;QACF,IAAIN,cAAc,UAAU;YAC1B,IAAIsB,QAAQ;gBACV,MAAMpB,QAAQqB,MAAM,CAAC;oBACnBzB,YAAY;oBACZ0B,MAAM;wBACJ,GAAGZ,UAAU;wBACbM,UAAUD;oBACZ;oBACAhB;gBACF;YACF;QACF;QAEA,IAAID,cAAc,UAAU;YAC1B,IAAI;gBACF,oCAAoC;gBACpC,MAAMyB,iBAAiB,MAAMvB,QAAQwB,IAAI,CAAC;oBACxC5B,YAAY;oBACZ6B,OAAO;oBACP1B;oBACA2B,OAAO;wBACL,aAAa;4BACXC,QAAQzB;wBACV;oBACF;gBACF;gBAEA,MAAM0B,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,EAAE/B,EAAE,EAAE,GAAKA;wBAC1D,MAAMF,QAAQkC,MAAM,CAAC;4BACnBtC,YAAY;4BACZG;4BACA2B,OAAO;gCAAExB,IAAI;oCAAEiC,IAAIH;gCAAkB;4BAAE;wBACzC;oBACF,EAAE,OAAOf,KAAc;wBACrBjB,QAAQkB,MAAM,CAACC,KAAK,CAAC,CAAC,4CAA4C,CAAC;oBACrE;gBACF;gBAEA,IAAIU,UAAU;oBACZ,MAAM,EAAE3B,IAAIkC,WAAW,EAAE,GAAGP;oBAE5B,IAAIT,QAAQ;wBACV,0BAA0B;wBAC1B,IAAI;4BACF,MAAMpB,QAAQqC,MAAM,CAAC;gCACnBnC,IAAIkC;gCACJxC,YAAY;gCACZ0B,MAAM;oCACJ,GAAGZ,UAAU;oCACbM,UAAUa,SAASb,QAAQ,IAAID;gCACjC;gCACAhB;4BACF;wBACF,EAAE,OAAOkB,KAAc;4BACrBjB,QAAQkB,MAAM,CAACC,KAAK,CAAC,CAAC,+BAA+B,CAAC;wBACxD;oBACF;oBACA,IAAIX,gBAAgBJ,WAAW,SAAS;wBACtC,oEAAoE;wBACpE,IAAI;4BACF,MAAMJ,QAAQkC,MAAM,CAAC;gCACnBhC,IAAIkC;gCACJxC,YAAY;gCACZG;4BACF;wBACF,EAAE,OAAOkB,KAAc;4BACrBjB,QAAQkB,MAAM,CAACC,KAAK,CAAC,CAAC,gCAAgC,EAAEF,IAAI,CAAC;wBAC/D;oBACF;gBACF,OAAO,IAAIG,QAAQ;oBACjB,IAAI;wBACF,MAAMpB,QAAQqB,MAAM,CAAC;4BACnBzB,YAAY;4BACZ0B,MAAM;gCACJ,GAAGZ,UAAU;gCACbM,UAAUD;4BACZ;4BACAhB;wBACF;oBACF,EAAE,OAAOkB,KAAc;wBACrBjB,QAAQkB,MAAM,CAACC,KAAK,CAAC,CAAC,gCAAgC,EAAEF,IAAI,CAAC;oBAC/D;gBACF;YACF,EAAE,OAAOA,KAAc;gBACrBjB,QAAQkB,MAAM,CAACC,KAAK,CAAC,CAAC,+BAA+B,EAAEF,IAAI,CAAC;YAC9D;QACF;IACF,EAAE,OAAOA,KAAc;QACrBjB,QAAQkB,MAAM,CAACC,KAAK,CAClB,CAAC,yCAAyC,EAAEvB,WAAW,WAAW,EAAEM,GAAG,GAAG,EAAEe,IAAI,CAAC;IAErF;IAEA,OAAOpB;AACT;AAEA,eAAeH,eAAc"}
|
package/dist/Search/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { CollectionConfig } from 'payload/types';
|
|
2
|
-
import type { SearchConfig } from '../types';
|
|
2
|
+
import type { SearchConfig } from '../types.js';
|
|
3
3
|
export declare const generateSearchCollection: (searchConfig: SearchConfig) => CollectionConfig;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Search/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAIrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK/C,eAAO,MAAM,wBAAwB,iBAAkB,YAAY,KAAG,gBA2DnE,CAAA"}
|