@frogbotai/db-mongodb 0.29.0 → 0.31.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.
Files changed (69) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +13 -5
  4. package/dist/index.js.map +1 -1
  5. package/dist/jobIndexes.js +20 -12
  6. package/dist/jobIndexes.js.map +1 -1
  7. package/dist/jobLogs.js +35 -4
  8. package/dist/jobLogs.js.map +1 -1
  9. package/dist/jobModel.d.ts +3 -2
  10. package/dist/jobModel.d.ts.map +1 -1
  11. package/dist/jobModel.js +29 -12
  12. package/dist/jobModel.js.map +1 -1
  13. package/dist/search/buildSchema.js +15 -9
  14. package/dist/search/buildSchema.js.map +1 -1
  15. package/dist/search/buildSearchIndexes.js +135 -55
  16. package/dist/search/buildSearchIndexes.js.map +1 -1
  17. package/dist/search/capabilities.js +12 -15
  18. package/dist/search/capabilities.js.map +1 -1
  19. package/dist/search/createSearchSetupError.js +12 -5
  20. package/dist/search/createSearchSetupError.js.map +1 -1
  21. package/dist/search/ensureSearchIndexes.js +35 -20
  22. package/dist/search/ensureSearchIndexes.js.map +1 -1
  23. package/dist/search/findSearchIndex.js +3 -2
  24. package/dist/search/findSearchIndex.js.map +1 -1
  25. package/dist/search/getSearchIndexes.js +2 -1
  26. package/dist/search/getSearchIndexes.js.map +1 -1
  27. package/dist/search/getSearchModel.d.ts +0 -1
  28. package/dist/search/getSearchModel.d.ts.map +1 -1
  29. package/dist/search/getSearchModel.js +2 -1
  30. package/dist/search/getSearchModel.js.map +1 -1
  31. package/dist/search/getSearchPath.js +17 -13
  32. package/dist/search/getSearchPath.js.map +1 -1
  33. package/dist/search/index.js +2 -1
  34. package/dist/search/index.js.map +1 -1
  35. package/dist/search/isDraftSearch.js +2 -1
  36. package/dist/search/isDraftSearch.js.map +1 -1
  37. package/dist/search/isSearchIndexDefinitionEqual.js +26 -19
  38. package/dist/search/isSearchIndexDefinitionEqual.js.map +1 -1
  39. package/dist/search/pipelines/buildHybridPipeline.js +147 -40
  40. package/dist/search/pipelines/buildHybridPipeline.js.map +1 -1
  41. package/dist/search/pipelines/buildSearchStage.js +17 -5
  42. package/dist/search/pipelines/buildSearchStage.js.map +1 -1
  43. package/dist/search/pipelines/buildVectorScore.js +24 -4
  44. package/dist/search/pipelines/buildVectorScore.js.map +1 -1
  45. package/dist/search/pipelines/buildVectorSearchStage.js +15 -7
  46. package/dist/search/pipelines/buildVectorSearchStage.js.map +1 -1
  47. package/dist/search/queries/buildSearchFilter.js +13 -6
  48. package/dist/search/queries/buildSearchFilter.js.map +1 -1
  49. package/dist/search/queries/buildSearchOperator.js +41 -8
  50. package/dist/search/queries/buildSearchOperator.js.map +1 -1
  51. package/dist/search/queries/buildVectorSearchFilter.js +32 -8
  52. package/dist/search/queries/buildVectorSearchFilter.js.map +1 -1
  53. package/dist/search/queries/parseSearchFilter.js +125 -56
  54. package/dist/search/queries/parseSearchFilter.js.map +1 -1
  55. package/dist/search/readiness.js +23 -12
  56. package/dist/search/readiness.js.map +1 -1
  57. package/dist/search/search.d.ts.map +1 -1
  58. package/dist/search/search.js +181 -77
  59. package/dist/search/search.js.map +1 -1
  60. package/dist/search/supportsRankFusion.d.ts.map +1 -1
  61. package/dist/search/supportsRankFusion.js +29 -10
  62. package/dist/search/supportsRankFusion.js.map +1 -1
  63. package/dist/search/types.js +2 -1
  64. package/dist/search/types.js.map +1 -1
  65. package/dist/updateJobLeases.js +20 -5
  66. package/dist/updateJobLeases.js.map +1 -1
  67. package/dist/updateJobs.js +79 -30
  68. package/dist/updateJobs.js.map +1 -1
  69. package/package.json +4 -4
@@ -6,40 +6,75 @@ import { isDraftSearch } from './isDraftSearch.js';
6
6
  import { buildHybridPipeline } from './pipelines/buildHybridPipeline.js';
7
7
  import { buildSearchStage } from './pipelines/buildSearchStage.js';
8
8
  import { buildVectorScore } from './pipelines/buildVectorScore.js';
9
- import { buildVectorSearchStage, isApproximateVectorSearch, } from './pipelines/buildVectorSearchStage.js';
9
+ import { buildVectorSearchStage, isApproximateVectorSearch } from './pipelines/buildVectorSearchStage.js';
10
10
  import { buildSearchFilter } from './queries/buildSearchFilter.js';
11
11
  import { buildSearchOperator } from './queries/buildSearchOperator.js';
12
12
  import { buildVectorSearchFilter } from './queries/buildVectorSearchFilter.js';
