@payloadcms/db-mongodb 3.0.0-canary.b8dd0db → 3.0.0-canary.bda91d8
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/connect.d.ts.map +1 -1
- package/dist/connect.js +7 -3
- package/dist/connect.js.map +1 -1
- package/dist/countGlobalVersions.d.ts +3 -0
- package/dist/countGlobalVersions.d.ts.map +1 -0
- package/dist/countGlobalVersions.js +33 -0
- package/dist/countGlobalVersions.js.map +1 -0
- package/dist/countVersions.d.ts +3 -0
- package/dist/countVersions.d.ts.map +1 -0
- package/dist/countVersions.js +33 -0
- package/dist/countVersions.js.map +1 -0
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +10 -1
- package/dist/create.js.map +1 -1
- package/dist/createGlobal.d.ts.map +1 -1
- package/dist/createGlobal.js +10 -5
- package/dist/createGlobal.js.map +1 -1
- package/dist/createGlobalVersion.d.ts +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +13 -4
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createMigration.d.ts.map +1 -1
- package/dist/createMigration.js +8 -6
- package/dist/createMigration.js.map +1 -1
- package/dist/createVersion.d.ts +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +31 -9
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +11 -3
- package/dist/deleteOne.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +27 -3
- package/dist/find.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +9 -3
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +9 -3
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +27 -3
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +9 -3
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +9 -6
- package/dist/init.js.map +1 -1
- package/dist/models/buildCollectionSchema.d.ts +1 -2
- package/dist/models/buildCollectionSchema.d.ts.map +1 -1
- package/dist/models/buildCollectionSchema.js +7 -4
- package/dist/models/buildCollectionSchema.js.map +1 -1
- package/dist/models/buildGlobalModel.js +2 -2
- package/dist/models/buildGlobalModel.js.map +1 -1
- package/dist/models/buildSchema.d.ts +1 -2
- package/dist/models/buildSchema.d.ts.map +1 -1
- package/dist/models/buildSchema.js +27 -6
- package/dist/models/buildSchema.js.map +1 -1
- package/dist/queries/buildQuery.d.ts +2 -2
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/buildQuery.js +1 -2
- package/dist/queries/buildQuery.js.map +1 -1
- package/dist/queries/buildSearchParams.d.ts.map +1 -1
- package/dist/queries/buildSearchParams.js +19 -11
- package/dist/queries/buildSearchParams.js.map +1 -1
- package/dist/queries/buildSortParam.d.ts +2 -2
- package/dist/queries/buildSortParam.d.ts.map +1 -1
- package/dist/queries/buildSortParam.js +26 -17
- package/dist/queries/buildSortParam.js.map +1 -1
- package/dist/queries/getLocalizedSortProperty.spec.js +1 -1
- package/dist/queries/getLocalizedSortProperty.spec.js.map +1 -1
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +3 -1
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/sanitizeQueryValue.js +145 -26
- package/dist/queries/sanitizeQueryValue.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +29 -7
- package/dist/queryDrafts.js.map +1 -1
- package/dist/transactions/beginTransaction.d.ts.map +1 -1
- package/dist/transactions/beginTransaction.js +2 -0
- package/dist/transactions/beginTransaction.js.map +1 -1
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +3 -1
- package/dist/transactions/commitTransaction.js.map +1 -1
- package/dist/types.d.ts +7 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +17 -4
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateGlobalVersion.d.ts +2 -2
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +18 -4
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +18 -4
- package/dist/updateOne.js.map +1 -1
- package/dist/updateVersion.d.ts +1 -1
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +17 -3
- package/dist/updateVersion.js.map +1 -1
- package/dist/upsert.d.ts +3 -0
- package/dist/upsert.d.ts.map +1 -0
- package/dist/upsert.js +15 -0
- package/dist/upsert.js.map +1 -0
- package/dist/utilities/buildJoinAggregation.d.ts +18 -0
- package/dist/utilities/buildJoinAggregation.d.ts.map +1 -0
- package/dist/utilities/buildJoinAggregation.js +159 -0
- package/dist/utilities/buildJoinAggregation.js.map +1 -0
- package/dist/utilities/buildProjectionFromSelect.d.ts +8 -0
- package/dist/utilities/buildProjectionFromSelect.d.ts.map +1 -0
- package/dist/utilities/buildProjectionFromSelect.js +171 -0
- package/dist/utilities/buildProjectionFromSelect.js.map +1 -0
- package/dist/utilities/getDBName.d.ts.map +1 -1
- package/dist/utilities/getDBName.js +3 -1
- package/dist/utilities/getDBName.js.map +1 -1
- package/dist/utilities/handleError.js +2 -2
- package/dist/utilities/handleError.js.map +1 -1
- package/dist/utilities/sanitizeInternalFields.d.ts +1 -2
- package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
- package/dist/utilities/sanitizeInternalFields.js +1 -2
- package/dist/utilities/sanitizeInternalFields.js.map +1 -1
- package/dist/utilities/sanitizeRelationshipIDs.d.ts +9 -0
- package/dist/utilities/sanitizeRelationshipIDs.d.ts.map +1 -0
- package/dist/utilities/sanitizeRelationshipIDs.js +115 -0
- package/dist/utilities/sanitizeRelationshipIDs.js.map +1 -0
- package/dist/withSession.d.ts +1 -1
- package/dist/withSession.d.ts.map +1 -1
- package/dist/withSession.js +5 -3
- package/dist/withSession.js.map +1 -1
- package/package.json +9 -6
package/dist/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n AggregatePaginateModel,\n IndexDefinition,\n IndexOptions,\n Model,\n PaginateModel,\n SchemaOptions,\n} from 'mongoose'\nimport type {\n ArrayField,\n BlocksField,\n CheckboxField,\n CodeField,\n CollapsibleField,\n DateField,\n EmailField,\n Field,\n GroupField,\n JoinField,\n JSONField,\n NumberField,\n Payload,\n PayloadRequest,\n PointField,\n RadioField,\n RelationshipField,\n RichTextField,\n RowField,\n SanitizedConfig,\n SelectField,\n TabsField,\n TextareaField,\n TextField,\n UploadField,\n} from 'payload'\n\nimport type { BuildQueryArgs } from './queries/buildQuery.js'\n\nexport interface CollectionModel\n extends Model<any>,\n PaginateModel<any>,\n AggregatePaginateModel<any> {\n /** buildQuery is used to transform payload's where operator into what can be used by mongoose (e.g. id => _id) */\n buildQuery: (args: BuildQueryArgs) => Promise<Record<string, unknown>> // TODO: Delete this\n}\n\nexport interface AuthCollectionModel extends CollectionModel {\n resetPasswordExpiration: Date\n resetPasswordToken: string\n}\n\nexport type TypeOfIndex = {\n fields: IndexDefinition\n options?: IndexOptions\n}\n\nexport interface GlobalModel extends Model<Document> {\n buildQuery: (query: unknown, locale?: string) => Promise<Record<string, unknown>>\n}\n\nexport type BuildSchema<TSchema> = (args: {\n config: SanitizedConfig\n fields: Field[]\n options: BuildSchemaOptions\n}) => TSchema\n\nexport type BuildSchemaOptions = {\n allowIDField?: boolean\n disableUnique?: boolean\n draftsEnabled?: boolean\n indexSortableFields?: boolean\n options?: SchemaOptions\n}\n\nexport type FieldGenerator<TSchema, TField> = {\n config: SanitizedConfig\n field: TField\n options: BuildSchemaOptions\n schema: TSchema\n}\n\nexport type FieldGeneratorFunction<TSchema, TField extends Field> = (\n args: FieldGenerator<TSchema, TField>,\n) => void\n\n/**\n * Object mapping types to a schema based on TSchema\n */\nexport type FieldToSchemaMap<TSchema> = {\n array: FieldGeneratorFunction<TSchema, ArrayField>\n blocks: FieldGeneratorFunction<TSchema, BlocksField>\n checkbox: FieldGeneratorFunction<TSchema, CheckboxField>\n code: FieldGeneratorFunction<TSchema, CodeField>\n collapsible: FieldGeneratorFunction<TSchema, CollapsibleField>\n date: FieldGeneratorFunction<TSchema, DateField>\n email: FieldGeneratorFunction<TSchema, EmailField>\n group: FieldGeneratorFunction<TSchema, GroupField>\n join: FieldGeneratorFunction<TSchema, JoinField>\n json: FieldGeneratorFunction<TSchema, JSONField>\n number: FieldGeneratorFunction<TSchema, NumberField>\n point: FieldGeneratorFunction<TSchema, PointField>\n radio: FieldGeneratorFunction<TSchema, RadioField>\n relationship: FieldGeneratorFunction<TSchema, RelationshipField>\n richText: FieldGeneratorFunction<TSchema, RichTextField>\n row: FieldGeneratorFunction<TSchema, RowField>\n select: FieldGeneratorFunction<TSchema, SelectField>\n tabs: FieldGeneratorFunction<TSchema, TabsField>\n text: FieldGeneratorFunction<TSchema, TextField>\n textarea: FieldGeneratorFunction<TSchema, TextareaField>\n upload: FieldGeneratorFunction<TSchema, UploadField>\n}\n\nexport type MigrateUpArgs = { payload: Payload; req: PayloadRequest }\nexport type MigrateDownArgs = { payload: Payload; req: PayloadRequest }\n"],"names":[],"mappings":"AAiHA,WAAuE"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"updateGlobal.d.ts","sourceRoot":"","sources":["../src/updateGlobal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAA;
|
1
|
+
{"version":3,"file":"updateGlobal.d.ts","sourceRoot":"","sources":["../src/updateGlobal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAA;AAS3D,eAAO,MAAM,YAAY,EAAE,YA+B1B,CAAA"}
|
package/dist/updateGlobal.js
CHANGED
@@ -1,16 +1,29 @@
|
|
1
|
-
import
|
1
|
+
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
|
2
|
+
import { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js';
|
3
|
+
import { sanitizeRelationshipIDs } from './utilities/sanitizeRelationshipIDs.js';
|
2
4
|
import { withSession } from './withSession.js';
|
3
|
-
export const updateGlobal = async function updateGlobal({ slug, data, req = {} }) {
|
5
|
+
export const updateGlobal = async function updateGlobal({ slug, data, req = {}, select }) {
|
4
6
|
const Model = this.globals;
|
7
|
+
const fields = this.payload.config.globals.find((global)=>global.slug === slug).fields;
|
5
8
|
const options = {
|
6
9
|
...await withSession(this, req),
|
7
10
|
lean: true,
|
8
|
-
new: true
|
11
|
+
new: true,
|
12
|
+
projection: buildProjectionFromSelect({
|
13
|
+
adapter: this,
|
14
|
+
fields,
|
15
|
+
select
|
16
|
+
})
|
9
17
|
};
|
10
18
|
let result;
|
19
|
+
const sanitizedData = sanitizeRelationshipIDs({
|
20
|
+
config: this.payload.config,
|
21
|
+
data,
|
22
|
+
fields
|
23
|
+
});
|
11
24
|
result = await Model.findOneAndUpdate({
|
12
25
|
globalType: slug
|
13
|
-
},
|
26
|
+
}, sanitizedData, options);
|
14
27
|
result = JSON.parse(JSON.stringify(result));
|
15
28
|
// custom id type reset
|
16
29
|
result.id = result._id;
|
package/dist/updateGlobal.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/updateGlobal.ts"],"sourcesContent":["import type { PayloadRequest, UpdateGlobal } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport sanitizeInternalFields from './utilities/sanitizeInternalFields.js'\nimport { withSession } from './withSession.js'\n\nexport const updateGlobal: UpdateGlobal = async function updateGlobal(\n this: MongooseAdapter,\n { slug, data, req = {} as PayloadRequest },\n) {\n const Model = this.globals\n const options = {\n ...(await withSession(this, req)),\n lean: true,\n new: true,\n }\n\n let result\n result = await Model.findOneAndUpdate({ globalType: slug },
|
1
|
+
{"version":3,"sources":["../src/updateGlobal.ts"],"sourcesContent":["import type { PayloadRequest, UpdateGlobal } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js'\nimport { sanitizeRelationshipIDs } from './utilities/sanitizeRelationshipIDs.js'\nimport { withSession } from './withSession.js'\n\nexport const updateGlobal: UpdateGlobal = async function updateGlobal(\n this: MongooseAdapter,\n { slug, data, req = {} as PayloadRequest, select },\n) {\n const Model = this.globals\n const fields = this.payload.config.globals.find((global) => global.slug === slug).fields\n\n const options = {\n ...(await withSession(this, req)),\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({ adapter: this, fields, select }),\n }\n\n let result\n\n const sanitizedData = sanitizeRelationshipIDs({\n config: this.payload.config,\n data,\n fields,\n })\n\n result = await Model.findOneAndUpdate({ globalType: slug }, sanitizedData, options)\n\n result = JSON.parse(JSON.stringify(result))\n\n // custom id type reset\n result.id = result._id\n result = sanitizeInternalFields(result)\n\n return result\n}\n"],"names":["buildProjectionFromSelect","sanitizeInternalFields","sanitizeRelationshipIDs","withSession","updateGlobal","slug","data","req","select","Model","globals","fields","payload","config","find","global","options","lean","new","projection","adapter","result","sanitizedData","findOneAndUpdate","globalType","JSON","parse","stringify","id","_id"],"mappings":"AAIA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,sBAAsB,QAAQ,wCAAuC;AAC9E,SAASC,uBAAuB,QAAQ,yCAAwC;AAChF,SAASC,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,MAAMC,eAA6B,eAAeA,aAEvD,EAAEC,IAAI,EAAEC,IAAI,EAAEC,MAAM,CAAC,CAAmB,EAAEC,MAAM,EAAE;IAElD,MAAMC,QAAQ,IAAI,CAACC,OAAO;IAC1B,MAAMC,SAAS,IAAI,CAACC,OAAO,CAACC,MAAM,CAACH,OAAO,CAACI,IAAI,CAAC,CAACC,SAAWA,OAAOV,IAAI,KAAKA,MAAMM,MAAM;IAExF,MAAMK,UAAU;QACd,GAAI,MAAMb,YAAY,IAAI,EAAEI,IAAI;QAChCU,MAAM;QACNC,KAAK;QACLC,YAAYnB,0BAA0B;YAAEoB,SAAS,IAAI;YAAET;YAAQH;QAAO;IACxE;IAEA,IAAIa;IAEJ,MAAMC,gBAAgBpB,wBAAwB;QAC5CW,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM;QAC3BP;QACAK;IACF;IAEAU,SAAS,MAAMZ,MAAMc,gBAAgB,CAAC;QAAEC,YAAYnB;IAAK,GAAGiB,eAAeN;IAE3EK,SAASI,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACN;IAEnC,uBAAuB;IACvBA,OAAOO,EAAE,GAAGP,OAAOQ,GAAG;IACtBR,SAASpB,uBAAuBoB;IAEhC,OAAOA;AACT,EAAC"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import type
|
1
|
+
import { type TypeWithID, type UpdateGlobalVersionArgs } from 'payload';
|
2
2
|
import type { MongooseAdapter } from './index.js';
|
3
|
-
export declare function updateGlobalVersion<T extends TypeWithID>(this: MongooseAdapter, { id, global, locale, req, versionData, where, }: UpdateGlobalVersionArgs<T>): Promise<any>;
|
3
|
+
export declare function updateGlobalVersion<T extends TypeWithID>(this: MongooseAdapter, { id, global: globalSlug, locale, req, select, versionData, where, }: UpdateGlobalVersionArgs<T>): Promise<any>;
|
4
4
|
//# sourceMappingURL=updateGlobalVersion.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"updateGlobalVersion.d.ts","sourceRoot":"","sources":["../src/updateGlobalVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"updateGlobalVersion.d.ts","sourceRoot":"","sources":["../src/updateGlobalVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC7B,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAMjD,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,UAAU,EAC5D,IAAI,EAAE,eAAe,EACrB,EACE,EAAE,EACF,MAAM,EAAE,UAAU,EAClB,MAAM,EACN,GAA0B,EAC1B,MAAM,EACN,WAAW,EACX,KAAK,GACN,EAAE,uBAAuB,CAAC,CAAC,CAAC,gBAwC9B"}
|
@@ -1,22 +1,36 @@
|
|
1
|
+
import { buildVersionGlobalFields } from 'payload';
|
2
|
+
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
|
3
|
+
import { sanitizeRelationshipIDs } from './utilities/sanitizeRelationshipIDs.js';
|
1
4
|
import { withSession } from './withSession.js';
|
2
|
-
export async function updateGlobalVersion({ id, global, locale, req = {}, versionData, where }) {
|
3
|
-
const VersionModel = this.versions[
|
5
|
+
export async function updateGlobalVersion({ id, global: globalSlug, locale, req = {}, select, versionData, where }) {
|
6
|
+
const VersionModel = this.versions[globalSlug];
|
4
7
|
const whereToUse = where || {
|
5
8
|
id: {
|
6
9
|
equals: id
|
7
10
|
}
|
8
11
|
};
|
12
|
+
const fields = buildVersionGlobalFields(this.payload.config, this.payload.config.globals.find((global)=>global.slug === globalSlug));
|
9
13
|
const options = {
|
10
14
|
...await withSession(this, req),
|
11
15
|
lean: true,
|
12
|
-
new: true
|
16
|
+
new: true,
|
17
|
+
projection: buildProjectionFromSelect({
|
18
|
+
adapter: this,
|
19
|
+
fields,
|
20
|
+
select
|
21
|
+
})
|
13
22
|
};
|
14
23
|
const query = await VersionModel.buildQuery({
|
15
24
|
locale,
|
16
25
|
payload: this.payload,
|
17
26
|
where: whereToUse
|
18
27
|
});
|
19
|
-
const
|
28
|
+
const sanitizedData = sanitizeRelationshipIDs({
|
29
|
+
config: this.payload.config,
|
30
|
+
data: versionData,
|
31
|
+
fields
|
32
|
+
});
|
33
|
+
const doc = await VersionModel.findOneAndUpdate(query, sanitizedData, options);
|
20
34
|
const result = JSON.parse(JSON.stringify(doc));
|
21
35
|
const verificationToken = doc._verificationToken;
|
22
36
|
// custom id type reset
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/updateGlobalVersion.ts"],"sourcesContent":["import type
|
1
|
+
{"version":3,"sources":["../src/updateGlobalVersion.ts"],"sourcesContent":["import {\n buildVersionGlobalFields,\n type PayloadRequest,\n type TypeWithID,\n type UpdateGlobalVersionArgs,\n} from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { sanitizeRelationshipIDs } from './utilities/sanitizeRelationshipIDs.js'\nimport { withSession } from './withSession.js'\n\nexport async function updateGlobalVersion<T extends TypeWithID>(\n this: MongooseAdapter,\n {\n id,\n global: globalSlug,\n locale,\n req = {} as PayloadRequest,\n select,\n versionData,\n where,\n }: UpdateGlobalVersionArgs<T>,\n) {\n const VersionModel = this.versions[globalSlug]\n const whereToUse = where || { id: { equals: id } }\n const fields = buildVersionGlobalFields(\n this.payload.config,\n this.payload.config.globals.find((global) => global.slug === globalSlug),\n )\n\n const options = {\n ...(await withSession(this, req)),\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({ adapter: this, fields, select }),\n }\n\n const query = await VersionModel.buildQuery({\n locale,\n payload: this.payload,\n where: whereToUse,\n })\n\n const sanitizedData = sanitizeRelationshipIDs({\n config: this.payload.config,\n data: versionData,\n fields,\n })\n\n const doc = await VersionModel.findOneAndUpdate(query, sanitizedData, options)\n\n const result = JSON.parse(JSON.stringify(doc))\n\n const verificationToken = doc._verificationToken\n\n // custom id type reset\n result.id = result._id\n if (verificationToken) {\n result._verificationToken = verificationToken\n }\n return result\n}\n"],"names":["buildVersionGlobalFields","buildProjectionFromSelect","sanitizeRelationshipIDs","withSession","updateGlobalVersion","id","global","globalSlug","locale","req","select","versionData","where","VersionModel","versions","whereToUse","equals","fields","payload","config","globals","find","slug","options","lean","new","projection","adapter","query","buildQuery","sanitizedData","data","doc","findOneAndUpdate","result","JSON","parse","stringify","verificationToken","_verificationToken","_id"],"mappings":"AAAA,SACEA,wBAAwB,QAInB,UAAS;AAIhB,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,uBAAuB,QAAQ,yCAAwC;AAChF,SAASC,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,eAAeC,oBAEpB,EACEC,EAAE,EACFC,QAAQC,UAAU,EAClBC,MAAM,EACNC,MAAM,CAAC,CAAmB,EAC1BC,MAAM,EACNC,WAAW,EACXC,KAAK,EACsB;IAE7B,MAAMC,eAAe,IAAI,CAACC,QAAQ,CAACP,WAAW;IAC9C,MAAMQ,aAAaH,SAAS;QAAEP,IAAI;YAAEW,QAAQX;QAAG;IAAE;IACjD,MAAMY,SAASjB,yBACb,IAAI,CAACkB,OAAO,CAACC,MAAM,EACnB,IAAI,CAACD,OAAO,CAACC,MAAM,CAACC,OAAO,CAACC,IAAI,CAAC,CAACf,SAAWA,OAAOgB,IAAI,KAAKf;IAG/D,MAAMgB,UAAU;QACd,GAAI,MAAMpB,YAAY,IAAI,EAAEM,IAAI;QAChCe,MAAM;QACNC,KAAK;QACLC,YAAYzB,0BAA0B;YAAE0B,SAAS,IAAI;YAAEV;YAAQP;QAAO;IACxE;IAEA,MAAMkB,QAAQ,MAAMf,aAAagB,UAAU,CAAC;QAC1CrB;QACAU,SAAS,IAAI,CAACA,OAAO;QACrBN,OAAOG;IACT;IAEA,MAAMe,gBAAgB5B,wBAAwB;QAC5CiB,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM;QAC3BY,MAAMpB;QACNM;IACF;IAEA,MAAMe,MAAM,MAAMnB,aAAaoB,gBAAgB,CAACL,OAAOE,eAAeP;IAEtE,MAAMW,SAASC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACL;IAEzC,MAAMM,oBAAoBN,IAAIO,kBAAkB;IAEhD,uBAAuB;IACvBL,OAAO7B,EAAE,GAAG6B,OAAOM,GAAG;IACtB,IAAIF,mBAAmB;QACrBJ,OAAOK,kBAAkB,GAAGD;IAC9B;IACA,OAAOJ;AACT"}
|
package/dist/updateOne.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,SAAS,CAAA;AAUxD,eAAO,MAAM,SAAS,EAAE,SAiDvB,CAAA"}
|
package/dist/updateOne.js
CHANGED
@@ -1,17 +1,26 @@
|
|
1
|
+
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
|
1
2
|
import { handleError } from './utilities/handleError.js';
|
2
|
-
import sanitizeInternalFields from './utilities/sanitizeInternalFields.js';
|
3
|
+
import { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js';
|
4
|
+
import { sanitizeRelationshipIDs } from './utilities/sanitizeRelationshipIDs.js';
|
3
5
|
import { withSession } from './withSession.js';
|
4
|
-
export const updateOne = async function updateOne({ id, collection, data, locale, req = {}, where: whereArg }) {
|
6
|
+
export const updateOne = async function updateOne({ id, collection, data, locale, options: optionsArgs = {}, req = {}, select, where: whereArg }) {
|
5
7
|
const where = id ? {
|
6
8
|
id: {
|
7
9
|
equals: id
|
8
10
|
}
|
9
11
|
} : whereArg;
|
10
12
|
const Model = this.collections[collection];
|
13
|
+
const fields = this.payload.collections[collection].config.fields;
|
11
14
|
const options = {
|
15
|
+
...optionsArgs,
|
12
16
|
...await withSession(this, req),
|
13
17
|
lean: true,
|
14
|
-
new: true
|
18
|
+
new: true,
|
19
|
+
projection: buildProjectionFromSelect({
|
20
|
+
adapter: this,
|
21
|
+
fields,
|
22
|
+
select
|
23
|
+
})
|
15
24
|
};
|
16
25
|
const query = await Model.buildQuery({
|
17
26
|
locale,
|
@@ -19,8 +28,13 @@ export const updateOne = async function updateOne({ id, collection, data, locale
|
|
19
28
|
where
|
20
29
|
});
|
21
30
|
let result;
|
31
|
+
const sanitizedData = sanitizeRelationshipIDs({
|
32
|
+
config: this.payload.config,
|
33
|
+
data,
|
34
|
+
fields
|
35
|
+
});
|
22
36
|
try {
|
23
|
-
result = await Model.findOneAndUpdate(query,
|
37
|
+
result = await Model.findOneAndUpdate(query, sanitizedData, options);
|
24
38
|
} catch (error) {
|
25
39
|
handleError({
|
26
40
|
collection,
|
package/dist/updateOne.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { PayloadRequest, UpdateOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { handleError } from './utilities/handleError.js'\nimport sanitizeInternalFields from './utilities/sanitizeInternalFields.js'\nimport { withSession } from './withSession.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: MongooseAdapter,\n {
|
1
|
+
{"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { QueryOptions } from 'mongoose'\nimport type { PayloadRequest, UpdateOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { handleError } from './utilities/handleError.js'\nimport { sanitizeInternalFields } from './utilities/sanitizeInternalFields.js'\nimport { sanitizeRelationshipIDs } from './utilities/sanitizeRelationshipIDs.js'\nimport { withSession } from './withSession.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: MongooseAdapter,\n {\n id,\n collection,\n data,\n locale,\n options: optionsArgs = {},\n req = {} as PayloadRequest,\n select,\n where: whereArg,\n },\n) {\n const where = id ? { id: { equals: id } } : whereArg\n const Model = this.collections[collection]\n const fields = this.payload.collections[collection].config.fields\n const options: QueryOptions = {\n ...optionsArgs,\n ...(await withSession(this, req)),\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({ adapter: this, fields, select }),\n }\n\n const query = await Model.buildQuery({\n locale,\n payload: this.payload,\n where,\n })\n\n let result\n\n const sanitizedData = sanitizeRelationshipIDs({\n config: this.payload.config,\n data,\n fields,\n })\n\n try {\n result = await Model.findOneAndUpdate(query, sanitizedData, options)\n } catch (error) {\n handleError({ collection, error, req })\n }\n\n result = JSON.parse(JSON.stringify(result))\n result.id = result._id\n result = sanitizeInternalFields(result)\n\n return result\n}\n"],"names":["buildProjectionFromSelect","handleError","sanitizeInternalFields","sanitizeRelationshipIDs","withSession","updateOne","id","collection","data","locale","options","optionsArgs","req","select","where","whereArg","equals","Model","collections","fields","payload","config","lean","new","projection","adapter","query","buildQuery","result","sanitizedData","findOneAndUpdate","error","JSON","parse","stringify","_id"],"mappings":"AAKA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,WAAW,QAAQ,6BAA4B;AACxD,SAASC,sBAAsB,QAAQ,wCAAuC;AAC9E,SAASC,uBAAuB,QAAQ,yCAAwC;AAChF,SAASC,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,MAAMC,YAAuB,eAAeA,UAEjD,EACEC,EAAE,EACFC,UAAU,EACVC,IAAI,EACJC,MAAM,EACNC,SAASC,cAAc,CAAC,CAAC,EACzBC,MAAM,CAAC,CAAmB,EAC1BC,MAAM,EACNC,OAAOC,QAAQ,EAChB;IAED,MAAMD,QAAQR,KAAK;QAAEA,IAAI;YAAEU,QAAQV;QAAG;IAAE,IAAIS;IAC5C,MAAME,QAAQ,IAAI,CAACC,WAAW,CAACX,WAAW;IAC1C,MAAMY,SAAS,IAAI,CAACC,OAAO,CAACF,WAAW,CAACX,WAAW,CAACc,MAAM,CAACF,MAAM;IACjE,MAAMT,UAAwB;QAC5B,GAAGC,WAAW;QACd,GAAI,MAAMP,YAAY,IAAI,EAAEQ,IAAI;QAChCU,MAAM;QACNC,KAAK;QACLC,YAAYxB,0BAA0B;YAAEyB,SAAS,IAAI;YAAEN;YAAQN;QAAO;IACxE;IAEA,MAAMa,QAAQ,MAAMT,MAAMU,UAAU,CAAC;QACnClB;QACAW,SAAS,IAAI,CAACA,OAAO;QACrBN;IACF;IAEA,IAAIc;IAEJ,MAAMC,gBAAgB1B,wBAAwB;QAC5CkB,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM;QAC3Bb;QACAW;IACF;IAEA,IAAI;QACFS,SAAS,MAAMX,MAAMa,gBAAgB,CAACJ,OAAOG,eAAenB;IAC9D,EAAE,OAAOqB,OAAO;QACd9B,YAAY;YAAEM;YAAYwB;YAAOnB;QAAI;IACvC;IAEAgB,SAASI,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACN;IACnCA,OAAOtB,EAAE,GAAGsB,OAAOO,GAAG;IACtBP,SAAS1B,uBAAuB0B;IAEhC,OAAOA;AACT,EAAC"}
|
package/dist/updateVersion.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"updateVersion.d.ts","sourceRoot":"","sources":["../src/updateVersion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"updateVersion.d.ts","sourceRoot":"","sources":["../src/updateVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,aAAa,EAAE,MAAM,SAAS,CAAA;AAQ/F,eAAO,MAAM,aAAa,EAAE,aA0C3B,CAAA"}
|
package/dist/updateVersion.js
CHANGED
@@ -1,22 +1,36 @@
|
|
1
|
+
import { buildVersionCollectionFields } from 'payload';
|
2
|
+
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
|
3
|
+
import { sanitizeRelationshipIDs } from './utilities/sanitizeRelationshipIDs.js';
|
1
4
|
import { withSession } from './withSession.js';
|
2
|
-
export const updateVersion = async function updateVersion({ id, collection, locale, req = {}, versionData, where }) {
|
5
|
+
export const updateVersion = async function updateVersion({ id, collection, locale, req = {}, select, versionData, where }) {
|
3
6
|
const VersionModel = this.versions[collection];
|
4
7
|
const whereToUse = where || {
|
5
8
|
id: {
|
6
9
|
equals: id
|
7
10
|
}
|
8
11
|
};
|
12
|
+
const fields = buildVersionCollectionFields(this.payload.config, this.payload.collections[collection].config);
|
9
13
|
const options = {
|
10
14
|
...await withSession(this, req),
|
11
15
|
lean: true,
|
12
|
-
new: true
|
16
|
+
new: true,
|
17
|
+
projection: buildProjectionFromSelect({
|
18
|
+
adapter: this,
|
19
|
+
fields,
|
20
|
+
select
|
21
|
+
})
|
13
22
|
};
|
14
23
|
const query = await VersionModel.buildQuery({
|
15
24
|
locale,
|
16
25
|
payload: this.payload,
|
17
26
|
where: whereToUse
|
18
27
|
});
|
19
|
-
const
|
28
|
+
const sanitizedData = sanitizeRelationshipIDs({
|
29
|
+
config: this.payload.config,
|
30
|
+
data: versionData,
|
31
|
+
fields
|
32
|
+
});
|
33
|
+
const doc = await VersionModel.findOneAndUpdate(query, sanitizedData, options);
|
20
34
|
const result = JSON.parse(JSON.stringify(doc));
|
21
35
|
const verificationToken = doc._verificationToken;
|
22
36
|
// custom id type reset
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/updateVersion.ts"],"sourcesContent":["import type
|
1
|
+
{"version":3,"sources":["../src/updateVersion.ts"],"sourcesContent":["import { buildVersionCollectionFields, type PayloadRequest, type UpdateVersion } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { sanitizeRelationshipIDs } from './utilities/sanitizeRelationshipIDs.js'\nimport { withSession } from './withSession.js'\n\nexport const updateVersion: UpdateVersion = async function updateVersion(\n this: MongooseAdapter,\n { id, collection, locale, req = {} as PayloadRequest, select, versionData, where },\n) {\n const VersionModel = this.versions[collection]\n const whereToUse = where || { id: { equals: id } }\n const fields = buildVersionCollectionFields(\n this.payload.config,\n this.payload.collections[collection].config,\n )\n\n const options = {\n ...(await withSession(this, req)),\n lean: true,\n new: true,\n projection: buildProjectionFromSelect({ adapter: this, fields, select }),\n }\n\n const query = await VersionModel.buildQuery({\n locale,\n payload: this.payload,\n where: whereToUse,\n })\n\n const sanitizedData = sanitizeRelationshipIDs({\n config: this.payload.config,\n data: versionData,\n fields,\n })\n\n const doc = await VersionModel.findOneAndUpdate(query, sanitizedData, options)\n\n const result = JSON.parse(JSON.stringify(doc))\n\n const verificationToken = doc._verificationToken\n\n // custom id type reset\n result.id = result._id\n if (verificationToken) {\n result._verificationToken = verificationToken\n }\n return result\n}\n"],"names":["buildVersionCollectionFields","buildProjectionFromSelect","sanitizeRelationshipIDs","withSession","updateVersion","id","collection","locale","req","select","versionData","where","VersionModel","versions","whereToUse","equals","fields","payload","config","collections","options","lean","new","projection","adapter","query","buildQuery","sanitizedData","data","doc","findOneAndUpdate","result","JSON","parse","stringify","verificationToken","_verificationToken","_id"],"mappings":"AAAA,SAASA,4BAA4B,QAAiD,UAAS;AAI/F,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,uBAAuB,QAAQ,yCAAwC;AAChF,SAASC,WAAW,QAAQ,mBAAkB;AAE9C,OAAO,MAAMC,gBAA+B,eAAeA,cAEzD,EAAEC,EAAE,EAAEC,UAAU,EAAEC,MAAM,EAAEC,MAAM,CAAC,CAAmB,EAAEC,MAAM,EAAEC,WAAW,EAAEC,KAAK,EAAE;IAElF,MAAMC,eAAe,IAAI,CAACC,QAAQ,CAACP,WAAW;IAC9C,MAAMQ,aAAaH,SAAS;QAAEN,IAAI;YAAEU,QAAQV;QAAG;IAAE;IACjD,MAAMW,SAAShB,6BACb,IAAI,CAACiB,OAAO,CAACC,MAAM,EACnB,IAAI,CAACD,OAAO,CAACE,WAAW,CAACb,WAAW,CAACY,MAAM;IAG7C,MAAME,UAAU;QACd,GAAI,MAAMjB,YAAY,IAAI,EAAEK,IAAI;QAChCa,MAAM;QACNC,KAAK;QACLC,YAAYtB,0BAA0B;YAAEuB,SAAS,IAAI;YAAER;YAAQP;QAAO;IACxE;IAEA,MAAMgB,QAAQ,MAAMb,aAAac,UAAU,CAAC;QAC1CnB;QACAU,SAAS,IAAI,CAACA,OAAO;QACrBN,OAAOG;IACT;IAEA,MAAMa,gBAAgBzB,wBAAwB;QAC5CgB,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM;QAC3BU,MAAMlB;QACNM;IACF;IAEA,MAAMa,MAAM,MAAMjB,aAAakB,gBAAgB,CAACL,OAAOE,eAAeP;IAEtE,MAAMW,SAASC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACL;IAEzC,MAAMM,oBAAoBN,IAAIO,kBAAkB;IAEhD,uBAAuB;IACvBL,OAAO1B,EAAE,GAAG0B,OAAOM,GAAG;IACtB,IAAIF,mBAAmB;QACrBJ,OAAOK,kBAAkB,GAAGD;IAC9B;IACA,OAAOJ;AACT,EAAC"}
|
package/dist/upsert.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"upsert.d.ts","sourceRoot":"","sources":["../src/upsert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,MAAM,EAAE,MAAM,SAAS,CAAA;AAIrD,eAAO,MAAM,MAAM,EAAE,MAKpB,CAAA"}
|
package/dist/upsert.js
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
export const upsert = async function upsert({ collection, data, locale, req = {}, select, where }) {
|
2
|
+
return this.updateOne({
|
3
|
+
collection,
|
4
|
+
data,
|
5
|
+
locale,
|
6
|
+
options: {
|
7
|
+
upsert: true
|
8
|
+
},
|
9
|
+
req,
|
10
|
+
select,
|
11
|
+
where
|
12
|
+
});
|
13
|
+
};
|
14
|
+
|
15
|
+
//# sourceMappingURL=upsert.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/upsert.ts"],"sourcesContent":["import type { PayloadRequest, Upsert } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nexport const upsert: Upsert = async function upsert(\n this: MongooseAdapter,\n { collection, data, locale, req = {} as PayloadRequest, select, where },\n) {\n return this.updateOne({ collection, data, locale, options: { upsert: true }, req, select, where })\n}\n"],"names":["upsert","collection","data","locale","req","select","where","updateOne","options"],"mappings":"AAIA,OAAO,MAAMA,SAAiB,eAAeA,OAE3C,EAAEC,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,CAAC,CAAmB,EAAEC,MAAM,EAAEC,KAAK,EAAE;IAEvE,OAAO,IAAI,CAACC,SAAS,CAAC;QAAEN;QAAYC;QAAMC;QAAQK,SAAS;YAAER,QAAQ;QAAK;QAAGI;QAAKC;QAAQC;IAAM;AAClG,EAAC"}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import type { PipelineStage } from 'mongoose';
|
2
|
+
import type { CollectionSlug, JoinQuery, SanitizedCollectionConfig, Where } from 'payload';
|
3
|
+
import type { MongooseAdapter } from '../index.js';
|
4
|
+
type BuildJoinAggregationArgs = {
|
5
|
+
adapter: MongooseAdapter;
|
6
|
+
collection: CollectionSlug;
|
7
|
+
collectionConfig: SanitizedCollectionConfig;
|
8
|
+
joins: JoinQuery;
|
9
|
+
limit?: number;
|
10
|
+
locale: string;
|
11
|
+
projection?: Record<string, true>;
|
12
|
+
query?: Where;
|
13
|
+
/** whether the query is from drafts */
|
14
|
+
versions?: boolean;
|
15
|
+
};
|
16
|
+
export declare const buildJoinAggregation: ({ adapter, collection, collectionConfig, joins, limit, locale, projection, query, versions, }: BuildJoinAggregationArgs) => Promise<PipelineStage[] | undefined>;
|
17
|
+
export {};
|
18
|
+
//# sourceMappingURL=buildJoinAggregation.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"buildJoinAggregation.d.ts","sourceRoot":"","sources":["../../src/utilities/buildJoinAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,KAAK,EAAE,SAAS,CAAA;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,kGAU9B,wBAAwB,KAAG,OAAO,CAAC,aAAa,EAAE,GAAG,SAAS,CA+JhE,CAAA"}
|
@@ -0,0 +1,159 @@
|
|
1
|
+
import { buildSortParam } from '../queries/buildSortParam.js';
|
2
|
+
export const buildJoinAggregation = async ({ adapter, collection, collectionConfig, joins, limit, locale, projection, query, versions })=>{
|
3
|
+
if (Object.keys(collectionConfig.joins).length === 0 || joins === false) {
|
4
|
+
return;
|
5
|
+
}
|
6
|
+
const joinConfig = adapter.payload.collections[collection].config.joins;
|
7
|
+
const aggregate = [
|
8
|
+
{
|
9
|
+
$sort: {
|
10
|
+
createdAt: -1
|
11
|
+
}
|
12
|
+
}
|
13
|
+
];
|
14
|
+
if (query) {
|
15
|
+
aggregate.push({
|
16
|
+
$match: query
|
17
|
+
});
|
18
|
+
}
|
19
|
+
if (limit) {
|
20
|
+
aggregate.push({
|
21
|
+
$limit: limit
|
22
|
+
});
|
23
|
+
}
|
24
|
+
for (const slug of Object.keys(joinConfig)){
|
25
|
+
for (const join of joinConfig[slug]){
|
26
|
+
const joinModel = adapter.collections[join.field.collection];
|
27
|
+
if (projection && !projection[join.joinPath]) {
|
28
|
+
continue;
|
29
|
+
}
|
30
|
+
if (joins?.[join.joinPath] === false) {
|
31
|
+
continue;
|
32
|
+
}
|
33
|
+
const { limit: limitJoin = join.field.defaultLimit ?? 10, sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort, where: whereJoin } = joins?.[join.joinPath] || {};
|
34
|
+
const sort = buildSortParam({
|
35
|
+
config: adapter.payload.config,
|
36
|
+
fields: adapter.payload.collections[slug].config.fields,
|
37
|
+
locale,
|
38
|
+
sort: sortJoin,
|
39
|
+
timestamps: true
|
40
|
+
});
|
41
|
+
const sortProperty = Object.keys(sort)[0];
|
42
|
+
const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1;
|
43
|
+
const $match = await joinModel.buildQuery({
|
44
|
+
locale,
|
45
|
+
payload: adapter.payload,
|
46
|
+
where: whereJoin
|
47
|
+
});
|
48
|
+
const pipeline = [
|
49
|
+
{
|
50
|
+
$match
|
51
|
+
},
|
52
|
+
{
|
53
|
+
$sort: {
|
54
|
+
[sortProperty]: sortDirection
|
55
|
+
}
|
56
|
+
}
|
57
|
+
];
|
58
|
+
if (limitJoin > 0) {
|
59
|
+
pipeline.push({
|
60
|
+
$limit: limitJoin + 1
|
61
|
+
});
|
62
|
+
}
|
63
|
+
if (adapter.payload.config.localization && locale === 'all') {
|
64
|
+
adapter.payload.config.localization.localeCodes.forEach((code)=>{
|
65
|
+
const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${code}`;
|
66
|
+
aggregate.push({
|
67
|
+
$lookup: {
|
68
|
+
as: `${as}.docs`,
|
69
|
+
foreignField: `${join.field.on}${code}`,
|
70
|
+
from: adapter.collections[slug].collection.name,
|
71
|
+
localField: versions ? 'parent' : '_id',
|
72
|
+
pipeline
|
73
|
+
}
|
74
|
+
}, {
|
75
|
+
$addFields: {
|
76
|
+
[`${as}.docs`]: {
|
77
|
+
$map: {
|
78
|
+
as: 'doc',
|
79
|
+
in: '$$doc._id',
|
80
|
+
input: `$${as}.docs`
|
81
|
+
}
|
82
|
+
},
|
83
|
+
[`${as}.hasNextPage`]: limitJoin ? {
|
84
|
+
$gt: [
|
85
|
+
{
|
86
|
+
$size: `$${as}.docs`
|
87
|
+
},
|
88
|
+
limitJoin
|
89
|
+
]
|
90
|
+
} : false
|
91
|
+
}
|
92
|
+
});
|
93
|
+
if (limitJoin > 0) {
|
94
|
+
aggregate.push({
|
95
|
+
$addFields: {
|
96
|
+
[`${as}.docs`]: {
|
97
|
+
$slice: [
|
98
|
+
`$${as}.docs`,
|
99
|
+
limitJoin
|
100
|
+
]
|
101
|
+
}
|
102
|
+
}
|
103
|
+
});
|
104
|
+
}
|
105
|
+
});
|
106
|
+
} else {
|
107
|
+
const localeSuffix = join.field.localized && adapter.payload.config.localization && locale ? `.${locale}` : '';
|
108
|
+
const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${localeSuffix}`;
|
109
|
+
aggregate.push({
|
110
|
+
$lookup: {
|
111
|
+
as: `${as}.docs`,
|
112
|
+
foreignField: `${join.field.on}${localeSuffix}`,
|
113
|
+
from: adapter.collections[slug].collection.name,
|
114
|
+
localField: versions ? 'parent' : '_id',
|
115
|
+
pipeline
|
116
|
+
}
|
117
|
+
}, {
|
118
|
+
$addFields: {
|
119
|
+
[`${as}.docs`]: {
|
120
|
+
$map: {
|
121
|
+
as: 'doc',
|
122
|
+
in: '$$doc._id',
|
123
|
+
input: `$${as}.docs`
|
124
|
+
}
|
125
|
+
},
|
126
|
+
[`${as}.hasNextPage`]: {
|
127
|
+
$gt: [
|
128
|
+
{
|
129
|
+
$size: `$${as}.docs`
|
130
|
+
},
|
131
|
+
limitJoin || Number.MAX_VALUE
|
132
|
+
]
|
133
|
+
}
|
134
|
+
}
|
135
|
+
});
|
136
|
+
if (limitJoin > 0) {
|
137
|
+
aggregate.push({
|
138
|
+
$addFields: {
|
139
|
+
[`${as}.docs`]: {
|
140
|
+
$slice: [
|
141
|
+
`$${as}.docs`,
|
142
|
+
limitJoin
|
143
|
+
]
|
144
|
+
}
|
145
|
+
}
|
146
|
+
});
|
147
|
+
}
|
148
|
+
}
|
149
|
+
}
|
150
|
+
}
|
151
|
+
if (projection) {
|
152
|
+
aggregate.push({
|
153
|
+
$project: projection
|
154
|
+
});
|
155
|
+
}
|
156
|
+
return aggregate;
|
157
|
+
};
|
158
|
+
|
159
|
+
//# sourceMappingURL=buildJoinAggregation.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/buildJoinAggregation.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { CollectionSlug, JoinQuery, SanitizedCollectionConfig, Where } from 'payload'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { buildSortParam } from '../queries/buildSortParam.js'\n\ntype BuildJoinAggregationArgs = {\n adapter: MongooseAdapter\n collection: CollectionSlug\n collectionConfig: SanitizedCollectionConfig\n joins: JoinQuery\n // the number of docs to get at the top collection level\n limit?: number\n locale: string\n projection?: Record<string, true>\n // the where clause for the top collection\n query?: Where\n /** whether the query is from drafts */\n versions?: boolean\n}\n\nexport const buildJoinAggregation = async ({\n adapter,\n collection,\n collectionConfig,\n joins,\n limit,\n locale,\n projection,\n query,\n versions,\n}: BuildJoinAggregationArgs): Promise<PipelineStage[] | undefined> => {\n if (Object.keys(collectionConfig.joins).length === 0 || joins === false) {\n return\n }\n\n const joinConfig = adapter.payload.collections[collection].config.joins\n const aggregate: PipelineStage[] = [\n {\n $sort: { createdAt: -1 },\n },\n ]\n\n if (query) {\n aggregate.push({\n $match: query,\n })\n }\n\n if (limit) {\n aggregate.push({\n $limit: limit,\n })\n }\n\n for (const slug of Object.keys(joinConfig)) {\n for (const join of joinConfig[slug]) {\n const joinModel = adapter.collections[join.field.collection]\n\n if (projection && !projection[join.joinPath]) {\n continue\n }\n\n if (joins?.[join.joinPath] === false) {\n continue\n }\n\n const {\n limit: limitJoin = join.field.defaultLimit ?? 10,\n sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort,\n where: whereJoin,\n } = joins?.[join.joinPath] || {}\n\n const sort = buildSortParam({\n config: adapter.payload.config,\n fields: adapter.payload.collections[slug].config.fields,\n locale,\n sort: sortJoin,\n timestamps: true,\n })\n const sortProperty = Object.keys(sort)[0]\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n const $match = await joinModel.buildQuery({\n locale,\n payload: adapter.payload,\n where: whereJoin,\n })\n\n const pipeline: Exclude<PipelineStage, PipelineStage.Merge | PipelineStage.Out>[] = [\n { $match },\n {\n $sort: { [sortProperty]: sortDirection },\n },\n ]\n\n if (limitJoin > 0) {\n pipeline.push({\n $limit: limitJoin + 1,\n })\n }\n\n if (adapter.payload.config.localization && locale === 'all') {\n adapter.payload.config.localization.localeCodes.forEach((code) => {\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${code}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${join.field.on}${code}`,\n from: adapter.collections[slug].collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: limitJoin\n ? { $gt: [{ $size: `$${as}.docs` }, limitJoin] }\n : false,\n // Boolean indicating if more docs than limit\n },\n },\n )\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n })\n } else {\n const localeSuffix =\n join.field.localized && adapter.payload.config.localization && locale ? `.${locale}` : ''\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${localeSuffix}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${join.field.on}${localeSuffix}`,\n from: adapter.collections[slug].collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n }, // Boolean indicating if more docs than limit\n },\n },\n )\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n }\n }\n }\n\n if (projection) {\n aggregate.push({ $project: projection })\n }\n\n return aggregate\n}\n"],"names":["buildSortParam","buildJoinAggregation","adapter","collection","collectionConfig","joins","limit","locale","projection","query","versions","Object","keys","length","joinConfig","payload","collections","config","aggregate","$sort","createdAt","push","$match","$limit","slug","join","joinModel","field","joinPath","limitJoin","defaultLimit","sort","sortJoin","defaultSort","where","whereJoin","fields","timestamps","sortProperty","sortDirection","buildQuery","pipeline","localization","localeCodes","forEach","code","as","$lookup","foreignField","on","from","name","localField","$addFields","$map","in","input","$gt","$size","$slice","localeSuffix","localized","Number","MAX_VALUE","$project"],"mappings":"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"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { type Field, type SelectType } from 'payload';
|
2
|
+
import type { MongooseAdapter } from '../index.js';
|
3
|
+
export declare const buildProjectionFromSelect: ({ adapter, fields, select, }: {
|
4
|
+
adapter: MongooseAdapter;
|
5
|
+
fields: Field[];
|
6
|
+
select?: SelectType;
|
7
|
+
}) => Record<string, true> | undefined;
|
8
|
+
//# sourceMappingURL=buildProjectionFromSelect.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"buildProjectionFromSelect.d.ts","sourceRoot":"","sources":["../../src/utilities/buildProjectionFromSelect.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EAGV,KAAK,UAAU,EAEhB,MAAM,SAAS,CAAA;AAGhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AA6MlD,eAAO,MAAM,yBAAyB,iCAInC;IACD,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,KAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,SAmB1B,CAAA"}
|