@payloadcms/db-mongodb 4.0.0-internal.567a487 → 4.0.0-internal.58473b9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/connect.d.ts.map +1 -1
  2. package/dist/connect.js +8 -2
  3. package/dist/connect.js.map +1 -1
  4. package/dist/count.d.ts.map +1 -1
  5. package/dist/count.js +2 -8
  6. package/dist/count.js.map +1 -1
  7. package/dist/countVersions.d.ts.map +1 -1
  8. package/dist/countVersions.js +2 -10
  9. package/dist/countVersions.js.map +1 -1
  10. package/dist/create.d.ts.map +1 -1
  11. package/dist/create.js +2 -1
  12. package/dist/create.js.map +1 -1
  13. package/dist/createGlobalVersion.d.ts.map +1 -1
  14. package/dist/createGlobalVersion.js +1 -23
  15. package/dist/createGlobalVersion.js.map +1 -1
  16. package/dist/createMigration.d.ts.map +1 -1
  17. package/dist/createMigration.js +9 -2
  18. package/dist/createMigration.js.map +1 -1
  19. package/dist/createVersion.d.ts.map +1 -1
  20. package/dist/createVersion.js +4 -17
  21. package/dist/createVersion.js.map +1 -1
  22. package/dist/deleteOne.d.ts.map +1 -1
  23. package/dist/deleteOne.js +1 -18
  24. package/dist/deleteOne.js.map +1 -1
  25. package/dist/exports/migration-utils.d.ts +1 -0
  26. package/dist/exports/migration-utils.d.ts.map +1 -1
  27. package/dist/exports/migration-utils.js +1 -0
  28. package/dist/exports/migration-utils.js.map +1 -1
  29. package/dist/find.d.ts.map +1 -1
  30. package/dist/find.js +6 -25
  31. package/dist/find.js.map +1 -1
  32. package/dist/findDistinct.d.ts.map +1 -1
  33. package/dist/findDistinct.js +54 -18
  34. package/dist/findDistinct.js.map +1 -1
  35. package/dist/findGlobal.d.ts.map +1 -1
  36. package/dist/findGlobal.js +4 -26
  37. package/dist/findGlobal.js.map +1 -1
  38. package/dist/findGlobalVersions.d.ts.map +1 -1
  39. package/dist/findGlobalVersions.js +2 -8
  40. package/dist/findGlobalVersions.js.map +1 -1
  41. package/dist/findOne.d.ts.map +1 -1
  42. package/dist/findOne.js +4 -25
  43. package/dist/findOne.js.map +1 -1
  44. package/dist/findVersions.d.ts.map +1 -1
  45. package/dist/findVersions.js +3 -17
  46. package/dist/findVersions.js.map +1 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +0 -2
  49. package/dist/index.js.map +1 -1
  50. package/dist/init.d.ts.map +1 -1
  51. package/dist/init.js +89 -67
  52. package/dist/init.js.map +1 -1
  53. package/dist/migrateFresh.d.ts +4 -2
  54. package/dist/migrateFresh.d.ts.map +1 -1
  55. package/dist/migrateFresh.js +21 -6
  56. package/dist/migrateFresh.js.map +1 -1
  57. package/dist/models/buildCollectionSchema.d.ts +8 -2
  58. package/dist/models/buildCollectionSchema.d.ts.map +1 -1
  59. package/dist/models/buildCollectionSchema.js +4 -2
  60. package/dist/models/buildCollectionSchema.js.map +1 -1
  61. package/dist/models/buildGlobalModel.d.ts +5 -1
  62. package/dist/models/buildGlobalModel.d.ts.map +1 -1
  63. package/dist/models/buildGlobalModel.js +4 -2
  64. package/dist/models/buildGlobalModel.js.map +1 -1
  65. package/dist/models/buildSchema.d.ts +4 -0
  66. package/dist/models/buildSchema.d.ts.map +1 -1
  67. package/dist/models/buildSchema.js +64 -26
  68. package/dist/models/buildSchema.js.map +1 -1
  69. package/dist/models/schemaBuildContext.d.ts +21 -0
  70. package/dist/models/schemaBuildContext.d.ts.map +1 -0
  71. package/dist/models/schemaBuildContext.js +29 -0
  72. package/dist/models/schemaBuildContext.js.map +1 -0
  73. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -1
  74. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +4 -4
  75. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -1
  76. package/dist/predefinedMigrations/migrateSizesToVariants.d.ts +13 -0
  77. package/dist/predefinedMigrations/migrateSizesToVariants.d.ts.map +1 -0
  78. package/dist/predefinedMigrations/migrateSizesToVariants.js +368 -0
  79. package/dist/predefinedMigrations/migrateSizesToVariants.js.map +1 -0
  80. package/dist/predefinedMigrations/sizes-to-variants.d.ts +5 -0
  81. package/dist/predefinedMigrations/sizes-to-variants.d.ts.map +1 -0
  82. package/dist/predefinedMigrations/sizes-to-variants.js +8 -0
  83. package/dist/predefinedMigrations/sizes-to-variants.js.map +1 -0
  84. package/dist/queries/buildSearchParams.d.ts.map +1 -1
  85. package/dist/queries/buildSearchParams.js +189 -6
  86. package/dist/queries/buildSearchParams.js.map +1 -1
  87. package/dist/queries/parseParams.js.map +1 -1
  88. package/dist/queryDrafts.d.ts.map +1 -1
  89. package/dist/queryDrafts.js +5 -17
  90. package/dist/queryDrafts.js.map +1 -1
  91. package/dist/updateGlobal.d.ts.map +1 -1
  92. package/dist/updateGlobal.js +9 -70
  93. package/dist/updateGlobal.js.map +1 -1
  94. package/dist/updateGlobalVersion.js +2 -2
  95. package/dist/updateGlobalVersion.js.map +1 -1
  96. package/dist/updateJobs.js +1 -1
  97. package/dist/updateJobs.js.map +1 -1
  98. package/dist/updateMany.d.ts.map +1 -1
  99. package/dist/updateMany.js +0 -1
  100. package/dist/updateMany.js.map +1 -1
  101. package/dist/updateOne.d.ts.map +1 -1
  102. package/dist/updateOne.js +4 -28
  103. package/dist/updateOne.js.map +1 -1
  104. package/dist/updateVersion.js +2 -2
  105. package/dist/updateVersion.js.map +1 -1
  106. package/dist/utilities/aggregatePaginate.d.ts.map +1 -1
  107. package/dist/utilities/aggregatePaginate.js +3 -1
  108. package/dist/utilities/aggregatePaginate.js.map +1 -1
  109. package/dist/utilities/buildJoinAggregation.d.ts +2 -3
  110. package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
  111. package/dist/utilities/buildJoinAggregation.js +6 -33
  112. package/dist/utilities/buildJoinAggregation.js.map +1 -1
  113. package/dist/utilities/resolveJoins.d.ts +2 -4
  114. package/dist/utilities/resolveJoins.d.ts.map +1 -1
  115. package/dist/utilities/resolveJoins.js +2 -16
  116. package/dist/utilities/resolveJoins.js.map +1 -1
  117. package/package.json +5 -5
  118. package/dist/deleteBranchGlobal.d.ts +0 -10
  119. package/dist/deleteBranchGlobal.d.ts.map +0 -1
  120. package/dist/deleteBranchGlobal.js +0 -22
  121. package/dist/deleteBranchGlobal.js.map +0 -1
  122. package/dist/queries/buildSortParam.spec.js +0 -123
  123. package/dist/queries/buildSortParam.spec.js.map +0 -1
  124. package/dist/queries/getLocalizedSortProperty.spec.js +0 -215
  125. package/dist/queries/getLocalizedSortProperty.spec.js.map +0 -1
  126. package/dist/utilities/transform.spec.js +0 -546
  127. package/dist/utilities/transform.spec.js.map +0 -1
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 withBranchIDSelect,\n} 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 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\n where = (await resolveBranchQuery({ branch, collectionSlug, req, where })) ?? {}\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 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 collection: collectionSlug,\n collectionConfig,\n draftsEnabled,\n joins,\n locale,\n projection: paginationOptions.projection,\n query,\n req,\n })\n\n if (aggregate || 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 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","withBranchIDSelect","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","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;AA6C3D,eAAO,MAAM,YAAY,EAAE,YA+Q1B,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"}
@@ -1,4 +1,4 @@
1
- import { getFieldByPath, resolveBranchQuery } from 'payload';
1
+ import { getFieldByPath } from 'payload';
2
2
  import { buildQuery } from './queries/buildQuery.js';
3
3
  import { buildSortParam } from './queries/buildSortParam.js';
4
4
  import { getCollection } from './utilities/getEntity.js';
@@ -29,15 +29,7 @@ export const findDistinct = async function(args) {
29
29
  adapter: this,
30
30
  collectionSlug: args.collection
31
31
  });
