@payloadcms/db-mongodb 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ee5d8bd
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 +0 -1
- package/dist/connect.js.map +1 -1
- package/dist/count.d.ts.map +1 -1
- package/dist/count.js +4 -33
- package/dist/count.js.map +1 -1
- package/dist/countGlobalVersions.d.ts.map +1 -1
- package/dist/countGlobalVersions.js +0 -1
- package/dist/countGlobalVersions.js.map +1 -1
- package/dist/countVersions.d.ts.map +1 -1
- package/dist/countVersions.js +4 -36
- package/dist/countVersions.js.map +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +0 -22
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +3 -16
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteMany.d.ts.map +1 -1
- package/dist/deleteMany.js +0 -1
- package/dist/deleteMany.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +1 -20
- package/dist/deleteOne.js.map +1 -1
- package/dist/deleteVersions.d.ts.map +1 -1
- package/dist/deleteVersions.js +0 -1
- package/dist/deleteVersions.js.map +1 -1
- package/dist/exports/migration-utils.d.ts +0 -1
- package/dist/exports/migration-utils.d.ts.map +1 -1
- package/dist/exports/migration-utils.js +0 -1
- package/dist/exports/migration-utils.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +8 -44
- package/dist/find.js.map +1 -1
- package/dist/findDistinct.d.ts.map +1 -1
- package/dist/findDistinct.js +11 -70
- package/dist/findDistinct.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +5 -34
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +2 -10
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +5 -43
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +5 -49
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/models/buildGlobalModel.d.ts.map +1 -1
- package/dist/models/buildGlobalModel.js +1 -30
- package/dist/models/buildGlobalModel.js.map +1 -1
- package/dist/models/buildSchema.d.ts.map +1 -1
- package/dist/models/buildSchema.js +10 -30
- package/dist/models/buildSchema.js.map +1 -1
- package/dist/predefinedMigrations/migrateSizesToVariants.js.map +1 -1
- package/dist/queries/buildAndOrConditions.d.ts +2 -4
- package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
- package/dist/queries/buildAndOrConditions.js +1 -3
- package/dist/queries/buildAndOrConditions.js.map +1 -1
- package/dist/queries/buildQuery.d.ts +2 -4
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/buildQuery.js +1 -3
- package/dist/queries/buildQuery.js.map +1 -1
- package/dist/queries/buildSearchParams.d.ts +2 -4
- package/dist/queries/buildSearchParams.d.ts.map +1 -1
- package/dist/queries/buildSearchParams.js +44 -175
- package/dist/queries/buildSearchParams.js.map +1 -1
- package/dist/queries/getBuildQueryPlugin.d.ts +1 -3
- package/dist/queries/getBuildQueryPlugin.d.ts.map +1 -1
- package/dist/queries/getBuildQueryPlugin.js +1 -3
- package/dist/queries/getBuildQueryPlugin.js.map +1 -1
- package/dist/queries/parseParams.d.ts +2 -4
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +1 -5
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +7 -38
- package/dist/queryDrafts.js.map +1 -1
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +7 -55
- package/dist/transactions/commitTransaction.js.map +1 -1
- package/dist/transactions/rollbackTransaction.d.ts.map +1 -1
- package/dist/transactions/rollbackTransaction.js +9 -10
- package/dist/transactions/rollbackTransaction.js.map +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +7 -87
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +0 -1
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateMany.d.ts.map +1 -1
- package/dist/updateMany.js +1 -3
- package/dist/updateMany.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +2 -28
- package/dist/updateOne.js.map +1 -1
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +0 -1
- package/dist/updateVersion.js.map +1 -1
- package/dist/utilities/aggregatePaginate.d.ts +1 -2
- package/dist/utilities/aggregatePaginate.d.ts.map +1 -1
- package/dist/utilities/aggregatePaginate.js +4 -18
- package/dist/utilities/aggregatePaginate.js.map +1 -1
- package/dist/utilities/buildJoinAggregation.d.ts +2 -4
- package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
- package/dist/utilities/buildJoinAggregation.js +23 -118
- package/dist/utilities/buildJoinAggregation.js.map +1 -1
- package/dist/utilities/resolveJoins.d.ts +2 -6
- package/dist/utilities/resolveJoins.d.ts.map +1 -1
- package/dist/utilities/resolveJoins.js +26 -114
- package/dist/utilities/resolveJoins.js.map +1 -1
- package/package.json +16 -19
- package/dist/deleteBranchGlobal.d.ts +0 -10
- package/dist/deleteBranchGlobal.d.ts.map +0 -1
- package/dist/deleteBranchGlobal.js +0 -22
- package/dist/deleteBranchGlobal.js.map +0 -1
- package/dist/predefinedMigrations/branching.d.ts +0 -4
- package/dist/predefinedMigrations/branching.d.ts.map +0 -1
- package/dist/predefinedMigrations/branching.js +0 -9
- package/dist/predefinedMigrations/branching.js.map +0 -1
- package/dist/predefinedMigrations/migrateBranching.d.ts +0 -15
- package/dist/predefinedMigrations/migrateBranching.d.ts.map +0 -1
- package/dist/predefinedMigrations/migrateBranching.js +0 -88
- package/dist/predefinedMigrations/migrateBranching.js.map +0 -1
- package/dist/queries/buildBranchVisibility.d.ts +0 -11
- package/dist/queries/buildBranchVisibility.d.ts.map +0 -1
- package/dist/queries/buildBranchVisibility.js +0 -204
- package/dist/queries/buildBranchVisibility.js.map +0 -1
- package/dist/upsertBranchGlobalChange.d.ts +0 -3
- package/dist/upsertBranchGlobalChange.d.ts.map +0 -1
- package/dist/upsertBranchGlobalChange.js +0 -28
- package/dist/upsertBranchGlobalChange.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/migration-utils.ts"],"sourcesContent":["export {
|
|
1
|
+
{"version":3,"sources":["../../src/exports/migration-utils.ts"],"sourcesContent":["export {\n localizeStatus,\n migrateLocalizeStatus,\n} from '../predefinedMigrations/migrateLocalizeStatus.js'\nexport { migrateRelationshipsV2_V3 } from '../predefinedMigrations/migrateRelationshipsV2_V3.js'\nexport { migrateSizesToVariants } from '../predefinedMigrations/migrateSizesToVariants.js'\nexport { migrateVersionsV1_V2 } from '../predefinedMigrations/migrateVersionsV1_V2.js'\n"],"names":["localizeStatus","migrateLocalizeStatus","migrateRelationshipsV2_V3","migrateSizesToVariants","migrateVersionsV1_V2"],"mappings":"AAAA,SACEA,cAAc,EACdC,qBAAqB,QAChB,mDAAkD;AACzD,SAASC,yBAAyB,QAAQ,uDAAsD;AAChG,SAASC,sBAAsB,QAAQ,oDAAmD;AAC1F,SAASC,oBAAoB,QAAQ,kDAAiD"}
|
package/dist/find.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAgBnC,eAAO,MAAM,IAAI,EAAE,IAiLlB,CAAA"}
|
package/dist/find.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { buildBranchVisibilityStages } from './queries/buildBranchVisibility.js';
|
|
1
|
+
import { flattenWhereToOperators } from 'payload';
|
|
3
2
|
import { buildQuery } from './queries/buildQuery.js';
|
|
4
3
|
import { buildSortParam } from './queries/buildSortParam.js';
|
|
5
4
|
import { aggregatePaginate } from './utilities/aggregatePaginate.js';
|
|
@@ -9,27 +8,11 @@ import { getCollection } from './utilities/getEntity.js';
|
|
|
9
8
|
import { getSession } from './utilities/getSession.js';
|
|
10
9
|
import { resolveJoins } from './utilities/resolveJoins.js';
|
|
11
10
|
import { transform } from './utilities/transform.js';
|
|
12
|
-
export const find = async function find({
|
|
11
|
+
export const find = async function find({ collection: collectionSlug, draftsEnabled, joins = {}, limit = 0, locale, page, pagination, projection, req, select, sort: sortArg, where = {} }) {
|
|
13
12
|
const { collectionConfig, Model } = getCollection({
|
|
14
13
|
adapter: this,
|
|
15
14
|
collectionSlug
|
|
16
15
|
});
|
|
17
|
-
const branchReadState = resolveBranchReadState({
|
|
18
|
-
branch,
|
|
19
|
-
collectionSlug,
|
|
20
|
-
req
|
|
21
|
-
});
|
|
22
|
-
where = branchReadState.useBranching ? rewriteBranchIDs(where) ?? {} : await resolveBranchQuery({
|
|
23
|
-
branch,
|
|
24
|
-
collectionSlug,
|
|
25
|
-
req,
|
|
26
|
-
where
|
|
27
|
-
}) ?? {};
|
|
28
|
-
const branchVisibility = branchReadState.useBranching ? buildBranchVisibilityStages({
|
|
29
|
-
adapter: this,
|
|
30
|
-
branch: branchReadState.branch,
|
|
31
|
-
collectionSlug
|
|
32
|
-
}) : [];
|
|
33
16
|
let hasNearConstraint = false;
|
|
34
17
|
if (where) {
|
|
35
18
|
const constraints = flattenWhereToOperators(where);
|
|
@@ -50,16 +33,14 @@ export const find = async function find({ branch, collection: collectionSlug, dr
|
|
|
50
33
|
}
|
|
51
34
|
const query = await buildQuery({
|
|
52
35
|
adapter: this,
|
|
53
|
-
branch,
|
|
54
36
|
collectionSlug,
|
|
55
37
|
fields: collectionConfig.flattenedFields,
|
|
56
38
|
locale,
|
|
57
|
-
req,
|
|
58
39
|
where
|
|
59
40
|
});
|
|
60
41
|
const session = await getSession(this, req);
|
|
61
42
|
// useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.
|
|
62
|
-
const useEstimatedCount =
|
|
43
|
+
const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0;
|
|
63
44
|
const paginationOptions = {
|
|
64
45
|
lean: true,
|
|
65
46
|
leanWithId: true,
|
|
@@ -72,17 +53,11 @@ export const find = async function find({ branch, collection: collectionSlug, dr
|
|
|
72
53
|
sort,
|
|
73
54
|
useEstimatedCount
|
|
74
55
|
};
|
|
75
|
-
|
|
76
|
-
branch,
|
|
77
|
-
collectionSlug,
|
|
78
|
-
req,
|
|
79
|
-
select
|
|
80
|
-
});
|
|
81
|
-
if (selectWithBranchID) {
|
|
56
|
+
if (select) {
|
|
82
57
|
paginationOptions.projection = buildProjectionFromSelect({
|
|
83
58
|
adapter: this,
|
|
84
59
|
fields: collectionConfig.flattenedFields,
|
|
85
|
-
select
|
|
60
|
+
select
|
|
86
61
|
});
|
|
87
62
|
}
|
|
88
63
|
if (this.collation) {
|
|
@@ -131,20 +106,17 @@ export const find = async function find({ branch, collection: collectionSlug, dr
|
|
|
131
106
|
let result;
|
|
132
107
|
const aggregate = await buildJoinAggregation({
|
|
133
108
|
adapter: this,
|
|
134
|
-
branch,
|
|
135
109
|
collection: collectionSlug,
|
|
136
110
|
collectionConfig,
|
|
137
111
|
draftsEnabled,
|
|
138
112
|
joins,
|
|
139
113
|
locale,
|
|
140
114
|
projection: paginationOptions.projection,
|
|
141
|
-
query
|
|
142
|
-
req
|
|
115
|
+
query
|
|
143
116
|
});
|
|
144
|
-
if (aggregate.length > 0 ||
|
|
117
|
+
if (aggregate.length > 0 || sortAggregation.length > 0) {
|
|
145
118
|
result = await aggregatePaginate({
|
|
146
119
|
adapter: this,
|
|
147
|
-
branchVisibility,
|
|
148
120
|
collation: paginationOptions.collation,
|
|
149
121
|
joinAggregation: aggregate,
|
|
150
122
|
limit: paginationOptions.limit,
|
|
@@ -164,12 +136,10 @@ export const find = async function find({ branch, collection: collectionSlug, dr
|
|
|
164
136
|
if (!this.useJoinAggregations) {
|
|
165
137
|
await resolveJoins({
|
|
166
138
|
adapter: this,
|
|
167
|
-
branch,
|
|
168
139
|
collectionSlug,
|
|
169
140
|
docs: result.docs,
|
|
170
141
|
joins,
|
|
171
|
-
locale
|
|
172
|
-
req
|
|
142
|
+
locale
|
|
173
143
|
});
|
|
174
144
|
}
|
|
175
145
|
transform({
|
|
@@ -178,12 +148,6 @@ export const find = async function find({ branch, collection: collectionSlug, dr
|
|
|
178
148
|
fields: collectionConfig.fields,
|
|
179
149
|
operation: 'read'
|
|
180
150
|
});
|
|
181
|
-
applyBranchIDProjection({
|
|
182
|
-
branch,
|
|
183
|
-
collectionSlug,
|
|
184
|
-
docs: result.docs,
|
|
185
|
-
req
|
|
186
|
-
});
|
|
187
151
|
return result;
|
|
188
152
|
};
|
|
189
153
|
|
package/dist/find.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/find.ts"],"sourcesContent":["import type { PaginateOptions, PipelineStage } from 'mongoose'\nimport type { Find } from 'payload'\n\nimport {\n applyBranchIDProjection,\n flattenWhereToOperators,\n resolveBranchQuery,\n resolveBranchReadState,\n rewriteBranchIDs,\n withBranchIDSelect,\n} from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildBranchVisibilityStages } from './queries/buildBranchVisibility.js'\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { aggregatePaginate } from './utilities/aggregatePaginate.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { resolveJoins } from './utilities/resolveJoins.js'\nimport { transform } from './utilities/transform.js'\n\nexport const find: Find = async function find(\n this: MongooseAdapter,\n {\n branch,\n collection: collectionSlug,\n draftsEnabled,\n joins = {},\n limit = 0,\n locale,\n page,\n pagination,\n projection,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n const branchReadState = resolveBranchReadState({ branch, collectionSlug, req })\n\n where = branchReadState.useBranching\n ? (rewriteBranchIDs(where) ?? {})\n : ((await resolveBranchQuery({ branch, collectionSlug, req, where })) ?? {})\n const branchVisibility = branchReadState.useBranching\n ? buildBranchVisibilityStages({\n adapter: this,\n branch: branchReadState.branch,\n collectionSlug,\n })\n : []\n\n let hasNearConstraint = false\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n const sortAggregation: PipelineStage[] = []\n\n let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n sortAggregation,\n timestamps: collectionConfig.timestamps || false,\n })\n }\n\n const query = await buildQuery({\n adapter: this,\n branch,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n req,\n where,\n })\n\n const session = await getSession(this, req)\n\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount =\n !branchVisibility.length && (hasNearConstraint || !query || Object.keys(query).length === 0)\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n options: {\n session,\n },\n page,\n pagination,\n projection,\n sort,\n useEstimatedCount,\n }\n\n const selectWithBranchID = withBranchIDSelect({ branch, collectionSlug, req, select })\n\n if (selectWithBranchID) {\n paginationOptions.projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select: selectWithBranchID,\n })\n }\n\n if (this.collation) {\n const localizationConfig = this.payload.config.localization\n const defaultLocale =\n (typeof localizationConfig === 'object' && localizationConfig?.defaultLocale) || 'en'\n\n paginationOptions.collation = {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,\n ...this.collation,\n }\n }\n\n if (!useEstimatedCount && Object.keys(query).length === 0 && this.disableIndexHints !== true) {\n // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding\n // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,\n // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses\n // the correct indexed field\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(query, {\n collation: paginationOptions.collation,\n hint: { _id: 1 },\n session,\n }),\n )\n }\n } else if (!useEstimatedCount && this.collation) {\n // Workaround for mongoose-paginate-v2 bug: chaining .collation() on countDocuments breaks\n // session context in transactions (mongoose 8.x). Provide custom count function that passes\n // collation as an option instead. See: https://github.com/aravindnc/mongoose-paginate-v2/pull/240\n // TODO: Remove this workaround once mongoose-paginate-v2 is updated with the fix.\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(query, {\n collation: paginationOptions.collation,\n session,\n }),\n )\n }\n }\n\n if (limit >= 0) {\n paginationOptions.limit = limit\n // limit must also be set here, it's ignored when pagination is false\n\n paginationOptions.options!.limit = limit\n\n // Disable pagination if limit is 0\n if (limit === 0) {\n paginationOptions.pagination = false\n }\n }\n\n let result\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n branch,\n collection: collectionSlug,\n collectionConfig,\n draftsEnabled,\n joins,\n locale,\n projection: paginationOptions.projection,\n query,\n req,\n })\n\n if (aggregate.length > 0 || branchVisibility.length > 0 || sortAggregation.length > 0) {\n result = await aggregatePaginate({\n adapter: this,\n branchVisibility,\n collation: paginationOptions.collation,\n joinAggregation: aggregate,\n limit: paginationOptions.limit,\n Model,\n page: paginationOptions.page,\n pagination: paginationOptions.pagination,\n projection: paginationOptions.projection,\n query,\n session: paginationOptions.options?.session ?? undefined,\n sort: paginationOptions.sort as object,\n sortAggregation,\n useEstimatedCount: paginationOptions.useEstimatedCount,\n })\n } else {\n result = await Model.paginate(query, paginationOptions)\n }\n\n if (!this.useJoinAggregations) {\n await resolveJoins({\n adapter: this,\n branch,\n collectionSlug,\n docs: result.docs as Record<string, unknown>[],\n joins,\n locale,\n req,\n })\n }\n\n transform({\n adapter: this,\n data: result.docs,\n fields: collectionConfig.fields,\n operation: 'read',\n })\n\n applyBranchIDProjection({\n branch,\n collectionSlug,\n docs: result.docs as Record<string, unknown>[],\n req,\n })\n\n return result\n}\n"],"names":["applyBranchIDProjection","flattenWhereToOperators","resolveBranchQuery","resolveBranchReadState","rewriteBranchIDs","withBranchIDSelect","buildBranchVisibilityStages","buildQuery","buildSortParam","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","resolveJoins","transform","find","branch","collection","collectionSlug","draftsEnabled","joins","limit","locale","page","pagination","projection","req","select","sort","sortArg","where","collectionConfig","Model","adapter","branchReadState","useBranching","branchVisibility","hasNearConstraint","constraints","some","prop","Object","keys","key","sortAggregation","config","payload","fields","flattenedFields","defaultSort","timestamps","query","session","useEstimatedCount","length","paginationOptions","lean","leanWithId","options","selectWithBranchID","collation","localizationConfig","localization","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","aggregate","joinAggregation","undefined","paginate","useJoinAggregations","docs","data","operation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/find.ts"],"sourcesContent":["import type { PaginateOptions, PipelineStage } from 'mongoose'\nimport type { Find } from 'payload'\n\nimport { flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { aggregatePaginate } from './utilities/aggregatePaginate.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { resolveJoins } from './utilities/resolveJoins.js'\nimport { transform } from './utilities/transform.js'\n\nexport const find: Find = async function find(\n this: MongooseAdapter,\n {\n collection: collectionSlug,\n draftsEnabled,\n joins = {},\n limit = 0,\n locale,\n page,\n pagination,\n projection,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n let hasNearConstraint = false\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n const sortAggregation: PipelineStage[] = []\n\n let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n sortAggregation,\n timestamps: collectionConfig.timestamps || false,\n })\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n const session = await getSession(this, req)\n\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n options: {\n session,\n },\n page,\n pagination,\n projection,\n sort,\n useEstimatedCount,\n }\n\n if (select) {\n paginationOptions.projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n })\n }\n\n if (this.collation) {\n const localizationConfig = this.payload.config.localization\n const defaultLocale =\n (typeof localizationConfig === 'object' && localizationConfig?.defaultLocale) || 'en'\n\n paginationOptions.collation = {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,\n ...this.collation,\n }\n }\n\n if (!useEstimatedCount && Object.keys(query).length === 0 && this.disableIndexHints !== true) {\n // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding\n // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,\n // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses\n // the correct indexed field\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(query, {\n collation: paginationOptions.collation,\n hint: { _id: 1 },\n session,\n }),\n )\n }\n } else if (!useEstimatedCount && this.collation) {\n // Workaround for mongoose-paginate-v2 bug: chaining .collation() on countDocuments breaks\n // session context in transactions (mongoose 8.x). Provide custom count function that passes\n // collation as an option instead. See: https://github.com/aravindnc/mongoose-paginate-v2/pull/240\n // TODO: Remove this workaround once mongoose-paginate-v2 is updated with the fix.\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(query, {\n collation: paginationOptions.collation,\n session,\n }),\n )\n }\n }\n\n if (limit >= 0) {\n paginationOptions.limit = limit\n // limit must also be set here, it's ignored when pagination is false\n\n paginationOptions.options!.limit = limit\n\n // Disable pagination if limit is 0\n if (limit === 0) {\n paginationOptions.pagination = false\n }\n }\n\n let result\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n draftsEnabled,\n joins,\n locale,\n projection: paginationOptions.projection,\n query,\n })\n\n if (aggregate.length > 0 || sortAggregation.length > 0) {\n result = await aggregatePaginate({\n adapter: this,\n collation: paginationOptions.collation,\n joinAggregation: aggregate,\n limit: paginationOptions.limit,\n Model,\n page: paginationOptions.page,\n pagination: paginationOptions.pagination,\n projection: paginationOptions.projection,\n query,\n session: paginationOptions.options?.session ?? undefined,\n sort: paginationOptions.sort as object,\n sortAggregation,\n useEstimatedCount: paginationOptions.useEstimatedCount,\n })\n } else {\n result = await Model.paginate(query, paginationOptions)\n }\n\n if (!this.useJoinAggregations) {\n await resolveJoins({\n adapter: this,\n collectionSlug,\n docs: result.docs as Record<string, unknown>[],\n joins,\n locale,\n })\n }\n\n transform({\n adapter: this,\n data: result.docs,\n fields: collectionConfig.fields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["flattenWhereToOperators","buildQuery","buildSortParam","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","resolveJoins","transform","find","collection","collectionSlug","draftsEnabled","joins","limit","locale","page","pagination","projection","req","select","sort","sortArg","where","collectionConfig","Model","adapter","hasNearConstraint","constraints","some","prop","Object","keys","key","sortAggregation","config","payload","fields","flattenedFields","defaultSort","timestamps","query","session","useEstimatedCount","length","paginationOptions","lean","leanWithId","options","collation","localizationConfig","localization","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","aggregate","joinAggregation","undefined","paginate","useJoinAggregations","docs","data","operation"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findDistinct.d.ts","sourceRoot":"","sources":["../src/findDistinct.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"findDistinct.d.ts","sourceRoot":"","sources":["../src/findDistinct.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAA;AA6C3D,eAAO,MAAM,YAAY,EAAE,YA4S1B,CAAA"}
|
package/dist/findDistinct.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { getFieldByPath
|
|
2
|
-
import { buildBranchVisibilityStages } from './queries/buildBranchVisibility.js';
|
|
1
|
+
import { getFieldByPath } from 'payload';
|
|
3
2
|
import { buildQuery } from './queries/buildQuery.js';
|
|
4
3
|
import { buildSortParam } from './queries/buildSortParam.js';
|
|
5
4
|
import { getCollection } from './utilities/getEntity.js';
|
|
@@ -30,25 +29,7 @@ export const findDistinct = async function(args) {
|
|
|
30
29
|
adapter: this,
|
|
31
30
|
collectionSlug: args.collection
|
|
32
31
|
});
|
|
33
|
-
const
|
|
34
|
-
branch: args.branch,
|
|
35
|
-
collectionSlug: args.collection,
|
|
36
|
-
req: args.req
|
|
37
|
-
});
|
|
38
|
-
// Distinct values describe the documents the caller can see, so they are subject to
|
|
39
|
-
// the same branch predicate as a list read. Without it a branch's shadow rows fed
|
|
40
|
-
// main's distinct values and the branch's own edits were invisible in its own.
|
|
41
|
-
const where = branchReadState.useBranching ? rewriteBranchIDs(args.where) ?? {} : await resolveBranchQuery({
|
|
42
|
-
branch: args.branch,
|
|
43
|
-
collectionSlug: args.collection,
|
|
44
|
-
req: args.req,
|
|
45
|
-
where: args.where
|
|
46
|
-
}) ?? {};
|
|
47
|
-
const branchVisibility = branchReadState.useBranching ? buildBranchVisibilityStages({
|
|
48
|
-
adapter: this,
|
|
49
|
-
branch: branchReadState.branch,
|
|
50
|
-
collectionSlug: args.collection
|
|
51
|
-
}) : [];
|
|
32
|
+
const { where = {} } = args;
|
|
52
33
|
let sortAggregation = [];
|
|
53
34
|
const sort = buildSortParam({
|
|
54
35
|
adapter: this,
|
|
@@ -61,11 +42,9 @@ export const findDistinct = async function(args) {
|
|
|
61
42
|
});
|
|
62
43
|
const query = await buildQuery({
|
|
63
44
|
adapter: this,
|
|
64
|
-
branch: args.branch,
|
|
65
45
|
collectionSlug: args.collection,
|
|
66
46
|
fields: collectionConfig.flattenedFields,
|
|
67
47
|
locale: args.locale,
|
|
68
|
-
req: args.req,
|
|
69
48
|
where
|
|
70
49
|
});
|
|
71
50
|
const fieldPathResult = getFieldByPath({
|
|
@@ -74,7 +53,7 @@ export const findDistinct = async function(args) {
|
|
|
74
53
|
includeRelationships: true,
|
|
75
54
|
path: args.field
|
|
76
55
|
});
|
|
77
|
-
let fieldPath = args.field
|
|
56
|
+
let fieldPath = args.field;
|
|
78
57
|
if (fieldPathResult?.pathHasLocalized && args.locale) {
|
|
79
58
|
fieldPath = fieldPathResult.localizedPath.replace('<locale>', args.locale);
|
|
80
59
|
}
|
|
@@ -148,36 +127,18 @@ export const findDistinct = async function(args) {
|
|
|
148
127
|
collectionSlug: relationTo
|
|
149
128
|
});
|
|
150
129
|
const relatedAccess = args.relatedAccess?.[fieldPath];
|
|
151
|
-
const
|
|
152
|
-
branch: args.branch,
|
|
153
|
-
collectionSlug: relationTo,
|
|
154
|
-
req: args.req
|
|
155
|
-
});
|
|
156
|
-
const relatedWhere = relatedBranchReadState.useBranching ? rewriteBranchIDs(relatedAccess) : await resolveBranchQuery({
|
|
157
|
-
branch: args.branch,
|
|
158
|
-
collectionSlug: relationTo,
|
|
159
|
-
req: args.req,
|
|
160
|
-
where: relatedAccess
|
|
161
|
-
});
|
|
162
|
-
const relatedQuery = relatedWhere && Object.keys(relatedWhere).length ? await buildQuery({
|
|
130
|
+
const relatedAccessQuery = relatedAccess ? await buildQuery({
|
|
163
131
|
adapter: this,
|
|
164
|
-
branch: args.branch,
|
|
165
132
|
collectionSlug: relationTo,
|
|
166
133
|
fields: foreignCollectionConfig.flattenedFields,
|
|
167
134
|
locale: args.locale,
|
|
168
|
-
|
|
169
|
-
where: relatedWhere
|
|
135
|
+
where: relatedAccess
|
|
170
136
|
}) : null;
|
|
171
|
-
const relatedBranchVisibility = relatedBranchReadState.useBranching ? buildBranchVisibilityStages({
|
|
172
|
-
adapter: this,
|
|
173
|
-
branch: relatedBranchReadState.branch,
|
|
174
|
-
collectionSlug: relationTo
|
|
175
|
-
}) : [];
|
|
176
137
|
relationLookup.push({
|
|
177
138
|
$lookup: {
|
|
178
139
|
as: fieldPath,
|
|
179
140
|
from: foreignModel.collection.name,
|
|
180
|
-
...
|
|
141
|
+
...relatedAccessQuery ? {
|
|
181
142
|
let: {
|
|
182
143
|
relatedIDs: `$${fieldPath}`
|
|
183
144
|
},
|
|
@@ -190,12 +151,7 @@ export const findDistinct = async function(args) {
|
|
|
190
151
|
$cond: {
|
|
191
152
|
else: {
|
|
192
153
|
$eq: [
|
|
193
|
-
|
|
194
|
-
$ifNull: [
|
|
195
|
-
'$_branchDocID',
|
|
196
|
-
'$_id'
|
|
197
|
-
]
|
|
198
|
-
},
|
|
154
|
+
'$_id',
|
|
199
155
|
'$$relatedIDs'
|
|
200
156
|
]
|
|
201
157
|
},
|
|
@@ -204,25 +160,17 @@ export const findDistinct = async function(args) {
|
|
|
204
160
|
},
|
|
205
161
|
then: {
|
|
206
162
|
$in: [
|
|
207
|
-
|
|
208
|
-
$ifNull: [
|
|
209
|
-
'$_branchDocID',
|
|
210
|
-
'$_id'
|
|
211
|
-
]
|
|
212
|
-
},
|
|
163
|
+
'$_id',
|
|
213
164
|
'$$relatedIDs'
|
|
214
165
|
]
|
|
215
166
|
}
|
|
216
167
|
}
|
|
217
168
|
}
|
|
218
169
|
},
|
|
219
|
-
|
|
220
|
-
relatedQuery
|
|
221
|
-
] : []
|
|
170
|
+
relatedAccessQuery
|
|
222
171
|
]
|
|
223
172
|
}
|
|
224
|
-
}
|
|
225
|
-
...relatedBranchVisibility
|
|
173
|
+
}
|
|
226
174
|
]
|
|
227
175
|
} : {
|
|
228
176
|
foreignField: '_id',
|
|
@@ -256,12 +204,7 @@ export const findDistinct = async function(args) {
|
|
|
256
204
|
}
|
|
257
205
|
if (!$group) {
|
|
258
206
|
$group = {
|
|
259
|
-
_id:
|
|
260
|
-
$ifNull: [
|
|
261
|
-
'$_branchDocID',
|
|
262
|
-
'$_id'
|
|
263
|
-
]
|
|
264
|
-
} : `$${fieldPath}`,
|
|
207
|
+
_id: `$${fieldPath}`,
|
|
265
208
|
...sortProperty === fieldPath ? {} : {
|
|
266
209
|
_sort: {
|
|
267
210
|
$max: `$${sortProperty}`
|
|
@@ -273,7 +216,6 @@ export const findDistinct = async function(args) {
|
|
|
273
216
|
{
|
|
274
217
|
$match: query
|
|
275
218
|
},
|
|
276
|
-
...branchVisibility,
|
|
277
219
|
...sortAggregation.length > 0 ? sortAggregation : [],
|
|
278
220
|
...relationLookup?.length ? relationLookup : [],
|
|
279
221
|
...$unwind ? [
|
|
@@ -314,7 +256,6 @@ export const findDistinct = async function(args) {
|
|
|
314
256
|
{
|
|
315
257
|
$match: query
|
|
316
258
|
},
|
|
317
|
-
...branchVisibility,
|
|
318
259
|
...sortAggregation.length > 0 ? sortAggregation : [],
|
|
319
260
|
...relationLookup?.length ? relationLookup : [],
|
|
320
261
|
...$unwind ? [
|
package/dist/findDistinct.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/findDistinct.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { FindDistinct, FlattenedField } from 'payload'\n\nimport {\n getFieldByPath,\n resolveBranchQuery,\n resolveBranchReadState,\n rewriteBranchIDs,\n} from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildBranchVisibilityStages } from './queries/buildBranchVisibility.js'\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\n\nconst sanitizeGroupID = (id: any) => {\n if (id && typeof id === 'object' && '_field' in id) {\n return id._field\n }\n\n return id\n}\n\nconst getSortAggregation = ({\n fieldPath,\n hasSortAggregationAndHasMany,\n sortDirection,\n sortProperty,\n}: {\n fieldPath: string\n hasSortAggregationAndHasMany: boolean\n sortDirection: -1 | 1\n sortProperty: string\n}): Record<string, -1 | 1> => {\n let resolvedSortProperty: string\n\n if (hasSortAggregationAndHasMany) {\n if (sortProperty === fieldPath) {\n resolvedSortProperty = `_id._field`\n } else {\n resolvedSortProperty = `_id._sort`\n }\n } else {\n resolvedSortProperty = sortProperty === fieldPath ? '_id' : '_sort'\n }\n\n return { [`${resolvedSortProperty}`]: sortDirection }\n}\n\nexport const findDistinct: FindDistinct = async function (this: MongooseAdapter, args) {\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug: args.collection,\n })\n const branchReadState = resolveBranchReadState({\n branch: args.branch,\n collectionSlug: args.collection,\n req: args.req,\n })\n\n // Distinct values describe the documents the caller can see, so they are subject to\n // the same branch predicate as a list read. Without it a branch's shadow rows fed\n // main's distinct values and the branch's own edits were invisible in its own.\n const where = branchReadState.useBranching\n ? (rewriteBranchIDs(args.where) ?? {})\n : ((await resolveBranchQuery({\n branch: args.branch,\n collectionSlug: args.collection,\n req: args.req,\n where: args.where,\n })) ?? {})\n const branchVisibility = branchReadState.useBranching\n ? buildBranchVisibilityStages({\n adapter: this,\n branch: branchReadState.branch,\n collectionSlug: args.collection,\n })\n : []\n\n let sortAggregation: PipelineStage[] = []\n\n const sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale: args.locale,\n sort: args.sort ?? args.field,\n sortAggregation,\n timestamps: true,\n })\n\n const query = await buildQuery({\n adapter: this,\n branch: args.branch,\n collectionSlug: args.collection,\n fields: collectionConfig.flattenedFields,\n locale: args.locale,\n req: args.req,\n where,\n })\n\n const fieldPathResult = getFieldByPath({\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n includeRelationships: true,\n path: args.field,\n })\n let fieldPath = args.field === 'id' ? '_id' : args.field\n if (fieldPathResult?.pathHasLocalized && args.locale) {\n fieldPath = fieldPathResult.localizedPath.replace('<locale>', args.locale)\n }\n\n const page = args.page || 1\n\n let sortProperty = Object.keys(sort)[0]! // assert because buildSortParam always returns at least 1 key.\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n let currentFields = collectionConfig.flattenedFields\n let foundField: FlattenedField | null = null\n\n let rels: {\n fieldPath: string\n relationTo: string\n }[] = []\n\n let tempPath = ''\n let insideRelation = false\n\n const segments = args.field.split('.')\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n const field = currentFields.find((e) => e.name === segment)\n if (rels.length) {\n insideRelation = true\n }\n\n if (!field) {\n break\n }\n\n if (tempPath) {\n tempPath = `${tempPath}.${field.name}`\n } else {\n tempPath = field.name\n }\n\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n continue\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n typeof field.relationTo === 'string'\n ) {\n if (i === segments.length - 2 && segments[i + 1] === 'id') {\n foundField = field\n fieldPath = tempPath\n break\n }\n rels.push({ fieldPath: tempPath, relationTo: field.relationTo })\n currentFields = this.payload.collections[field.relationTo]?.config\n .flattenedFields as FlattenedField[]\n continue\n }\n foundField = field\n }\n\n const resolvedField = foundField || fieldPathResult?.field\n const isHasManyValue = resolvedField && 'hasMany' in resolvedField && resolvedField\n\n let relationLookup: null | PipelineStage[] = null\n\n if (!insideRelation) {\n rels = []\n }\n\n if (rels.length) {\n if (sortProperty.startsWith('_')) {\n const sortWithoutRelationPrefix = sortProperty.replace(/^_+/, '')\n const lastFieldPath = rels.at(-1)?.fieldPath as string\n if (sortWithoutRelationPrefix.startsWith(lastFieldPath)) {\n sortProperty = sortWithoutRelationPrefix\n }\n }\n relationLookup = []\n for (const { fieldPath, relationTo } of rels) {\n sortAggregation = sortAggregation.filter((each) => {\n if ('$lookup' in each && each.$lookup.as.replace(/^_+/, '') === fieldPath) {\n return false\n }\n\n return true\n })\n const { collectionConfig: foreignCollectionConfig, Model: foreignModel } = getCollection({\n adapter: this,\n collectionSlug: relationTo,\n })\n const relatedAccess = args.relatedAccess?.[fieldPath]\n const relatedBranchReadState = resolveBranchReadState({\n branch: args.branch,\n collectionSlug: relationTo,\n req: args.req,\n })\n const relatedWhere = relatedBranchReadState.useBranching\n ? rewriteBranchIDs(relatedAccess)\n : await resolveBranchQuery({\n branch: args.branch,\n collectionSlug: relationTo,\n req: args.req,\n where: relatedAccess,\n })\n const relatedQuery =\n relatedWhere && Object.keys(relatedWhere).length\n ? await buildQuery({\n adapter: this,\n branch: args.branch,\n collectionSlug: relationTo,\n fields: foreignCollectionConfig.flattenedFields,\n locale: args.locale,\n req: args.req,\n where: relatedWhere,\n })\n : null\n const relatedBranchVisibility = relatedBranchReadState.useBranching\n ? buildBranchVisibilityStages({\n adapter: this,\n branch: relatedBranchReadState.branch,\n collectionSlug: relationTo,\n })\n : []\n\n relationLookup.push({\n $lookup: {\n as: fieldPath,\n from: foreignModel.collection.name,\n ...(relatedQuery || relatedBranchVisibility.length\n ? {\n let: { relatedIDs: `$${fieldPath}` },\n pipeline: [\n {\n $match: {\n $and: [\n {\n $expr: {\n $cond: {\n else: {\n $eq: [{ $ifNull: ['$_branchDocID', '$_id'] }, '$$relatedIDs'],\n },\n if: { $isArray: '$$relatedIDs' },\n then: {\n $in: [{ $ifNull: ['$_branchDocID', '$_id'] }, '$$relatedIDs'],\n },\n },\n },\n },\n ...(relatedQuery ? [relatedQuery] : []),\n ],\n },\n },\n ...relatedBranchVisibility,\n ],\n }\n : {\n foreignField: '_id',\n localField: fieldPath,\n }),\n },\n })\n relationLookup.push({ $unwind: `$${fieldPath}` })\n }\n }\n\n let $unwind: any = ''\n let $group: any = null\n if (\n isHasManyValue &&\n sortAggregation.length &&\n sortAggregation[0] &&\n '$lookup' in sortAggregation[0]\n ) {\n $unwind = { path: `$${sortAggregation[0].$lookup.as}`, preserveNullAndEmptyArrays: true }\n $group = {\n _id: {\n _field: `$${sortAggregation[0].$lookup.as}._id`,\n _sort: `$${sortProperty}`,\n },\n }\n } else if (isHasManyValue) {\n $unwind = { path: `$${args.field}`, preserveNullAndEmptyArrays: true }\n }\n\n if (!$group) {\n $group = {\n _id:\n args.field === 'id' && branchReadState.useBranching\n ? { $ifNull: ['$_branchDocID', '$_id'] }\n : `$${fieldPath}`,\n ...(sortProperty === fieldPath\n ? {}\n : {\n _sort: { $max: `$${sortProperty}` },\n }),\n }\n }\n\n const pipeline: PipelineStage[] = [\n {\n $match: query,\n },\n ...branchVisibility,\n ...(sortAggregation.length > 0 ? sortAggregation : []),\n ...(relationLookup?.length ? relationLookup : []),\n ...($unwind\n ? [\n {\n $unwind,\n },\n ]\n : []),\n {\n $group,\n },\n {\n $sort: getSortAggregation({\n fieldPath,\n hasSortAggregationAndHasMany: Boolean(isHasManyValue) && Boolean(sortAggregation.length),\n sortDirection,\n sortProperty,\n }),\n },\n ]\n\n const session = await getSession(this, args.req)\n\n const getValues = async () => {\n return Model.aggregate(pipeline, { session }).then((res) =>\n res.map((each) => ({\n [args.field]: JSON.parse(JSON.stringify(sanitizeGroupID(each._id))),\n })),\n )\n }\n\n if (args.limit) {\n pipeline.push({\n $skip: (page - 1) * args.limit,\n })\n pipeline.push({ $limit: args.limit })\n\n // Build count pipeline with the same structure as the main pipeline\n // to ensure relationship lookups are included\n const countPipeline: PipelineStage[] = [\n {\n $match: query,\n },\n ...branchVisibility,\n ...(sortAggregation.length > 0 ? sortAggregation : []),\n ...(relationLookup?.length ? relationLookup : []),\n ...($unwind\n ? [\n {\n $unwind,\n },\n ]\n : []),\n {\n $group,\n },\n { $count: 'count' },\n ]\n\n const totalDocs = await Model.aggregate(countPipeline, {\n session,\n }).then((res) => res[0]?.count ?? 0)\n const totalPages = Math.ceil(totalDocs / args.limit)\n const hasPrevPage = page > 1\n const hasNextPage = totalPages > page\n const pagingCounter = (page - 1) * args.limit + 1\n\n return {\n hasNextPage,\n hasPrevPage,\n limit: args.limit,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n values: await getValues(),\n }\n }\n\n const values = await getValues()\n\n return {\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n page: 1,\n pagingCounter: 1,\n totalDocs: values.length,\n totalPages: 1,\n values,\n }\n}\n"],"names":["getFieldByPath","resolveBranchQuery","resolveBranchReadState","rewriteBranchIDs","buildBranchVisibilityStages","buildQuery","buildSortParam","getCollection","getSession","sanitizeGroupID","id","_field","getSortAggregation","fieldPath","hasSortAggregationAndHasMany","sortDirection","sortProperty","resolvedSortProperty","findDistinct","args","collectionConfig","Model","adapter","collectionSlug","collection","branchReadState","branch","req","where","useBranching","branchVisibility","sortAggregation","sort","config","payload","fields","flattenedFields","locale","field","timestamps","query","fieldPathResult","includeRelationships","path","pathHasLocalized","localizedPath","replace","page","Object","keys","currentFields","foundField","rels","tempPath","insideRelation","segments","split","i","length","segment","find","e","name","type","relationTo","push","collections","resolvedField","isHasManyValue","relationLookup","startsWith","sortWithoutRelationPrefix","lastFieldPath","at","filter","each","$lookup","as","foreignCollectionConfig","foreignModel","relatedAccess","relatedBranchReadState","relatedWhere","relatedQuery","relatedBranchVisibility","from","let","relatedIDs","pipeline","$match","$and","$expr","$cond","else","$eq","$ifNull","if","$isArray","then","$in","foreignField","localField","$unwind","$group","preserveNullAndEmptyArrays","_id","_sort","$max","$sort","Boolean","session","getValues","aggregate","res","map","JSON","parse","stringify","limit","$skip","$limit","countPipeline","$count","totalDocs","count","totalPages","Math","ceil","hasPrevPage","hasNextPage","pagingCounter","nextPage","prevPage","values"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/findDistinct.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { FindDistinct, FlattenedField } from 'payload'\n\nimport { getFieldByPath } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\n\nconst sanitizeGroupID = (id: any) => {\n if (id && typeof id === 'object' && '_field' in id) {\n return id._field\n }\n\n return id\n}\n\nconst getSortAggregation = ({\n fieldPath,\n hasSortAggregationAndHasMany,\n sortDirection,\n sortProperty,\n}: {\n fieldPath: string\n hasSortAggregationAndHasMany: boolean\n sortDirection: -1 | 1\n sortProperty: string\n}): Record<string, -1 | 1> => {\n let resolvedSortProperty: string\n\n if (hasSortAggregationAndHasMany) {\n if (sortProperty === fieldPath) {\n resolvedSortProperty = `_id._field`\n } else {\n resolvedSortProperty = `_id._sort`\n }\n } else {\n resolvedSortProperty = sortProperty === fieldPath ? '_id' : '_sort'\n }\n\n return { [`${resolvedSortProperty}`]: sortDirection }\n}\n\nexport const findDistinct: FindDistinct = async function (this: MongooseAdapter, args) {\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug: args.collection,\n })\n\n const { where = {} } = args\n\n let sortAggregation: PipelineStage[] = []\n\n const sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale: args.locale,\n sort: args.sort ?? args.field,\n sortAggregation,\n timestamps: true,\n })\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug: args.collection,\n fields: collectionConfig.flattenedFields,\n locale: args.locale,\n where,\n })\n\n const fieldPathResult = getFieldByPath({\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n includeRelationships: true,\n path: args.field,\n })\n let fieldPath = args.field\n if (fieldPathResult?.pathHasLocalized && args.locale) {\n fieldPath = fieldPathResult.localizedPath.replace('<locale>', args.locale)\n }\n\n const page = args.page || 1\n\n let sortProperty = Object.keys(sort)[0]! // assert because buildSortParam always returns at least 1 key.\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n let currentFields = collectionConfig.flattenedFields\n let foundField: FlattenedField | null = null\n\n let rels: {\n fieldPath: string\n relationTo: string\n }[] = []\n\n let tempPath = ''\n let insideRelation = false\n\n const segments = args.field.split('.')\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n const field = currentFields.find((e) => e.name === segment)\n if (rels.length) {\n insideRelation = true\n }\n\n if (!field) {\n break\n }\n\n if (tempPath) {\n tempPath = `${tempPath}.${field.name}`\n } else {\n tempPath = field.name\n }\n\n if ('flattenedFields' in field) {\n currentFields = field.flattenedFields\n continue\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n typeof field.relationTo === 'string'\n ) {\n if (i === segments.length - 2 && segments[i + 1] === 'id') {\n foundField = field\n fieldPath = tempPath\n break\n }\n rels.push({ fieldPath: tempPath, relationTo: field.relationTo })\n currentFields = this.payload.collections[field.relationTo]?.config\n .flattenedFields as FlattenedField[]\n continue\n }\n foundField = field\n }\n\n const resolvedField = foundField || fieldPathResult?.field\n const isHasManyValue = resolvedField && 'hasMany' in resolvedField && resolvedField\n\n let relationLookup: null | PipelineStage[] = null\n\n if (!insideRelation) {\n rels = []\n }\n\n if (rels.length) {\n if (sortProperty.startsWith('_')) {\n const sortWithoutRelationPrefix = sortProperty.replace(/^_+/, '')\n const lastFieldPath = rels.at(-1)?.fieldPath as string\n if (sortWithoutRelationPrefix.startsWith(lastFieldPath)) {\n sortProperty = sortWithoutRelationPrefix\n }\n }\n relationLookup = []\n for (const { fieldPath, relationTo } of rels) {\n sortAggregation = sortAggregation.filter((each) => {\n if ('$lookup' in each && each.$lookup.as.replace(/^_+/, '') === fieldPath) {\n return false\n }\n\n return true\n })\n const { collectionConfig: foreignCollectionConfig, Model: foreignModel } = getCollection({\n adapter: this,\n collectionSlug: relationTo,\n })\n const relatedAccess = args.relatedAccess?.[fieldPath]\n const relatedAccessQuery = relatedAccess\n ? await buildQuery({\n adapter: this,\n collectionSlug: relationTo,\n fields: foreignCollectionConfig.flattenedFields,\n locale: args.locale,\n where: relatedAccess,\n })\n : null\n\n relationLookup.push({\n $lookup: {\n as: fieldPath,\n from: foreignModel.collection.name,\n ...(relatedAccessQuery\n ? {\n let: { relatedIDs: `$${fieldPath}` },\n pipeline: [\n {\n $match: {\n $and: [\n {\n $expr: {\n $cond: {\n else: { $eq: ['$_id', '$$relatedIDs'] },\n if: { $isArray: '$$relatedIDs' },\n then: { $in: ['$_id', '$$relatedIDs'] },\n },\n },\n },\n relatedAccessQuery,\n ],\n },\n },\n ],\n }\n : {\n foreignField: '_id',\n localField: fieldPath,\n }),\n },\n })\n relationLookup.push({ $unwind: `$${fieldPath}` })\n }\n }\n\n let $unwind: any = ''\n let $group: any = null\n if (\n isHasManyValue &&\n sortAggregation.length &&\n sortAggregation[0] &&\n '$lookup' in sortAggregation[0]\n ) {\n $unwind = { path: `$${sortAggregation[0].$lookup.as}`, preserveNullAndEmptyArrays: true }\n $group = {\n _id: {\n _field: `$${sortAggregation[0].$lookup.as}._id`,\n _sort: `$${sortProperty}`,\n },\n }\n } else if (isHasManyValue) {\n $unwind = { path: `$${args.field}`, preserveNullAndEmptyArrays: true }\n }\n\n if (!$group) {\n $group = {\n _id: `$${fieldPath}`,\n ...(sortProperty === fieldPath\n ? {}\n : {\n _sort: { $max: `$${sortProperty}` },\n }),\n }\n }\n\n const pipeline: PipelineStage[] = [\n {\n $match: query,\n },\n ...(sortAggregation.length > 0 ? sortAggregation : []),\n ...(relationLookup?.length ? relationLookup : []),\n ...($unwind\n ? [\n {\n $unwind,\n },\n ]\n : []),\n {\n $group,\n },\n {\n $sort: getSortAggregation({\n fieldPath,\n hasSortAggregationAndHasMany: Boolean(isHasManyValue) && Boolean(sortAggregation.length),\n sortDirection,\n sortProperty,\n }),\n },\n ]\n\n const session = await getSession(this, args.req)\n\n const getValues = async () => {\n return Model.aggregate(pipeline, { session }).then((res) =>\n res.map((each) => ({\n [args.field]: JSON.parse(JSON.stringify(sanitizeGroupID(each._id))),\n })),\n )\n }\n\n if (args.limit) {\n pipeline.push({\n $skip: (page - 1) * args.limit,\n })\n pipeline.push({ $limit: args.limit })\n\n // Build count pipeline with the same structure as the main pipeline\n // to ensure relationship lookups are included\n const countPipeline: PipelineStage[] = [\n {\n $match: query,\n },\n ...(sortAggregation.length > 0 ? sortAggregation : []),\n ...(relationLookup?.length ? relationLookup : []),\n ...($unwind\n ? [\n {\n $unwind,\n },\n ]\n : []),\n {\n $group,\n },\n { $count: 'count' },\n ]\n\n const totalDocs = await Model.aggregate(countPipeline, {\n session,\n }).then((res) => res[0]?.count ?? 0)\n const totalPages = Math.ceil(totalDocs / args.limit)\n const hasPrevPage = page > 1\n const hasNextPage = totalPages > page\n const pagingCounter = (page - 1) * args.limit + 1\n\n return {\n hasNextPage,\n hasPrevPage,\n limit: args.limit,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n values: await getValues(),\n }\n }\n\n const values = await getValues()\n\n return {\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n page: 1,\n pagingCounter: 1,\n totalDocs: values.length,\n totalPages: 1,\n values,\n }\n}\n"],"names":["getFieldByPath","buildQuery","buildSortParam","getCollection","getSession","sanitizeGroupID","id","_field","getSortAggregation","fieldPath","hasSortAggregationAndHasMany","sortDirection","sortProperty","resolvedSortProperty","findDistinct","args","collectionConfig","Model","adapter","collectionSlug","collection","where","sortAggregation","sort","config","payload","fields","flattenedFields","locale","field","timestamps","query","fieldPathResult","includeRelationships","path","pathHasLocalized","localizedPath","replace","page","Object","keys","currentFields","foundField","rels","tempPath","insideRelation","segments","split","i","length","segment","find","e","name","type","relationTo","push","collections","resolvedField","isHasManyValue","relationLookup","startsWith","sortWithoutRelationPrefix","lastFieldPath","at","filter","each","$lookup","as","foreignCollectionConfig","foreignModel","relatedAccess","relatedAccessQuery","from","let","relatedIDs","pipeline","$match","$and","$expr","$cond","else","$eq","if","$isArray","then","$in","foreignField","localField","$unwind","$group","preserveNullAndEmptyArrays","_id","_sort","$max","$sort","Boolean","session","req","getValues","aggregate","res","map","JSON","parse","stringify","limit","$skip","$limit","countPipeline","$count","totalDocs","count","totalPages","Math","ceil","hasPrevPage","hasNextPage","pagingCounter","nextPage","prevPage","values"],"mappings":"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"}
|
package/dist/findGlobal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findGlobal.d.ts","sourceRoot":"","sources":["../src/findGlobal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"findGlobal.d.ts","sourceRoot":"","sources":["../src/findGlobal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAYzC,eAAO,MAAM,UAAU,EAAE,UAwCxB,CAAA"}
|
package/dist/findGlobal.js
CHANGED
|
@@ -1,65 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { combineQueries } from 'payload';
|
|
2
2
|
import { buildQuery } from './queries/buildQuery.js';
|
|
3
3
|
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
|
|
4
4
|
import { getGlobal } from './utilities/getEntity.js';
|
|
5
5
|
import { getSession } from './utilities/getSession.js';
|
|
6
6
|
import { transform } from './utilities/transform.js';
|
|
7
|
-
export const findGlobal = async function findGlobal({ slug: globalSlug,
|
|
7
|
+
export const findGlobal = async function findGlobal({ slug: globalSlug, locale, req, select, where = {} }) {
|
|
8
8
|
const { globalConfig, Model } = getGlobal({
|
|
9
9
|
adapter: this,
|
|
10
10
|
globalSlug
|
|
11
11
|
});
|
|
12
12
|
const fields = globalConfig.flattenedFields;
|
|
13
|
-
const branchedWhere = resolveBranchGlobalQuery({
|
|
14
|
-
branch,
|
|
15
|
-
globalSlug,
|
|
16
|
-
req,
|
|
17
|
-
where
|
|
18
|
-
});
|
|
19
13
|
const query = await buildQuery({
|
|
20
14
|
adapter: this,
|
|
21
|
-
branch,
|
|
22
15
|
fields,
|
|
23
16
|
globalSlug,
|
|
24
17
|
locale,
|
|
25
|
-
req,
|
|
26
18
|
where: combineQueries({
|
|
27
19
|
globalType: {
|
|
28
20
|
equals: globalSlug
|
|
29
21
|
}
|
|
30
|
-
},
|
|
22
|
+
}, where)
|
|
31
23
|
});
|
|
32
24
|
const options = {
|
|
33
25
|
lean: true,
|
|
34
26
|
select: buildProjectionFromSelect({
|
|
35
27
|
adapter: this,
|
|
36
28
|
fields,
|
|
37
|
-
select
|
|
38
|
-
branch,
|
|
39
|
-
globalSlug,
|
|
40
|
-
req,
|
|
41
|
-
select
|
|
42
|
-
})
|
|
29
|
+
select
|
|
43
30
|
}),
|
|
44
31
|
session: await getSession(this, req)
|
|
45
32
|
};
|
|
46
|
-
|
|
47
|
-
// together and the branch's preferred in memory. There is no result set to
|
|
48
|
-
// paginate, so nothing a post-query step could get wrong.
|
|
49
|
-
let doc;
|
|
50
|
-
if (branchGlobalNeedsBothRows({
|
|
51
|
-
branch,
|
|
52
|
-
globalSlug,
|
|
53
|
-
req
|
|
54
|
-
})) {
|
|
55
|
-
const rows = await Model.find(query, {}, {
|
|
56
|
-
...options,
|
|
57
|
-
limit: 2
|
|
58
|
-
}).lean();
|
|
59
|
-
doc = pickBranchGlobal(rows, branch || resolveBranch(req));
|
|
60
|
-
} else {
|
|
61
|
-
doc = await Model.findOne(query, {}, options);
|
|
62
|
-
}
|
|
33
|
+
const doc = await Model.findOne(query, {}, options);
|
|
63
34
|
if (!doc) {
|
|
64
35
|
return null;
|
|
65
36
|
}
|
package/dist/findGlobal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/findGlobal.ts"],"sourcesContent":["import type { QueryOptions } from 'mongoose'\nimport type { FindGlobal } from 'payload'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/findGlobal.ts"],"sourcesContent":["import type { QueryOptions } from 'mongoose'\nimport type { FindGlobal } from 'payload'\n\nimport { combineQueries } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getGlobal } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findGlobal: FindGlobal = async function findGlobal(\n this: MongooseAdapter,\n { slug: globalSlug, locale, req, select, where = {} },\n) {\n const { globalConfig, Model } = getGlobal({ adapter: this, globalSlug })\n\n const fields = globalConfig.flattenedFields\n\n const query = await buildQuery({\n adapter: this,\n fields,\n globalSlug,\n locale,\n where: combineQueries({ globalType: { equals: globalSlug } }, where),\n })\n\n const options: QueryOptions = {\n lean: true,\n select: buildProjectionFromSelect({\n adapter: this,\n fields,\n select,\n }),\n session: await getSession(this, req),\n }\n\n const doc: any = await Model.findOne(query, {}, options)\n\n if (!doc) {\n return null\n }\n\n transform({\n adapter: this,\n data: doc,\n fields: globalConfig.fields,\n operation: 'read',\n })\n\n return doc\n}\n"],"names":["combineQueries","buildQuery","buildProjectionFromSelect","getGlobal","getSession","transform","findGlobal","slug","globalSlug","locale","req","select","where","globalConfig","Model","adapter","fields","flattenedFields","query","globalType","equals","options","lean","session","doc","findOne","data","operation"],"mappings":"AAGA,SAASA,cAAc,QAAQ,UAAS;AAIxC,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,SAAS,QAAQ,2BAA0B;AACpD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,aAAyB,eAAeA,WAEnD,EAAEC,MAAMC,UAAU,EAAEC,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAEC,QAAQ,CAAC,CAAC,EAAE;IAErD,MAAM,EAAEC,YAAY,EAAEC,KAAK,EAAE,GAAGX,UAAU;QAAEY,SAAS,IAAI;QAAEP;IAAW;IAEtE,MAAMQ,SAASH,aAAaI,eAAe;IAE3C,MAAMC,QAAQ,MAAMjB,WAAW;QAC7Bc,SAAS,IAAI;QACbC;QACAR;QACAC;QACAG,OAAOZ,eAAe;YAAEmB,YAAY;gBAAEC,QAAQZ;YAAW;QAAE,GAAGI;IAChE;IAEA,MAAMS,UAAwB;QAC5BC,MAAM;QACNX,QAAQT,0BAA0B;YAChCa,SAAS,IAAI;YACbC;YACAL;QACF;QACAY,SAAS,MAAMnB,WAAW,IAAI,EAAEM;IAClC;IAEA,MAAMc,MAAW,MAAMV,MAAMW,OAAO,CAACP,OAAO,CAAC,GAAGG;IAEhD,IAAI,CAACG,KAAK;QACR,OAAO;IACT;IAEAnB,UAAU;QACRU,SAAS,IAAI;QACbW,MAAMF;QACNR,QAAQH,aAAaG,MAAM;QAC3BW,WAAW;IACb;IAEA,OAAOH;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findGlobalVersions.d.ts","sourceRoot":"","sources":["../src/findGlobalVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"findGlobalVersions.d.ts","sourceRoot":"","sources":["../src/findGlobalVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAajD,eAAO,MAAM,kBAAkB,EAAE,kBAiIhC,CAAA"}
|
|
@@ -1,22 +1,16 @@
|
|
|
1
|
-
import { buildVersionGlobalFields, flattenWhereToOperators
|
|
1
|
+
import { buildVersionGlobalFields, flattenWhereToOperators } from 'payload';
|
|
2
2
|
import { buildQuery } from './queries/buildQuery.js';
|
|
3
3
|
import { buildSortParam } from './queries/buildSortParam.js';
|
|
4
4
|
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js';
|
|
5
5
|
import { getGlobal } from './utilities/getEntity.js';
|
|
6
6
|
import { getSession } from './utilities/getSession.js';
|
|
7
7
|
import { transform } from './utilities/transform.js';
|
|
8
|
-
export const findGlobalVersions = async function findGlobalVersions({
|
|
8
|
+
export const findGlobalVersions = async function findGlobalVersions({ global: globalSlug, limit = 0, locale, page, pagination, req, select, sort: sortArg, where = {} }) {
|
|
9
9
|
const { globalConfig, Model } = getGlobal({
|
|
10
10
|
adapter: this,
|
|
11
11
|
globalSlug,
|
|
12
12
|
versions: true
|
|
13
13
|
});
|
|
14
|
-
where = resolveBranchGlobalVersionQuery({
|
|
15
|
-
branch,
|
|
16
|
-
globalSlug,
|
|
17
|
-
req,
|
|
18
|
-
where
|
|
19
|
-
}) ?? {};
|
|
20
14
|
const versionFields = buildVersionGlobalFields(this.payload.config, globalConfig, true);
|
|
21
15
|
let hasNearConstraint = false;
|
|
22
16
|
if (where) {
|
|
@@ -36,10 +30,8 @@ export const findGlobalVersions = async function findGlobalVersions({ branch, gl
|
|
|
36
30
|
}
|
|
37
31
|
const query = await buildQuery({
|
|
38
32
|
adapter: this,
|
|
39
|
-
branch,
|
|
40
33
|
fields: versionFields,
|
|
41
34
|
locale,
|
|
42
|
-
req,
|
|
43
35
|
where
|
|
44
36
|
});
|
|
45
37
|
const session = await getSession(this, req);
|