@payloadcms/db-mongodb 4.0.0-internal.293e026 → 4.0.0-internal.2d11d2e

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 (211) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/connect.d.ts.map +1 -1
  3. package/dist/connect.js +9 -2
  4. package/dist/connect.js.map +1 -1
  5. package/dist/count.d.ts.map +1 -1
  6. package/dist/count.js +33 -4
  7. package/dist/count.js.map +1 -1
  8. package/dist/countGlobalVersions.d.ts.map +1 -1
  9. package/dist/countGlobalVersions.js +10 -2
  10. package/dist/countGlobalVersions.js.map +1 -1
  11. package/dist/countVersions.d.ts.map +1 -1
  12. package/dist/countVersions.js +36 -4
  13. package/dist/countVersions.js.map +1 -1
  14. package/dist/create.d.ts.map +1 -1
  15. package/dist/create.js +2 -1
  16. package/dist/create.js.map +1 -1
  17. package/dist/createGlobalVersion.d.ts +1 -1
  18. package/dist/createGlobalVersion.d.ts.map +1 -1
  19. package/dist/createGlobalVersion.js +25 -2
  20. package/dist/createGlobalVersion.js.map +1 -1
  21. package/dist/createMigration.d.ts.map +1 -1
  22. package/dist/createMigration.js +9 -2
  23. package/dist/createMigration.js.map +1 -1
  24. package/dist/createVersion.d.ts.map +1 -1
  25. package/dist/createVersion.js +17 -4
  26. package/dist/createVersion.js.map +1 -1
  27. package/dist/deleteBranchGlobal.d.ts +10 -0
  28. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  29. package/dist/deleteBranchGlobal.js +26 -0
  30. package/dist/deleteBranchGlobal.js.map +1 -0
  31. package/dist/deleteMany.d.ts.map +1 -1
  32. package/dist/deleteMany.js +1 -0
  33. package/dist/deleteMany.js.map +1 -1
  34. package/dist/deleteOne.d.ts.map +1 -1
  35. package/dist/deleteOne.js +20 -1
  36. package/dist/deleteOne.js.map +1 -1
  37. package/dist/deleteVersions.d.ts.map +1 -1
  38. package/dist/deleteVersions.js +1 -0
  39. package/dist/deleteVersions.js.map +1 -1
  40. package/dist/exports/migration-utils.d.ts +3 -0
  41. package/dist/exports/migration-utils.d.ts.map +1 -1
  42. package/dist/exports/migration-utils.js +3 -0
  43. package/dist/exports/migration-utils.js.map +1 -1
  44. package/dist/find.d.ts.map +1 -1
  45. package/dist/find.js +44 -8
  46. package/dist/find.js.map +1 -1
  47. package/dist/findDistinct.d.ts.map +1 -1
  48. package/dist/findDistinct.js +115 -12
  49. package/dist/findDistinct.js.map +1 -1
  50. package/dist/findGlobal.d.ts.map +1 -1
  51. package/dist/findGlobal.js +48 -9
  52. package/dist/findGlobal.js.map +1 -1
  53. package/dist/findGlobalVersions.d.ts.map +1 -1
  54. package/dist/findGlobalVersions.js +10 -2
  55. package/dist/findGlobalVersions.js.map +1 -1
  56. package/dist/findOne.d.ts.map +1 -1
  57. package/dist/findOne.js +43 -5
  58. package/dist/findOne.js.map +1 -1
  59. package/dist/findVersions.d.ts.map +1 -1
  60. package/dist/findVersions.js +49 -5
  61. package/dist/findVersions.js.map +1 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +4 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/init.d.ts.map +1 -1
  66. package/dist/init.js +89 -67
  67. package/dist/init.js.map +1 -1
  68. package/dist/migrateFresh.d.ts +4 -2
  69. package/dist/migrateFresh.d.ts.map +1 -1
  70. package/dist/migrateFresh.js +21 -6
  71. package/dist/migrateFresh.js.map +1 -1
  72. package/dist/models/buildCollectionSchema.d.ts +8 -2
  73. package/dist/models/buildCollectionSchema.d.ts.map +1 -1
  74. package/dist/models/buildCollectionSchema.js +4 -2
  75. package/dist/models/buildCollectionSchema.js.map +1 -1
  76. package/dist/models/buildGlobalModel.d.ts +5 -1
  77. package/dist/models/buildGlobalModel.d.ts.map +1 -1
  78. package/dist/models/buildGlobalModel.js +34 -3
  79. package/dist/models/buildGlobalModel.js.map +1 -1
  80. package/dist/models/buildSchema.d.ts +4 -0
  81. package/dist/models/buildSchema.d.ts.map +1 -1
  82. package/dist/models/buildSchema.js +114 -36
  83. package/dist/models/buildSchema.js.map +1 -1
  84. package/dist/models/schemaBuildContext.d.ts +21 -0
  85. package/dist/models/schemaBuildContext.d.ts.map +1 -0
  86. package/dist/models/schemaBuildContext.js +29 -0
  87. package/dist/models/schemaBuildContext.js.map +1 -0
  88. package/dist/predefinedMigrations/branching.d.ts +4 -0
  89. package/dist/predefinedMigrations/branching.d.ts.map +1 -0
  90. package/dist/predefinedMigrations/branching.js +9 -0
  91. package/dist/predefinedMigrations/branching.js.map +1 -0
  92. package/dist/predefinedMigrations/localize-status.d.ts +4 -0
  93. package/dist/predefinedMigrations/localize-status.d.ts.map +1 -0
  94. package/dist/predefinedMigrations/localize-status.js +9 -0
  95. package/dist/predefinedMigrations/localize-status.js.map +1 -0
  96. package/dist/predefinedMigrations/migrateBranching.d.ts +17 -0
  97. package/dist/predefinedMigrations/migrateBranching.d.ts.map +1 -0
  98. package/dist/predefinedMigrations/migrateBranching.js +90 -0
  99. package/dist/predefinedMigrations/migrateBranching.js.map +1 -0
  100. package/dist/predefinedMigrations/migrateLocalizeStatus.d.ts +27 -0
  101. package/dist/predefinedMigrations/migrateLocalizeStatus.d.ts.map +1 -0
  102. package/dist/predefinedMigrations/migrateLocalizeStatus.js +324 -0
  103. package/dist/predefinedMigrations/migrateLocalizeStatus.js.map +1 -0
  104. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -1
  105. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +4 -4
  106. package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -1
  107. package/dist/predefinedMigrations/migrateSizesToVariants.d.ts +13 -0
  108. package/dist/predefinedMigrations/migrateSizesToVariants.d.ts.map +1 -0
  109. package/dist/predefinedMigrations/migrateSizesToVariants.js +368 -0
  110. package/dist/predefinedMigrations/migrateSizesToVariants.js.map +1 -0
  111. package/dist/predefinedMigrations/sizes-to-variants.d.ts +5 -0
  112. package/dist/predefinedMigrations/sizes-to-variants.d.ts.map +1 -0
  113. package/dist/predefinedMigrations/sizes-to-variants.js +8 -0
  114. package/dist/predefinedMigrations/sizes-to-variants.js.map +1 -0
  115. package/dist/queries/buildAndOrConditions.d.ts +4 -2
  116. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  117. package/dist/queries/buildAndOrConditions.js +3 -1
  118. package/dist/queries/buildAndOrConditions.js.map +1 -1
  119. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  120. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  121. package/dist/queries/buildBranchVisibility.js +204 -0
  122. package/dist/queries/buildBranchVisibility.js.map +1 -0
  123. package/dist/queries/buildQuery.d.ts +4 -2
  124. package/dist/queries/buildQuery.d.ts.map +1 -1
  125. package/dist/queries/buildQuery.js +3 -1
  126. package/dist/queries/buildQuery.js.map +1 -1
  127. package/dist/queries/buildRelatedQueryPipeline.d.ts +7 -0
  128. package/dist/queries/buildRelatedQueryPipeline.d.ts.map +1 -0
  129. package/dist/queries/buildRelatedQueryPipeline.js +56 -0
  130. package/dist/queries/buildRelatedQueryPipeline.js.map +1 -0
  131. package/dist/queries/buildSearchParams.d.ts +4 -2
  132. package/dist/queries/buildSearchParams.d.ts.map +1 -1
  133. package/dist/queries/buildSearchParams.js +340 -25
  134. package/dist/queries/buildSearchParams.js.map +1 -1
  135. package/dist/queries/buildSortParam.d.ts.map +1 -1
  136. package/dist/queries/getBuildQueryPlugin.d.ts +3 -1
  137. package/dist/queries/getBuildQueryPlugin.d.ts.map +1 -1
  138. package/dist/queries/getBuildQueryPlugin.js +3 -1
  139. package/dist/queries/getBuildQueryPlugin.js.map +1 -1
  140. package/dist/queries/getLocalizedSortProperty.d.ts.map +1 -1
  141. package/dist/queries/getLocalizedSortProperty.js.map +1 -1
  142. package/dist/queries/operatorMap.d.ts.map +1 -1
  143. package/dist/queries/parseParams.d.ts +4 -2
  144. package/dist/queries/parseParams.d.ts.map +1 -1
  145. package/dist/queries/parseParams.js +5 -1
  146. package/dist/queries/parseParams.js.map +1 -1
  147. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  148. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  149. package/dist/queryDrafts.d.ts.map +1 -1
  150. package/dist/queryDrafts.js +39 -7
  151. package/dist/queryDrafts.js.map +1 -1
  152. package/dist/testCredentials.d.ts.map +1 -1
  153. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  154. package/dist/transactions/beginTransaction.js +0 -1
  155. package/dist/transactions/beginTransaction.js.map +1 -1
  156. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  157. package/dist/transactions/commitTransaction.js +68 -7
  158. package/dist/transactions/commitTransaction.js.map +1 -1
  159. package/dist/transactions/rollbackTransaction.d.ts.map +1 -1
  160. package/dist/transactions/rollbackTransaction.js +10 -9
  161. package/dist/transactions/rollbackTransaction.js.map +1 -1
  162. package/dist/updateGlobal.d.ts.map +1 -1
  163. package/dist/updateGlobal.js +91 -9
  164. package/dist/updateGlobal.js.map +1 -1
  165. package/dist/updateGlobalVersion.d.ts.map +1 -1
  166. package/dist/updateGlobalVersion.js +3 -2
  167. package/dist/updateGlobalVersion.js.map +1 -1
  168. package/dist/updateJobs.d.ts.map +1 -1
  169. package/dist/updateJobs.js +71 -14
  170. package/dist/updateJobs.js.map +1 -1
  171. package/dist/updateMany.d.ts.map +1 -1
  172. package/dist/updateMany.js +3 -2
  173. package/dist/updateMany.js.map +1 -1
  174. package/dist/updateOne.d.ts.map +1 -1
  175. package/dist/updateOne.js +30 -4
  176. package/dist/updateOne.js.map +1 -1
  177. package/dist/updateVersion.d.ts.map +1 -1
  178. package/dist/updateVersion.js +3 -2
  179. package/dist/updateVersion.js.map +1 -1
  180. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  181. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  182. package/dist/upsertBranchGlobalChange.js +28 -0
  183. package/dist/upsertBranchGlobalChange.js.map +1 -0
  184. package/dist/utilities/aggregatePaginate.d.ts +2 -1
  185. package/dist/utilities/aggregatePaginate.d.ts.map +1 -1
  186. package/dist/utilities/aggregatePaginate.js +21 -5
  187. package/dist/utilities/aggregatePaginate.js.map +1 -1
  188. package/dist/utilities/buildJoinAggregation.d.ts +4 -2
  189. package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
  190. package/dist/utilities/buildJoinAggregation.js +160 -26
  191. package/dist/utilities/buildJoinAggregation.js.map +1 -1
  192. package/dist/utilities/buildProjectionFromSelect.d.ts.map +1 -1
  193. package/dist/utilities/getDBName.d.ts.map +1 -1
  194. package/dist/utilities/getEntity.d.ts +1 -1
  195. package/dist/utilities/getEntity.d.ts.map +1 -1
  196. package/dist/utilities/handleError.d.ts.map +1 -1
  197. package/dist/utilities/isObjectID.d.ts.map +1 -1
  198. package/dist/utilities/resolveJoins.d.ts +6 -2
  199. package/dist/utilities/resolveJoins.d.ts.map +1 -1
  200. package/dist/utilities/resolveJoins.js +115 -26
  201. package/dist/utilities/resolveJoins.js.map +1 -1
  202. package/dist/utilities/transform.d.ts.map +1 -1
  203. package/dist/utilities/transform.js +15 -0
  204. package/dist/utilities/transform.js.map +1 -1
  205. package/package.json +18 -21
  206. package/dist/queries/buildSortParam.spec.js +0 -123
  207. package/dist/queries/buildSortParam.spec.js.map +0 -1
  208. package/dist/queries/getLocalizedSortProperty.spec.js +0 -215
  209. package/dist/queries/getLocalizedSortProperty.spec.js.map +0 -1
  210. package/dist/utilities/transform.spec.js +0 -479
  211. package/dist/utilities/transform.spec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/getBuildQueryPlugin.ts"],"sourcesContent":["import type { FlattenedField, Payload, Where } from 'payload'\n\nimport { APIError } from 'payload'\n\nimport { parseParams } from './parseParams.js'\n\ntype GetBuildQueryPluginArgs = {\n collectionSlug?: string\n versionsFields?: FlattenedField[]\n}\n\nexport type BuildQueryArgs = {\n globalSlug?: string\n locale?: string\n payload: Payload\n where: Where\n}\n\n// This plugin asynchronously builds a list of Mongoose query constraints\n// which can then be used in subsequent Mongoose queries.\n// Deprecated in favor of using simpler buildQuery directly\nexport const getBuildQueryPlugin = ({\n collectionSlug,\n versionsFields,\n}: GetBuildQueryPluginArgs = {}) => {\n return function buildQueryPlugin(schema: any) {\n const modifiedSchema = schema\n async function schemaBuildQuery({\n globalSlug,\n locale,\n payload,\n where,\n }: BuildQueryArgs): Promise<Record<string, unknown>> {\n let fields: FlattenedField[] | null = null\n\n if (versionsFields) {\n fields = versionsFields\n } else {\n if (globalSlug) {\n const globalConfig = payload.globals.config.find(({ slug }) => slug === globalSlug)\n\n if (!globalConfig) {\n throw new APIError(`Global with the slug ${globalSlug} was not found`)\n }\n\n fields = globalConfig.flattenedFields\n }\n if (collectionSlug) {\n const collectionConfig = payload.collections[collectionSlug]?.config\n\n if (!collectionConfig) {\n throw new APIError(`Collection with the slug ${globalSlug} was not found`)\n }\n\n fields = collectionConfig.flattenedFields\n }\n }\n\n if (fields === null) {\n throw new APIError('Fields are not initialized.')\n }\n\n const result = await parseParams({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized: false,\n payload,\n where,\n })\n\n return result\n }\n modifiedSchema.statics.buildQuery = schemaBuildQuery\n }\n}\n"],"names":["APIError","parseParams","getBuildQueryPlugin","collectionSlug","versionsFields","buildQueryPlugin","schema","modifiedSchema","schemaBuildQuery","globalSlug","locale","payload","where","fields","globalConfig","globals","config","find","slug","flattenedFields","collectionConfig","collections","result","parentIsLocalized","statics","buildQuery"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,UAAS;AAElC,SAASC,WAAW,QAAQ,mBAAkB;AAc9C,yEAAyE;AACzE,yDAAyD;AACzD,2DAA2D;AAC3D,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,cAAc,EACdC,cAAc,EACU,GAAG,CAAC,CAAC;IAC7B,OAAO,SAASC,iBAAiBC,MAAW;QAC1C,MAAMC,iBAAiBD;QACvB,eAAeE,iBAAiB,EAC9BC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,KAAK,EACU;YACf,IAAIC,SAAkC;YAEtC,IAAIT,gBAAgB;gBAClBS,SAAST;YACX,OAAO;gBACL,IAAIK,YAAY;oBACd,MAAMK,eAAeH,QAAQI,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAAST;oBAExE,IAAI,CAACK,cAAc;wBACjB,MAAM,IAAId,SAAS,CAAC,qBAAqB,EAAES,WAAW,cAAc,CAAC;oBACvE;oBAEAI,SAASC,aAAaK,eAAe;gBACvC;gBACA,IAAIhB,gBAAgB;oBAClB,MAAMiB,mBAAmBT,QAAQU,WAAW,CAAClB,eAAe,EAAEa;oBAE9D,IAAI,CAACI,kBAAkB;wBACrB,MAAM,IAAIpB,SAAS,CAAC,yBAAyB,EAAES,WAAW,cAAc,CAAC;oBAC3E;oBAEAI,SAASO,iBAAiBD,eAAe;gBAC3C;YACF;YAEA,IAAIN,WAAW,MAAM;gBACnB,MAAM,IAAIb,SAAS;YACrB;YAEA,MAAMsB,SAAS,MAAMrB,YAAY;gBAC/BE;gBACAU;gBACAJ;gBACAC;gBACAa,mBAAmB;gBACnBZ;gBACAC;YACF;YAEA,OAAOU;QACT;QACAf,eAAeiB,OAAO,CAACC,UAAU,GAAGjB;IACtC;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/getBuildQueryPlugin.ts"],"sourcesContent":["import type { FlattenedField, Payload, PayloadRequest, Where } from 'payload'\n\nimport { APIError } from 'payload'\n\nimport { parseParams } from './parseParams.js'\n\ntype GetBuildQueryPluginArgs = {\n collectionSlug?: string\n versionsFields?: FlattenedField[]\n}\n\nexport type BuildQueryArgs = {\n branch?: false | string\n globalSlug?: string\n locale?: string\n payload: Payload\n req?: Partial<PayloadRequest>\n where: Where\n}\n\n// This plugin asynchronously builds a list of Mongoose query constraints\n// which can then be used in subsequent Mongoose queries.\n// Deprecated in favor of using simpler buildQuery directly\nexport const getBuildQueryPlugin = ({\n collectionSlug,\n versionsFields,\n}: GetBuildQueryPluginArgs = {}) => {\n return function buildQueryPlugin(schema: any) {\n const modifiedSchema = schema\n async function schemaBuildQuery({\n branch,\n globalSlug,\n locale,\n payload,\n req,\n where,\n }: BuildQueryArgs): Promise<Record<string, unknown>> {\n let fields: FlattenedField[] | null = null\n\n if (versionsFields) {\n fields = versionsFields\n } else {\n if (globalSlug) {\n const globalConfig = payload.globals.config.find(({ slug }) => slug === globalSlug)\n\n if (!globalConfig) {\n throw new APIError(`Global with the slug ${globalSlug} was not found`)\n }\n\n fields = globalConfig.flattenedFields\n }\n if (collectionSlug) {\n const collectionConfig = payload.collections[collectionSlug]?.config\n\n if (!collectionConfig) {\n throw new APIError(`Collection with the slug ${globalSlug} was not found`)\n }\n\n fields = collectionConfig.flattenedFields\n }\n }\n\n if (fields === null) {\n throw new APIError('Fields are not initialized.')\n }\n\n const result = await parseParams({\n branch,\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized: false,\n payload,\n req,\n where,\n })\n\n return result\n }\n modifiedSchema.statics.buildQuery = schemaBuildQuery\n }\n}\n"],"names":["APIError","parseParams","getBuildQueryPlugin","collectionSlug","versionsFields","buildQueryPlugin","schema","modifiedSchema","schemaBuildQuery","branch","globalSlug","locale","payload","req","where","fields","globalConfig","globals","config","find","slug","flattenedFields","collectionConfig","collections","result","parentIsLocalized","statics","buildQuery"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,UAAS;AAElC,SAASC,WAAW,QAAQ,mBAAkB;AAgB9C,yEAAyE;AACzE,yDAAyD;AACzD,2DAA2D;AAC3D,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,cAAc,EACdC,cAAc,EACU,GAAG,CAAC,CAAC;IAC7B,OAAO,SAASC,iBAAiBC,MAAW;QAC1C,MAAMC,iBAAiBD;QACvB,eAAeE,iBAAiB,EAC9BC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,GAAG,EACHC,KAAK,EACU;YACf,IAAIC,SAAkC;YAEtC,IAAIX,gBAAgB;gBAClBW,SAASX;YACX,OAAO;gBACL,IAAIM,YAAY;oBACd,MAAMM,eAAeJ,QAAQK,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASV;oBAExE,IAAI,CAACM,cAAc;wBACjB,MAAM,IAAIhB,SAAS,CAAC,qBAAqB,EAAEU,WAAW,cAAc,CAAC;oBACvE;oBAEAK,SAASC,aAAaK,eAAe;gBACvC;gBACA,IAAIlB,gBAAgB;oBAClB,MAAMmB,mBAAmBV,QAAQW,WAAW,CAACpB,eAAe,EAAEe;oBAE9D,IAAI,CAACI,kBAAkB;wBACrB,MAAM,IAAItB,SAAS,CAAC,yBAAyB,EAAEU,WAAW,cAAc,CAAC;oBAC3E;oBAEAK,SAASO,iBAAiBD,eAAe;gBAC3C;YACF;YAEA,IAAIN,WAAW,MAAM;gBACnB,MAAM,IAAIf,SAAS;YACrB;YAEA,MAAMwB,SAAS,MAAMvB,YAAY;gBAC/BQ;gBACAN;gBACAY;gBACAL;gBACAC;gBACAc,mBAAmB;gBACnBb;gBACAC;gBACAC;YACF;YAEA,OAAOU;QACT;QACAjB,eAAemB,OAAO,CAACC,UAAU,GAAGnB;IACtC;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getLocalizedSortProperty.d.ts","sourceRoot":"","sources":["../../src/queries/getLocalizedSortProperty.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,oGAOtC,IAAI,KAAG,MAiGT,CAAA"}