32
- // Distinct values describe the documents the caller can see, so they are subject to
33
- // the same branch predicate as a list read. Without it a branch's shadow rows fed
34
- // main's distinct values and the branch's own edits were invisible in its own.
35
- const where = await resolveBranchQuery({
36
- branch: args.branch,
37
- collectionSlug: args.collection,
38
- req: args.req,
39
- where: args.where
40
- }) ?? {};
32
+ const { where = {} } = args;
41
33
  let sortAggregation = [];
42
34
  const sort = buildSortParam({
43
35
  adapter: this,
@@ -122,30 +114,74 @@ export const findDistinct = async function(args) {
122
114
  sortProperty = sortWithoutRelationPrefix;
123
115
  }
124
116
  }
125
- relationLookup = rels.reduce((acc, { fieldPath, relationTo })=>{
117
+ relationLookup = [];
118
+ for (const { fieldPath, relationTo } of rels){
126
119
  sortAggregation = sortAggregation.filter((each)=>{
127
120
  if ('$lookup' in each && each.$lookup.as.replace(/^_+/, '') === fieldPath) {
128
121
  return false;
129
122
  }
130
123
  return true;
131
124
  });
132
- const { Model: foreignModel } = getCollection({
125
+ const { collectionConfig: foreignCollectionConfig, Model: foreignModel } = getCollection({
133
126
  adapter: this,
134
127
  collectionSlug: relationTo
135
128
  });
136
- acc.push({
129
+ const relatedAccess = args.relatedAccess?.[fieldPath];
130
+ const relatedAccessQuery = relatedAccess ? await buildQuery({
131
+ adapter: this,
132
+ collectionSlug: relationTo,
133
+ fields: foreignCollectionConfig.flattenedFields,
134
+ locale: args.locale,
135
+ where: relatedAccess
136
+ }) : null;
137
+ relationLookup.push({
137
138
  $lookup: {
138
139
  as: fieldPath,
139
- foreignField: '_id',
140
140
  from: foreignModel.collection.name,
141
- localField: fieldPath
141
+ ...relatedAccessQuery ? {
142
+ let: {
143
+ relatedIDs: `$${fieldPath}`
144
+ },
145
+ pipeline: [
146
+ {
147
+ $match: {
148
+ $and: [
149
+ {
150
+ $expr: {
151
+ $cond: {
152
+ else: {
153
+ $eq: [
154
+ '$_id',
155
+ '$$relatedIDs'
156
+ ]
157
+ },
158
+ if: {
159
+ $isArray: '$$relatedIDs'
160
+ },
161
+ then: {
162
+ $in: [
163
+ '$_id',
164
+ '$$relatedIDs'
165
+ ]
166
+ }
167
+ }
168
+ }
169
+ },
170
+ relatedAccessQuery
171
+ ]
172
+ }
173
+ }
174
+ ]
175
+ } : {
176
+ foreignField: '_id',
177
+ localField: fieldPath
178
+ }
142
179
  }
143
180
  });
144
- acc.push({
181
+ relationLookup.push({
145
182
  $unwind: `$${fieldPath}`
146
183
  });
147
- return acc;
148
- }, []);
184
+ }
149
185
  }
150
186
  let $unwind = '';
151
187
  let $group = null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findDistinct.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\nimport type { FindDistinct, FlattenedField } from 'payload'\n\nimport { getFieldByPath, resolveBranchQuery } 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 // 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 =\n (await resolveBranchQuery({\n branch: args.branch,\n collectionSlug: args.collection,\n req: args.req,\n where: args.where,\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 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 = rels.reduce<PipelineStage[]>((acc, { fieldPath, relationTo }) => {\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 { Model: foreignModel } = getCollection({ adapter: this, collectionSlug: relationTo })\n acc.push({\n $lookup: {\n as: fieldPath,\n foreignField: '_id',\n from: foreignModel.collection.name,\n localField: fieldPath,\n },\n })\n acc.push({ $unwind: `$${fieldPath}` })\n return acc\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","resolveBranchQuery","buildQuery","buildSortParam","getCollection","getSession","sanitizeGroupID","id","_field","getSortAggregation","fieldPath","hasSortAggregationAndHasMany","sortDirection","sortProperty","resolvedSortProperty","findDistinct","args","collectionConfig","Model","adapter","collectionSlug","collection","where","branch","req","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","reduce","acc","filter","each","$lookup","as","foreignModel","foreignField","from","localField","$unwind","$group","preserveNullAndEmptyArrays","_id","_sort","$max","pipeline","$match","$sort","Boolean","session","getValues","aggregate","then","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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"}
@@ -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;AAkBzC,eAAO,MAAM,UAAU,EAAE,UAqDxB,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"}
@@ -1,21 +1,15 @@
1
- import { branchGlobalNeedsBothRows, combineQueries, pickBranchGlobal, resolveBranch, resolveBranchGlobalQuery } from 'payload';
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, branch, locale, req, select, where = {} }) {
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
15
  fields,
@@ -25,7 +19,7 @@ export const findGlobal = async function findGlobal({ slug: globalSlug, branch,
25
19
  globalType: {
26
20
  equals: globalSlug
27
21
  }
28
- }, branchedWhere ?? {})
22
+ }, where)
29
23
  });
30
24
  const options = {
31
25
  lean: true,
@@ -36,23 +30,7 @@ export const findGlobal = async function findGlobal({ slug: globalSlug, branch,
36
30
  }),
37
31
  session: await getSession(this, req)
38
32
  };
39
- // A global is one document, so the branch's row and main's row can be fetched
40
- // together and the branch's preferred in memory. There is no result set to
41
- // paginate, so nothing a post-query step could get wrong.
42
- let doc;
43
- if (branchGlobalNeedsBothRows({
44
- branch,
45
- globalSlug,
46
- req
47
- })) {
48
- const rows = await Model.find(query, {}, {
49
- ...options,
50
- limit: 2
51
- }).lean();
52
- doc = pickBranchGlobal(rows, branch || resolveBranch(req));
53
- } else {
54
- doc = await Model.findOne(query, {}, options);
55
- }
33
+ const doc = await Model.findOne(query, {}, options);
56
34
  if (!doc) {
57
35
  return null;
58
36
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findGlobal.ts"],"sourcesContent":["import type { QueryOptions } from 'mongoose'\nimport type { FindGlobal } from 'payload'\n\nimport {\n branchGlobalNeedsBothRows,\n combineQueries,\n pickBranchGlobal,\n resolveBranch,\n resolveBranchGlobalQuery,\n} 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, branch, locale, req, select, where = {} },\n) {\n const { globalConfig, Model } = getGlobal({ adapter: this, globalSlug })\n\n const fields = globalConfig.flattenedFields\n\n const branchedWhere = resolveBranchGlobalQuery({ branch, globalSlug, req, where })\n\n const query = await buildQuery({\n adapter: this,\n fields,\n globalSlug,\n locale,\n where: combineQueries({ globalType: { equals: globalSlug } }, branchedWhere ?? {}),\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 // A global is one document, so the branch's row and main's row can be fetched\n // together and the branch's preferred in memory. There is no result set to\n // paginate, so nothing a post-query step could get wrong.\n let doc: any\n\n if (branchGlobalNeedsBothRows({ branch, globalSlug, req })) {\n const rows = await Model.find(query, {}, { ...options, limit: 2 }).lean()\n\n doc = pickBranchGlobal(rows as Record<string, any>[], branch || resolveBranch(req as never))\n } else {\n doc = await Model.findOne(query, {}, options)\n }\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":["branchGlobalNeedsBothRows","combineQueries","pickBranchGlobal","resolveBranch","resolveBranchGlobalQuery","buildQuery","buildProjectionFromSelect","getGlobal","getSession","transform","findGlobal","slug","globalSlug","branch","locale","req","select","where","globalConfig","Model","adapter","fields","flattenedFields","branchedWhere","query","globalType","equals","options","lean","session","doc","rows","find","limit","findOne","data","operation"],"mappings":"AAGA,SACEA,yBAAyB,EACzBC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,EACbC,wBAAwB,QACnB,UAAS;AAIhB,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,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAEC,QAAQ,CAAC,CAAC,EAAE;IAE7D,MAAM,EAAEC,YAAY,EAAEC,KAAK,EAAE,GAAGZ,UAAU;QAAEa,SAAS,IAAI;QAAER;IAAW;IAEtE,MAAMS,SAASH,aAAaI,eAAe;IAE3C,MAAMC,gBAAgBnB,yBAAyB;QAAES;QAAQD;QAAYG;QAAKE;IAAM;IAEhF,MAAMO,QAAQ,MAAMnB,WAAW;QAC7Be,SAAS,IAAI;QACbC;QACAT;QACAE;QACAG,OAAOhB,eAAe;YAAEwB,YAAY;gBAAEC,QAAQd;YAAW;QAAE,GAAGW,iBAAiB,CAAC;IAClF;IAEA,MAAMI,UAAwB;QAC5BC,MAAM;QACNZ,QAAQV,0BAA0B;YAChCc,SAAS,IAAI;YACbC;YACAL;QACF;QACAa,SAAS,MAAMrB,WAAW,IAAI,EAAEO;IAClC;IAEA,8EAA8E;IAC9E,2EAA2E;IAC3E,0DAA0D;IAC1D,IAAIe;IAEJ,IAAI9B,0BAA0B;QAAEa;QAAQD;QAAYG;IAAI,IAAI;QAC1D,MAAMgB,OAAO,MAAMZ,MAAMa,IAAI,CAACR,OAAO,CAAC,GAAG;YAAE,GAAGG,OAAO;YAAEM,OAAO;QAAE,GAAGL,IAAI;QAEvEE,MAAM5B,iBAAiB6B,MAA+BlB,UAAUV,cAAcY;IAChF,OAAO;QACLe,MAAM,MAAMX,MAAMe,OAAO,CAACV,OAAO,CAAC,GAAGG;IACvC;IAEA,IAAI,CAACG,KAAK;QACR,OAAO;IACT;IAEArB,UAAU;QACRW,SAAS,IAAI;QACbe,MAAML;QACNT,QAAQH,aAAaG,MAAM;QAC3Be,WAAW;IACb;IAEA,OAAON;AACT,EAAC"}
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;AAkBjD,eAAO,MAAM,kBAAkB,EAAE,kBAoIhC,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, resolveBranchGlobalVersionQuery } from 'payload';
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({ branch, global: globalSlug, limit = 0, locale, page, pagination, req, select, sort: sortArg, where = {} }) {
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) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findGlobalVersions.ts"],"sourcesContent":["import type { PaginateOptions, QueryOptions } from 'mongoose'\nimport type { FindGlobalVersions } from 'payload'\n\nimport {\n APIError,\n buildVersionGlobalFields,\n flattenWhereToOperators,\n resolveBranchGlobalVersionQuery,\n} from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.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 findGlobalVersions: FindGlobalVersions = async function findGlobalVersions(\n this: MongooseAdapter,\n {\n branch,\n global: globalSlug,\n limit = 0,\n locale,\n page,\n pagination,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { globalConfig, Model } = getGlobal({ adapter: this, globalSlug, versions: true })\n\n where = resolveBranchGlobalVersionQuery({ branch, globalSlug, req, where }) ?? {}\n\n const versionFields = buildVersionGlobalFields(this.payload.config, globalConfig, true)\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 let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: versionFields,\n locale,\n sort: sortArg || '-updatedAt',\n timestamps: true,\n })\n }\n\n const query = await buildQuery({\n adapter: this,\n fields: versionFields,\n locale,\n where,\n })\n\n const session = await getSession(this, req)\n // Calculate skip from page for cases where pagination is disabled but offset is still needed\n const skip = typeof page === 'number' && page > 1 ? (page - 1) * (limit || 0) : undefined\n const options: QueryOptions = {\n limit,\n session,\n skip,\n }\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 limit,\n options,\n page,\n pagination,\n projection: buildProjectionFromSelect({ adapter: this, fields: versionFields, select }),\n sort,\n useEstimatedCount,\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 const result = await Model.paginate(query, paginationOptions)\n\n transform({\n adapter: this,\n data: result.docs,\n fields: buildVersionGlobalFields(this.payload.config, globalConfig),\n operation: 'read',\n })\n\n return result\n}\n"],"names":["buildVersionGlobalFields","flattenWhereToOperators","resolveBranchGlobalVersionQuery","buildQuery","buildSortParam","buildProjectionFromSelect","getGlobal","getSession","transform","findGlobalVersions","branch","global","globalSlug","limit","locale","page","pagination","req","select","sort","sortArg","where","globalConfig","Model","adapter","versions","versionFields","payload","config","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","timestamps","query","session","skip","undefined","options","useEstimatedCount","length","paginationOptions","lean","leanWithId","projection","collation","localizationConfig","localization","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","paginate","data","docs","operation"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/findGlobalVersions.ts"],"sourcesContent":["import type { PaginateOptions, QueryOptions } from 'mongoose'\nimport type { FindGlobalVersions } from 'payload'\n\nimport { APIError, buildVersionGlobalFields, flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.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 findGlobalVersions: FindGlobalVersions = async function findGlobalVersions(\n this: MongooseAdapter,\n {\n global: globalSlug,\n limit = 0,\n locale,\n page,\n pagination,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { globalConfig, Model } = getGlobal({ adapter: this, globalSlug, versions: true })\n\n const versionFields = buildVersionGlobalFields(this.payload.config, globalConfig, true)\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 let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: versionFields,\n locale,\n sort: sortArg || '-updatedAt',\n timestamps: true,\n })\n }\n\n const query = await buildQuery({\n adapter: this,\n fields: versionFields,\n locale,\n where,\n })\n\n const session = await getSession(this, req)\n // Calculate skip from page for cases where pagination is disabled but offset is still needed\n const skip = typeof page === 'number' && page > 1 ? (page - 1) * (limit || 0) : undefined\n const options: QueryOptions = {\n limit,\n session,\n skip,\n }\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 limit,\n options,\n page,\n pagination,\n projection: buildProjectionFromSelect({ adapter: this, fields: versionFields, select }),\n sort,\n useEstimatedCount,\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 const result = await Model.paginate(query, paginationOptions)\n\n transform({\n adapter: this,\n data: result.docs,\n fields: buildVersionGlobalFields(this.payload.config, globalConfig),\n operation: 'read',\n })\n\n return result\n}\n"],"names":["buildVersionGlobalFields","flattenWhereToOperators","buildQuery","buildSortParam","buildProjectionFromSelect","getGlobal","getSession","transform","findGlobalVersions","global","globalSlug","limit","locale","page","pagination","req","select","sort","sortArg","where","globalConfig","Model","adapter","versions","versionFields","payload","config","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","timestamps","query","session","skip","undefined","options","useEstimatedCount","length","paginationOptions","lean","leanWithId","projection","collation","localizationConfig","localization","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","paginate","data","docs","operation"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../src/findOne.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,OAAO,EAGb,MAAM,SAAS,CAAA;AAahB,eAAO,MAAM,OAAO,EAAE,OAkFrB,CAAA"}
1
+ {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../src/findOne.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAatC,eAAO,MAAM,OAAO,EAAE,OAwErB,CAAA"}
package/dist/findOne.js CHANGED
@@ -1,4 +1,3 @@
1
- import { applyBranchIDProjection, resolveBranchQuery, withBranchIDSelect } from 'payload';
2
1
  import { buildQuery } from './queries/buildQuery.js';
3
2
  import { aggregatePaginate } from './utilities/aggregatePaginate.js';
4
3
  import { buildJoinAggregation } from './utilities/buildJoinAggregation.js';
@@ -7,17 +6,11 @@ import { getCollection } from './utilities/getEntity.js';
7
6
  import { getSession } from './utilities/getSession.js';
8
7
  import { resolveJoins } from './utilities/resolveJoins.js';
9
8
  import { transform } from './utilities/transform.js';
10
- export const findOne = async function findOne({ branch, collection: collectionSlug, draftsEnabled, joins, locale, req, select, where = {} }) {
9
+ export const findOne = async function findOne({ collection: collectionSlug, draftsEnabled, joins, locale, req, select, where = {} }) {
11
10
  const { collectionConfig, Model } = getCollection({
12
11
  adapter: this,
13
12
  collectionSlug
14
13
  });
15
- where = await resolveBranchQuery({
16
- branch,
17
- collectionSlug,
18
- req,
19
- where
20
- }) ?? {};
21
14
  const query = await buildQuery({
22
15
  adapter: this,
23
16
  collectionSlug,
@@ -28,12 +21,7 @@ export const findOne = async function findOne({ branch, collection: collectionSl
28
21
  const projection = buildProjectionFromSelect({
29
22
  adapter: this,
30
23
  fields: collectionConfig.flattenedFields,
31
- select: withBranchIDSelect({
32
- branch,
33
- collectionSlug,
34
- req,
35
- select
36
- })
24
+ select
37
25
  });
38
26
  const aggregate = await buildJoinAggregation({
39
27
  adapter: this,
@@ -43,8 +31,7 @@ export const findOne = async function findOne({ branch, collection: collectionSl
43
31
  joins,
44
32
  locale,
45
33
  projection,
46
- query,
47
- req
34
+ query
48
35
  });
49
36
  const session = await getSession(this, req);
50
37
  const options = {
@@ -52,7 +39,7 @@ export const findOne = async function findOne({ branch, collection: collectionSl
52
39
  session
53
40
  };
54
41
  let doc;
55
- if (aggregate) {
42
+ if (aggregate.length > 0) {
56
43
  const { docs } = await aggregatePaginate({
57
44
  adapter: this,
58
45
  joinAggregation: aggregate,
@@ -89,14 +76,6 @@ export const findOne = async function findOne({ branch, collection: collectionSl
89
76
  fields: collectionConfig.fields,
90
77
  operation: 'read'
91
78
  });
92
- applyBranchIDProjection({
93
- branch,
94
- collectionSlug,
95
- docs: [
96
- doc
97
- ],
98
- req
99
- });
100
79
  return doc;
101
80
  };
102
81
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findOne.ts"],"sourcesContent":["import type { AggregateOptions, QueryOptions } from 'mongoose'\n\nimport {\n applyBranchIDProjection,\n type FindOne,\n resolveBranchQuery,\n withBranchIDSelect,\n} from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.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 findOne: FindOne = async function findOne(\n this: MongooseAdapter,\n { branch, collection: collectionSlug, draftsEnabled, joins, locale, req, select, where = {} },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n where = (await resolveBranchQuery({ branch, collectionSlug, req, where })) ?? {}\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select: withBranchIDSelect({ branch, collectionSlug, req, select }),\n })\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n draftsEnabled,\n joins,\n locale,\n projection,\n query,\n req,\n })\n\n const session = await getSession(this, req)\n const options: AggregateOptions & QueryOptions = {\n lean: true,\n session,\n }\n\n let doc\n if (aggregate) {\n const { docs } = await aggregatePaginate({\n adapter: this,\n joinAggregation: aggregate,\n limit: 1,\n Model,\n pagination: false,\n projection,\n query,\n session,\n })\n doc = docs[0]\n } else {\n ;(options as Record<string, unknown>).projection = projection\n doc = await Model.findOne(query, {}, options)\n }\n\n if (doc && !this.useJoinAggregations) {\n await resolveJoins({\n adapter: this,\n collectionSlug,\n docs: [doc] as Record<string, unknown>[],\n joins,\n locale,\n })\n }\n\n if (!doc) {\n return null\n }\n\n transform({ adapter: this, data: doc, fields: collectionConfig.fields, operation: 'read' })\n\n applyBranchIDProjection({\n branch,\n collectionSlug,\n docs: [doc as Record<string, unknown>],\n req,\n })\n\n return doc\n}\n"],"names":["applyBranchIDProjection","resolveBranchQuery","withBranchIDSelect","buildQuery","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","resolveJoins","transform","findOne","branch","collection","collectionSlug","draftsEnabled","joins","locale","req","select","where","collectionConfig","Model","adapter","query","fields","flattenedFields","projection","aggregate","session","options","lean","doc","docs","joinAggregation","limit","pagination","useJoinAggregations","data","operation"],"mappings":"AAEA,SACEA,uBAAuB,EAEvBC,kBAAkB,EAClBC,kBAAkB,QACb,UAAS;AAIhB,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,iBAAiB,QAAQ,mCAAkC;AACpE,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,UAAmB,eAAeA,QAE7C,EAAEC,MAAM,EAAEC,YAAYC,cAAc,EAAEC,aAAa,EAAEC,KAAK,EAAEC,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAEC,QAAQ,CAAC,CAAC,EAAE;IAE7F,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAGf,cAAc;QAAEgB,SAAS,IAAI;QAAET;IAAe;IAElFM,QAAQ,AAAC,MAAMnB,mBAAmB;QAAEW;QAAQE;QAAgBI;QAAKE;IAAM,MAAO,CAAC;IAE/E,MAAMI,QAAQ,MAAMrB,WAAW;QAC7BoB,SAAS,IAAI;QACbT;QACAW,QAAQJ,iBAAiBK,eAAe;QACxCT;QACAG;IACF;IAEA,MAAMO,aAAarB,0BAA0B;QAC3CiB,SAAS,IAAI;QACbE,QAAQJ,iBAAiBK,eAAe;QACxCP,QAAQjB,mBAAmB;YAAEU;YAAQE;YAAgBI;YAAKC;QAAO;IACnE;IAEA,MAAMS,YAAY,MAAMvB,qBAAqB;QAC3CkB,SAAS,IAAI;QACbV,YAAYC;QACZO;QACAN;QACAC;QACAC;QACAU;QACAH;QACAN;IACF;IAEA,MAAMW,UAAU,MAAMrB,WAAW,IAAI,EAAEU;IACvC,MAAMY,UAA2C;QAC/CC,MAAM;QACNF;IACF;IAEA,IAAIG;IACJ,IAAIJ,WAAW;QACb,MAAM,EAAEK,IAAI,EAAE,GAAG,MAAM7B,kBAAkB;YACvCmB,SAAS,IAAI;YACbW,iBAAiBN;YACjBO,OAAO;YACPb;YACAc,YAAY;YACZT;YACAH;YACAK;QACF;QACAG,MAAMC,IAAI,CAAC,EAAE;IACf,OAAO;;QACHH,QAAoCH,UAAU,GAAGA;QACnDK,MAAM,MAAMV,MAAMX,OAAO,CAACa,OAAO,CAAC,GAAGM;IACvC;IAEA,IAAIE,OAAO,CAAC,IAAI,CAACK,mBAAmB,EAAE;QACpC,MAAM5B,aAAa;YACjBc,SAAS,IAAI;YACbT;YACAmB,MAAM;gBAACD;aAAI;YACXhB;YACAC;QACF;IACF;IAEA,IAAI,CAACe,KAAK;QACR,OAAO;IACT;IAEAtB,UAAU;QAAEa,SAAS,IAAI;QAAEe,MAAMN;QAAKP,QAAQJ,iBAAiBI,MAAM;QAAEc,WAAW;IAAO;IAEzFvC,wBAAwB;QACtBY;QACAE;QACAmB,MAAM;YAACD;SAA+B;QACtCd;IACF;IAEA,OAAOc;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/findOne.ts"],"sourcesContent":["import type { AggregateOptions, QueryOptions } from 'mongoose'\n\nimport { type FindOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.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 findOne: FindOne = async function findOne(\n this: MongooseAdapter,\n { collection: collectionSlug, draftsEnabled, joins, locale, req, select, where = {} },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n })\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n draftsEnabled,\n joins,\n locale,\n projection,\n query,\n })\n\n const session = await getSession(this, req)\n const options: AggregateOptions & QueryOptions = {\n lean: true,\n session,\n }\n\n let doc\n if (aggregate.length > 0) {\n const { docs } = await aggregatePaginate({\n adapter: this,\n joinAggregation: aggregate,\n limit: 1,\n Model,\n pagination: false,\n projection,\n query,\n session,\n })\n doc = docs[0]\n } else {\n ;(options as Record<string, unknown>).projection = projection\n doc = await Model.findOne(query, {}, options)\n }\n\n if (doc && !this.useJoinAggregations) {\n await resolveJoins({\n adapter: this,\n collectionSlug,\n docs: [doc] as Record<string, unknown>[],\n joins,\n locale,\n })\n }\n\n if (!doc) {\n return null\n }\n\n transform({ adapter: this, data: doc, fields: collectionConfig.fields, operation: 'read' })\n\n return doc\n}\n"],"names":["buildQuery","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","resolveJoins","transform","findOne","collection","collectionSlug","draftsEnabled","joins","locale","req","select","where","collectionConfig","Model","adapter","query","fields","flattenedFields","projection","aggregate","session","options","lean","doc","length","docs","joinAggregation","limit","pagination","useJoinAggregations","data","operation"],"mappings":"AAMA,SAASA,UAAU,QAAQ,0BAAyB;AACpD,SAASC,iBAAiB,QAAQ,mCAAkC;AACpE,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,UAAmB,eAAeA,QAE7C,EAAEC,YAAYC,cAAc,EAAEC,aAAa,EAAEC,KAAK,EAAEC,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAEC,QAAQ,CAAC,CAAC,EAAE;IAErF,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAGd,cAAc;QAAEe,SAAS,IAAI;QAAET;IAAe;IAElF,MAAMU,QAAQ,MAAMpB,WAAW;QAC7BmB,SAAS,IAAI;QACbT;QACAW,QAAQJ,iBAAiBK,eAAe;QACxCT;QACAG;IACF;IAEA,MAAMO,aAAapB,0BAA0B;QAC3CgB,SAAS,IAAI;QACbE,QAAQJ,iBAAiBK,eAAe;QACxCP;IACF;IAEA,MAAMS,YAAY,MAAMtB,qBAAqB;QAC3CiB,SAAS,IAAI;QACbV,YAAYC;QACZO;QACAN;QACAC;QACAC;QACAU;QACAH;IACF;IAEA,MAAMK,UAAU,MAAMpB,WAAW,IAAI,EAAES;IACvC,MAAMY,UAA2C;QAC/CC,MAAM;QACNF;IACF;IAEA,IAAIG;IACJ,IAAIJ,UAAUK,MAAM,GAAG,GAAG;QACxB,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAM7B,kBAAkB;YACvCkB,SAAS,IAAI;YACbY,iBAAiBP;YACjBQ,OAAO;YACPd;YACAe,YAAY;YACZV;YACAH;YACAK;QACF;QACAG,MAAME,IAAI,CAAC,EAAE;IACf,OAAO;;QACHJ,QAAoCH,UAAU,GAAGA;QACnDK,MAAM,MAAMV,MAAMV,OAAO,CAACY,OAAO,CAAC,GAAGM;IACvC;IAEA,IAAIE,OAAO,CAAC,IAAI,CAACM,mBAAmB,EAAE;QACpC,MAAM5B,aAAa;YACjBa,SAAS,IAAI;YACbT;YACAoB,MAAM;gBAACF;aAAI;YACXhB;YACAC;QACF;IACF;IAEA,IAAI,CAACe,KAAK;QACR,OAAO;IACT;IAEArB,UAAU;QAAEY,SAAS,IAAI;QAAEgB,MAAMP;QAAKP,QAAQJ,iBAAiBI,MAAM;QAAEe,WAAW;IAAO;IAEzF,OAAOR;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../src/findVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAmB3C,eAAO,MAAM,YAAY,EAAE,YAgJ1B,CAAA"}
1
+ {"version":3,"file":"findVersions.d.ts","sourceRoot":"","sources":["../src/findVersions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAa3C,eAAO,MAAM,YAAY,EAAE,YAyI1B,CAAA"}
@@ -1,22 +1,16 @@
1
- import { buildVersionCollectionFields, flattenWhereToOperators, projectBranchVersionParents, resolveBranchVersionHistoryQuery, withBranchVersionSelect } from 'payload';
1
+ import { buildVersionCollectionFields, 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 { getCollection } from './utilities/getEntity.js';
6
6
  import { getSession } from './utilities/getSession.js';
7
7
  import { transform } from './utilities/transform.js';
8
- export const findVersions = async function findVersions({ branch, collection: collectionSlug, limit = 0, locale, page, pagination, req = {}, select, sort: sortArg, where = {} }) {
8
+ export const findVersions = async function findVersions({ collection: collectionSlug, limit = 0, locale, page, pagination, req = {}, select, sort: sortArg, where = {} }) {
9
9
  const { collectionConfig, Model } = getCollection({
10
10
  adapter: this,
11
11
  collectionSlug,
12
12
  versions: true
13
13
  });
14
- where = resolveBranchVersionHistoryQuery({
15
- branch,
16
- collectionSlug,
17
- req,
18
- where
19
- }) ?? {};
20
14
  let hasNearConstraint = false;
21
15
  if (where) {
22
16
  const constraints = flattenWhereToOperators(where);
@@ -60,12 +54,7 @@ export const findVersions = async function findVersions({ branch, collection: co
60
54
  projection: buildProjectionFromSelect({
61
55
  adapter: this,
62
56
  fields,
63
- select: withBranchVersionSelect({
64
- branch,
65
- collectionSlug,
66
- req,
67
- select
68
- })
57
+ select
69
58
  }),
70
59
  sort,
71
60
  useEstimatedCount
@@ -120,9 +109,6 @@ export const findVersions = async function findVersions({ branch, collection: co
120
109
  fields: buildVersionCollectionFields(this.payload.config, collectionConfig),
121
110
  operation: 'read'
122
111
  });
123
- // A branch version hangs off the shadow row, so its `parent` is that row rather
124
- // than the document the history belongs to.
125
- projectBranchVersionParents(result.docs);
126
112
  return result;
127
113
  };
128
114