@frogbotai/db-mongodb 0.28.0 → 0.30.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.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -5
- package/dist/index.js.map +1 -1
- package/dist/jobIndexes.d.ts +3 -0
- package/dist/jobIndexes.d.ts.map +1 -0
- package/dist/jobIndexes.js +37 -0
- package/dist/jobIndexes.js.map +1 -0
- package/dist/jobLogs.d.ts +6 -0
- package/dist/jobLogs.d.ts.map +1 -0
- package/dist/jobLogs.js +42 -0
- package/dist/jobLogs.js.map +1 -0
- package/dist/jobModel.js +29 -12
- package/dist/jobModel.js.map +1 -1
- package/dist/search/buildSchema.js +15 -9
- package/dist/search/buildSchema.js.map +1 -1
- package/dist/search/buildSearchIndexes.js +135 -55
- package/dist/search/buildSearchIndexes.js.map +1 -1
- package/dist/search/capabilities.js +12 -15
- package/dist/search/capabilities.js.map +1 -1
- package/dist/search/createSearchSetupError.js +12 -5
- package/dist/search/createSearchSetupError.js.map +1 -1
- package/dist/search/ensureSearchIndexes.js +35 -20
- package/dist/search/ensureSearchIndexes.js.map +1 -1
- package/dist/search/findSearchIndex.js +3 -2
- package/dist/search/findSearchIndex.js.map +1 -1
- package/dist/search/getSearchIndexes.js +2 -1
- package/dist/search/getSearchIndexes.js.map +1 -1
- package/dist/search/getSearchModel.js +2 -1
- package/dist/search/getSearchModel.js.map +1 -1
- package/dist/search/getSearchPath.js +17 -13
- package/dist/search/getSearchPath.js.map +1 -1
- package/dist/search/index.js +2 -1
- package/dist/search/index.js.map +1 -1
- package/dist/search/isDraftSearch.js +2 -1
- package/dist/search/isDraftSearch.js.map +1 -1
- package/dist/search/isSearchIndexDefinitionEqual.js +26 -19
- package/dist/search/isSearchIndexDefinitionEqual.js.map +1 -1
- package/dist/search/pipelines/buildHybridPipeline.js +147 -40
- package/dist/search/pipelines/buildHybridPipeline.js.map +1 -1
- package/dist/search/pipelines/buildSearchStage.js +17 -5
- package/dist/search/pipelines/buildSearchStage.js.map +1 -1
- package/dist/search/pipelines/buildVectorScore.js +24 -4
- package/dist/search/pipelines/buildVectorScore.js.map +1 -1
- package/dist/search/pipelines/buildVectorSearchStage.js +15 -7
- package/dist/search/pipelines/buildVectorSearchStage.js.map +1 -1
- package/dist/search/queries/buildSearchFilter.js +13 -6
- package/dist/search/queries/buildSearchFilter.js.map +1 -1
- package/dist/search/queries/buildSearchOperator.js +41 -8
- package/dist/search/queries/buildSearchOperator.js.map +1 -1
- package/dist/search/queries/buildVectorSearchFilter.js +32 -8
- package/dist/search/queries/buildVectorSearchFilter.js.map +1 -1
- package/dist/search/queries/parseSearchFilter.js +125 -56
- package/dist/search/queries/parseSearchFilter.js.map +1 -1
- package/dist/search/readiness.js +23 -12
- package/dist/search/readiness.js.map +1 -1
- package/dist/search/search.js +180 -76
- package/dist/search/search.js.map +1 -1
- package/dist/search/supportsRankFusion.js +29 -10
- package/dist/search/supportsRankFusion.js.map +1 -1
- package/dist/search/types.js +2 -1
- package/dist/search/types.js.map +1 -1
- package/dist/updateJobLeases.js +20 -5
- package/dist/updateJobLeases.js.map +1 -1
- package/dist/updateJobs.js +79 -30
- package/dist/updateJobs.js.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGlF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGlF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAQpD,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEpG,eAAO,MAAM,eAAe,SACpB,IAAI,KACT,UAAU,CAAC,OAAO,qBAAqB,CAAC,GAAG;IAAE,MAAM,EAAE,aAAa,CAAA;CA4BpE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
import { mongooseAdapter as createMongooseAdapter } from '@payloadcms/db-mongodb';
|
|
2
|
-
import { jobLeaseOperations } from 'frogbot/jobs';
|
|
2
|
+
import { jobLeaseOperations, jobLogOperations } from 'frogbot/jobs';
|
|
3
|
+
import { installJobIndexes } from './jobIndexes.js';
|
|
4
|
+
import { pruneJobLogs } from './jobLogs.js';
|
|
3
5
|
import { mongooseSearchAdapter } from './search/index.js';
|
|
4
6
|
import { updateJobLeases } from './updateJobLeases.js';
|
|
5
7
|
import { createUpdateJobs } from './updateJobs.js';
|
|
6
|
-
export const mongooseAdapter = (args)
|
|
8
|
+
export const mongooseAdapter = (args)=>{
|
|
7
9
|
const { init, ...adapter } = createMongooseAdapter(args);
|
|
8
10
|
return {
|
|
9
11
|
...adapter,
|
|
10
12
|
search: mongooseSearchAdapter,
|
|
11
|
-
init(initArgs) {
|
|
13
|
+
init (initArgs) {
|
|
12
14
|
const database = init(initArgs);
|
|
13
15
|
database.packageName = '@frogbotai/db-mongodb';
|
|
16
|
+
installJobIndexes(database);
|
|
14
17
|
database.updateJobs = createUpdateJobs(database);
|
|
15
18
|
database[jobLeaseOperations] = {
|
|
16
|
-
update: (args)
|
|
19
|
+
update: (args)=>updateJobLeases({
|
|
20
|
+
adapter: database,
|
|
21
|
+
...args
|
|
22
|
+
})
|
|
23
|
+
};
|
|
24
|
+
database[jobLogOperations] = {
|
|
25
|
+
prune: (args)=>pruneJobLogs({
|
|
26
|
+
adapter: database,
|
|
27
|
+
...args
|
|
28
|
+
})
|
|
17
29
|
};
|
|
18
30
|
return database;
|
|
19
|
-
}
|
|
31
|
+
}
|
|
20
32
|
};
|
|
21
33
|
};
|
|
34
|
+
|
|
22
35
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["mongooseAdapter","createMongooseAdapter","jobLeaseOperations","jobLogOperations","installJobIndexes","pruneJobLogs","mongooseSearchAdapter","updateJobLeases","createUpdateJobs","args","init","adapter","search","initArgs","database","packageName","updateJobs","update","prune"],"mappings":"AACA,SAASA,mBAAmBC,qBAAqB,QAAQ,yBAAyB;AAElF,SAASC,kBAAkB,EAAEC,gBAAgB,QAAQ,eAAe;AAGpE,SAASC,iBAAiB,QAAQ,kBAAkB;AACpD,SAASC,YAAY,QAAQ,eAAe;AAC5C,SAASC,qBAAqB,QAAQ,oBAAoB;AAC1D,SAASC,eAAe,QAAQ,uBAAuB;AACvD,SAASC,gBAAgB,QAAQ,kBAAkB;AAInD,OAAO,MAAMR,kBAAkB,CAC7BS;IAEA,MAAM,EAAEC,IAAI,EAAE,GAAGC,SAAS,GAAGV,sBAAsBQ;IAEnD,OAAO;QACL,GAAGE,OAAO;QACVC,QAAQN;QACRI,MAAKG,QAAQ;YACX,MAAMC,WAAWJ,KAAKG;YAItBC,SAASC,WAAW,GAAG;YAEvBX,kBAAkBU;YAElBA,SAASE,UAAU,GAAGR,iBAAiBM;YAEvCA,QAAQ,CAACZ,mBAAmB,GAAG;gBAC7Be,QAAQ,CAACR,OAASF,gBAAgB;wBAAEI,SAASG;wBAAU,GAAGL,IAAI;oBAAC;YACjE;YAEAK,QAAQ,CAACX,iBAAiB,GAAG;gBAC3Be,OAAO,CAACT,OAASJ,aAAa;wBAAEM,SAASG;wBAAU,GAAGL,IAAI;oBAAC;YAC7D;YAEA,OAAOK;QACT;IACF;AACF,EAAE","file":"index.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobIndexes.d.ts","sourceRoot":"","sources":["../src/jobIndexes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,QAiC1D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getJobModel } from './jobModel.js';
|
|
2
|
+
export function installJobIndexes(database) {
|
|
3
|
+
const create = database.create;
|
|
4
|
+
const connect = database.connect;
|
|
5
|
+
database.create = async (args)=>{
|
|
6
|
+
if (args.collection !== 'payload-jobs') return create.call(database, args);
|
|
7
|
+
return create.call(database, {
|
|
8
|
+
...args,
|
|
9
|
+
data: {
|
|
10
|
+
...args.data,
|
|
11
|
+
completedAt: args.data.completedAt ?? null
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
database.connect = async (options)=>{
|
|
16
|
+
await connect.call(database, options);
|
|
17
|
+
if (!database.connection || !database.collections['payload-jobs']) return;
|
|
18
|
+
const { Model } = getJobModel(database);
|
|
19
|
+
await Model.collection.createIndex({
|
|
20
|
+
jobId: 1
|
|
21
|
+
}, {
|
|
22
|
+
name: 'frogbot_jobId_live',
|
|
23
|
+
unique: true,
|
|
24
|
+
partialFilterExpression: {
|
|
25
|
+
jobId: {
|
|
26
|
+
$type: 'string'
|
|
27
|
+
},
|
|
28
|
+
completedAt: {
|
|
29
|
+
$type: 'null'
|
|
30
|
+
},
|
|
31
|
+
hasError: false
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=jobIndexes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/jobIndexes.ts"],"names":["getJobModel","installJobIndexes","database","create","connect","args","collection","call","data","completedAt","options","connection","collections","Model","createIndex","jobId","name","unique","partialFilterExpression","$type","hasError"],"mappings":"AAEA,SAASA,WAAW,QAAQ,gBAAgB;AAE5C,OAAO,SAASC,kBAAkBC,QAAyB;IACzD,MAAMC,SAASD,SAASC,MAAM;IAC9B,MAAMC,UAAUF,SAASE,OAAO;IAEhCF,SAASC,MAAM,GAAG,OAAOE;QACvB,IAAIA,KAAKC,UAAU,KAAK,gBAAgB,OAAOH,OAAOI,IAAI,CAACL,UAAUG;QAErE,OAAOF,OAAOI,IAAI,CAACL,UAAU;YAC3B,GAAGG,IAAI;YACPG,MAAM;gBAAE,GAAGH,KAAKG,IAAI;gBAAEC,aAAaJ,KAAKG,IAAI,CAACC,WAAW,IAAI;YAAK;QACnE;IACF;IAEAP,SAASE,OAAO,GAAG,OAAOM;QACxB,MAAMN,QAAQG,IAAI,CAACL,UAAUQ;QAE7B,IAAI,CAACR,SAASS,UAAU,IAAI,CAACT,SAASU,WAAW,CAAC,eAAe,EAAE;QAEnE,MAAM,EAAEC,KAAK,EAAE,GAAGb,YAAYE;QAE9B,MAAMW,MAAMP,UAAU,CAACQ,WAAW,CAChC;YAAEC,OAAO;QAAE,GACX;YACEC,MAAM;YACNC,QAAQ;YACRC,yBAAyB;gBACvBH,OAAO;oBAAEI,OAAO;gBAAS;gBACzBV,aAAa;oBAAEU,OAAO;gBAAO;gBAC7BC,UAAU;YACZ;QACF;IAEJ;AACF","file":"jobIndexes.js"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MongooseAdapter } from '@payloadcms/db-mongodb';
|
|
2
|
+
import type { JobLogOperations } from 'frogbot/jobs';
|
|
3
|
+
export declare function pruneJobLogs({ adapter, id, keep, req, }: Parameters<JobLogOperations['prune']>[0] & {
|
|
4
|
+
adapter: MongooseAdapter;
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=jobLogs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobLogs.d.ts","sourceRoot":"","sources":["../src/jobLogs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIrD,wBAAsB,YAAY,CAAC,EACjC,OAAO,EACP,EAAE,EACF,IAAI,EACJ,GAAG,GACJ,EAAE,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAezF"}
|
package/dist/jobLogs.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getJobModel, getJobSession } from './jobModel.js';
|
|
2
|
+
export async function pruneJobLogs({ adapter, id, keep, req }) {
|
|
3
|
+
const { Model } = getJobModel(adapter);
|
|
4
|
+
const query = await Model.buildQuery({
|
|
5
|
+
payload: adapter.payload,
|
|
6
|
+
where: {
|
|
7
|
+
id: {
|
|
8
|
+
equals: id
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
const session = await getJobSession({
|
|
13
|
+
adapter,
|
|
14
|
+
req
|
|
15
|
+
});
|
|
16
|
+
await Model.updateOne({
|
|
17
|
+
$and: [
|
|
18
|
+
query,
|
|
19
|
+
{
|
|
20
|
+
completedAt: null
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
hasError: {
|
|
24
|
+
$ne: true
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}, {
|
|
29
|
+
$pull: {
|
|
30
|
+
log: {
|
|
31
|
+
id: {
|
|
32
|
+
$nin: keep
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}, {
|
|
37
|
+
session,
|
|
38
|
+
timestamps: false
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=jobLogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/jobLogs.ts"],"names":["getJobModel","getJobSession","pruneJobLogs","adapter","id","keep","req","Model","query","buildQuery","payload","where","equals","session","updateOne","$and","completedAt","hasError","$ne","$pull","log","$nin","timestamps"],"mappings":"AAGA,SAASA,WAAW,EAAEC,aAAa,QAAQ,gBAAgB;AAE3D,OAAO,eAAeC,aAAa,EACjCC,OAAO,EACPC,EAAE,EACFC,IAAI,EACJC,GAAG,EACqE;IACxE,MAAM,EAAEC,KAAK,EAAE,GAAGP,YAAYG;IAE9B,MAAMK,QAAQ,MAAMD,MAAME,UAAU,CAAC;QACnCC,SAASP,QAAQO,OAAO;QACxBC,OAAO;YAAEP,IAAI;gBAAEQ,QAAQR;YAAG;QAAE;IAC9B;IAEA,MAAMS,UAAU,MAAMZ,cAAc;QAAEE;QAASG;IAAI;IAEnD,MAAMC,MAAMO,SAAS,CACnB;QAAEC,MAAM;YAACP;YAAO;gBAAEQ,aAAa;YAAK;YAAG;gBAAEC,UAAU;oBAAEC,KAAK;gBAAK;YAAE;SAAE;IAAC,GACpE;QAAEC,OAAO;YAAEC,KAAK;gBAAEhB,IAAI;oBAAEiB,MAAMhB;gBAAK;YAAE;QAAE;IAAE,GACzC;QAAEQ;QAASS,YAAY;IAAM;AAEjC","file":"jobLogs.js"}
|
package/dist/jobModel.js
CHANGED
|
@@ -2,14 +2,15 @@ import { transform } from '@payloadcms/db-mongodb/internal';
|
|
|
2
2
|
export function getJobModel(adapter) {
|
|
3
3
|
const collection = adapter.payload.collections['payload-jobs'];
|
|
4
4
|
const Model = adapter.collections['payload-jobs'];
|
|
5
|
-
if (!collection || !Model)
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
if (!collection || !Model) throw new Error('FrogBot jobs collection is not initialized.');
|
|
6
|
+
return {
|
|
7
|
+
fields: collection.config.fields,
|
|
8
|
+
Model
|
|
9
|
+
};
|
|
8
10
|
}
|
|
9
|
-
export async function getJobSession({ adapter, req
|
|
11
|
+
export async function getJobSession({ adapter, req }) {
|
|
10
12
|
const transactionID = await req?.transactionID;
|
|
11
|
-
if (!transactionID)
|
|
12
|
-
return;
|
|
13
|
+
if (!transactionID) return;
|
|
13
14
|
const session = adapter.sessions[transactionID];
|
|
14
15
|
if (session && !session.inTransaction()) {
|
|
15
16
|
delete adapter.sessions[transactionID];
|
|
@@ -17,18 +18,34 @@ export async function getJobSession({ adapter, req, }) {
|
|
|
17
18
|
}
|
|
18
19
|
return session;
|
|
19
20
|
}
|
|
20
|
-
export function transformJobUpdate({ adapter, data
|
|
21
|
+
export function transformJobUpdate({ adapter, data }) {
|
|
21
22
|
const { fields } = getJobModel(adapter);
|
|
22
23
|
const $inc = {};
|
|
23
24
|
const $push = {};
|
|
24
25
|
const $addToSet = {};
|
|
25
26
|
const $pull = {};
|
|
26
|
-
transform({
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
transform({
|
|
28
|
+
adapter,
|
|
29
|
+
data,
|
|
30
|
+
fields,
|
|
31
|
+
operation: 'write',
|
|
32
|
+
$inc,
|
|
33
|
+
$push,
|
|
34
|
+
$addToSet,
|
|
35
|
+
$pull
|
|
36
|
+
});
|
|
37
|
+
const update = {
|
|
38
|
+
$set: data
|
|
39
|
+
};
|
|
40
|
+
for (const [operator, values] of Object.entries({
|
|
41
|
+
$inc,
|
|
42
|
+
$push,
|
|
43
|
+
$addToSet,
|
|
44
|
+
$pull
|
|
45
|
+
})){
|
|
46
|
+
if (Object.keys(values).length) update[operator] = values;
|
|
31
47
|
}
|
|
32
48
|
return update;
|
|
33
49
|
}
|
|
50
|
+
|
|
34
51
|
//# sourceMappingURL=jobModel.js.map
|
package/dist/jobModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/jobModel.ts"],"names":["transform","getJobModel","adapter","collection","payload","collections","Model","Error","fields","config","getJobSession","req","transactionID","session","sessions","inTransaction","transformJobUpdate","data","$inc","$push","$addToSet","$pull","operation","update","$set","operator","values","Object","entries","keys","length"],"mappings":"AACA,SAASA,SAAS,QAAQ,kCAAkC;AAE5D,OAAO,SAASC,YAAYC,OAAwB;IAClD,MAAMC,aAAaD,QAAQE,OAAO,CAACC,WAAW,CAAC,eAAe;IAC9D,MAAMC,QAAQJ,QAAQG,WAAW,CAAC,eAAe;IAEjD,IAAI,CAACF,cAAc,CAACG,OAAO,MAAM,IAAIC,MAAM;IAE3C,OAAO;QAAEC,QAAQL,WAAWM,MAAM,CAACD,MAAM;QAAEF;IAAM;AACnD;AAEA,OAAO,eAAeI,cAAc,EAClCR,OAAO,EACPS,GAAG,EAIJ;IACC,MAAMC,gBAAgB,MAAMD,KAAKC;IAEjC,IAAI,CAACA,eAAe;IAEpB,MAAMC,UAAUX,QAAQY,QAAQ,CAACF,cAAc;IAE/C,IAAIC,WAAW,CAACA,QAAQE,aAAa,IAAI;QACvC,OAAOb,QAAQY,QAAQ,CAACF,cAAc;QAEtC;IACF;IAEA,OAAOC;AACT;AAEA,OAAO,SAASG,mBAAmB,EACjCd,OAAO,EACPe,IAAI,EAIL;IACC,MAAM,EAAET,MAAM,EAAE,GAAGP,YAAYC;IAC/B,MAAMgB,OAA+B,CAAC;IACtC,MAAMC,QAAiC,CAAC;IACxC,MAAMC,YAAqC,CAAC;IAC5C,MAAMC,QAAiC,CAAC;IAExCrB,UAAU;QAAEE;QAASe;QAAMT;QAAQc,WAAW;QAASJ;QAAMC;QAAOC;QAAWC;IAAM;IAErF,MAAME,SAAkD;QAAEC,MAAMP;IAAK;IAErE,KAAK,MAAM,CAACQ,UAAUC,OAAO,IAAIC,OAAOC,OAAO,CAAC;QAAEV;QAAMC;QAAOC;QAAWC;IAAM,GAAI;QAClF,IAAIM,OAAOE,IAAI,CAACH,QAAQI,MAAM,EAAEP,MAAM,CAACE,SAAS,GAAGC;IACrD;IAEA,OAAOH;AACT","file":"jobModel.js"}
|
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
import { buildSearchIndexes } from './buildSearchIndexes.js';
|
|
2
2
|
import { ensureSearchIndexes } from './ensureSearchIndexes.js';
|
|
3
3
|
import { setSearchIndexes } from './getSearchIndexes.js';
|
|
4
|
-
export const buildSchema = ({ collections, db })
|
|
4
|
+
export const buildSchema = ({ collections, db })=>{
|
|
5
5
|
const adapter = db;
|
|
6
|
-
const indexes = collections.flatMap(({ slug, search })
|
|
7
|
-
|
|
6
|
+
const indexes = collections.flatMap(({ slug, search })=>Object.values(search).flatMap((index)=>buildSearchIndexes({
|
|
7
|
+
adapter,
|
|
8
|
+
collection: slug,
|
|
9
|
+
index
|
|
10
|
+
})));
|
|
11
|
+
setSearchIndexes({
|
|
12
|
+
adapter,
|
|
13
|
+
indexes
|
|
14
|
+
});
|
|
8
15
|
const { connect } = adapter;
|
|
9
|
-
adapter.connect = async (options)
|
|
16
|
+
adapter.connect = async (options)=>{
|
|
10
17
|
await connect?.call(adapter, options);
|
|
11
|
-
if (options?.hotReload || adapter.url === false)
|
|
12
|
-
return;
|
|
18
|
+
if (options?.hotReload || adapter.url === false) return;
|
|
13
19
|
try {
|
|
14
20
|
await ensureSearchIndexes({
|
|
15
21
|
adapter,
|
|
16
|
-
dropped: process.env.PAYLOAD_DROP_DATABASE === 'true'
|
|
22
|
+
dropped: process.env.PAYLOAD_DROP_DATABASE === 'true'
|
|
17
23
|
});
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
24
|
+
} catch (error) {
|
|
20
25
|
await adapter.destroy?.();
|
|
21
26
|
throw error;
|
|
22
27
|
}
|
|
23
28
|
};
|
|
24
29
|
};
|
|
30
|
+
|
|
25
31
|
//# sourceMappingURL=buildSchema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/search/buildSchema.ts"],"names":["buildSearchIndexes","ensureSearchIndexes","setSearchIndexes","buildSchema","collections","db","adapter","indexes","flatMap","slug","search","Object","values","index","collection","connect","options","call","hotReload","url","dropped","process","env","PAYLOAD_DROP_DATABASE","error","destroy"],"mappings":"AAGA,SAASA,kBAAkB,QAAQ,0BAA0B;AAC7D,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,gBAAgB,QAAQ,wBAAwB;AAEzD,OAAO,MAAMC,cAAiC,CAAC,EAAEC,WAAW,EAAEC,EAAE,EAAE;IAChE,MAAMC,UAAUD;IAEhB,MAAME,UAAUH,YAAYI,OAAO,CAAC,CAAC,EAAEC,IAAI,EAAEC,MAAM,EAAE,GACnDC,OAAOC,MAAM,CAACF,QAAQF,OAAO,CAAC,CAACK,QAC7Bb,mBAAmB;gBAAEM;gBAASQ,YAAYL;gBAAMI;YAAM;IAI1DX,iBAAiB;QAAEI;QAASC;IAAQ;IAEpC,MAAM,EAAEQ,OAAO,EAAE,GAAGT;IAEpBA,QAAQS,OAAO,GAAG,OAAOC;QACvB,MAAMD,SAASE,KAAKX,SAASU;QAE7B,IAAIA,SAASE,aAAaZ,QAAQa,GAAG,KAAK,OAAO;QAEjD,IAAI;YACF,MAAMlB,oBAAoB;gBACxBK;gBACAc,SAASC,QAAQC,GAAG,CAACC,qBAAqB,KAAK;YACjD;QACF,EAAE,OAAOC,OAAO;YACd,MAAMlB,QAAQmB,OAAO;YAErB,MAAMD;QACR;IACF;AACF,EAAE","file":"buildSchema.js"}
|
|
@@ -1,119 +1,199 @@
|
|
|
1
|
-
import { getIDFieldType, getSearchFields, getSearchLocales, getSearchPath
|
|
1
|
+
import { getIDFieldType, getSearchFields, getSearchLocales, getSearchPath } from './getSearchPath.js';
|
|
2
2
|
const filterFieldTypes = {
|
|
3
3
|
boolean: 'boolean',
|
|
4
4
|
date: 'date',
|
|
5
5
|
number: 'number',
|
|
6
|
-
string: 'token'
|
|
6
|
+
string: 'token'
|
|
7
7
|
};
|
|
8
8
|
function getSearchIndexName({ index, mode }) {
|
|
9
9
|
return `${index}_${mode}`;
|
|
10
10
|
}
|
|
11
|
-
function getFilterFields({ adapter, collection, index, versions
|
|
12
|
-
const fields = getSearchFields({
|
|
11
|
+
function getFilterFields({ adapter, collection, index, versions }) {
|
|
12
|
+
const fields = getSearchFields({
|
|
13
|
+
adapter,
|
|
14
|
+
collection,
|
|
15
|
+
versions
|
|
16
|
+
});
|
|
13
17
|
const filters = new Map();
|
|
14
|
-
if (versions)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
continue;
|
|
19
|
-
for (const locale of getSearchLocales(adapter)) {
|
|
18
|
+
if (versions) filters.set('latest', 'boolean');
|
|
19
|
+
for (const filter of Object.values(index.filterFields)){
|
|
20
|
+
if (filter.many) continue;
|
|
21
|
+
for (const locale of getSearchLocales(adapter)){
|
|
20
22
|
const { field, path } = getSearchPath({
|
|
21
23
|
adapter,
|
|
22
24
|
collection,
|
|
23
25
|
fields,
|
|
24
26
|
locale,
|
|
25
27
|
path: filter.path,
|
|
26
|
-
versions
|
|
28
|
+
versions
|
|
27
29
|
});
|
|
28
|
-
const relationTo = field && 'relationTo' in field && typeof field.relationTo === 'string'
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
: filterFieldTypes[filter.type]);
|
|
30
|
+
const relationTo = field && 'relationTo' in field && typeof field.relationTo === 'string' ? field.relationTo : collection;
|
|
31
|
+
filters.set(path, filter.type === 'id' ? getIDFieldType({
|
|
32
|
+
adapter,
|
|
33
|
+
collection: relationTo
|
|
34
|
+
}) : filterFieldTypes[filter.type]);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
return filters;
|
|
37
38
|
}
|
|
38
|
-
function getPaths({ adapter, collection, path, versions
|
|
39
|
-
const fields = getSearchFields({
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
function getPaths({ adapter, collection, path, versions }) {
|
|
40
|
+
const fields = getSearchFields({
|
|
41
|
+
adapter,
|
|
42
|
+
collection,
|
|
43
|
+
versions
|
|
44
|
+
});
|
|
45
|
+
const paths = getSearchLocales(adapter).map((locale)=>getSearchPath({
|
|
46
|
+
adapter,
|
|
47
|
+
collection,
|
|
48
|
+
fields,
|
|
49
|
+
locale,
|
|
50
|
+
path,
|
|
51
|
+
versions
|
|
52
|
+
}).path);
|
|
53
|
+
return [
|
|
54
|
+
...new Set(paths)
|
|
55
|
+
];
|
|
42
56
|
}
|
|
43
|
-
function setFieldMapping({ fields, mapping, path
|
|
57
|
+
function setFieldMapping({ fields, mapping, path }) {
|
|
44
58
|
const [segment, ...rest] = path;
|
|
45
59
|
if (!rest.length) {
|
|
46
60
|
const existing = fields[segment];
|
|
47
|
-
fields[segment] = existing
|
|
48
|
-
|
|
49
|
-
|
|
61
|
+
fields[segment] = existing ? [
|
|
62
|
+
...Array.isArray(existing) ? existing : [
|
|
63
|
+
existing
|
|
64
|
+
],
|
|
65
|
+
mapping
|
|
66
|
+
] : mapping;
|
|
50
67
|
return;
|
|
51
68
|
}
|
|
52
|
-
fields[segment] ??= {
|
|
69
|
+
fields[segment] ??= {
|
|
70
|
+
type: 'document',
|
|
71
|
+
dynamic: false,
|
|
72
|
+
fields: {}
|
|
73
|
+
};
|
|
53
74
|
setFieldMapping({
|
|
54
75
|
fields: fields[segment].fields,
|
|
55
76
|
mapping,
|
|
56
|
-
path: rest
|
|
77
|
+
path: rest
|
|
57
78
|
});
|
|
58
79
|
}
|
|
59
|
-
function buildLexicalDefinition({ filters, index, textPaths
|
|
80
|
+
function buildLexicalDefinition({ filters, index, textPaths }) {
|
|
60
81
|
const fields = {};
|
|
61
82
|
const language = index.lexical?.language;
|
|
62
|
-
for (const path of textPaths)
|
|
83
|
+
for (const path of textPaths){
|
|
63
84
|
setFieldMapping({
|
|
64
85
|
fields,
|
|
65
|
-
mapping: {
|
|
66
|
-
|
|
86
|
+
mapping: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
analyzer: `lucene.${language ?? 'standard'}`
|
|
89
|
+
},
|
|
90
|
+
path: path.split('.')
|
|
67
91
|
});
|
|
68
92
|
}
|
|
69
|
-
for (const [path, type] of filters)
|
|
70
|
-
setFieldMapping({
|
|
93
|
+
for (const [path, type] of filters){
|
|
94
|
+
setFieldMapping({
|
|
95
|
+
fields,
|
|
96
|
+
mapping: {
|
|
97
|
+
type
|
|
98
|
+
},
|
|
99
|
+
path: path.split('.')
|
|
100
|
+
});
|
|
71
101
|
}
|
|
72
|
-
return {
|
|
102
|
+
return {
|
|
103
|
+
mappings: {
|
|
104
|
+
dynamic: false,
|
|
105
|
+
fields
|
|
106
|
+
}
|
|
107
|
+
};
|
|
73
108
|
}
|
|
74
|
-
function buildVectorDefinition({ filters, index, vectorPaths
|
|
75
|
-
const vectors = vectorPaths.map((path)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const filterPaths = [
|
|
82
|
-
|
|
109
|
+
function buildVectorDefinition({ filters, index, vectorPaths }) {
|
|
110
|
+
const vectors = vectorPaths.map((path)=>({
|
|
111
|
+
type: 'vector',
|
|
112
|
+
path,
|
|
113
|
+
numDimensions: index.vector.dimensions,
|
|
114
|
+
similarity: index.vector.metric
|
|
115
|
+
}));
|
|
116
|
+
const filterPaths = [
|
|
117
|
+
...filters.keys()
|
|
118
|
+
].sort().map((path)=>({
|
|
119
|
+
type: 'filter',
|
|
120
|
+
path
|
|
121
|
+
}));
|
|
122
|
+
return {
|
|
123
|
+
fields: [
|
|
124
|
+
...vectors,
|
|
125
|
+
...filterPaths
|
|
126
|
+
]
|
|
127
|
+
};
|
|
83
128
|
}
|
|
84
|
-
export function buildSearchIndexes({ adapter, collection, index
|
|
129
|
+
export function buildSearchIndexes({ adapter, collection, index }) {
|
|
85
130
|
const { config } = adapter.payload.collections[collection];
|
|
86
|
-
const targets = config.versions?.drafts ? [
|
|
87
|
-
|
|
88
|
-
|
|
131
|
+
const targets = config.versions?.drafts ? [
|
|
132
|
+
false,
|
|
133
|
+
true
|
|
134
|
+
] : [
|
|
135
|
+
false
|
|
136
|
+
];
|
|
137
|
+
return targets.flatMap((versions)=>{
|
|
138
|
+
const filters = getFilterFields({
|
|
139
|
+
adapter,
|
|
140
|
+
collection,
|
|
141
|
+
index,
|
|
142
|
+
versions
|
|
143
|
+
});
|
|
89
144
|
const models = [];
|
|
90
145
|
if (index.lexical) {
|
|
91
|
-
const textPaths = index.lexical.fields.flatMap(({ path })
|
|
146
|
+
const textPaths = index.lexical.fields.flatMap(({ path })=>getPaths({
|
|
147
|
+
adapter,
|
|
148
|
+
collection,
|
|
149
|
+
path,
|
|
150
|
+
versions
|
|
151
|
+
}));
|
|
92
152
|
models.push({
|
|
93
153
|
collection,
|
|
94
|
-
definition: buildLexicalDefinition({
|
|
154
|
+
definition: buildLexicalDefinition({
|
|
155
|
+
filters,
|
|
156
|
+
index,
|
|
157
|
+
textPaths
|
|
158
|
+
}),
|
|
95
159
|
fields: filters,
|
|
96
160
|
index: index.name,
|
|
97
161
|
mode: 'lexical',
|
|
98
|
-
name: getSearchIndexName({
|
|
162
|
+
name: getSearchIndexName({
|
|
163
|
+
index: index.name,
|
|
164
|
+
mode: 'lexical'
|
|
165
|
+
}),
|
|
99
166
|
type: 'search',
|
|
100
|
-
versions
|
|
167
|
+
versions
|
|
101
168
|
});
|
|
102
169
|
}
|
|
103
170
|
if (index.vector) {
|
|
104
|
-
const vectorPaths = getPaths({
|
|
171
|
+
const vectorPaths = getPaths({
|
|
172
|
+
adapter,
|
|
173
|
+
collection,
|
|
174
|
+
path: index.vector.path,
|
|
175
|
+
versions
|
|
176
|
+
});
|
|
105
177
|
models.push({
|
|
106
178
|
collection,
|
|
107
|
-
definition: buildVectorDefinition({
|
|
179
|
+
definition: buildVectorDefinition({
|
|
180
|
+
filters,
|
|
181
|
+
index,
|
|
182
|
+
vectorPaths
|
|
183
|
+
}),
|
|
108
184
|
fields: filters,
|
|
109
185
|
index: index.name,
|
|
110
186
|
mode: 'vector',
|
|
111
|
-
name: getSearchIndexName({
|
|
187
|
+
name: getSearchIndexName({
|
|
188
|
+
index: index.name,
|
|
189
|
+
mode: 'vector'
|
|
190
|
+
}),
|
|
112
191
|
type: 'vectorSearch',
|
|
113
|
-
versions
|
|
192
|
+
versions
|
|
114
193
|
});
|
|
115
194
|
}
|
|
116
195
|
return models;
|
|
117
196
|
});
|
|
118
197
|
}
|
|
198
|
+
|
|
119
199
|
//# sourceMappingURL=buildSearchIndexes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/search/buildSearchIndexes.ts"],"names":["getIDFieldType","getSearchFields","getSearchLocales","getSearchPath","filterFieldTypes","boolean","date","number","string","getSearchIndexName","index","mode","getFilterFields","adapter","collection","versions","fields","filters","Map","set","filter","Object","values","filterFields","many","locale","field","path","relationTo","type","getPaths","paths","map","Set","setFieldMapping","mapping","segment","rest","length","existing","Array","isArray","dynamic","buildLexicalDefinition","textPaths","language","lexical","analyzer","split","mappings","buildVectorDefinition","vectorPaths","vectors","numDimensions","vector","dimensions","similarity","metric","filterPaths","keys","sort","buildSearchIndexes","config","payload","collections","targets","drafts","flatMap","models","push","definition","name"],"mappings":"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","file":"buildSearchIndexes.js"}
|