1
+ {"version":3,"file":"getLocalizedSortProperty.d.ts","sourceRoot":"","sources":["../../src/queries/getLocalizedSortProperty.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,wBAAwB,uGAOlC,IAAI,KAAG,MA8FT,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/getLocalizedSortProperty.ts"],"sourcesContent":["import type { FlattenedField, SanitizedConfig } from 'payload'\n\nimport { fieldAffectsData, fieldIsPresentationalOnly, fieldShouldBeLocalized } from 'payload/shared'\n\ntype Args = {\n config: SanitizedConfig\n fields: FlattenedField[]\n locale?: string\n parentIsLocalized: boolean\n result?: string\n segments: string[]\n}\n\nexport const getLocalizedSortProperty = ({\n config,\n fields,\n locale,\n parentIsLocalized,\n result: incomingResult,\n segments: incomingSegments,\n}: Args): string => {\n // If localization is not enabled, accept exactly\n // what is sent in\n if (!config.localization) {\n return incomingSegments.join('.')\n }\n\n const segments = [...incomingSegments]\n\n // Retrieve first segment, and remove from segments\n const firstSegment = segments.shift()\n\n // Attempt to find a matched field\n const matchedField = fields.find(\n (field) => fieldAffectsData(field) && field.name === firstSegment,\n )\n\n if (matchedField && !fieldIsPresentationalOnly(matchedField)) {\n let nextFields: FlattenedField[] | null = null\n let nextParentIsLocalized = parentIsLocalized\n const remainingSegments = [...segments]\n let localizedSegment = matchedField.name\n\n if (\n fieldShouldBeLocalized({ field: matchedField, parentIsLocalized: parentIsLocalized ?? false })\n ) {\n // Check to see if next segment is a locale\n if (segments.length > 0 && remainingSegments[0]) {\n const nextSegmentIsLocale = config.localization.localeCodes.includes(remainingSegments[0])\n\n // If next segment is locale, remove it from remaining segments\n // and use it to localize the current segment\n if (nextSegmentIsLocale) {\n const nextSegment = remainingSegments.shift()\n localizedSegment = `${matchedField.name}.${nextSegment}`\n }\n } else {\n // If no more segments, but field is localized, use default locale\n localizedSegment = `${matchedField.name}.${locale}`\n }\n }\n\n // If there are subfields, pass them through\n if (\n matchedField.type === 'tab' ||\n matchedField.type === 'group' ||\n matchedField.type === 'array'\n ) {\n nextFields = matchedField.flattenedFields\n if (!nextParentIsLocalized) {\n nextParentIsLocalized = matchedField.localized ?? false\n }\n }\n\n if (matchedField.type === 'blocks') {\n nextFields = matchedField.blocks.reduce<FlattenedField[]>(\n (flattenedBlockFields, _block) => {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config.blocks?.find((b) => b.slug === _block) : _block\n\n if (!block) {\n return [...flattenedBlockFields]\n }\n\n return [\n ...flattenedBlockFields,\n ...block.flattenedFields.filter(\n (blockField) =>\n (fieldAffectsData(blockField) &&\n blockField.name !== 'blockType' &&\n blockField.name !== 'blockName') ||\n !fieldAffectsData(blockField),\n ),\n ]\n },\n [],\n )\n }\n\n const result = incomingResult ? `${incomingResult}.${localizedSegment}` : localizedSegment\n\n if (nextFields !== null) {\n return getLocalizedSortProperty({\n config,\n fields: nextFields,\n locale,\n parentIsLocalized: nextParentIsLocalized,\n result,\n segments: remainingSegments,\n })\n }\n\n return result\n }\n\n return incomingSegments.join('.')\n}\n"],"names":["fieldAffectsData","fieldIsPresentationalOnly","fieldShouldBeLocalized","getLocalizedSortProperty","config","fields","locale","parentIsLocalized","result","incomingResult","segments","incomingSegments","localization","join","firstSegment","shift","matchedField","find","field","name","nextFields","nextParentIsLocalized","remainingSegments","localizedSegment","length","nextSegmentIsLocale","localeCodes","includes","nextSegment","type","flattenedFields","localized","blocks","reduce","flattenedBlockFields","_block","block","b","slug","filter","blockField"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,yBAAyB,EAAEC,sBAAsB,QAAQ,iBAAgB;AAWpG,OAAO,MAAMC,2BAA2B,CAAC,EACvCC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,QAAQC,cAAc,EACtBC,UAAUC,gBAAgB,EACrB;IACL,iDAAiD;IACjD,kBAAkB;IAClB,IAAI,CAACP,OAAOQ,YAAY,EAAE;QACxB,OAAOD,iBAAiBE,IAAI,CAAC;IAC/B;IAEA,MAAMH,WAAW;WAAIC;KAAiB;IAEtC,mDAAmD;IACnD,MAAMG,eAAeJ,SAASK,KAAK;IAEnC,kCAAkC;IAClC,MAAMC,eAAeX,OAAOY,IAAI,CAC9B,CAACC,QAAUlB,iBAAiBkB,UAAUA,MAAMC,IAAI,KAAKL;IAGvD,IAAIE,gBAAgB,CAACf,0BAA0Be,eAAe;QAC5D,IAAII,aAAsC;QAC1C,IAAIC,wBAAwBd;QAC5B,MAAMe,oBAAoB;eAAIZ;SAAS;QACvC,IAAIa,mBAAmBP,aAAaG,IAAI;QAExC,IACEjB,uBAAuB;YAAEgB,OAAOF;YAAcT,mBAAmBA,qBAAqB;QAAM,IAC5F;YACA,2CAA2C;YAC3C,IAAIG,SAASc,MAAM,GAAG,KAAKF,iBAAiB,CAAC,EAAE,EAAE;gBAC/C,MAAMG,sBAAsBrB,OAAOQ,YAAY,CAACc,WAAW,CAACC,QAAQ,CAACL,iBAAiB,CAAC,EAAE;gBAEzF,+DAA+D;gBAC/D,6CAA6C;gBAC7C,IAAIG,qBAAqB;oBACvB,MAAMG,cAAcN,kBAAkBP,KAAK;oBAC3CQ,mBAAmB,GAAGP,aAAaG,IAAI,CAAC,CAAC,EAAES,aAAa;gBAC1D;YACF,OAAO;gBACL,kEAAkE;gBAClEL,mBAAmB,GAAGP,aAAaG,IAAI,CAAC,CAAC,EAAEb,QAAQ;YACrD;QACF;QAEA,4CAA4C;QAC5C,IACEU,aAAaa,IAAI,KAAK,SACtBb,aAAaa,IAAI,KAAK,WACtBb,aAAaa,IAAI,KAAK,SACtB;YACAT,aAAaJ,aAAac,eAAe;YACzC,IAAI,CAACT,uBAAuB;gBAC1BA,wBAAwBL,aAAae,SAAS,IAAI;YACpD;QACF;QAEA,IAAIf,aAAaa,IAAI,KAAK,UAAU;YAClCT,aAAaJ,aAAagB,MAAM,CAACC,MAAM,CACrC,CAACC,sBAAsBC;gBACrB,uFAAuF;gBACvF,MAAMC,QACJ,OAAOD,WAAW,WAAW/B,OAAO4B,MAAM,EAAEf,KAAK,CAACoB,IAAMA,EAAEC,IAAI,KAAKH,UAAUA;gBAE/E,IAAI,CAACC,OAAO;oBACV,OAAO;2BAAIF;qBAAqB;gBAClC;gBAEA,OAAO;uBACFA;uBACAE,MAAMN,eAAe,CAACS,MAAM,CAC7B,CAACC,aACC,AAACxC,iBAAiBwC,eAChBA,WAAWrB,IAAI,KAAK,eACpBqB,WAAWrB,IAAI,KAAK,eACtB,CAACnB,iBAAiBwC;iBAEvB;YACH,GACA,EAAE;QAEN;QAEA,MAAMhC,SAASC,iBAAiB,GAAGA,eAAe,CAAC,EAAEc,kBAAkB,GAAGA;QAE1E,IAAIH,eAAe,MAAM;YACvB,OAAOjB,yBAAyB;gBAC9BC;gBACAC,QAAQe;gBACRd;gBACAC,mBAAmBc;gBACnBb;gBACAE,UAAUY;YACZ;QACF;QAEA,OAAOd;IACT;IAEA,OAAOG,iBAAiBE,IAAI,CAAC;AAC/B,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/getLocalizedSortProperty.ts"],"sourcesContent":["import type { FlattenedField, SanitizedConfig } from 'payload'\n\nimport { fieldAffectsData, fieldIsPresentationalOnly, fieldShouldBeLocalized } from 'payload/shared'\n\ntype Args = {\n config: SanitizedConfig\n fields: FlattenedField[]\n locale?: string\n parentIsLocalized: boolean\n result?: string\n segments: string[]\n}\n\nexport const getLocalizedSortProperty = ({\n config,\n fields,\n locale,\n parentIsLocalized,\n result: incomingResult,\n segments: incomingSegments,\n}: Args): string => {\n // If localization is not enabled, accept exactly\n // what is sent in\n if (!config.localization) {\n return incomingSegments.join('.')\n }\n\n const segments = [...incomingSegments]\n\n // Retrieve first segment, and remove from segments\n const firstSegment = segments.shift()\n\n // Attempt to find a matched field\n const matchedField = fields.find(\n (field) => fieldAffectsData(field) && field.name === firstSegment,\n )\n\n if (matchedField && !fieldIsPresentationalOnly(matchedField)) {\n let nextFields: FlattenedField[] | null = null\n let nextParentIsLocalized = parentIsLocalized\n const remainingSegments = [...segments]\n let localizedSegment = matchedField.name\n\n if (\n fieldShouldBeLocalized({ field: matchedField, parentIsLocalized: parentIsLocalized ?? false })\n ) {\n // Check to see if next segment is a locale\n if (segments.length > 0 && remainingSegments[0]) {\n const nextSegmentIsLocale = config.localization.localeCodes.includes(remainingSegments[0])\n\n // If next segment is locale, remove it from remaining segments\n // and use it to localize the current segment\n if (nextSegmentIsLocale) {\n const nextSegment = remainingSegments.shift()\n localizedSegment = `${matchedField.name}.${nextSegment}`\n }\n } else {\n // If no more segments, but field is localized, use default locale\n localizedSegment = `${matchedField.name}.${locale}`\n }\n }\n\n // If there are subfields, pass them through\n if (\n matchedField.type === 'tab' ||\n matchedField.type === 'group' ||\n matchedField.type === 'array'\n ) {\n nextFields = matchedField.flattenedFields\n if (!nextParentIsLocalized) {\n nextParentIsLocalized = matchedField.localized ?? false\n }\n }\n\n if (matchedField.type === 'blocks') {\n nextFields = matchedField.blocks.reduce<FlattenedField[]>((flattenedBlockFields, _block) => {\n // TODO: iterate over blocks mapped to block slug in v4, or pass through payload.blocks\n const block =\n typeof _block === 'string' ? config.blocks?.find((b) => b.slug === _block) : _block\n\n if (!block) {\n return [...flattenedBlockFields]\n }\n\n return [\n ...flattenedBlockFields,\n ...block.flattenedFields.filter(\n (blockField) =>\n (fieldAffectsData(blockField) &&\n blockField.name !== 'blockType' &&\n blockField.name !== 'blockName') ||\n !fieldAffectsData(blockField),\n ),\n ]\n }, [])\n }\n\n const result = incomingResult ? `${incomingResult}.${localizedSegment}` : localizedSegment\n\n if (nextFields !== null) {\n return getLocalizedSortProperty({\n config,\n fields: nextFields,\n locale,\n parentIsLocalized: nextParentIsLocalized,\n result,\n segments: remainingSegments,\n })\n }\n\n return result\n }\n\n return incomingSegments.join('.')\n}\n"],"names":["fieldAffectsData","fieldIsPresentationalOnly","fieldShouldBeLocalized","getLocalizedSortProperty","config","fields","locale","parentIsLocalized","result","incomingResult","segments","incomingSegments","localization","join","firstSegment","shift","matchedField","find","field","name","nextFields","nextParentIsLocalized","remainingSegments","localizedSegment","length","nextSegmentIsLocale","localeCodes","includes","nextSegment","type","flattenedFields","localized","blocks","reduce","flattenedBlockFields","_block","block","b","slug","filter","blockField"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,yBAAyB,EAAEC,sBAAsB,QAAQ,iBAAgB;AAWpG,OAAO,MAAMC,2BAA2B,CAAC,EACvCC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,QAAQC,cAAc,EACtBC,UAAUC,gBAAgB,EACrB;IACL,iDAAiD;IACjD,kBAAkB;IAClB,IAAI,CAACP,OAAOQ,YAAY,EAAE;QACxB,OAAOD,iBAAiBE,IAAI,CAAC;IAC/B;IAEA,MAAMH,WAAW;WAAIC;KAAiB;IAEtC,mDAAmD;IACnD,MAAMG,eAAeJ,SAASK,KAAK;IAEnC,kCAAkC;IAClC,MAAMC,eAAeX,OAAOY,IAAI,CAC9B,CAACC,QAAUlB,iBAAiBkB,UAAUA,MAAMC,IAAI,KAAKL;IAGvD,IAAIE,gBAAgB,CAACf,0BAA0Be,eAAe;QAC5D,IAAII,aAAsC;QAC1C,IAAIC,wBAAwBd;QAC5B,MAAMe,oBAAoB;eAAIZ;SAAS;QACvC,IAAIa,mBAAmBP,aAAaG,IAAI;QAExC,IACEjB,uBAAuB;YAAEgB,OAAOF;YAAcT,mBAAmBA,qBAAqB;QAAM,IAC5F;YACA,2CAA2C;YAC3C,IAAIG,SAASc,MAAM,GAAG,KAAKF,iBAAiB,CAAC,EAAE,EAAE;gBAC/C,MAAMG,sBAAsBrB,OAAOQ,YAAY,CAACc,WAAW,CAACC,QAAQ,CAACL,iBAAiB,CAAC,EAAE;gBAEzF,+DAA+D;gBAC/D,6CAA6C;gBAC7C,IAAIG,qBAAqB;oBACvB,MAAMG,cAAcN,kBAAkBP,KAAK;oBAC3CQ,mBAAmB,GAAGP,aAAaG,IAAI,CAAC,CAAC,EAAES,aAAa;gBAC1D;YACF,OAAO;gBACL,kEAAkE;gBAClEL,mBAAmB,GAAGP,aAAaG,IAAI,CAAC,CAAC,EAAEb,QAAQ;YACrD;QACF;QAEA,4CAA4C;QAC5C,IACEU,aAAaa,IAAI,KAAK,SACtBb,aAAaa,IAAI,KAAK,WACtBb,aAAaa,IAAI,KAAK,SACtB;YACAT,aAAaJ,aAAac,eAAe;YACzC,IAAI,CAACT,uBAAuB;gBAC1BA,wBAAwBL,aAAae,SAAS,IAAI;YACpD;QACF;QAEA,IAAIf,aAAaa,IAAI,KAAK,UAAU;YAClCT,aAAaJ,aAAagB,MAAM,CAACC,MAAM,CAAmB,CAACC,sBAAsBC;gBAC/E,uFAAuF;gBACvF,MAAMC,QACJ,OAAOD,WAAW,WAAW/B,OAAO4B,MAAM,EAAEf,KAAK,CAACoB,IAAMA,EAAEC,IAAI,KAAKH,UAAUA;gBAE/E,IAAI,CAACC,OAAO;oBACV,OAAO;2BAAIF;qBAAqB;gBAClC;gBAEA,OAAO;uBACFA;uBACAE,MAAMN,eAAe,CAACS,MAAM,CAC7B,CAACC,aACC,AAACxC,iBAAiBwC,eAChBA,WAAWrB,IAAI,KAAK,eACpBqB,WAAWrB,IAAI,KAAK,eACtB,CAACnB,iBAAiBwC;iBAEvB;YACH,GAAG,EAAE;QACP;QAEA,MAAMhC,SAASC,iBAAiB,GAAGA,eAAe,CAAC,EAAEc,kBAAkB,GAAGA;QAE1E,IAAIH,eAAe,MAAM;YACvB,OAAOjB,yBAAyB;gBAC9BC;gBACAC,QAAQe;gBACRd;gBACAC,mBAAmBc;gBACnBb;gBACAE,UAAUY;YACZ;QACF;QAEA,OAAOd;IACT;IAEA,OAAOG,iBAAiBE,IAAI,CAAC;AAC/B,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"operatorMap.d.ts","sourceRoot":"","sources":["../../src/queries/operatorMap.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,WAAW,CAAA;AAErD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CAcvB,CAAA"}
1
+ {"version":3,"file":"operatorMap.d.ts","sourceRoot":"","sources":["../../src/queries/operatorMap.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,WAAW,CAAA;AAErD,eAAO,MAAM,WAAW;IACtB,GAAG;IACH,MAAM;IACN,MAAM;IACN,YAAY;IACZ,kBAAkB;IAClB,EAAE;IACF,UAAU;IACV,SAAS;IACT,eAAe;IACf,IAAI;IACJ,UAAU;IACV,MAAM;IACN,MAAM;CACP,CAAA"}
@@ -1,11 +1,13 @@
1
- import type { FlattenedField, Payload, Where } from 'payload';
2
- export declare function parseParams({ collectionSlug, fields, globalSlug, locale, parentIsLocalized, payload, where, }: {
1
+ import type { FlattenedField, Payload, PayloadRequest, Where } from 'payload';
2
+ export declare function parseParams({ branch, collectionSlug, fields, globalSlug, locale, parentIsLocalized, payload, req, where, }: {
3
+ branch?: false | string;
3
4
  collectionSlug?: string;
4
5
  fields: FlattenedField[];
5
6
  globalSlug?: string;
6
7
  locale?: string;
7
8
  parentIsLocalized: boolean;
8
9
  payload: Payload;
10
+ req?: Partial<PayloadRequest>;
9
11
  where: Where;
10
12
  }): Promise<Record<string, unknown>>;
11
13
  //# sourceMappingURL=parseParams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseParams.d.ts","sourceRoot":"","sources":["../../src/queries/parseParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAY,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAQvE,wBAAsB,WAAW,CAAC,EAChC,cAAc,EACd,MAAM,EACN,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,OAAO,EACP,KAAK,GACN,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqFnC"}
1
+ {"version":3,"file":"parseParams.d.ts","sourceRoot":"","sources":["../../src/queries/parseParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAY,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAQvF,wBAAsB,WAAW,CAAC,EAChC,MAAM,EACN,cAAc,EACd,MAAM,EACN,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,OAAO,EACP,GAAG,EACH,KAAK,GACN,EAAE;IACD,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,KAAK,EAAE,KAAK,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAyFnC"}
@@ -2,7 +2,7 @@ import { deepMergeWithCombinedArrays } from 'payload';
2
2
  import { validOperatorSet } from 'payload/shared';
3
3
  import { buildAndOrConditions } from './buildAndOrConditions.js';
4
4
  import { buildSearchParam } from './buildSearchParams.js';
5
- export async function parseParams({ collectionSlug, fields, globalSlug, locale, parentIsLocalized, payload, where }) {
5
+ export async function parseParams({ branch, collectionSlug, fields, globalSlug, locale, parentIsLocalized, payload, req, where }) {
6
6
  let result = {};
7
7
  if (typeof where === 'object') {
8
8
  // We need to determine if the whereKey is an AND, OR, or a schema path
@@ -16,12 +16,14 @@ export async function parseParams({ collectionSlug, fields, globalSlug, locale,
16
16
  }
17
17
  if (Array.isArray(condition)) {
18
18
  const builtConditions = await buildAndOrConditions({
19
+ branch,
19
20
  collectionSlug,
20
21
  fields,
21
22
  globalSlug,
22
23
  locale,
23
24
  parentIsLocalized,
24
25
  payload,
26
+ req,
25
27
  where: condition
26
28
  });
27
29
  if (builtConditions.length > 0 && conditionOperator !== null) {
@@ -36,6 +38,7 @@ export async function parseParams({ collectionSlug, fields, globalSlug, locale,
36
38
  const validOperators = Object.keys(pathOperators).filter((operator)=>validOperatorSet.has(operator));
37
39
  for (const operator of validOperators){
38
40
  const searchParam = await buildSearchParam({
41
+ branch,
39
42
  collectionSlug,
40
43
  fields,
41
44
  globalSlug,
@@ -44,6 +47,7 @@ export async function parseParams({ collectionSlug, fields, globalSlug, locale,
44
47
  operator,
45
48
  parentIsLocalized,
46
49
  payload,
50
+ req,
47
51
  val: pathOperators[operator]
48
52
  });
49
53
  if (searchParam?.value && searchParam?.path) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { FilterQuery } from 'mongoose'\nimport type { FlattenedField, Operator, Payload, Where } from 'payload'\n\nimport { deepMergeWithCombinedArrays } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { buildSearchParam } from './buildSearchParams.js'\n\nexport async function parseParams({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized,\n payload,\n where,\n}: {\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n locale?: string\n parentIsLocalized: boolean\n payload: Payload\n where: Where\n}): Promise<Record<string, unknown>> {\n let result = {} as FilterQuery<any>\n\n if (typeof where === 'object') {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n const condition = where[relationOrPath]\n let conditionOperator: '$and' | '$or' | null = null\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = '$and'\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = '$or'\n }\n if (Array.isArray(condition)) {\n const builtConditions = await buildAndOrConditions({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized,\n payload,\n where: condition,\n })\n if (builtConditions.length > 0 && conditionOperator !== null) {\n result[conditionOperator] = builtConditions\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n const validOperators: Operator[] = Object.keys(pathOperators).filter((operator) =>\n validOperatorSet.has(operator as Operator),\n ) as Operator[]\n\n for (const operator of validOperators) {\n const searchParam = await buildSearchParam({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: relationOrPath,\n locale,\n operator,\n parentIsLocalized,\n payload,\n val: (pathOperators as Record<string, Where>)[operator],\n })\n\n if (searchParam?.value && searchParam?.path) {\n if (validOperators.length > 1) {\n if (!result.$and) {\n result.$and = []\n }\n result.$and.push({\n [searchParam.path]: searchParam.value,\n })\n } else {\n if (result[searchParam.path]) {\n if (!result.$and) {\n result.$and = []\n }\n\n result.$and.push({ [searchParam.path]: result[searchParam.path] })\n result.$and.push({\n [searchParam.path]: searchParam.value,\n })\n delete result[searchParam.path]\n } else {\n result[searchParam.path] = searchParam.value\n }\n }\n } else if (typeof searchParam?.value === 'object') {\n result = deepMergeWithCombinedArrays(result, searchParam.value ?? {}, {\n // dont clone Types.ObjectIDs\n clone: false,\n })\n }\n }\n }\n }\n }\n }\n\n return result\n}\n"],"names":["deepMergeWithCombinedArrays","validOperatorSet","buildAndOrConditions","buildSearchParam","parseParams","collectionSlug","fields","globalSlug","locale","parentIsLocalized","payload","where","result","relationOrPath","Object","keys","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","length","pathOperators","validOperators","filter","operator","has","searchParam","incomingPath","val","value","path","$and","push","clone"],"mappings":"AAGA,SAASA,2BAA2B,QAAQ,UAAS;AACrD,SAASC,gBAAgB,QAAQ,iBAAgB;AAEjD,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,gBAAgB,QAAQ,yBAAwB;AAEzD,OAAO,eAAeC,YAAY,EAChCC,cAAc,EACdC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,KAAK,EASN;IACC,IAAIC,SAAS,CAAC;IAEd,IAAI,OAAOD,UAAU,UAAU;QAC7B,uEAAuE;QACvE,KAAK,MAAME,kBAAkBC,OAAOC,IAAI,CAACJ,OAAQ;YAC/C,MAAMK,YAAYL,KAAK,CAACE,eAAe;YACvC,IAAII,oBAA2C;YAC/C,IAAIJ,eAAeK,WAAW,OAAO,OAAO;gBAC1CD,oBAAoB;YACtB,OAAO,IAAIJ,eAAeK,WAAW,OAAO,MAAM;gBAChDD,oBAAoB;YACtB;YACA,IAAIE,MAAMC,OAAO,CAACJ,YAAY;gBAC5B,MAAMK,kBAAkB,MAAMnB,qBAAqB;oBACjDG;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC,OAAOK;gBACT;gBACA,IAAIK,gBAAgBC,MAAM,GAAG,KAAKL,sBAAsB,MAAM;oBAC5DL,MAAM,CAACK,kBAAkB,GAAGI;gBAC9B;YACF,OAAO;gBACL,wEAAwE;gBACxE,kEAAkE;gBAClE,8EAA8E;gBAC9E,MAAME,gBAAgBZ,KAAK,CAACE,eAAe;gBAC3C,IAAI,OAAOU,kBAAkB,UAAU;oBACrC,MAAMC,iBAA6BV,OAAOC,IAAI,CAACQ,eAAeE,MAAM,CAAC,CAACC,WACpEzB,iBAAiB0B,GAAG,CAACD;oBAGvB,KAAK,MAAMA,YAAYF,eAAgB;wBACrC,MAAMI,cAAc,MAAMzB,iBAAiB;4BACzCE;4BACAC;4BACAC;4BACAsB,cAAchB;4BACdL;4BACAkB;4BACAjB;4BACAC;4BACAoB,KAAK,AAACP,aAAuC,CAACG,SAAS;wBACzD;wBAEA,IAAIE,aAAaG,SAASH,aAAaI,MAAM;4BAC3C,IAAIR,eAAeF,MAAM,GAAG,GAAG;gCAC7B,IAAI,CAACV,OAAOqB,IAAI,EAAE;oCAChBrB,OAAOqB,IAAI,GAAG,EAAE;gCAClB;gCACArB,OAAOqB,IAAI,CAACC,IAAI,CAAC;oCACf,CAACN,YAAYI,IAAI,CAAC,EAAEJ,YAAYG,KAAK;gCACvC;4BACF,OAAO;gCACL,IAAInB,MAAM,CAACgB,YAAYI,IAAI,CAAC,EAAE;oCAC5B,IAAI,CAACpB,OAAOqB,IAAI,EAAE;wCAChBrB,OAAOqB,IAAI,GAAG,EAAE;oCAClB;oCAEArB,OAAOqB,IAAI,CAACC,IAAI,CAAC;wCAAE,CAACN,YAAYI,IAAI,CAAC,EAAEpB,MAAM,CAACgB,YAAYI,IAAI,CAAC;oCAAC;oCAChEpB,OAAOqB,IAAI,CAACC,IAAI,CAAC;wCACf,CAACN,YAAYI,IAAI,CAAC,EAAEJ,YAAYG,KAAK;oCACvC;oCACA,OAAOnB,MAAM,CAACgB,YAAYI,IAAI,CAAC;gCACjC,OAAO;oCACLpB,MAAM,CAACgB,YAAYI,IAAI,CAAC,GAAGJ,YAAYG,KAAK;gCAC9C;4BACF;wBACF,OAAO,IAAI,OAAOH,aAAaG,UAAU,UAAU;4BACjDnB,SAASZ,4BAA4BY,QAAQgB,YAAYG,KAAK,IAAI,CAAC,GAAG;gCACpE,6BAA6B;gCAC7BI,OAAO;4BACT;wBACF;oBACF;gBACF;YACF;QACF;IACF;IAEA,OAAOvB;AACT"}
1
+ {"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["import type { QueryFilter } from 'mongoose'\nimport type { FlattenedField, Operator, Payload, PayloadRequest, Where } from 'payload'\n\nimport { deepMergeWithCombinedArrays } from 'payload'\nimport { validOperatorSet } from 'payload/shared'\n\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { buildSearchParam } from './buildSearchParams.js'\n\nexport async function parseParams({\n branch,\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized,\n payload,\n req,\n where,\n}: {\n branch?: false | string\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n locale?: string\n parentIsLocalized: boolean\n payload: Payload\n req?: Partial<PayloadRequest>\n where: Where\n}): Promise<Record<string, unknown>> {\n let result = {} as QueryFilter<any>\n\n if (typeof where === 'object') {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n const condition = where[relationOrPath]\n let conditionOperator: '$and' | '$or' | null = null\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = '$and'\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = '$or'\n }\n if (Array.isArray(condition)) {\n const builtConditions = await buildAndOrConditions({\n branch,\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized,\n payload,\n req,\n where: condition,\n })\n if (builtConditions.length > 0 && conditionOperator !== null) {\n result[conditionOperator] = builtConditions\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n const validOperators: Operator[] = Object.keys(pathOperators).filter((operator) =>\n validOperatorSet.has(operator as Operator),\n ) as Operator[]\n\n for (const operator of validOperators) {\n const searchParam = await buildSearchParam({\n branch,\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: relationOrPath,\n locale,\n operator,\n parentIsLocalized,\n payload,\n req,\n val: (pathOperators as Record<string, Where>)[operator],\n })\n\n if (searchParam?.value && searchParam?.path) {\n if (validOperators.length > 1) {\n if (!result.$and) {\n result.$and = []\n }\n result.$and.push({\n [searchParam.path]: searchParam.value,\n })\n } else {\n if (result[searchParam.path]) {\n if (!result.$and) {\n result.$and = []\n }\n\n result.$and.push({ [searchParam.path]: result[searchParam.path] })\n result.$and.push({\n [searchParam.path]: searchParam.value,\n })\n delete result[searchParam.path]\n } else {\n result[searchParam.path] = searchParam.value\n }\n }\n } else if (typeof searchParam?.value === 'object') {\n result = deepMergeWithCombinedArrays(result, searchParam.value ?? {}, {\n // dont clone Types.ObjectIDs\n clone: false,\n })\n }\n }\n }\n }\n }\n }\n\n return result\n}\n"],"names":["deepMergeWithCombinedArrays","validOperatorSet","buildAndOrConditions","buildSearchParam","parseParams","branch","collectionSlug","fields","globalSlug","locale","parentIsLocalized","payload","req","where","result","relationOrPath","Object","keys","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","length","pathOperators","validOperators","filter","operator","has","searchParam","incomingPath","val","value","path","$and","push","clone"],"mappings":"AAGA,SAASA,2BAA2B,QAAQ,UAAS;AACrD,SAASC,gBAAgB,QAAQ,iBAAgB;AAEjD,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,gBAAgB,QAAQ,yBAAwB;AAEzD,OAAO,eAAeC,YAAY,EAChCC,MAAM,EACNC,cAAc,EACdC,MAAM,EACNC,UAAU,EACVC,MAAM,EACNC,iBAAiB,EACjBC,OAAO,EACPC,GAAG,EACHC,KAAK,EAWN;IACC,IAAIC,SAAS,CAAC;IAEd,IAAI,OAAOD,UAAU,UAAU;QAC7B,uEAAuE;QACvE,KAAK,MAAME,kBAAkBC,OAAOC,IAAI,CAACJ,OAAQ;YAC/C,MAAMK,YAAYL,KAAK,CAACE,eAAe;YACvC,IAAII,oBAA2C;YAC/C,IAAIJ,eAAeK,WAAW,OAAO,OAAO;gBAC1CD,oBAAoB;YACtB,OAAO,IAAIJ,eAAeK,WAAW,OAAO,MAAM;gBAChDD,oBAAoB;YACtB;YACA,IAAIE,MAAMC,OAAO,CAACJ,YAAY;gBAC5B,MAAMK,kBAAkB,MAAMrB,qBAAqB;oBACjDG;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC;oBACAC,OAAOK;gBACT;gBACA,IAAIK,gBAAgBC,MAAM,GAAG,KAAKL,sBAAsB,MAAM;oBAC5DL,MAAM,CAACK,kBAAkB,GAAGI;gBAC9B;YACF,OAAO;gBACL,wEAAwE;gBACxE,kEAAkE;gBAClE,8EAA8E;gBAC9E,MAAME,gBAAgBZ,KAAK,CAACE,eAAe;gBAC3C,IAAI,OAAOU,kBAAkB,UAAU;oBACrC,MAAMC,iBAA6BV,OAAOC,IAAI,CAACQ,eAAeE,MAAM,CAAC,CAACC,WACpE3B,iBAAiB4B,GAAG,CAACD;oBAGvB,KAAK,MAAMA,YAAYF,eAAgB;wBACrC,MAAMI,cAAc,MAAM3B,iBAAiB;4BACzCE;4BACAC;4BACAC;4BACAC;4BACAuB,cAAchB;4BACdN;4BACAmB;4BACAlB;4BACAC;4BACAC;4BACAoB,KAAK,AAACP,aAAuC,CAACG,SAAS;wBACzD;wBAEA,IAAIE,aAAaG,SAASH,aAAaI,MAAM;4BAC3C,IAAIR,eAAeF,MAAM,GAAG,GAAG;gCAC7B,IAAI,CAACV,OAAOqB,IAAI,EAAE;oCAChBrB,OAAOqB,IAAI,GAAG,EAAE;gCAClB;gCACArB,OAAOqB,IAAI,CAACC,IAAI,CAAC;oCACf,CAACN,YAAYI,IAAI,CAAC,EAAEJ,YAAYG,KAAK;gCACvC;4BACF,OAAO;gCACL,IAAInB,MAAM,CAACgB,YAAYI,IAAI,CAAC,EAAE;oCAC5B,IAAI,CAACpB,OAAOqB,IAAI,EAAE;wCAChBrB,OAAOqB,IAAI,GAAG,EAAE;oCAClB;oCAEArB,OAAOqB,IAAI,CAACC,IAAI,CAAC;wCAAE,CAACN,YAAYI,IAAI,CAAC,EAAEpB,MAAM,CAACgB,YAAYI,IAAI,CAAC;oCAAC;oCAChEpB,OAAOqB,IAAI,CAACC,IAAI,CAAC;wCACf,CAACN,YAAYI,IAAI,CAAC,EAAEJ,YAAYG,KAAK;oCACvC;oCACA,OAAOnB,MAAM,CAACgB,YAAYI,IAAI,CAAC;gCACjC,OAAO;oCACLpB,MAAM,CAACgB,YAAYI,IAAI,CAAC,GAAGJ,YAAYG,KAAK;gCAC9C;4BACF;wBACF,OAAO,IAAI,OAAOH,aAAaG,UAAU,UAAU;4BACjDnB,SAASd,4BAA4Bc,QAAQgB,YAAYG,KAAK,IAAI,CAAC,GAAG;gCACpE,6BAA6B;gCAC7BI,OAAO;4BACT;wBACF;oBACF;gBACF;YACF;QACF;IACF;IAEA,OAAOvB;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EACd,QAAQ,EACR,OAAO,EAER,MAAM,SAAS,CAAA;AAMhB,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAmED,eAAO,MAAM,kBAAkB,GAAI,kFAShC,sBAAsB,KACrB;IACE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd,GACD,SAycH,CAAA"}
1
+ {"version":3,"file":"sanitizeQueryValue.d.ts","sourceRoot":"","sources":["../../src/queries/sanitizeQueryValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAA;AAMnG,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,CAAA;AAmED,eAAO,MAAM,kBAAkB,qFAS5B,sBAAsB,KACrB;IACE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd,GACD,SAycH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type {\n FlattenedBlock,\n FlattenedField,\n Operator,\n Payload,\n RelationshipField,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { createArrayFromCommaDelineated, escapeRegExp } from 'payload'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\ntype SanitizeQueryValueArgs = {\n field: FlattenedField\n hasCustomID: boolean\n locale?: string\n operator: Operator\n parentIsLocalized: boolean\n path: string\n payload: Payload\n val: any\n}\n\nconst buildExistsQuery = (formattedValue: unknown, path: string, treatEmptyString = true) => {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [\n { [path]: { $exists: true } },\n { [path]: { $ne: null } },\n ...(treatEmptyString ? [{ [path]: { $ne: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [\n { [path]: { $exists: false } },\n { [path]: { $eq: null } },\n ...(treatEmptyString ? [{ [path]: { $eq: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n }\n}\n\n// returns nestedField Field object from blocks.nestedField path because getLocalizedPaths splits them only for relationships\nconst getFieldFromSegments = ({\n field,\n payload,\n segments,\n}: {\n field: FlattenedBlock | FlattenedField\n payload: Payload\n segments: string[]\n}): FlattenedField | undefined => {\n if ('blocks' in field) {\n for (const _block of field.blocks) {\n const block: FlattenedBlock | undefined =\n typeof _block === 'string' ? payload.blocks[_block] : _block\n if (block) {\n const field = getFieldFromSegments({ field: block, payload, segments })\n if (field) {\n return field\n }\n }\n }\n }\n\n if ('fields' in field) {\n for (let i = 0; i < segments.length; i++) {\n const foundField = field.flattenedFields.find((each) => each.name === segments[i])\n\n if (!foundField) {\n break\n }\n\n if (foundField && segments.length - 1 === i) {\n return foundField\n }\n\n segments.shift()\n return getFieldFromSegments({ field: foundField, payload, segments })\n }\n }\n}\n\nexport const sanitizeQueryValue = ({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n}: SanitizeQueryValueArgs):\n | {\n operator?: string\n rawQuery?: unknown\n val?: unknown\n }\n | undefined => {\n let formattedValue = val\n let formattedOperator = operator\n\n if (['array', 'blocks', 'group', 'tab'].includes(field.type) && path.includes('.')) {\n const segments = path.split('.')\n segments.shift()\n const foundField = getFieldFromSegments({ field, payload, segments })\n\n if (foundField) {\n field = foundField\n }\n }\n\n // Disregard invalid _ids\n if (path === '_id') {\n if (typeof val === 'string' && val.split(',').length === 1) {\n if (!hasCustomID) {\n const isValid = Types.ObjectId.isValid(val)\n\n if (!isValid) {\n return { operator: formattedOperator, val: undefined }\n } else {\n if (['in', 'not_in'].includes(operator)) {\n formattedValue = createArrayFromCommaDelineated(formattedValue).map(\n (id) => new Types.ObjectId(id),\n )\n } else {\n formattedValue = new Types.ObjectId(val)\n }\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(val)\n\n if (Number.isNaN(parsedNumber)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else if (Array.isArray(val) || (typeof val === 'string' && val.split(',').length > 1)) {\n if (typeof val === 'string') {\n formattedValue = createArrayFromCommaDelineated(val)\n }\n\n if (Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce<unknown[]>((formattedValues, inVal) => {\n if (!hasCustomID) {\n if (Types.ObjectId.isValid(inVal)) {\n formattedValues.push(new Types.ObjectId(inVal))\n\n return formattedValues\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n }\n } else {\n formattedValues.push(inVal)\n }\n\n return formattedValues\n }, [])\n }\n }\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') {\n formattedValue = true\n }\n if (val.toLowerCase() === 'false') {\n formattedValue = false\n }\n }\n\n if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number' && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (field.type === 'number') {\n if (typeof formattedValue === 'string' && operator !== 'exists') {\n formattedValue = Number(val)\n }\n\n if (operator === 'exists') {\n formattedValue = val === 'true' ? true : val === 'false' ? false : Boolean(val)\n return buildExistsQuery(formattedValue, path)\n }\n }\n\n if (field.type === 'date' && typeof val === 'string' && operator !== 'exists') {\n formattedValue = new Date(val)\n if (Number.isNaN(Date.parse(formattedValue))) {\n return undefined\n }\n }\n\n if (['relationship', 'upload'].includes(field.type)) {\n if (val === 'null') {\n formattedValue = null\n }\n\n // Object equality requires the value to be the first key in the object that is being queried.\n if (\n operator === 'equals' &&\n formattedValue &&\n typeof formattedValue === 'object' &&\n formattedValue.value &&\n formattedValue.relationTo\n ) {\n const { value } = formattedValue\n const isValid = Types.ObjectId.isValid(value)\n\n if (isValid) {\n formattedValue.value = new Types.ObjectId(value)\n }\n\n let localizedPath = path\n\n if (\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n payload.config.localization &&\n locale\n ) {\n localizedPath = `${path}.${locale}`\n }\n\n return {\n rawQuery: {\n $or: [\n {\n [localizedPath]: {\n $eq: {\n // disable auto sort\n /* eslint-disable */\n value: formattedValue.value,\n relationTo: formattedValue.relationTo,\n /* eslint-enable */\n },\n },\n },\n {\n [localizedPath]: {\n $eq: {\n relationTo: formattedValue.relationTo,\n value: formattedValue.value,\n },\n },\n },\n ],\n },\n }\n }\n\n const relationTo = (field as RelationshipField).relationTo\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n if (!inVal) {\n return formattedValues\n }\n\n if (typeof relationTo === 'string' && payload.collections[relationTo]?.customIDType) {\n if (payload.collections[relationTo].customIDType === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n return formattedValues\n }\n }\n\n formattedValues.push(inVal)\n return formattedValues\n }\n\n if (\n Array.isArray(relationTo) &&\n relationTo.some((relationTo) => !!payload.collections[relationTo]?.customIDType)\n ) {\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n } else {\n formattedValues.push(inVal)\n }\n return formattedValues\n }\n\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n\n return formattedValues\n }, [])\n }\n\n // Handle hasMany relationships with equals operator and array values\n // For array equality checking\n if (\n ['equals', 'not_equals'].includes(operator) &&\n Array.isArray(formattedValue) &&\n 'hasMany' in field &&\n field.hasMany\n ) {\n if (typeof relationTo === 'string') {\n const customIDType = payload.collections[relationTo]?.customIDType\n\n // Convert array values to proper types (ObjectId or custom ID type)\n formattedValue = formattedValue.map((v) => {\n if (customIDType === 'number') {\n const parsed = parseFloat(v)\n return Number.isNaN(parsed) ? v : parsed\n }\n if (!Types.ObjectId.isValid(v)) {\n return v\n }\n return new Types.ObjectId(v)\n })\n } else {\n // Polymorphic hasMany - convert array of {relationTo, value} objects\n formattedValue = formattedValue.map((item) => {\n if (typeof item === 'object' && 'value' in item) {\n const relTo = item.relationTo\n const customIDType = payload.collections[relTo]?.customIDType\n if (customIDType === 'number') {\n const parsed = parseFloat(item.value)\n return { relationTo: relTo, value: Number.isNaN(parsed) ? item.value : parsed }\n }\n if (Types.ObjectId.isValid(item.value)) {\n return { relationTo: relTo, value: new Types.ObjectId(item.value) }\n }\n return item\n }\n // Non-polymorphic format - just IDs\n if (Types.ObjectId.isValid(item)) {\n return new Types.ObjectId(item)\n }\n return item\n })\n }\n } else if (\n ['contains', 'equals', 'like', 'not_equals'].includes(operator) &&\n (!Array.isArray(relationTo) || !path.endsWith('.relationTo'))\n ) {\n if (typeof relationTo === 'string') {\n const customIDType = payload.collections[relationTo]?.customIDType\n\n if (customIDType) {\n if (customIDType === 'number') {\n formattedValue = parseFloat(val)\n\n if (Number.isNaN(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n } else {\n const hasCustomIDType = relationTo.some(\n (relationTo) => !!payload.collections[relationTo]?.customIDType,\n )\n\n if (hasCustomIDType) {\n if (typeof val === 'string') {\n const formattedNumber = Number(val)\n formattedValue = [Types.ObjectId.isValid(val) ? new Types.ObjectId(val) : val]\n formattedOperator = operator === 'not_equals' ? 'not_in' : 'in'\n if (!Number.isNaN(formattedNumber)) {\n formattedValue.push(formattedNumber)\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n }\n }\n\n if (\n operator === 'all' &&\n Array.isArray(relationTo) &&\n path.endsWith('.value') &&\n Array.isArray(formattedValue)\n ) {\n formattedValue.forEach((v, i) => {\n if (Types.ObjectId.isValid(v)) {\n formattedValue[i] = new Types.ObjectId(v)\n }\n })\n }\n }\n\n // Set up specific formatting necessary by operators\n\n if (operator === 'near') {\n let lng\n let lat\n let maxDistance\n let minDistance\n\n if (Array.isArray(formattedValue)) {\n ;[lng, lat, maxDistance, minDistance] = formattedValue\n }\n\n if (typeof formattedValue === 'string') {\n ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue)\n }\n\n if (lng == null || lat == null || (maxDistance == null && minDistance == null)) {\n formattedValue = undefined\n } else {\n formattedValue = {\n $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] },\n }\n\n if (maxDistance && !Number.isNaN(Number(maxDistance))) {\n formattedValue.$maxDistance = parseFloat(maxDistance)\n }\n\n if (minDistance && !Number.isNaN(Number(minDistance))) {\n formattedValue.$minDistance = parseFloat(minDistance)\n }\n }\n }\n\n if (operator === 'within' || operator === 'intersects') {\n formattedValue = {\n $geometry: formattedValue,\n }\n }\n\n if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) {\n if (operator === 'contains' && !Types.ObjectId.isValid(formattedValue)) {\n if ('hasMany' in field && field.hasMany && field.type === 'select') {\n // For hasMany select, \"contains\" means the array includes this exact value\n if (typeof formattedValue === 'string') {\n return {\n rawQuery: {\n [path]: formattedValue,\n },\n }\n } else if (Array.isArray(formattedValue)) {\n return {\n rawQuery: {\n $or: formattedValue.map((val) => ({\n [path]: val,\n })),\n },\n }\n }\n } else if ('hasMany' in field && field.hasMany && ['number', 'text'].includes(field.type)) {\n // For hasMany text/number, \"contains\" means substring matching within array elements\n if (typeof formattedValue === 'string') {\n // Search for documents where any array element contains this string\n const escapedValue = escapeRegExp(formattedValue)\n return {\n rawQuery: {\n [path]: {\n $elemMatch: {\n $options: 'i',\n $regex: escapedValue,\n },\n },\n },\n }\n } else if (Array.isArray(formattedValue)) {\n // Search for documents where any array element contains any of the search values\n return {\n rawQuery: {\n $or: formattedValue.map((val) => {\n const escapedValue = escapeRegExp(String(val))\n return {\n [path]: {\n $elemMatch: {\n $options: 'i',\n $regex: escapedValue,\n },\n },\n }\n }),\n },\n }\n }\n } else {\n // Regular (non-hasMany) text field\n formattedValue = {\n $options: 'i',\n $regex: escapeRegExp(formattedValue),\n }\n }\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n let treatEmptyString = !['array', 'blocks', 'checkbox', 'relationship', 'upload'].includes(\n field.type,\n )\n\n if (field.type === 'text' && field.hasMany) {\n treatEmptyString = false\n } else if (field.type === 'number' && field.hasMany) {\n treatEmptyString = false\n } else if (field.type === 'select' && field.hasMany) {\n treatEmptyString = false\n }\n\n // _id can't be empty string, will error Cast to ObjectId failed for value \"\"\n return buildExistsQuery(formattedValue, path, treatEmptyString)\n }\n }\n\n if (\n (path === '_id' || path === 'parent') &&\n operator === 'like' &&\n formattedValue.length === 24 &&\n !hasCustomID\n ) {\n formattedOperator = 'equals'\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // Clearable fields\n if (['relationship', 'select', 'upload'].includes(field.type)) {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [{ [path]: { $exists: true } }, { [path]: { $ne: null } }],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [{ [path]: { $exists: false } }, { [path]: { $eq: null } }],\n },\n }\n }\n }\n }\n\n return { operator: formattedOperator, val: formattedValue }\n}\n"],"names":["Types","createArrayFromCommaDelineated","escapeRegExp","fieldShouldBeLocalized","buildExistsQuery","formattedValue","path","treatEmptyString","rawQuery","$and","$exists","$ne","$or","$eq","getFieldFromSegments","field","payload","segments","_block","blocks","block","i","length","foundField","flattenedFields","find","each","name","shift","sanitizeQueryValue","hasCustomID","locale","operator","parentIsLocalized","val","formattedOperator","includes","type","split","isValid","ObjectId","undefined","map","id","parsedNumber","parseFloat","Number","isNaN","Array","isArray","reduce","formattedValues","inVal","push","toLowerCase","arrayVal","Boolean","Date","parse","value","relationTo","localizedPath","config","localization","collections","customIDType","some","toString","hasMany","v","parsed","item","relTo","endsWith","hasCustomIDType","formattedNumber","forEach","lng","lat","maxDistance","minDistance","$geometry","coordinates","$maxDistance","$minDistance","escapedValue","$elemMatch","$options","$regex","String"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import type { FlattenedBlock, FlattenedField, Operator, Payload, RelationshipField } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { createArrayFromCommaDelineated, escapeRegExp } from 'payload'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\ntype SanitizeQueryValueArgs = {\n field: FlattenedField\n hasCustomID: boolean\n locale?: string\n operator: Operator\n parentIsLocalized: boolean\n path: string\n payload: Payload\n val: any\n}\n\nconst buildExistsQuery = (formattedValue: unknown, path: string, treatEmptyString = true) => {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [\n { [path]: { $exists: true } },\n { [path]: { $ne: null } },\n ...(treatEmptyString ? [{ [path]: { $ne: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [\n { [path]: { $exists: false } },\n { [path]: { $eq: null } },\n ...(treatEmptyString ? [{ [path]: { $eq: '' } }] : []), // Treat empty string as null / undefined\n ],\n },\n }\n }\n}\n\n// returns nestedField Field object from blocks.nestedField path because getLocalizedPaths splits them only for relationships\nconst getFieldFromSegments = ({\n field,\n payload,\n segments,\n}: {\n field: FlattenedBlock | FlattenedField\n payload: Payload\n segments: string[]\n}): FlattenedField | undefined => {\n if ('blocks' in field) {\n for (const _block of field.blocks) {\n const block: FlattenedBlock | undefined =\n typeof _block === 'string' ? payload.blocks[_block] : _block\n if (block) {\n const field = getFieldFromSegments({ field: block, payload, segments })\n if (field) {\n return field\n }\n }\n }\n }\n\n if ('fields' in field) {\n for (let i = 0; i < segments.length; i++) {\n const foundField = field.flattenedFields.find((each) => each.name === segments[i])\n\n if (!foundField) {\n break\n }\n\n if (foundField && segments.length - 1 === i) {\n return foundField\n }\n\n segments.shift()\n return getFieldFromSegments({ field: foundField, payload, segments })\n }\n }\n}\n\nexport const sanitizeQueryValue = ({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n}: SanitizeQueryValueArgs):\n | {\n operator?: string\n rawQuery?: unknown\n val?: unknown\n }\n | undefined => {\n let formattedValue = val\n let formattedOperator = operator\n\n if (['array', 'blocks', 'group', 'tab'].includes(field.type) && path.includes('.')) {\n const segments = path.split('.')\n segments.shift()\n const foundField = getFieldFromSegments({ field, payload, segments })\n\n if (foundField) {\n field = foundField\n }\n }\n\n // Disregard invalid _ids\n if (path === '_id') {\n if (typeof val === 'string' && val.split(',').length === 1) {\n if (!hasCustomID) {\n const isValid = Types.ObjectId.isValid(val)\n\n if (!isValid) {\n return { operator: formattedOperator, val: undefined }\n } else {\n if (['in', 'not_in'].includes(operator)) {\n formattedValue = createArrayFromCommaDelineated(formattedValue).map(\n (id) => new Types.ObjectId(id),\n )\n } else {\n formattedValue = new Types.ObjectId(val)\n }\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(val)\n\n if (Number.isNaN(parsedNumber)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else if (Array.isArray(val) || (typeof val === 'string' && val.split(',').length > 1)) {\n if (typeof val === 'string') {\n formattedValue = createArrayFromCommaDelineated(val)\n }\n\n if (Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce<unknown[]>((formattedValues, inVal) => {\n if (!hasCustomID) {\n if (Types.ObjectId.isValid(inVal)) {\n formattedValues.push(new Types.ObjectId(inVal))\n\n return formattedValues\n }\n }\n\n if (field.type === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n }\n } else {\n formattedValues.push(inVal)\n }\n\n return formattedValues\n }, [])\n }\n }\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') {\n formattedValue = true\n }\n if (val.toLowerCase() === 'false') {\n formattedValue = false\n }\n }\n\n if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number' && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (field.type === 'number') {\n if (typeof formattedValue === 'string' && operator !== 'exists') {\n formattedValue = Number(val)\n }\n\n if (operator === 'exists') {\n formattedValue = val === 'true' ? true : val === 'false' ? false : Boolean(val)\n return buildExistsQuery(formattedValue, path)\n }\n }\n\n if (field.type === 'date' && typeof val === 'string' && operator !== 'exists') {\n formattedValue = new Date(val)\n if (Number.isNaN(Date.parse(formattedValue))) {\n return undefined\n }\n }\n\n if (['relationship', 'upload'].includes(field.type)) {\n if (val === 'null') {\n formattedValue = null\n }\n\n // Object equality requires the value to be the first key in the object that is being queried.\n if (\n operator === 'equals' &&\n formattedValue &&\n typeof formattedValue === 'object' &&\n formattedValue.value &&\n formattedValue.relationTo\n ) {\n const { value } = formattedValue\n const isValid = Types.ObjectId.isValid(value)\n\n if (isValid) {\n formattedValue.value = new Types.ObjectId(value)\n }\n\n let localizedPath = path\n\n if (\n fieldShouldBeLocalized({ field, parentIsLocalized }) &&\n payload.config.localization &&\n locale\n ) {\n localizedPath = `${path}.${locale}`\n }\n\n return {\n rawQuery: {\n $or: [\n {\n [localizedPath]: {\n $eq: {\n // disable auto sort\n /* eslint-disable */\n value: formattedValue.value,\n relationTo: formattedValue.relationTo,\n /* eslint-enable */\n },\n },\n },\n {\n [localizedPath]: {\n $eq: {\n relationTo: formattedValue.relationTo,\n value: formattedValue.value,\n },\n },\n },\n ],\n },\n }\n }\n\n const relationTo = (field as RelationshipField).relationTo\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(formattedValue)) {\n formattedValue = formattedValue.reduce((formattedValues, inVal) => {\n if (!inVal) {\n return formattedValues\n }\n\n if (typeof relationTo === 'string' && payload.collections[relationTo]?.customIDType) {\n if (payload.collections[relationTo].customIDType === 'number') {\n const parsedNumber = parseFloat(inVal)\n if (!Number.isNaN(parsedNumber)) {\n formattedValues.push(parsedNumber)\n return formattedValues\n }\n }\n\n formattedValues.push(inVal)\n return formattedValues\n }\n\n if (\n Array.isArray(relationTo) &&\n relationTo.some((relationTo) => !!payload.collections[relationTo]?.customIDType)\n ) {\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n } else {\n formattedValues.push(inVal)\n }\n return formattedValues\n }\n\n if (Types.ObjectId.isValid(inVal.toString())) {\n formattedValues.push(new Types.ObjectId(inVal))\n }\n\n return formattedValues\n }, [])\n }\n\n // Handle hasMany relationships with equals operator and array values\n // For array equality checking\n if (\n ['equals', 'not_equals'].includes(operator) &&\n Array.isArray(formattedValue) &&\n 'hasMany' in field &&\n field.hasMany\n ) {\n if (typeof relationTo === 'string') {\n const customIDType = payload.collections[relationTo]?.customIDType\n\n // Convert array values to proper types (ObjectId or custom ID type)\n formattedValue = formattedValue.map((v) => {\n if (customIDType === 'number') {\n const parsed = parseFloat(v)\n return Number.isNaN(parsed) ? v : parsed\n }\n if (!Types.ObjectId.isValid(v)) {\n return v\n }\n return new Types.ObjectId(v)\n })\n } else {\n // Polymorphic hasMany - convert array of {relationTo, value} objects\n formattedValue = formattedValue.map((item) => {\n if (typeof item === 'object' && 'value' in item) {\n const relTo = item.relationTo\n const customIDType = payload.collections[relTo]?.customIDType\n if (customIDType === 'number') {\n const parsed = parseFloat(item.value)\n return { relationTo: relTo, value: Number.isNaN(parsed) ? item.value : parsed }\n }\n if (Types.ObjectId.isValid(item.value)) {\n return { relationTo: relTo, value: new Types.ObjectId(item.value) }\n }\n return item\n }\n // Non-polymorphic format - just IDs\n if (Types.ObjectId.isValid(item)) {\n return new Types.ObjectId(item)\n }\n return item\n })\n }\n } else if (\n ['contains', 'equals', 'like', 'not_equals'].includes(operator) &&\n (!Array.isArray(relationTo) || !path.endsWith('.relationTo'))\n ) {\n if (typeof relationTo === 'string') {\n const customIDType = payload.collections[relationTo]?.customIDType\n\n if (customIDType) {\n if (customIDType === 'number') {\n formattedValue = parseFloat(val)\n\n if (Number.isNaN(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n } else {\n const hasCustomIDType = relationTo.some(\n (relationTo) => !!payload.collections[relationTo]?.customIDType,\n )\n\n if (hasCustomIDType) {\n if (typeof val === 'string') {\n const formattedNumber = Number(val)\n formattedValue = [Types.ObjectId.isValid(val) ? new Types.ObjectId(val) : val]\n formattedOperator = operator === 'not_equals' ? 'not_in' : 'in'\n if (!Number.isNaN(formattedNumber)) {\n formattedValue.push(formattedNumber)\n }\n }\n } else {\n if (!Types.ObjectId.isValid(formattedValue)) {\n return { operator: formattedOperator, val: undefined }\n }\n formattedValue = new Types.ObjectId(formattedValue)\n }\n }\n }\n\n if (\n operator === 'all' &&\n Array.isArray(relationTo) &&\n path.endsWith('.value') &&\n Array.isArray(formattedValue)\n ) {\n formattedValue.forEach((v, i) => {\n if (Types.ObjectId.isValid(v)) {\n formattedValue[i] = new Types.ObjectId(v)\n }\n })\n }\n }\n\n // Set up specific formatting necessary by operators\n\n if (operator === 'near') {\n let lng\n let lat\n let maxDistance\n let minDistance\n\n if (Array.isArray(formattedValue)) {\n ;[lng, lat, maxDistance, minDistance] = formattedValue\n }\n\n if (typeof formattedValue === 'string') {\n ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue)\n }\n\n if (lng == null || lat == null || (maxDistance == null && minDistance == null)) {\n formattedValue = undefined\n } else {\n formattedValue = {\n $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] },\n }\n\n if (maxDistance && !Number.isNaN(Number(maxDistance))) {\n formattedValue.$maxDistance = parseFloat(maxDistance)\n }\n\n if (minDistance && !Number.isNaN(Number(minDistance))) {\n formattedValue.$minDistance = parseFloat(minDistance)\n }\n }\n }\n\n if (operator === 'within' || operator === 'intersects') {\n formattedValue = {\n $geometry: formattedValue,\n }\n }\n\n if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) {\n if (operator === 'contains' && !Types.ObjectId.isValid(formattedValue)) {\n if ('hasMany' in field && field.hasMany && field.type === 'select') {\n // For hasMany select, \"contains\" means the array includes this exact value\n if (typeof formattedValue === 'string') {\n return {\n rawQuery: {\n [path]: formattedValue,\n },\n }\n } else if (Array.isArray(formattedValue)) {\n return {\n rawQuery: {\n $or: formattedValue.map((val) => ({\n [path]: val,\n })),\n },\n }\n }\n } else if ('hasMany' in field && field.hasMany && ['number', 'text'].includes(field.type)) {\n // For hasMany text/number, \"contains\" means substring matching within array elements\n if (typeof formattedValue === 'string') {\n // Search for documents where any array element contains this string\n const escapedValue = escapeRegExp(formattedValue)\n return {\n rawQuery: {\n [path]: {\n $elemMatch: {\n $options: 'i',\n $regex: escapedValue,\n },\n },\n },\n }\n } else if (Array.isArray(formattedValue)) {\n // Search for documents where any array element contains any of the search values\n return {\n rawQuery: {\n $or: formattedValue.map((val) => {\n const escapedValue = escapeRegExp(String(val))\n return {\n [path]: {\n $elemMatch: {\n $options: 'i',\n $regex: escapedValue,\n },\n },\n }\n }),\n },\n }\n }\n } else {\n // Regular (non-hasMany) text field\n formattedValue = {\n $options: 'i',\n $regex: escapeRegExp(formattedValue),\n }\n }\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n let treatEmptyString = !['array', 'blocks', 'checkbox', 'relationship', 'upload'].includes(\n field.type,\n )\n\n if (field.type === 'text' && field.hasMany) {\n treatEmptyString = false\n } else if (field.type === 'number' && field.hasMany) {\n treatEmptyString = false\n } else if (field.type === 'select' && field.hasMany) {\n treatEmptyString = false\n }\n\n // _id can't be empty string, will error Cast to ObjectId failed for value \"\"\n return buildExistsQuery(formattedValue, path, treatEmptyString)\n }\n }\n\n if (\n (path === '_id' || path === 'parent') &&\n operator === 'like' &&\n formattedValue.length === 24 &&\n !hasCustomID\n ) {\n formattedOperator = 'equals'\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n\n // Clearable fields\n if (['relationship', 'select', 'upload'].includes(field.type)) {\n if (formattedValue) {\n return {\n rawQuery: {\n $and: [{ [path]: { $exists: true } }, { [path]: { $ne: null } }],\n },\n }\n } else {\n return {\n rawQuery: {\n $or: [{ [path]: { $exists: false } }, { [path]: { $eq: null } }],\n },\n }\n }\n }\n }\n\n return { operator: formattedOperator, val: formattedValue }\n}\n"],"names":["Types","createArrayFromCommaDelineated","escapeRegExp","fieldShouldBeLocalized","buildExistsQuery","formattedValue","path","treatEmptyString","rawQuery","$and","$exists","$ne","$or","$eq","getFieldFromSegments","field","payload","segments","_block","blocks","block","i","length","foundField","flattenedFields","find","each","name","shift","sanitizeQueryValue","hasCustomID","locale","operator","parentIsLocalized","val","formattedOperator","includes","type","split","isValid","ObjectId","undefined","map","id","parsedNumber","parseFloat","Number","isNaN","Array","isArray","reduce","formattedValues","inVal","push","toLowerCase","arrayVal","Boolean","Date","parse","value","relationTo","localizedPath","config","localization","collections","customIDType","some","toString","hasMany","v","parsed","item","relTo","endsWith","hasCustomIDType","formattedNumber","forEach","lng","lat","maxDistance","minDistance","$geometry","coordinates","$maxDistance","$minDistance","escapedValue","$elemMatch","$options","$regex","String"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAgB1C,eAAO,MAAM,WAAW,EAAE,WA+KzB,CAAA"}
1
+ {"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AA0B1C,eAAO,MAAM,WAAW,EAAE,WA4MzB,CAAA"}
@@ -1,4 +1,5 @@
1
- import { buildVersionCollectionFields, combineQueries, flattenWhereToOperators } from 'payload';
1
+ import { buildVersionCollectionFields, combineQueries, flattenWhereToOperators, projectBranchVersionParent, resolveBranchReadState, resolveBranchVersionQuery, rewriteBranchVersionParents, withBranchVersionSelect } from 'payload';
2
+ import { buildBranchVisibilityStages } from './queries/buildBranchVisibility.js';
2
3
  import { buildQuery } from './queries/buildQuery.js';
3
4
  import { buildSortParam } from './queries/buildSortParam.js';
4
5
  import { aggregatePaginate } from './utilities/aggregatePaginate.js';
@@ -8,12 +9,17 @@ import { getCollection } from './utilities/getEntity.js';
8
9
  import { getSession } from './utilities/getSession.js';
9
10
  import { resolveJoins } from './utilities/resolveJoins.js';
10
11
  import { transform } from './utilities/transform.js';
11
- export const queryDrafts = async function queryDrafts({ collection: collectionSlug, joins, limit, locale, page, pagination, req, select, sort: sortArg, where = {} }) {
12
+ export const queryDrafts = async function queryDrafts({ branch, collection: collectionSlug, joins, limit, locale, page, pagination, req, select, sort: sortArg, where = {} }) {
12
13
  const { collectionConfig, Model } = getCollection({
13
14
  adapter: this,
14
15
  collectionSlug,
15
16
  versions: true
16
17
  });
18
+ const branchReadState = resolveBranchReadState({
19
+ branch,
20
+ collectionSlug,
21
+ req
22
+ });
17
23
  let hasNearConstraint;
18
24
  let sort;
19
25
  if (where) {
@@ -34,28 +40,47 @@ export const queryDrafts = async function queryDrafts({ collection: collectionSl
34
40
  versions: true
35
41
  });
36
42
  }
43
+ const branchedWhere = branchReadState.useBranching ? rewriteBranchVersionParents(where) : await resolveBranchVersionQuery({
44
+ branch,
45
+ collectionSlug,
46
+ req,
47
+ where
48
+ });
49
+ const branchVisibility = branchReadState.useBranching ? buildBranchVisibilityStages({
50
+ adapter: this,
51
+ branch: branchReadState.branch,
52
+ collectionSlug,
53
+ mode: 'drafts'
54
+ }) : [];
37
55
  const combinedWhere = combineQueries({
38
56
  latest: {
39
57
  equals: true
40
58
  }
41
- }, where);
59
+ }, branchedWhere ?? {});
42
60
  const versionQuery = await buildQuery({
43
61
  adapter: this,
62
+ branch,
44
63
  fields,
45
64
  locale,
65
+ req,
46
66
  where: combinedWhere
47
67
  });
48
68
  const projection = buildProjectionFromSelect({
49
69
  adapter: this,
50
70
  fields,
51
- select
71
+ select: withBranchVersionSelect({
72
+ branch,
73
+ collectionSlug,
74
+ req,
75
+ select
76
+ })
52
77
  });
53
78
  const session = await getSession(this, req);
54
79
  const options = {
55
80
  session
56
81
  };
57
82
  // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.
58
- const useEstimatedCount = hasNearConstraint || !versionQuery || Object.keys(versionQuery).length === 0;
83
+ const useEstimatedCount = !branchVisibility.length && (hasNearConstraint || !versionQuery || Object.keys(versionQuery).length === 0);
59
84
  const paginationOptions = {
60
85
  lean: true,
61
86
  leanWithId: true,
@@ -97,17 +122,20 @@ export const queryDrafts = async function queryDrafts({ collection: collectionSl
97
122
  let result;
98
123
  const aggregate = await buildJoinAggregation({
99
124
  adapter: this,
125
+ branch,
100
126
  collection: collectionSlug,
101
127
  collectionConfig,
102
128
  joins,
103
129
  locale,
104
130
  projection,
105
131
  query: versionQuery,
132
+ req,
106
133
  versions: true
107
134
  });
108
- if (aggregate || sortAggregation.length > 0) {
135
+ if (aggregate.length > 0 || branchVisibility.length > 0 || sortAggregation.length > 0) {
109
136
  result = await aggregatePaginate({
110
137
  adapter: this,
138
+ branchVisibility,
111
139
  collation: paginationOptions.collation,
112
140
  joinAggregation: aggregate,
113
141
  limit: paginationOptions.limit,
@@ -127,10 +155,12 @@ export const queryDrafts = async function queryDrafts({ collection: collectionSl
127
155
  if (!this.useJoinAggregations) {
128
156
  await resolveJoins({
129
157
  adapter: this,
158
+ branch,
130
159
  collectionSlug,
131
160
  docs: result.docs,
132
161
  joins,
133
162
  locale,
163
+ req,
134
164
  versions: true
135
165
  });
136
166
  }
@@ -141,7 +171,9 @@ export const queryDrafts = async function queryDrafts({ collection: collectionSl
141
171
  operation: 'read'
142
172
  });
143
173
  for(let i = 0; i < result.docs.length; i++){
144
- const id = result.docs[i].parent;
174
+ // A branch version's `parent` is the shadow row's primary key, so the
175
+ // canonical document ID comes from `_branchParent` when present.
176
+ const id = projectBranchVersionParent(result.docs[i]);
145
177
  result.docs[i] = result.docs[i].version ?? {};
146
178
  result.docs[i].id = id;
147
179
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { PaginateOptions, PipelineStage, QueryOptions } from 'mongoose'\nimport type { QueryDrafts } from 'payload'\n\nimport { buildVersionCollectionFields, combineQueries, 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 queryDrafts: QueryDrafts = async function queryDrafts(\n this: MongooseAdapter,\n {\n collection: collectionSlug,\n joins,\n limit,\n locale,\n page,\n pagination,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug,\n versions: true,\n })\n\n let hasNearConstraint\n let sort\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 fields = buildVersionCollectionFields(this.payload.config, collectionConfig, true)\n\n const sortAggregation: PipelineStage[] = []\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n sortAggregation,\n timestamps: true,\n versions: true,\n })\n }\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, where)\n\n const versionQuery = await buildQuery({\n adapter: this,\n fields,\n locale,\n where: combinedWhere,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields,\n select,\n })\n\n const session = await getSession(this, req)\n const options: QueryOptions = {\n session,\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 =\n hasNearConstraint || !versionQuery || Object.keys(versionQuery).length === 0\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n options,\n page,\n pagination,\n projection,\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 (\n !useEstimatedCount &&\n Object.keys(versionQuery).length === 0 &&\n this.disableIndexHints !== true\n ) {\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(versionQuery, {\n collation: paginationOptions.collation,\n hint: { _id: 1 },\n session,\n }),\n )\n }\n }\n\n if (limit && 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\n let result\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n joins,\n locale,\n projection,\n query: versionQuery,\n versions: true,\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: versionQuery,\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(versionQuery, 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 versions: true,\n })\n }\n\n transform({\n adapter: this,\n data: result.docs,\n fields: buildVersionCollectionFields(this.payload.config, collectionConfig),\n operation: 'read',\n })\n\n for (let i = 0; i < result.docs.length; i++) {\n const id = result.docs[i].parent\n result.docs[i] = result.docs[i].version ?? {}\n result.docs[i].id = id\n }\n\n return result\n}\n"],"names":["buildVersionCollectionFields","combineQueries","flattenWhereToOperators","buildQuery","buildSortParam","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","resolveJoins","transform","queryDrafts","collection","collectionSlug","joins","limit","locale","page","pagination","req","select","sort","sortArg","where","collectionConfig","Model","adapter","versions","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","payload","config","sortAggregation","defaultSort","timestamps","combinedWhere","latest","equals","versionQuery","projection","session","options","useEstimatedCount","length","paginationOptions","lean","leanWithId","collation","localizationConfig","localization","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","aggregate","query","joinAggregation","undefined","paginate","useJoinAggregations","docs","data","operation","i","id","parent","version"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { PaginateOptions, PipelineStage, QueryOptions } from 'mongoose'\nimport type { QueryDrafts } from 'payload'\n\nimport {\n buildVersionCollectionFields,\n combineQueries,\n flattenWhereToOperators,\n projectBranchVersionParent,\n resolveBranchReadState,\n resolveBranchVersionQuery,\n rewriteBranchVersionParents,\n withBranchVersionSelect,\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 queryDrafts: QueryDrafts = async function queryDrafts(\n this: MongooseAdapter,\n {\n branch,\n collection: collectionSlug,\n joins,\n limit,\n locale,\n page,\n pagination,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({\n adapter: this,\n collectionSlug,\n versions: true,\n })\n const branchReadState = resolveBranchReadState({ branch, collectionSlug, req })\n\n let hasNearConstraint\n let sort\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 fields = buildVersionCollectionFields(this.payload.config, collectionConfig, true)\n\n const sortAggregation: PipelineStage[] = []\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n sortAggregation,\n timestamps: true,\n versions: true,\n })\n }\n\n const branchedWhere = branchReadState.useBranching\n ? rewriteBranchVersionParents(where)\n : await resolveBranchVersionQuery({\n branch,\n collectionSlug,\n req,\n where,\n })\n const branchVisibility = branchReadState.useBranching\n ? buildBranchVisibilityStages({\n adapter: this,\n branch: branchReadState.branch,\n collectionSlug,\n mode: 'drafts',\n })\n : []\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, branchedWhere ?? {})\n\n const versionQuery = await buildQuery({\n adapter: this,\n branch,\n fields,\n locale,\n req,\n where: combinedWhere,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields,\n select: withBranchVersionSelect({ branch, collectionSlug, req, select }),\n })\n\n const session = await getSession(this, req)\n const options: QueryOptions = {\n session,\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 =\n !branchVisibility.length &&\n (hasNearConstraint || !versionQuery || Object.keys(versionQuery).length === 0)\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n options,\n page,\n pagination,\n projection,\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 (\n !useEstimatedCount &&\n Object.keys(versionQuery).length === 0 &&\n this.disableIndexHints !== true\n ) {\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(versionQuery, {\n collation: paginationOptions.collation,\n hint: { _id: 1 },\n session,\n }),\n )\n }\n }\n\n if (limit && 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\n let result\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n branch,\n collection: collectionSlug,\n collectionConfig,\n joins,\n locale,\n projection,\n query: versionQuery,\n req,\n versions: true,\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: versionQuery,\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(versionQuery, 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 versions: true,\n })\n }\n\n transform({\n adapter: this,\n data: result.docs,\n fields: buildVersionCollectionFields(this.payload.config, collectionConfig),\n operation: 'read',\n })\n\n for (let i = 0; i < result.docs.length; i++) {\n // A branch version's `parent` is the shadow row's primary key, so the\n // canonical document ID comes from `_branchParent` when present.\n const id = projectBranchVersionParent(result.docs[i] as Record<string, unknown>)\n result.docs[i] = result.docs[i].version ?? {}\n result.docs[i].id = id\n }\n\n return result\n}\n"],"names":["buildVersionCollectionFields","combineQueries","flattenWhereToOperators","projectBranchVersionParent","resolveBranchReadState","resolveBranchVersionQuery","rewriteBranchVersionParents","withBranchVersionSelect","buildBranchVisibilityStages","buildQuery","buildSortParam","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","resolveJoins","transform","queryDrafts","branch","collection","collectionSlug","joins","limit","locale","page","pagination","req","select","sort","sortArg","where","collectionConfig","Model","adapter","versions","branchReadState","hasNearConstraint","constraints","some","prop","Object","keys","key","fields","payload","config","sortAggregation","defaultSort","timestamps","branchedWhere","useBranching","branchVisibility","mode","combinedWhere","latest","equals","versionQuery","projection","session","options","useEstimatedCount","length","paginationOptions","lean","leanWithId","collation","localizationConfig","localization","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","aggregate","query","joinAggregation","undefined","paginate","useJoinAggregations","docs","data","operation","i","id","version"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"testCredentials.d.ts","sourceRoot":"","sources":["../src/testCredentials.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,kBAAkB,CAAA;AACpC,eAAO,MAAM,QAAQ,YAAY,CAAA;AACjC,eAAO,MAAM,UAAU;;;;CAItB,CAAA"}
1
+ {"version":3,"file":"testCredentials.d.ts","sourceRoot":"","sources":["../src/testCredentials.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,kBAAkB,CAAA;AACpC,eAAO,MAAM,QAAQ,YAAY,CAAA;AACjC,eAAO,MAAM,UAAU;IACrB,IAAI;IACJ,IAAI;IACJ,GAAG;CACJ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"beginTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/beginTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAU/C,eAAO,MAAM,gBAAgB,EAAE,gBAsB9B,CAAA"}
1
+ {"version":3,"file":"beginTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/beginTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAU/C,eAAO,MAAM,gBAAgB,EAAE,gBAqB9B,CAAA"}
@@ -10,7 +10,6 @@ export const beginTransaction = async function beginTransaction(options) {
10
10
  const client = this.connection.getClient();
11
11
  const id = uuid();
12
12
  if (!this.sessions[id]) {
13
- // @ts-expect-error BaseDatabaseAdapter and MongoosAdapter (that extends Base) sessions aren't compatible.
14
13
  this.sessions[id] = client.startSession();
15
14
  }
16
15
  if (this.sessions[id]?.inTransaction()) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transactions/beginTransaction.ts"],"sourcesContent":["import type { TransactionOptions } from 'mongodb'\nimport type { BeginTransaction } from 'payload'\n\nimport { APIError } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { MongooseAdapter } from '../index.js'\n\n// Needs await to fulfill the interface\n// @ts-expect-error TransactionOptions isn't compatible with BeginTransaction of the DatabaseAdapter interface.\n// eslint-disable-next-line @typescript-eslint/require-await\nexport const beginTransaction: BeginTransaction = async function beginTransaction(\n this: MongooseAdapter,\n options: TransactionOptions,\n) {\n if (!this.connection) {\n throw new APIError('beginTransaction called while no connection to the database exists')\n }\n\n const client = this.connection.getClient()\n const id = uuid()\n\n if (!this.sessions[id]) {\n // @ts-expect-error BaseDatabaseAdapter and MongoosAdapter (that extends Base) sessions aren't compatible.\n this.sessions[id] = client.startSession()\n }\n if (this.sessions[id]?.inTransaction()) {\n this.payload.logger.warn('beginTransaction called while transaction already exists')\n } else {\n this.sessions[id]?.startTransaction(options || (this.transactionOptions as TransactionOptions))\n }\n\n return id\n}\n"],"names":["APIError","v4","uuid","beginTransaction","options","connection","client","getClient","id","sessions","startSession","inTransaction","payload","logger","warn","startTransaction","transactionOptions"],"mappings":"AAGA,SAASA,QAAQ,QAAQ,UAAS;AAClC,SAASC,MAAMC,IAAI,QAAQ,OAAM;AAIjC,uCAAuC;AACvC,+GAA+G;AAC/G,4DAA4D;AAC5D,OAAO,MAAMC,mBAAqC,eAAeA,iBAE/DC,OAA2B;IAE3B,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;QACpB,MAAM,IAAIL,SAAS;IACrB;IAEA,MAAMM,SAAS,IAAI,CAACD,UAAU,CAACE,SAAS;IACxC,MAAMC,KAAKN;IAEX,IAAI,CAAC,IAAI,CAACO,QAAQ,CAACD,GAAG,EAAE;QACtB,0GAA0G;QAC1G,IAAI,CAACC,QAAQ,CAACD,GAAG,GAAGF,OAAOI,YAAY;IACzC;IACA,IAAI,IAAI,CAACD,QAAQ,CAACD,GAAG,EAAEG,iBAAiB;QACtC,IAAI,CAACC,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;IAC3B,OAAO;QACL,IAAI,CAACL,QAAQ,CAACD,GAAG,EAAEO,iBAAiBX,WAAY,IAAI,CAACY,kBAAkB;IACzE;IAEA,OAAOR;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/transactions/beginTransaction.ts"],"sourcesContent":["import type { TransactionOptions } from 'mongodb'\nimport type { BeginTransaction } from 'payload'\n\nimport { APIError } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { MongooseAdapter } from '../index.js'\n\n// Needs await to fulfill the interface\n// @ts-expect-error TransactionOptions isn't compatible with BeginTransaction of the DatabaseAdapter interface.\n// eslint-disable-next-line @typescript-eslint/require-await\nexport const beginTransaction: BeginTransaction = async function beginTransaction(\n this: MongooseAdapter,\n options: TransactionOptions,\n) {\n if (!this.connection) {\n throw new APIError('beginTransaction called while no connection to the database exists')\n }\n\n const client = this.connection.getClient()\n const id = uuid()\n\n if (!this.sessions[id]) {\n this.sessions[id] = client.startSession()\n }\n if (this.sessions[id]?.inTransaction()) {\n this.payload.logger.warn('beginTransaction called while transaction already exists')\n } else {\n this.sessions[id]?.startTransaction(options || (this.transactionOptions as TransactionOptions))\n }\n\n return id\n}\n"],"names":["APIError","v4","uuid","beginTransaction","options","connection","client","getClient","id","sessions","startSession","inTransaction","payload","logger","warn","startTransaction","transactionOptions"],"mappings":"AAGA,SAASA,QAAQ,QAAQ,UAAS;AAClC,SAASC,MAAMC,IAAI,QAAQ,OAAM;AAIjC,uCAAuC;AACvC,+GAA+G;AAC/G,4DAA4D;AAC5D,OAAO,MAAMC,mBAAqC,eAAeA,iBAE/DC,OAA2B;IAE3B,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;QACpB,MAAM,IAAIL,SAAS;IACrB;IAEA,MAAMM,SAAS,IAAI,CAACD,UAAU,CAACE,SAAS;IACxC,MAAMC,KAAKN;IAEX,IAAI,CAAC,IAAI,CAACO,QAAQ,CAACD,GAAG,EAAE;QACtB,IAAI,CAACC,QAAQ,CAACD,GAAG,GAAGF,OAAOI,YAAY;IACzC;IACA,IAAI,IAAI,CAACD,QAAQ,CAACD,GAAG,EAAEG,iBAAiB;QACtC,IAAI,CAACC,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC;IAC3B,OAAO;QACL,IAAI,CAACL,QAAQ,CAACD,GAAG,EAAEO,iBAAiBX,WAAY,IAAI,CAACY,kBAAkB;IACzE;IAEA,OAAOR;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAIhD,eAAO,MAAM,iBAAiB,EAAE,iBA4B/B,CAAA"}
1
+ {"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/commitTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAShD,eAAO,MAAM,iBAAiB,EAAE,iBA8D/B,CAAA"}