13
13
  import { supportsRankFusion } from './supportsRankFusion.js';
14
14
  const distinctParentStages = [
15
- { $sort: { score: -1, id: 1 } },
16
- { $group: { _id: '$id', row: { $first: '$$ROOT' } } },
17
- { $replaceRoot: { newRoot: '$row' } },
18
- { $sort: { score: -1, id: 1 } },
15
+ {
16
+ $sort: {
17
+ score: -1,
18
+ id: 1
19
+ }
20
+ },
21
+ {
22
+ $group: {
23
+ _id: '$id',
24
+ row: {
25
+ $first: '$$ROOT'
26
+ }
27
+ }
28
+ },
29
+ {
30
+ $replaceRoot: {
31
+ newRoot: '$row'
32
+ }
33
+ },
34
+ {
35
+ $sort: {
36
+ score: -1,
37
+ id: 1
38
+ }
39
+ }
19
40
  ];
20
- function getRanking({ approximate, index, mode, }) {
41
+ function getRanking({ approximate, index, mode }) {
21
42
  const lexical = {
22
43
  method: 'mongodb-search',
23
44
  higherIsBetter: true,
24
- approximate: false,
45
+ approximate: false
25
46
  };
26
47
  const vector = {
27
48
  method: approximate ? 'mongodb-hnsw' : 'mongodb-exact',
28
49
  higherIsBetter: index.vector?.metric !== 'euclidean',
50
+ approximate
51
+ };
52
+ if (mode === 'lexical') return lexical;
53
+ if (mode === 'vector') return vector;
54
+ return {
55
+ method: 'rrf',
56
+ higherIsBetter: true,
29
57
  approximate,
58
+ components: {
59
+ lexical,
60
+ vector
61
+ }
30
62
  };
31
- if (mode === 'lexical')
32
- return lexical;
33
- if (mode === 'vector')
34
- return vector;
35
- return { method: 'rrf', higherIsBetter: true, approximate, components: { lexical, vector } };
36
63
  }
37
- function buildScoreStage({ index, mode, }) {
38
- if (mode === 'lexical')
39
- return undefined;
64
+ function buildScoreStage({ index, mode }) {
65
+ if (mode === 'lexical') return undefined;
40
66
  const { metric } = index.vector;
41
67
  if (mode === 'vector') {
42
- return { $project: { _id: 0, id: 1, score: buildVectorScore({ metric, score: '$score' }) } };
68
+ return {
69
+ $project: {
70
+ _id: 0,
71
+ id: 1,
72
+ score: buildVectorScore({
73
+ metric,
74
+ score: '$score'
75
+ })
76
+ }
77
+ };
43
78
  }
44
79
  return {
45
80
  $project: {
@@ -49,77 +84,141 @@ function buildScoreStage({ index, mode, }) {
49
84
  lexical: 1,
50
85
  vector: {
51
86
  $cond: [
52
- { $eq: [{ $ifNull: ['$vector', null] }, null] },
87
+ {
88
+ $eq: [
89
+ {
90
+ $ifNull: [
91
+ '$vector',
92
+ null
93
+ ]
94
+ },
95
+ null
96
+ ]
97
+ },
53
98
  null,
54
- { rank: '$vector.rank', score: buildVectorScore({ metric, score: '$vector.score' }) },
55
- ],
56
- },
57
- },
99
+ {
100
+ rank: '$vector.rank',
101
+ score: buildVectorScore({
102
+ metric,
103
+ score: '$vector.score'
104
+ })
105
+ }
106
+ ]
107
+ }
108
+ }
58
109
  };
59
110
  }
60
111
  function getComponent(component) {
61
- if (!component || typeof component !== 'object')
62
- return null;
112
+ if (!component || typeof component !== 'object') return null;
63
113
  const { rank, score } = component;
64
- return { rank: Number(rank), score: Number(score) };
114
+ return {
115
+ rank: Number(rank),
116
+ score: Number(score)
117
+ };
65
118
  }
66
- export const search = async ({ candidates, collection, db, draft, index, limit, locale: requestedLocale, mode, query, where, }) => {
119
+ export const search = async ({ candidates, collection, db, draft, index, limit, locale: requestedLocale, mode, query, where })=>{
67
120
  const adapter = db;
68
121
  const { localization } = adapter.payload.config;
69
122
  const locale = requestedLocale ?? (localization ? localization.defaultLocale : undefined);
70
- const versions = isDraftSearch({ adapter, collection, draft });
71
- const searchIndexes = getSearchIndexes(adapter).filter((searchIndex) => searchIndex.collection === collection &&
72
- searchIndex.index === index.name &&
73
- searchIndex.versions === versions);
123
+ const versions = isDraftSearch({
124
+ adapter,
125
+ collection,
126
+ draft
127
+ });
128
+ const searchIndexes = getSearchIndexes(adapter).filter((searchIndex)=>searchIndex.collection === collection && searchIndex.index === index.name && searchIndex.versions === versions);
74
129
  if (!searchIndexes.length) {
75
130
  throw new SearchReadinessError(`Search index '${index.name}' is not set up for collection '${collection}'. Restart to apply search configuration changes.`);
76
131
  }
77
- const lexicalIndex = searchIndexes.find((searchIndex) => searchIndex.mode === 'lexical');
78
- const vectorIndex = searchIndexes.find((searchIndex) => searchIndex.mode === 'vector');
132
+ const lexicalIndex = searchIndexes.find((searchIndex)=>searchIndex.mode === 'lexical');
133
+ const vectorIndex = searchIndexes.find((searchIndex)=>searchIndex.mode === 'vector');
79
134
  const depth = Math.max(limit, candidates ?? limit);
80
135
  const vectorLimit = mode === 'hybrid' ? depth : limit;
81
- const approximate = mode !== 'lexical' &&
82
- isApproximateVectorSearch({ approximate: index.vector.approximate, limit: vectorLimit });
83
- const ranking = getRanking({ approximate, index, mode });
84
- const filter = await buildSearchFilter({ adapter, locale, searchIndex: searchIndexes[0], where });
85
- if (filter === false)
86
- return { ranking, rows: [] };
87
- const Model = getSearchModel({ adapter, collection, versions });
88
- const fields = getSearchFields({ adapter, collection, versions });
89
- const idPath = versions ? 'parent' : '_id';
90
- const getPath = (path) => getSearchPath({ adapter, collection, fields, locale, path, versions }).path;
91
- const getSearchPipeline = (searchLimit) => [
92
- buildSearchStage({
93
- filter: filter === true ? undefined : buildSearchOperator(filter),
94
- name: lexicalIndex.name,
95
- paths: index.lexical.fields.map(({ path }) => getPath(path)),
96
- text: query.text,
97
- }),
98
- { $limit: searchLimit },
99
- ];
100
- const getVectorSearchStage = () => buildVectorSearchStage({
136
+ const approximate = mode !== 'lexical' && isApproximateVectorSearch({
137
+ approximate: index.vector.approximate,
138
+ limit: vectorLimit
139
+ });
140
+ const ranking = getRanking({
101
141
  approximate,
102
- candidates: depth,
103
- filter: filter === true ? undefined : buildVectorSearchFilter(filter),
104
- limit: vectorLimit,
105
- name: vectorIndex.name,
106
- path: getPath(index.vector.path),
107
- vector: query.vector,
142
+ index,
143
+ mode
144
+ });
145
+ const filter = await buildSearchFilter({
146
+ adapter,
147
+ locale,
148
+ searchIndex: searchIndexes[0],
149
+ where
108
150
  });
151
+ if (filter === false) return {
152
+ ranking,
153
+ rows: []
154
+ };
155
+ const Model = getSearchModel({
156
+ adapter,
157
+ collection,
158
+ versions
159
+ });
160
+ const fields = getSearchFields({
161
+ adapter,
162
+ collection,
163
+ versions
164
+ });
165
+ const idPath = versions ? 'parent' : '_id';
166
+ const getPath = (path)=>getSearchPath({
167
+ adapter,
168
+ collection,
169
+ fields,
170
+ locale,
171
+ path,
172
+ versions
173
+ }).path;
174
+ const getSearchPipeline = (searchLimit)=>[
175
+ buildSearchStage({
176
+ filter: filter === true ? undefined : buildSearchOperator(filter),
177
+ name: lexicalIndex.name,
178
+ paths: index.lexical.fields.map(({ path })=>getPath(path)),
179
+ text: query.text
180
+ }),
181
+ {
182
+ $limit: searchLimit
183
+ }
184
+ ];
185
+ const getVectorSearchStage = ()=>buildVectorSearchStage({
186
+ approximate,
187
+ candidates: depth,
188
+ filter: filter === true ? undefined : buildVectorSearchFilter(filter),
189
+ limit: vectorLimit,
190
+ name: vectorIndex.name,
191
+ path: getPath(index.vector.path),
192
+ vector: query.vector
193
+ });
109
194
  let pipeline;
110
195
  if (mode === 'lexical') {
111
196
  pipeline = [
112
197
  ...getSearchPipeline(limit),
113
- { $project: { _id: 0, id: `$${idPath}`, score: { $meta: 'searchScore' } } },
198
+ {
199
+ $project: {
200
+ _id: 0,
201
+ id: `$${idPath}`,
202
+ score: {
203
+ $meta: 'searchScore'
204
+ }
205
+ }
206
+ }
114
207
  ];
115
- }
116
- else if (mode === 'vector') {
208
+ } else if (mode === 'vector') {
117
209
  pipeline = [
118
210
  getVectorSearchStage(),
119
- { $project: { _id: 0, id: `$${idPath}`, score: { $meta: 'vectorSearchScore' } } },
211
+ {
212
+ $project: {
213
+ _id: 0,
214
+ id: `$${idPath}`,
215
+ score: {
216
+ $meta: 'vectorSearchScore'
217
+ }
218
+ }
219
+ }
120
220
  ];
121
- }
122
- else {
221
+ } else {
123
222
  pipeline = buildHybridPipeline({
124
223
  collection: Model.collection.name,
125
224
  idPath,
@@ -127,24 +226,29 @@ export const search = async ({ candidates, collection, db, draft, index, limit,
127
226
  rankFusion: await supportsRankFusion(Model),
128
227
  searchPipeline: getSearchPipeline(depth),
129
228
  vectorSearchStage: getVectorSearchStage(),
130
- weights: index.hybrid.weights,
229
+ weights: index.hybrid.weights
131
230
  });
132
231
  }
133
- if (versions)
134
- pipeline.push(...distinctParentStages);
135
- const scoreStage = buildScoreStage({ index, mode });
136
- if (scoreStage)
137
- pipeline.push(scoreStage);
138
- const rows = await Model.aggregate(pipeline).exec();
232
+ if (versions) pipeline.push(...distinctParentStages);
233
+ const scoreStage = buildScoreStage({
234
+ index,
235
+ mode
236
+ });
237
+ if (scoreStage) pipeline.push(scoreStage);
238
+ const rows = await Model.collection.aggregate(pipeline).toArray();
139
239
  return {
140
240
  ranking,
141
- rows: rows.map(({ id, lexical, score, vector }) => ({
142
- id: typeof id === 'number' ? id : String(id),
143
- score,
144
- ...(mode === 'hybrid'
145
- ? { components: { lexical: getComponent(lexical), vector: getComponent(vector) } }
146
- : {}),
147
- })),
241
+ rows: rows.map(({ id, lexical, score, vector })=>({
242
+ id: typeof id === 'number' ? id : String(id),
243
+ score,
244
+ ...mode === 'hybrid' ? {
245
+ components: {
246
+ lexical: getComponent(lexical),
247
+ vector: getComponent(vector)
248
+ }
249
+ } : {}
250
+ }))
148
251
  };
149
252
  };
253
+
150
254
  //# sourceMappingURL=search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/search/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/search/search.ts"],"names":["SearchReadinessError","getSearchIndexes","getSearchModel","getSearchFields","getSearchPath","isDraftSearch","buildHybridPipeline","buildSearchStage","buildVectorScore","buildVectorSearchStage","isApproximateVectorSearch","buildSearchFilter","buildSearchOperator","buildVectorSearchFilter","supportsRankFusion","distinctParentStages","$sort","score","id","$group","_id","row","$first","$replaceRoot","newRoot","getRanking","approximate","index","mode","lexical","method","higherIsBetter","vector","metric","components","buildScoreStage","undefined","$project","$cond","$eq","$ifNull","rank","getComponent","component","Number","search","candidates","collection","db","draft","limit","locale","requestedLocale","query","where","adapter","localization","payload","config","defaultLocale","versions","searchIndexes","filter","searchIndex","name","length","lexicalIndex","find","vectorIndex","depth","Math","max","vectorLimit","ranking","rows","Model","fields","idPath","getPath","path","getSearchPipeline","searchLimit","paths","map","text","$limit","getVectorSearchStage","pipeline","$meta","rankFusion","searchPipeline","vectorSearchStage","weights","hybrid","push","scoreStage","aggregate","toArray","String"],"mappings":"AASA,SAASA,oBAAoB,QAAQ,iBAAiB;AAEtD,SAASC,gBAAgB,QAAQ,wBAAwB;AACzD,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,eAAe,EAAEC,aAAa,QAAQ,qBAAqB;AACpE,SAASC,aAAa,QAAQ,qBAAqB;AACnD,SAASC,mBAAmB,QAAQ,qCAAqC;AACzE,SAASC,gBAAgB,QAAQ,kCAAkC;AACnE,SAASC,gBAAgB,QAAQ,kCAAkC;AACnE,SACEC,sBAAsB,EACtBC,yBAAyB,QACpB,wCAAwC;AAC/C,SAASC,iBAAiB,QAAQ,iCAAiC;AACnE,SAASC,mBAAmB,QAAQ,mCAAmC;AACvE,SAASC,uBAAuB,QAAQ,uCAAuC;AAC/E,SAASC,kBAAkB,QAAQ,0BAA0B;AAS7D,MAAMC,uBAAuB;IAC3B;QAAEC,OAAO;YAAEC,OAAO,CAAC;YAAGC,IAAI;QAAE;IAAE;IAC9B;QAAEC,QAAQ;YAAEC,KAAK;YAAOC,KAAK;gBAAEC,QAAQ;YAAS;QAAE;IAAE;IACpD;QAAEC,cAAc;YAAEC,SAAS;QAAO;IAAE;IACpC;QAAER,OAAO;YAAEC,OAAO,CAAC;YAAGC,IAAI;QAAE;IAAE;CAC/B;AAED,SAASO,WAAW,EAClBC,WAAW,EACXC,KAAK,EACLC,IAAI,EAKL;IACC,MAAMC,UAAkC;QACtCC,QAAQ;QACRC,gBAAgB;QAChBL,aAAa;IACf;IAEA,MAAMM,SAAiC;QACrCF,QAAQJ,cAAc,iBAAiB;QACvCK,gBAAgBJ,MAAMK,MAAM,EAAEC,WAAW;QACzCP;IACF;IAEA,IAAIE,SAAS,WAAW,OAAOC;IAE/B,IAAID,SAAS,UAAU,OAAOI;IAE9B,OAAO;QAAEF,QAAQ;QAAOC,gBAAgB;QAAML;QAAaQ,YAAY;YAAEL;YAASG;QAAO;IAAE;AAC7F;AAEA,SAASG,gBAAgB,EACvBR,KAAK,EACLC,IAAI,EAIL;IACC,IAAIA,SAAS,WAAW,OAAOQ;IAE/B,MAAM,EAAEH,MAAM,EAAE,GAAGN,MAAMK,MAAM;IAE/B,IAAIJ,SAAS,UAAU;QACrB,OAAO;YAAES,UAAU;gBAAEjB,KAAK;gBAAGF,IAAI;gBAAGD,OAAOT,iBAAiB;oBAAEyB;oBAAQhB,OAAO;gBAAS;YAAG;QAAE;IAC7F;IAEA,OAAO;QACLoB,UAAU;YACRjB,KAAK;YACLF,IAAI;YACJD,OAAO;YACPY,SAAS;YACTG,QAAQ;gBACNM,OAAO;oBACL;wBAAEC,KAAK;4BAAC;gCAAEC,SAAS;oCAAC;oCAAW;iCAAK;4BAAC;4BAAG;yBAAK;oBAAC;oBAC9C;oBACA;wBAAEC,MAAM;wBAAgBxB,OAAOT,iBAAiB;4BAAEyB;4BAAQhB,OAAO;wBAAgB;oBAAG;iBACrF;YACH;QACF;IACF;AACF;AAEA,SAASyB,aAAaC,SAAkB;IACtC,IAAI,CAACA,aAAa,OAAOA,cAAc,UAAU,OAAO;IAExD,MAAM,EAAEF,IAAI,EAAExB,KAAK,EAAE,GAAG0B;IAExB,OAAO;QAAEF,MAAMG,OAAOH;QAAOxB,OAAO2B,OAAO3B;IAAO;AACpD;AAEA,OAAO,MAAM4B,SAAwB,OAAO,EAC1CC,UAAU,EACVC,UAAU,EACVC,EAAE,EACFC,KAAK,EACLtB,KAAK,EACLuB,KAAK,EACLC,QAAQC,eAAe,EACvBxB,IAAI,EACJyB,KAAK,EACLC,KAAK,EACN;IACC,MAAMC,UAAUP;IAChB,MAAM,EAAEQ,YAAY,EAAE,GAAGD,QAAQE,OAAO,CAACC,MAAM;IAC/C,MAAMP,SAASC,mBAAoBI,CAAAA,eAAeA,aAAaG,aAAa,GAAGvB,SAAQ;IACvF,MAAMwB,WAAWvD,cAAc;QAAEkD;QAASR;QAAYE;IAAM;IAE5D,MAAMY,gBAAgB5D,iBAAiBsD,SAASO,MAAM,CACpD,CAACC,cACCA,YAAYhB,UAAU,KAAKA,cAC3BgB,YAAYpC,KAAK,KAAKA,MAAMqC,IAAI,IAChCD,YAAYH,QAAQ,KAAKA;IAG7B,IAAI,CAACC,cAAcI,MAAM,EAAE;QACzB,MAAM,IAAIjE,qBACR,CAAC,cAAc,EAAE2B,MAAMqC,IAAI,CAAC,gCAAgC,EAAEjB,WAAW,iDAAiD,CAAC;IAE/H;IAEA,MAAMmB,eAAeL,cAAcM,IAAI,CAAC,CAACJ,cAAgBA,YAAYnC,IAAI,KAAK;IAC9E,MAAMwC,cAAcP,cAAcM,IAAI,CAAC,CAACJ,cAAgBA,YAAYnC,IAAI,KAAK;IAE7E,MAAMyC,QAAQC,KAAKC,GAAG,CAACrB,OAAOJ,cAAcI;IAC5C,MAAMsB,cAAc5C,SAAS,WAAWyC,QAAQnB;IAEhD,MAAMxB,cACJE,SAAS,aACTlB,0BAA0B;QAAEgB,aAAaC,MAAMK,MAAM,CAAEN,WAAW;QAAEwB,OAAOsB;IAAY;IAEzF,MAAMC,UAAUhD,WAAW;QAAEC;QAAaC;QAAOC;IAAK;IACtD,MAAMkC,SAAS,MAAMnD,kBAAkB;QAAE4C;QAASJ;QAAQY,aAAaF,aAAa,CAAC,EAAE;QAAEP;IAAM;IAE/F,IAAIQ,WAAW,OAAO,OAAO;QAAEW;QAASC,MAAM,EAAE;IAAC;IAEjD,MAAMC,QAAQzE,eAAe;QAAEqD;QAASR;QAAYa;IAAS;IAC7D,MAAMgB,SAASzE,gBAAgB;QAAEoD;QAASR;QAAYa;IAAS;IAC/D,MAAMiB,SAASjB,WAAW,WAAW;IAErC,MAAMkB,UAAU,CAACC,OACf3E,cAAc;YAAEmD;YAASR;YAAY6B;YAAQzB;YAAQ4B;YAAMnB;QAAS,GAAGmB,IAAI;IAE7E,MAAMC,oBAAoB,CAACC,cAAwB;YACjD1E,iBAAiB;gBACfuD,QAAQA,WAAW,OAAO1B,YAAYxB,oBAAoBkD;gBAC1DE,MAAME,aAAcF,IAAI;gBACxBkB,OAAOvD,MAAME,OAAO,CAAE+C,MAAM,CAACO,GAAG,CAAC,CAAC,EAAEJ,IAAI,EAAE,GAAKD,QAAQC;gBACvDK,MAAM/B,MAAM+B,IAAI;YAClB;YACA;gBAAEC,QAAQJ;YAAY;SACvB;IAED,MAAMK,uBAAuB,IAC3B7E,uBAAuB;YACrBiB;YACAoB,YAAYuB;YACZP,QAAQA,WAAW,OAAO1B,YAAYvB,wBAAwBiD;YAC9DZ,OAAOsB;YACPR,MAAMI,YAAaJ,IAAI;YACvBe,MAAMD,QAAQnD,MAAMK,MAAM,CAAE+C,IAAI;YAChC/C,QAAQqB,MAAMrB,MAAM;QACtB;IAEF,IAAIuD;IAEJ,IAAI3D,SAAS,WAAW;QACtB2D,WAAW;eACNP,kBAAkB9B;YACrB;gBAAEb,UAAU;oBAAEjB,KAAK;oBAAGF,IAAI,CAAC,CAAC,EAAE2D,QAAQ;oBAAE5D,OAAO;wBAAEuE,OAAO;oBAAc;gBAAE;YAAE;SAC3E;IACH,OAAO,IAAI5D,SAAS,UAAU;QAC5B2D,WAAW;YACTD;YACA;gBAAEjD,UAAU;oBAAEjB,KAAK;oBAAGF,IAAI,CAAC,CAAC,EAAE2D,QAAQ;oBAAE5D,OAAO;wBAAEuE,OAAO;oBAAoB;gBAAE;YAAE;SACjF;IACH,OAAO;QACLD,WAAWjF,oBAAoB;YAC7ByC,YAAY4B,MAAM5B,UAAU,CAACiB,IAAI;YACjCa;YACA3B;YACAuC,YAAY,MAAM3E,mBAAmB6D;YACrCe,gBAAgBV,kBAAkBX;YAClCsB,mBAAmBL;YACnBM,SAASjE,MAAMkE,MAAM,CAAED,OAAO;QAChC;IACF;IAEA,IAAIhC,UAAU2B,SAASO,IAAI,IAAI/E;IAE/B,MAAMgF,aAAa5D,gBAAgB;QAAER;QAAOC;IAAK;IAEjD,IAAImE,YAAYR,SAASO,IAAI,CAACC;IAE9B,MAAMrB,OAAO,MAAMC,MAAM5B,UAAU,CAACiD,SAAS,CAAYT,UAAUU,OAAO;IAE1E,OAAO;QACLxB;QACAC,MAAMA,KAAKS,GAAG,CAAC,CAAC,EAAEjE,EAAE,EAAEW,OAAO,EAAEZ,KAAK,EAAEe,MAAM,EAAE,GAAM,CAAA;gBAClDd,IAAI,OAAOA,OAAO,WAAWA,KAAKgF,OAAOhF;gBACzCD;gBACA,GAAIW,SAAS,WACT;oBAAEM,YAAY;wBAAEL,SAASa,aAAab;wBAAUG,QAAQU,aAAaV;oBAAQ;gBAAE,IAC/E,CAAC,CAAC;YACR,CAAA;IACF;AACF,EAAE","file":"search.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"supportsRankFusion.d.ts","sourceRoot":"","sources":["../../src/search/supportsRankFusion.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,qBAAqB,CAAC;AAMvE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BvE"}
1
+ {"version":3,"file":"supportsRankFusion.d.ts","sourceRoot":"","sources":["../../src/search/supportsRankFusion.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BvE"}
@@ -1,25 +1,44 @@
1
1
  import { getErrorCode } from './createSearchSetupError.js';
2
- const unsupportedCodes = new Set([224, 40324]);
2
+ const unsupportedCodes = new Set([
3
+ 224,
4
+ 40324
5
+ ]);
3
6
  const rankFusionSupport = new WeakMap();
4
7
  export function supportsRankFusion(Model) {
5
8
  const connection = Model.db;
6
9
  const cached = rankFusionSupport.get(connection);
7
- if (cached)
8
- return cached;
10
+ if (cached) return cached;
9
11
  const pipeline = [
10
- { $rankFusion: { input: { pipelines: { probe: [{ $sort: { _id: 1 } }, { $limit: 1 }] } } } },
11
- { $limit: 1 },
12
+ {
13
+ $rankFusion: {
14
+ input: {
15
+ pipelines: {
16
+ probe: [
17
+ {
18
+ $sort: {
19
+ _id: 1
20
+ }
21
+ },
22
+ {
23
+ $limit: 1
24
+ }
25
+ ]
26
+ }
27
+ }
28
+ }
29
+ },
30
+ {
31
+ $limit: 1
32
+ }
12
33
  ];
13
- const supported = Model.aggregate(pipeline)
14
- .exec()
15
- .then(() => true, (error) => {
34
+ const supported = Model.collection.aggregate(pipeline).toArray().then(()=>true, (error)=>{
16
35
  const code = getErrorCode(error);
17
- if (typeof code === 'number' && unsupportedCodes.has(code))
18
- return false;
36
+ if (typeof code === 'number' && unsupportedCodes.has(code)) return false;
19
37
  rankFusionSupport.delete(connection);
20
38
  throw error;
21
39
  });
22
40
  rankFusionSupport.set(connection, supported);
23
41
  return supported;
24
42
  }
43
+
25
44
  //# sourceMappingURL=supportsRankFusion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"supportsRankFusion.js","sourceRoot":"","sources":["../../src/search/supportsRankFusion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAE/C,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAA4B,CAAC;AAElE,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,QAAQ,GAAG;QACf,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;QAC5F,EAAE,MAAM,EAAE,CAAC,EAAE;KACd,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,QAAqC,CAAC;SACrE,IAAI,EAAE;SACN,IAAI,CACH,GAAG,EAAE,CAAC,IAAI,EACV,CAAC,KAAc,EAAE,EAAE;QACjB,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAEzE,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAErC,MAAM,KAAK,CAAC;IACd,CAAC,CACF,CAAC;IAEJ,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE7C,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"sources":["../../src/search/supportsRankFusion.ts"],"names":["getErrorCode","unsupportedCodes","Set","rankFusionSupport","WeakMap","supportsRankFusion","Model","connection","db","cached","get","pipeline","$rankFusion","input","pipelines","probe","$sort","_id","$limit","supported","collection","aggregate","toArray","then","error","code","has","delete","set"],"mappings":"AAAA,SAASA,YAAY,QAAQ,8BAA8B;AAG3D,MAAMC,mBAAmB,IAAIC,IAAI;IAAC;IAAK;CAAM;AAE7C,MAAMC,oBAAoB,IAAIC;AAE9B,OAAO,SAASC,mBAAmBC,KAAkB;IACnD,MAAMC,aAAaD,MAAME,EAAE;IAC3B,MAAMC,SAASN,kBAAkBO,GAAG,CAACH;IAErC,IAAIE,QAAQ,OAAOA;IAEnB,MAAME,WAAW;QACf;YAAEC,aAAa;gBAAEC,OAAO;oBAAEC,WAAW;wBAAEC,OAAO;4BAAC;gCAAEC,OAAO;oCAAEC,KAAK;gCAAE;4BAAE;4BAAG;gCAAEC,QAAQ;4BAAE;yBAAE;oBAAC;gBAAE;YAAE;QAAE;QAC3F;YAAEA,QAAQ;QAAE;KACb;IAED,MAAMC,YAAYb,MAAMc,UAAU,CAC/BC,SAAS,CAACV,UACVW,OAAO,GACPC,IAAI,CACH,IAAM,MACN,CAACC;QACC,MAAMC,OAAOzB,aAAawB;QAE1B,IAAI,OAAOC,SAAS,YAAYxB,iBAAiByB,GAAG,CAACD,OAAO,OAAO;QAEnEtB,kBAAkBwB,MAAM,CAACpB;QAEzB,MAAMiB;IACR;IAGJrB,kBAAkByB,GAAG,CAACrB,YAAYY;IAElC,OAAOA;AACT","file":"supportsRankFusion.js"}
@@ -1,2 +1,3 @@
1
- export {};
1
+ export { };
2
+
2
3
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/search/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"sources":["../../src/search/types.ts"],"names":[],"mappings":"AA4BA,WAAsD","file":"types.js"}
@@ -1,12 +1,27 @@
1
1
  import { getJobModel, getJobSession, transformJobUpdate } from './jobModel.js';
2
- export async function updateJobLeases({ adapter, data, req, where, }) {
2
+ export async function updateJobLeases({ adapter, data, req, where }) {
3
3
  if (req.payload !== adapter.payload) {
4
4
  throw new Error('FrogBot job lease updates require a request for this runtime.');
5
5
  }
6
6
  const { Model } = getJobModel(adapter);
7
- const query = await Model.buildQuery({ payload: adapter.payload, where });
8
- const update = transformJobUpdate({ adapter, data: { ...data } });
9
- const session = await getJobSession({ adapter, req });
10
- await Model.updateMany(query, update, { session, timestamps: false });
7
+ const query = await Model.buildQuery({
8
+ payload: adapter.payload,
9
+ where
10
+ });
11
+ const update = transformJobUpdate({
12
+ adapter,
13
+ data: {
14
+ ...data
15
+ }
16
+ });
17
+ const session = await getJobSession({
18
+ adapter,
19
+ req
20
+ });
21
+ await Model.updateMany(query, update, {
22
+ session,
23
+ timestamps: false
24
+ });
11
25
  }
26
+
12
27
  //# sourceMappingURL=updateJobLeases.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateJobLeases.js","sourceRoot":"","sources":["../src/updateJobLeases.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,OAAO,EACP,IAAI,EACJ,GAAG,EACH,KAAK,GAC2C;IAChD,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtD,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"sources":["../src/updateJobLeases.ts"],"names":["getJobModel","getJobSession","transformJobUpdate","updateJobLeases","adapter","data","req","where","payload","Error","Model","query","buildQuery","update","session","updateMany","timestamps"],"mappings":"AAGA,SAASA,WAAW,EAAEC,aAAa,EAAEC,kBAAkB,QAAQ,gBAAgB;AAE/E,OAAO,eAAeC,gBAAgB,EACpCC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,KAAK,EAC2C;IAChD,IAAID,IAAIE,OAAO,KAAKJ,QAAQI,OAAO,EAAE;QACnC,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAM,EAAEC,KAAK,EAAE,GAAGV,YAAYI;IAE9B,MAAMO,QAAQ,MAAMD,MAAME,UAAU,CAAC;QAAEJ,SAASJ,QAAQI,OAAO;QAAED;IAAM;IAEvE,MAAMM,SAASX,mBAAmB;QAAEE;QAASC,MAAM;YAAE,GAAGA,IAAI;QAAC;IAAE;IAE/D,MAAMS,UAAU,MAAMb,cAAc;QAAEG;QAASE;IAAI;IAEnD,MAAMI,MAAMK,UAAU,CAACJ,OAAOE,QAAQ;QAAEC;QAASE,YAAY;IAAM;AACrE","file":"updateJobLeases.js"}
@@ -3,9 +3,8 @@ import { getJobClaimFields, getJobLeaseContext, recordJobClaims } from 'frogbot/
3
3
  import { getJobModel, getJobSession, transformJobUpdate } from './jobModel.js';
4
4
  export function createUpdateJobs(adapter) {
5
5
  const updateJobs = adapter.updateJobs;
6
- return async (args) => {
7
- if (args.data.processing !== true)
8
- return updateJobs.call(adapter, args);
6
+ return async (args)=>{
7
+ if (args.data.processing !== true) return updateJobs.call(adapter, args);
9
8
  const context = getJobLeaseContext();
10
9
  if (!context || context.payload !== adapter.payload) {
11
10
  throw new Error('FrogBot job claims require an active jobs run for this runtime.');
@@ -15,43 +14,93 @@ export function createUpdateJobs(adapter) {
15
14
  const where = {
16
15
  and: [
17
16
  args.where ?? {},
18
- ...(id !== undefined ? [{ id: { equals: id } }] : []),
19
- { processing: { equals: false } },
20
- ],
17
+ ...id !== undefined ? [
18
+ {
19
+ id: {
20
+ equals: id
21
+ }
22
+ }
23
+ ] : [],
24
+ {
25
+ processing: {
26
+ equals: false
27
+ }
28
+ }
29
+ ]
21
30
  };
22
- const query = await Model.buildQuery({ payload: adapter.payload, where });
23
- const session = await getJobSession({ adapter, req });
24
- const candidates = id !== undefined
25
- ? [{ id }]
26
- : (await adapter.find({
27
- collection: 'payload-jobs',
28
- where,
29
- sort,
30
- limit: typeof limit === 'number' && limit > 0 ? limit : 0,
31
- pagination: false,
32
- select: { id: true },
33
- req,
34
- })).docs;
35
- const data = { ...args.data };
36
- if (!(Array.isArray(data.log) && data.log.length) &&
37
- !(data.log && typeof data.log === 'object' && '$push' in data.log)) {
31
+ const query = await Model.buildQuery({
32
+ payload: adapter.payload,
33
+ where
34
+ });
35
+ const session = await getJobSession({
36
+ adapter,
37
+ req
38
+ });
39
+ const candidates = id !== undefined ? [
40
+ {
41
+ id
42
+ }
43
+ ] : (await adapter.find({
44
+ collection: 'payload-jobs',
45
+ where,
46
+ sort,
47
+ limit: typeof limit === 'number' && limit > 0 ? limit : 0,
48
+ pagination: false,
49
+ select: {
50
+ id: true
51
+ },
52
+ req
53
+ })).docs;
54
+ const data = {
55
+ ...args.data
56
+ };
57
+ if (!(Array.isArray(data.log) && data.log.length) && !(data.log && typeof data.log === 'object' && '$push' in data.log)) {
38
58
  delete data.log;
39
59
  }
40
- const update = transformJobUpdate({ adapter, data });
60
+ const update = transformJobUpdate({
61
+ adapter,
62
+ data
63
+ });
41
64
  const result = [];
42
- for (const candidate of candidates) {
65
+ for (const candidate of candidates){
43
66
  const candidateQuery = await Model.buildQuery({
44
67
  payload: adapter.payload,
45
- where: { id: { equals: candidate.id } },
68
+ where: {
69
+ id: {
70
+ equals: candidate.id
71
+ }
72
+ }
73
+ });
74
+ const doc = await Model.findOneAndUpdate({
75
+ $and: [
76
+ query,
77
+ candidateQuery
78
+ ]
79
+ }, {
80
+ ...update,
81
+ $set: {
82
+ ...update.$set,
83
+ ...getJobClaimFields()
84
+ }
85
+ }, {
86
+ session,
87
+ timestamps: false,
88
+ new: true
89
+ }).lean();
90
+ if (!doc) continue;
91
+ transform({
92
+ adapter,
93
+ data: doc,
94
+ fields,
95
+ operation: 'read'
46
96
  });
47
- const doc = await Model.findOneAndUpdate({ $and: [query, candidateQuery] }, { ...update, $set: { ...update.$set, ...getJobClaimFields() } }, { session, timestamps: false, new: true }).lean();
48
- if (!doc)
49
- continue;
50
- transform({ adapter, data: doc, fields, operation: 'read' });
51
- recordJobClaims([doc.id]);
97
+ recordJobClaims([
98
+ doc.id
99
+ ]);
52
100
  result.push(doc);
53
101
  }
54
102
  return returning === false ? null : result;
55
103
  };
56
104
  }
105
+
57
106
  //# sourceMappingURL=updateJobs.js.map