@payloadcms/drizzle 4.0.0-internal.a1317b2 → 4.0.0-internal.a5acc33

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 (262) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +25 -3
  3. package/dist/count.js.map +1 -1
  4. package/dist/countGlobalVersions.js +8 -3
  5. package/dist/countGlobalVersions.js.map +1 -1
  6. package/dist/countVersions.d.ts.map +1 -1
  7. package/dist/countVersions.js +29 -4
  8. package/dist/countVersions.js.map +1 -1
  9. package/dist/createGlobalVersion.d.ts.map +1 -1
  10. package/dist/createGlobalVersion.js +17 -2
  11. package/dist/createGlobalVersion.js.map +1 -1
  12. package/dist/createVersion.d.ts.map +1 -1
  13. package/dist/createVersion.js +12 -1
  14. package/dist/createVersion.js.map +1 -1
  15. package/dist/deleteBranchGlobal.d.ts +10 -0
  16. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  17. package/dist/deleteBranchGlobal.js +27 -0
  18. package/dist/deleteBranchGlobal.js.map +1 -0
  19. package/dist/deleteOne.d.ts.map +1 -1
  20. package/dist/deleteOne.js +25 -1
  21. package/dist/deleteOne.js.map +1 -1
  22. package/dist/exports/postgres.d.ts +2 -1
  23. package/dist/exports/postgres.d.ts.map +1 -1
  24. package/dist/exports/postgres.js +2 -1
  25. package/dist/exports/postgres.js.map +1 -1
  26. package/dist/exports/sqlite.d.ts +2 -1
  27. package/dist/exports/sqlite.d.ts.map +1 -1
  28. package/dist/exports/sqlite.js +2 -1
  29. package/dist/exports/sqlite.js.map +1 -1
  30. package/dist/find/buildFindManyArgs.d.ts +3 -2
  31. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  32. package/dist/find/buildFindManyArgs.js +2 -1
  33. package/dist/find/buildFindManyArgs.js.map +1 -1
  34. package/dist/find/buildPolymorphicJoinQuery.d.ts +40 -0
  35. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  36. package/dist/find/buildPolymorphicJoinQuery.js +163 -0
  37. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  38. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  39. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  40. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  41. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  42. package/dist/find/createPolymorphicJoinWherePlan.d.ts +38 -0
  43. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  44. package/dist/find/createPolymorphicJoinWherePlan.js +200 -0
  45. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  46. package/dist/find/findMany.d.ts +6 -1
  47. package/dist/find/findMany.d.ts.map +1 -1
  48. package/dist/find/findMany.js +16 -3
  49. package/dist/find/findMany.js.map +1 -1
  50. package/dist/find/traverseFields.d.ts +3 -2
  51. package/dist/find/traverseFields.d.ts.map +1 -1
  52. package/dist/find/traverseFields.js +82 -198
  53. package/dist/find/traverseFields.js.map +1 -1
  54. package/dist/find.d.ts.map +1 -1
  55. package/dist/find.js +32 -4
  56. package/dist/find.js.map +1 -1
  57. package/dist/findDistinct.d.ts.map +1 -1
  58. package/dist/findDistinct.js +104 -8
  59. package/dist/findDistinct.js.map +1 -1
  60. package/dist/findGlobal.d.ts.map +1 -1
  61. package/dist/findGlobal.js +24 -5
  62. package/dist/findGlobal.js.map +1 -1
  63. package/dist/findGlobalVersions.js +8 -3
  64. package/dist/findGlobalVersions.js.map +1 -1
  65. package/dist/findOne.d.ts +1 -1
  66. package/dist/findOne.d.ts.map +1 -1
  67. package/dist/findOne.js +30 -3
  68. package/dist/findOne.js.map +1 -1
  69. package/dist/findVersions.d.ts.map +1 -1
  70. package/dist/findVersions.js +32 -5
  71. package/dist/findVersions.js.map +1 -1
  72. package/dist/index.d.ts +3 -8
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +3 -8
  75. package/dist/index.js.map +1 -1
  76. package/dist/migrate.d.ts.map +1 -1
  77. package/dist/migrate.js +6 -2
  78. package/dist/migrate.js.map +1 -1
  79. package/dist/migrateDown.d.ts.map +1 -1
  80. package/dist/migrateDown.js +5 -2
  81. package/dist/migrateDown.js.map +1 -1
  82. package/dist/migrateFresh.d.ts.map +1 -1
  83. package/dist/migrateFresh.js +5 -2
  84. package/dist/migrateFresh.js.map +1 -1
  85. package/dist/migrateRefresh.d.ts.map +1 -1
  86. package/dist/migrateRefresh.js +6 -2
  87. package/dist/migrateRefresh.js.map +1 -1
  88. package/dist/migrateReset.d.ts.map +1 -1
  89. package/dist/migrateReset.js +6 -2
  90. package/dist/migrateReset.js.map +1 -1
  91. package/dist/postgres/createJSONQuery/index.js +3 -3
  92. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  93. package/dist/postgres/insert.d.ts.map +1 -1
  94. package/dist/postgres/insert.js +4 -2
  95. package/dist/postgres/insert.js.map +1 -1
  96. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  97. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  98. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  99. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  100. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  101. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  102. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  103. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  104. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  105. package/dist/postgres/requireDrizzleKit.d.ts +4 -0
  106. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -1
  107. package/dist/postgres/requireDrizzleKit.js +16 -10
  108. package/dist/postgres/requireDrizzleKit.js.map +1 -1
  109. package/dist/postgres/types.d.ts +4 -0
  110. package/dist/postgres/types.d.ts.map +1 -1
  111. package/dist/postgres/types.js.map +1 -1
  112. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  113. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  114. package/dist/queries/buildAndOrConditions.js +2 -1
  115. package/dist/queries/buildAndOrConditions.js.map +1 -1
  116. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  117. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  118. package/dist/queries/buildBranchVisibility.js +48 -0
  119. package/dist/queries/buildBranchVisibility.js.map +1 -0
  120. package/dist/queries/buildOrderBy.d.ts +3 -2
  121. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  122. package/dist/queries/buildOrderBy.js +2 -1
  123. package/dist/queries/buildOrderBy.js.map +1 -1
  124. package/dist/queries/buildQuery.d.ts +3 -2
  125. package/dist/queries/buildQuery.d.ts.map +1 -1
  126. package/dist/queries/buildQuery.js +4 -2
  127. package/dist/queries/buildQuery.js.map +1 -1
  128. package/dist/queries/getTableColumnFromPath.d.ts +3 -2
  129. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  130. package/dist/queries/getTableColumnFromPath.js +176 -29
  131. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  132. package/dist/queries/parseParams.d.ts +3 -2
  133. package/dist/queries/parseParams.d.ts.map +1 -1
  134. package/dist/queries/parseParams.js +63 -3
  135. package/dist/queries/parseParams.js.map +1 -1
  136. package/dist/queryDrafts.d.ts.map +1 -1
  137. package/dist/queryDrafts.js +27 -5
  138. package/dist/queryDrafts.js.map +1 -1
  139. package/dist/schema/build.d.ts.map +1 -1
  140. package/dist/schema/build.js +28 -20
  141. package/dist/schema/build.js.map +1 -1
  142. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  143. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  144. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  145. package/dist/sqlite/createJSONQuery/index.js +6 -5
  146. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  147. package/dist/sqlite/createRequireDrizzleKit.d.ts +6 -0
  148. package/dist/sqlite/createRequireDrizzleKit.d.ts.map +1 -0
  149. package/dist/sqlite/createRequireDrizzleKit.js +15 -0
  150. package/dist/sqlite/createRequireDrizzleKit.js.map +1 -0
  151. package/dist/sqlite/execute.js.map +1 -1
  152. package/dist/sqlite/insert.d.ts.map +1 -1
  153. package/dist/sqlite/insert.js +9 -4
  154. package/dist/sqlite/insert.js.map +1 -1
  155. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  156. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  157. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  158. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  159. package/dist/sqlite/types.d.ts +4 -0
  160. package/dist/sqlite/types.d.ts.map +1 -1
  161. package/dist/sqlite/types.js.map +1 -1
  162. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  163. package/dist/transactions/beginTransaction.js +13 -5
  164. package/dist/transactions/beginTransaction.js.map +1 -1
  165. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  166. package/dist/transactions/commitTransaction.js +2 -5
  167. package/dist/transactions/commitTransaction.js.map +1 -1
  168. package/dist/transform/read/traverseFields.js.map +1 -1
  169. package/dist/transform/write/array.d.ts +3 -2
  170. package/dist/transform/write/array.d.ts.map +1 -1
  171. package/dist/transform/write/array.js +2 -1
  172. package/dist/transform/write/array.js.map +1 -1
  173. package/dist/transform/write/blocks.d.ts +3 -2
  174. package/dist/transform/write/blocks.d.ts.map +1 -1
  175. package/dist/transform/write/blocks.js +2 -1
  176. package/dist/transform/write/blocks.js.map +1 -1
  177. package/dist/transform/write/index.d.ts.map +1 -1
  178. package/dist/transform/write/index.js +2 -0
  179. package/dist/transform/write/index.js.map +1 -1
  180. package/dist/transform/write/traverseFields.d.ts +2 -1
  181. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  182. package/dist/transform/write/traverseFields.js +51 -21
  183. package/dist/transform/write/traverseFields.js.map +1 -1
  184. package/dist/transform/write/types.d.ts +7 -0
  185. package/dist/transform/write/types.d.ts.map +1 -1
  186. package/dist/transform/write/types.js.map +1 -1
  187. package/dist/types.d.ts +3 -2
  188. package/dist/types.d.ts.map +1 -1
  189. package/dist/types.js.map +1 -1
  190. package/dist/updateGlobal.d.ts +5 -1
  191. package/dist/updateGlobal.d.ts.map +1 -1
  192. package/dist/updateGlobal.js +96 -4
  193. package/dist/updateGlobal.js.map +1 -1
  194. package/dist/updateOne.d.ts.map +1 -1
  195. package/dist/updateOne.js +93 -4
  196. package/dist/updateOne.js.map +1 -1
  197. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  198. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  199. package/dist/upsertBranchGlobalChange.js +35 -0
  200. package/dist/upsertBranchGlobalChange.js.map +1 -0
  201. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  202. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  203. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  204. package/dist/upsertRow/index.d.ts +1 -1
  205. package/dist/upsertRow/index.d.ts.map +1 -1
  206. package/dist/upsertRow/index.js +156 -46
  207. package/dist/upsertRow/index.js.map +1 -1
  208. package/dist/upsertRow/types.d.ts +3 -0
  209. package/dist/upsertRow/types.d.ts.map +1 -1
  210. package/dist/upsertRow/types.js.map +1 -1
  211. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  212. package/dist/utilities/blocksToJsonMigrator.js +7 -18
  213. package/dist/utilities/blocksToJsonMigrator.js.map +1 -1
  214. package/dist/utilities/buildCreateMigration.js +1 -1
  215. package/dist/utilities/buildCreateMigration.js.map +1 -1
  216. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  217. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  218. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  219. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  220. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  221. package/dist/utilities/createSchemaGenerator.js +7 -12
  222. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  223. package/dist/utilities/executeSchemaHooks.js +1 -1
  224. package/dist/utilities/executeSchemaHooks.js.map +1 -1
  225. package/dist/utilities/formatGeneratedFile.d.ts +10 -0
  226. package/dist/utilities/formatGeneratedFile.d.ts.map +1 -0
  227. package/dist/utilities/formatGeneratedFile.js +58 -0
  228. package/dist/utilities/formatGeneratedFile.js.map +1 -0
  229. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  230. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  231. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  232. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  233. package/dist/utilities/getTransaction.js.map +1 -1
  234. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  235. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  236. package/dist/utilities/parseJSONPathSegment.js +17 -0
  237. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  238. package/dist/utilities/pushDevSchema.js +1 -1
  239. package/dist/utilities/pushDevSchema.js.map +1 -1
  240. package/package.json +17 -19
  241. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js +0 -91
  242. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js.map +0 -1
  243. package/dist/postgres/query/postgresUnaccent.spec.js +0 -71
  244. package/dist/postgres/query/postgresUnaccent.spec.js.map +0 -1
  245. package/dist/queries/buildOperatorConstraint.spec.js +0 -348
  246. package/dist/queries/buildOperatorConstraint.spec.js.map +0 -1
  247. package/dist/queries/validateOperatorHandlers.spec.js +0 -142
  248. package/dist/queries/validateOperatorHandlers.spec.js.map +0 -1
  249. package/dist/schema/buildRawSchema.spec.js +0 -290
  250. package/dist/schema/buildRawSchema.spec.js.map +0 -1
  251. package/dist/sqlite/requireDrizzleKit.d.ts +0 -3
  252. package/dist/sqlite/requireDrizzleKit.d.ts.map +0 -1
  253. package/dist/sqlite/requireDrizzleKit.js +0 -12
  254. package/dist/sqlite/requireDrizzleKit.js.map +0 -1
  255. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  256. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  257. package/dist/utilities/checkTruncatedIdentifiers.spec.js +0 -301
  258. package/dist/utilities/checkTruncatedIdentifiers.spec.js.map +0 -1
  259. package/dist/utilities/isValidStringID.spec.js +0 -15
  260. package/dist/utilities/isValidStringID.spec.js.map +0 -1
  261. package/dist/utilities/validateIdentifierLength.spec.js +0 -19
  262. package/dist/utilities/validateIdentifierLength.spec.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/find/buildPolymorphicJoinWhere.ts"],"sourcesContent":["import type { Column, SQL } from 'drizzle-orm'\n\nimport { and, getTableName, isNotNull, isNull, or, sql } from 'drizzle-orm'\nimport { type FlattenedField, type Operator, QueryError, type Where } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleResolvedOperator } from '../queries/operatorMap.js'\nimport type { DrizzleAdapter, GenericTable } from '../types.js'\nimport type {\n PolymorphicJoinWherePlan,\n ScalarWhereField,\n WherePathPlan,\n} from './createPolymorphicJoinWherePlan.js'\n\nimport { buildOperatorConstraint } from '../queries/buildOperatorConstraint.js'\nimport { sanitizeQueryValue } from '../queries/sanitizeQueryValue.js'\n\nconst supportedJSONQueryOperators = new Set(['contains', 'equals', 'exists', 'in', 'like'])\n\ntype BuildPolymorphicJoinWhereArgs = {\n adapter: DrizzleAdapter\n collection: string\n locale?: string\n table: GenericTable\n where: Where\n wherePlan: PolymorphicJoinWherePlan\n}\n\ntype ResolvedWherePath =\n | {\n column: Column | SQL\n fieldContext?: ScalarWhereField\n pathPlan: WherePathPlan\n queryValueContext: ScalarWhereField\n type: 'scalar'\n }\n | {\n fieldContext: FlattenedField\n jsonExpression: string\n pathPlan: WherePathPlan\n type: 'hasManySelect'\n }\n | {\n pathPlan: WherePathPlan\n type: 'invalid'\n }\n\n/**\n * Builds a where clause for one collection before the polymorphic branches are combined. A field\n * that is absent from this collection resolves to SQL NULL, and relationTo resolves to the current\n * collection slug.\n */\nexport const buildPolymorphicJoinWhere = ({\n adapter,\n collection,\n locale,\n table,\n where,\n wherePlan,\n}: BuildPolymorphicJoinWhereArgs): SQL | undefined => {\n const constraints: SQL[] = []\n\n for (const key in where) {\n if (['AND', 'OR'].includes(key.toUpperCase())) {\n if (!Array.isArray(where[key])) {\n throw new QueryError([{ path: key }])\n }\n\n const combine = key.toUpperCase() === 'AND' ? and : or\n const nestedConstraints = where[key].map((nestedWhere) =>\n buildPolymorphicJoinWhere({\n adapter,\n collection,\n locale,\n table,\n where: nestedWhere,\n wherePlan,\n }),\n )\n const nestedCondition = combine(...nestedConstraints)\n\n if (nestedCondition) {\n constraints.push(nestedCondition)\n }\n\n continue\n }\n\n const resolvedPath = resolveWherePath({\n adapter,\n collection,\n schemaPath: key,\n table,\n wherePlan,\n })\n\n for (let payloadOperator of Object.keys(where[key])) {\n const originalOperator = payloadOperator as Operator\n let value = where[key][payloadOperator]\n\n if (resolvedPath.type === 'invalid') {\n throw new QueryError([{ path: `${key}.${payloadOperator}` }])\n }\n\n if (resolvedPath.type === 'hasManySelect') {\n if (!supportedJSONQueryOperators.has(payloadOperator)) {\n throw new QueryError([{ path: `${key}.${payloadOperator}` }])\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n field: resolvedPath.fieldContext,\n isUUID: false,\n operator: payloadOperator,\n relationOrPath: key,\n val: value,\n })\n\n if (sanitizedQueryValue === null) {\n throw new QueryError([{ path: `${key}.${originalOperator}` }])\n }\n\n if (sanitizedQueryValue.columns) {\n throw new QueryError([{ path: `${key}.${originalOperator}` }])\n }\n\n value = sanitizedQueryValue.value\n\n if (payloadOperator === 'in' && Array.isArray(value) && value.length === 0) {\n constraints.push(sql.raw('false'))\n continue\n }\n\n const jsonQueryOperator =\n payloadOperator === 'exists' ? 'exists' : sanitizedQueryValue.operator\n\n constraints.push(\n sql.raw(\n adapter.createJSONQuery({\n column: resolvedPath.jsonExpression,\n operator: jsonQueryOperator,\n pathSegments: [resolvedPath.pathPlan.columnPath],\n value,\n }),\n ),\n )\n continue\n }\n\n if (payloadOperator === '$raw') {\n if (typeof value !== 'string') {\n throw new QueryError([{ path: `${key}.${payloadOperator}` }])\n }\n\n constraints.push(sql.raw(value))\n continue\n }\n\n const { column, fieldContext, queryValueContext } = resolvedPath\n\n if (\n payloadOperator === 'like' &&\n (queryValueContext.field.type === 'number' ||\n queryValueContext.field.type === 'relationship' ||\n queryValueContext.field.type === 'upload' ||\n queryValueContext.isUUID)\n ) {\n payloadOperator = 'equals'\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n field: queryValueContext.field,\n isUUID: queryValueContext.isUUID,\n operator: payloadOperator,\n relationOrPath: key,\n val: value,\n })\n\n if (sanitizedQueryValue === null) {\n throw new QueryError([{ path: `${key}.${originalOperator}` }])\n }\n\n if (sanitizedQueryValue.columns) {\n throw new QueryError([{ path: `${key}.${originalOperator}` }])\n }\n\n payloadOperator = sanitizedQueryValue.operator\n value = sanitizedQueryValue.value\n\n if (!(payloadOperator in adapter.operators)) {\n throw new QueryError([{ path: `${key}.${originalOperator}` }])\n }\n\n const resolvedOperator = payloadOperator as DrizzleResolvedOperator\n const operator = adapter.operators[resolvedOperator]\n const buildColumnConstraint = (constraintValue: unknown) => {\n if (!fieldContext) {\n return operator(column, constraintValue)\n }\n\n return buildOperatorConstraint({\n adapter,\n column,\n field: fieldContext.field,\n locale,\n originalOperator,\n path: key,\n resolvedOperator,\n value: constraintValue,\n })\n }\n\n if (originalOperator === 'equals' && value === null) {\n constraints.push(isNull(column))\n continue\n }\n\n if (originalOperator === 'not_equals') {\n if (value === null) {\n constraints.push(isNotNull(column))\n } else {\n const notEqualsConstraint = or(isNull(column), buildColumnConstraint(value))\n\n if (notEqualsConstraint) {\n constraints.push(notEqualsConstraint)\n }\n }\n continue\n }\n\n if (originalOperator === 'in' && Array.isArray(value) && value.includes(null)) {\n const nonNullValues = value.filter((item) => item !== null)\n const inConstraint = buildColumnConstraint(nonNullValues)\n const nullAwareInConstraint = or(isNull(column), inConstraint)\n\n if (nullAwareInConstraint) {\n constraints.push(nullAwareInConstraint)\n }\n continue\n }\n\n if (payloadOperator === 'like' && typeof value === 'string') {\n const wordConstraints = value.split(' ').map((word) => buildColumnConstraint(`%${word}%`))\n const wordCondition = and(...wordConstraints)\n\n if (wordCondition) {\n constraints.push(wordCondition)\n }\n continue\n }\n\n constraints.push(buildColumnConstraint(value))\n }\n }\n\n return and(...constraints)\n}\n\nconst resolveWherePath = ({\n adapter,\n collection,\n schemaPath,\n table,\n wherePlan,\n}: {\n schemaPath: string\n} & Omit<BuildPolymorphicJoinWhereArgs, 'locale' | 'where'>): ResolvedWherePath => {\n const pathPlan = wherePlan.get(schemaPath)\n\n if (!pathPlan) {\n throw new QueryError([{ path: schemaPath }])\n }\n\n if (pathPlan.type === 'invalid') {\n return { type: 'invalid', pathPlan }\n }\n\n if (schemaPath === 'relationTo') {\n return {\n type: 'scalar',\n column: sql`${collection}`,\n pathPlan,\n queryValueContext: {\n type: 'scalar',\n field: { name: 'relationTo', type: 'text' },\n isUUID: false,\n },\n }\n }\n\n if (pathPlan.type === 'hasManySelect') {\n const fieldContext = [...pathPlan.fieldsByCollection.values()].find(\n (field) => field.type === 'hasManySelect',\n )?.field\n\n if (!fieldContext) {\n return { type: 'invalid', pathPlan }\n }\n\n return {\n type: 'hasManySelect',\n fieldContext,\n jsonExpression: getHasManySelectExpression({\n adapter,\n collection,\n pathPlan,\n table,\n }),\n pathPlan,\n }\n }\n\n const collectionField = pathPlan.fieldsByCollection.get(collection)\n const fieldContext = collectionField?.type === 'scalar' ? collectionField : undefined\n const queryValueContext =\n fieldContext ??\n [...pathPlan.fieldsByCollection.values()].find(\n (field): field is ScalarWhereField => field.type === 'scalar',\n )\n\n if (!queryValueContext) {\n return { type: 'invalid', pathPlan }\n }\n\n return {\n type: 'scalar',\n column: fieldContext\n ? fieldContext.isLocalized\n ? adapter.tables[`${getTableName(table)}${adapter.localesSuffix}`][pathPlan.columnPath]\n : table[pathPlan.columnPath]\n : sql`null`,\n fieldContext,\n pathPlan,\n queryValueContext,\n }\n}\n\nconst getHasManySelectExpression = ({\n adapter,\n collection,\n pathPlan,\n table,\n}: {\n adapter: DrizzleAdapter\n collection: string\n pathPlan: WherePathPlan\n table: GenericTable\n}): string => {\n if (pathPlan.fieldsByCollection.get(collection)?.type !== 'hasManySelect') {\n return adapter.name === 'postgres' ? `'[]'::jsonb` : `'[]'`\n }\n\n const selectTablePath = pathPlan.schemaPath\n .split('.')\n .map((pathSegment) => toSnakeCase(pathSegment))\n .join('_')\n const valuesTableName = adapter.tableNameMap.get(`${toSnakeCase(collection)}_${selectTablePath}`)\n\n if (!valuesTableName) {\n throw new Error(\n `Polymorphic join collection \"${collection}\" has no value table for \"${pathPlan.schemaPath}\"`,\n )\n }\n\n let qualifiedValuesTableName = valuesTableName\n let parentTableName = getTableName(table)\n\n if (adapter.schemaName) {\n qualifiedValuesTableName = `\"${adapter.schemaName}\".\"${valuesTableName}\"`\n parentTableName = `\"${adapter.schemaName}\".\"${parentTableName}\"`\n }\n\n if (adapter.name === 'postgres') {\n return `(select coalesce(jsonb_agg(${qualifiedValuesTableName}.value), '[]'::jsonb) from ${qualifiedValuesTableName} where ${qualifiedValuesTableName}.parent_id = ${parentTableName}.id)`\n }\n\n return `(select json_group_array(${qualifiedValuesTableName}.value) from ${qualifiedValuesTableName} where ${qualifiedValuesTableName}.parent_id = ${parentTableName}.id)`\n}\n"],"names":["and","getTableName","isNotNull","isNull","or","sql","QueryError","toSnakeCase","buildOperatorConstraint","sanitizeQueryValue","supportedJSONQueryOperators","Set","buildPolymorphicJoinWhere","adapter","collection","locale","table","where","wherePlan","constraints","key","includes","toUpperCase","Array","isArray","path","combine","nestedConstraints","map","nestedWhere","nestedCondition","push","resolvedPath","resolveWherePath","schemaPath","payloadOperator","Object","keys","originalOperator","value","type","has","sanitizedQueryValue","field","fieldContext","isUUID","operator","relationOrPath","val","columns","length","raw","jsonQueryOperator","createJSONQuery","column","jsonExpression","pathSegments","pathPlan","columnPath","queryValueContext","operators","resolvedOperator","buildColumnConstraint","constraintValue","notEqualsConstraint","nonNullValues","filter","item","inConstraint","nullAwareInConstraint","wordConstraints","split","word","wordCondition","get","name","fieldsByCollection","values","find","getHasManySelectExpression","collectionField","undefined","isLocalized","tables","localesSuffix","selectTablePath","pathSegment","join","valuesTableName","tableNameMap","Error","qualifiedValuesTableName","parentTableName","schemaName"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type FlattenedField, type Where } from 'payload';
2
+ import type { DrizzleAdapter } from '../types.js';
3
+ export type ScalarWhereField = {
4
+ field: FlattenedField;
5
+ isLocalized?: boolean;
6
+ isUUID: boolean;
7
+ type: 'scalar';
8
+ };
9
+ type CollectionWhereField = {
10
+ field: FlattenedField;
11
+ type: 'hasManySelect';
12
+ } | ScalarWhereField;
13
+ export type WherePathPlan = {
14
+ columnPath: string;
15
+ fieldsByCollection: Map<string, CollectionWhereField>;
16
+ schemaPath: string;
17
+ type: 'hasManySelect' | 'invalid' | 'scalar';
18
+ };
19
+ export type PolymorphicJoinWherePlan = Map<string, WherePathPlan>;
20
+ /**
21
+ * Analyzes every leaf path in a polymorphic join where clause before SQL is built. Each plan entry
22
+ * records the flattened column path, the compatible field shape for each target collection, and
23
+ * whether the path uses a scalar column or a has-many select value table. A field may be absent
24
+ * from some target collections; those branches compare against SQL NULL or an empty JSON array.
25
+ *
26
+ * Paths are marked as invalid when their storage shapes conflict, require separate-row
27
+ * traversal, have no matching field, lack a required column, or collide after path flattening.
28
+ *
29
+ * @returns A plan keyed by each unique schema path in `where`.
30
+ * @throws If a target collection or its mapped database table is not available in the adapter.
31
+ */
32
+ export declare const createPolymorphicJoinWherePlan: ({ adapter, collections, where, }: {
33
+ adapter: DrizzleAdapter;
34
+ collections: string[];
35
+ where: Where;
36
+ }) => PolymorphicJoinWherePlan;
37
+ export {};
38
+ //# sourceMappingURL=createPolymorphicJoinWherePlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPolymorphicJoinWherePlan.d.ts","sourceRoot":"","sources":["../../src/find/createPolymorphicJoinWherePlan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAkB,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAA;AAK/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,cAAc,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AAED,KAAK,oBAAoB,GAAG;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAAG,gBAAgB,CAAA;AAE/F,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IACrD,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAEjE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B,qCAIxC;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,KAAK,EAAE,KAAK,CAAA;CACb,KAAG,wBA0IH,CAAA"}
@@ -0,0 +1,200 @@
1
+ import { getFieldByPath } from 'payload';
2
+ import toSnakeCase from 'to-snake-case';
3
+ import { isUUIDType } from '../utilities/isUUIDType.js';
4
+ import { sanitizePathSegment } from '../utilities/sanitizePathSegment.js';
5
+ /**
6
+ * Analyzes every leaf path in a polymorphic join where clause before SQL is built. Each plan entry
7
+ * records the flattened column path, the compatible field shape for each target collection, and
8
+ * whether the path uses a scalar column or a has-many select value table. A field may be absent
9
+ * from some target collections; those branches compare against SQL NULL or an empty JSON array.
10
+ *
11
+ * Paths are marked as invalid when their storage shapes conflict, require separate-row
12
+ * traversal, have no matching field, lack a required column, or collide after path flattening.
13
+ *
14
+ * @returns A plan keyed by each unique schema path in `where`.
15
+ * @throws If a target collection or its mapped database table is not available in the adapter.
16
+ */ export const createPolymorphicJoinWherePlan = ({ adapter, collections, where })=>{
17
+ const collectionContexts = collections.map((collection)=>{
18
+ const collectionConfig = adapter.payload.collections[collection]?.config;
19
+ if (!collectionConfig) {
20
+ throw new Error(`Unknown polymorphic join collection "${collection}"`);
21
+ }
22
+ const tableName = adapter.tableNameMap.get(toSnakeCase(collection));
23
+ const table = tableName ? adapter.tables[tableName] : undefined;
24
+ if (!table) {
25
+ throw new Error(`Polymorphic join collection "${collection}" has no database table`);
26
+ }
27
+ return {
28
+ collection,
29
+ collectionConfig,
30
+ table,
31
+ tableName
32
+ };
33
+ });
34
+ const schemaPathsByColumnPath = new Map();
35
+ const schemaPaths = new Set(getWhereSchemaPaths(where));
36
+ for (const schemaPath of schemaPaths){
37
+ const columnPath = getColumnPath(schemaPath);
38
+ const paths = schemaPathsByColumnPath.get(columnPath) ?? new Set();
39
+ paths.add(schemaPath);
40
+ schemaPathsByColumnPath.set(columnPath, paths);
41
+ }
42
+ const plan = new Map();
43
+ for (const schemaPath of schemaPaths){
44
+ const columnPath = getColumnPath(schemaPath);
45
+ const fieldsByCollection = new Map();
46
+ let isFieldPresent = schemaPath === 'id' || schemaPath === 'relationTo';
47
+ let hasManySelect = false;
48
+ let hasUnsupportedFieldShape = false;
49
+ const scalarQueryValueSignatures = new Set();
50
+ for (const { collection, collectionConfig, table, tableName } of collectionContexts){
51
+ const fieldAtPath = getFieldByPath({
52
+ fields: collectionConfig.flattenedFields,
53
+ path: schemaPath
54
+ });
55
+ if (schemaPath === 'id') {
56
+ const idColumn = table['id'];
57
+ if (!idColumn) {
58
+ hasUnsupportedFieldShape = true;
59
+ } else {
60
+ scalarQueryValueSignatures.add(`id:${idColumn.getSQLType()}`);
61
+ fieldsByCollection.set(collection, {
62
+ type: 'scalar',
63
+ field: fieldAtPath?.field ?? {
64
+ name: 'id',
65
+ type: isUUIDType(adapter.idType) ? 'text' : 'number'
66
+ },
67
+ isUUID: !fieldAtPath && isUUIDType(adapter.idType)
68
+ });
69
+ }
70
+ continue;
71
+ }
72
+ if (!fieldAtPath) {
73
+ if (pathHasUnsupportedNestedContainer({
74
+ fields: collectionConfig.flattenedFields,
75
+ path: schemaPath
76
+ })) {
77
+ hasUnsupportedFieldShape = true;
78
+ }
79
+ continue;
80
+ }
81
+ isFieldPresent = true;
82
+ if (pathHasSeparateRows({
83
+ fields: collectionConfig.flattenedFields,
84
+ path: schemaPath
85
+ })) {
86
+ hasUnsupportedFieldShape = true;
87
+ continue;
88
+ }
89
+ if (fieldAtPath.field.type === 'select' && fieldAtPath.field.hasMany) {
90
+ if (fieldAtPath.pathHasLocalized) {
91
+ hasUnsupportedFieldShape = true;
92
+ continue;
93
+ }
94
+ hasManySelect = true;
95
+ fieldsByCollection.set(collection, {
96
+ type: 'hasManySelect',
97
+ field: fieldAtPath.field
98
+ });
99
+ continue;
100
+ }
101
+ const fieldTable = fieldAtPath.pathHasLocalized ? adapter.tables[`${tableName}${adapter.localesSuffix}`] : table;
102
+ const fieldColumn = fieldTable?.[columnPath];
103
+ if (!fieldColumn) {
104
+ hasUnsupportedFieldShape = true;
105
+ continue;
106
+ }
107
+ fieldsByCollection.set(collection, {
108
+ type: 'scalar',
109
+ field: fieldAtPath.field,
110
+ ...fieldAtPath.pathHasLocalized && {
111
+ isLocalized: true
112
+ },
113
+ isUUID: fieldColumn.columnType === 'PgUUID'
114
+ });
115
+ scalarQueryValueSignatures.add(getScalarQueryValueSignature({
116
+ column: fieldColumn,
117
+ field: fieldAtPath.field
118
+ }));
119
+ }
120
+ const hasColumnPathCollision = (schemaPathsByColumnPath.get(columnPath)?.size ?? 0) > 1;
121
+ const isInvalid = hasColumnPathCollision || !isFieldPresent || hasUnsupportedFieldShape || hasManySelect && scalarQueryValueSignatures.size > 0 || scalarQueryValueSignatures.size > 1;
122
+ plan.set(schemaPath, {
123
+ type: isInvalid ? 'invalid' : hasManySelect ? 'hasManySelect' : 'scalar',
124
+ columnPath,
125
+ fieldsByCollection,
126
+ schemaPath
127
+ });
128
+ }
129
+ return plan;
130
+ };
131
+ const textQueryFieldTypes = new Set([
132
+ 'code',
133
+ 'email',
134
+ 'slug',
135
+ 'text',
136
+ 'textarea'
137
+ ]);
138
+ const getScalarQueryValueSignature = ({ column, field })=>{
139
+ if (field.type === 'select' || field.type === 'radio') {
140
+ const optionValues = field.options.map((option)=>typeof option === 'string' ? option : option.value);
141
+ return `${field.type}:${JSON.stringify(optionValues)}`;
142
+ }
143
+ if (textQueryFieldTypes.has(field.type)) {
144
+ return 'text';
145
+ }
146
+ return `${field.type}:${column.getSQLType()}`;
147
+ };
148
+ const getWhereSchemaPaths = (where)=>{
149
+ const paths = [];
150
+ for(const key in where){
151
+ if ([
152
+ 'AND',
153
+ 'OR'
154
+ ].includes(key.toUpperCase())) {
155
+ if (Array.isArray(where[key])) {
156
+ for (const nestedWhere of where[key]){
157
+ paths.push(...getWhereSchemaPaths(nestedWhere));
158
+ }
159
+ }
160
+ } else {
161
+ paths.push(key);
162
+ }
163
+ }
164
+ return paths;
165
+ };
166
+ const getColumnPath = (schemaPath)=>schemaPath.split('.').map((segment)=>sanitizePathSegment(segment)).join('_');
167
+ const pathHasSeparateRows = ({ fields, path })=>{
168
+ const pathSegments = path.split('.');
169
+ for(let segmentIndex = 1; segmentIndex < pathSegments.length; segmentIndex++){
170
+ const fieldAtParentPath = getFieldByPath({
171
+ fields,
172
+ path: pathSegments.slice(0, segmentIndex).join('.')
173
+ });
174
+ if (fieldAtParentPath?.field.type === 'array' || fieldAtParentPath?.field.type === 'blocks') {
175
+ return true;
176
+ }
177
+ }
178
+ return false;
179
+ };
180
+ const pathHasUnsupportedNestedContainer = ({ fields, path })=>{
181
+ const pathSegments = path.split('.');
182
+ for(let segmentIndex = 1; segmentIndex < pathSegments.length; segmentIndex++){
183
+ const fieldAtParentPath = getFieldByPath({
184
+ fields,
185
+ path: pathSegments.slice(0, segmentIndex).join('.')
186
+ });
187
+ if (!fieldAtParentPath) {
188
+ return false;
189
+ }
190
+ if (![
191
+ 'group',
192
+ 'tab'
193
+ ].includes(fieldAtParentPath.field.type)) {
194
+ return true;
195
+ }
196
+ }
197
+ return false;
198
+ };
199
+
200
+ //# sourceMappingURL=createPolymorphicJoinWherePlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/find/createPolymorphicJoinWherePlan.ts"],"sourcesContent":["import type { Column } from 'drizzle-orm'\n\nimport { type FlattenedField, getFieldByPath, type Where } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, GenericTable } from '../types.js'\n\nimport { isUUIDType } from '../utilities/isUUIDType.js'\nimport { sanitizePathSegment } from '../utilities/sanitizePathSegment.js'\n\nexport type ScalarWhereField = {\n field: FlattenedField\n isLocalized?: boolean\n isUUID: boolean\n type: 'scalar'\n}\n\ntype CollectionWhereField = { field: FlattenedField; type: 'hasManySelect' } | ScalarWhereField\n\nexport type WherePathPlan = {\n columnPath: string\n fieldsByCollection: Map<string, CollectionWhereField>\n schemaPath: string\n type: 'hasManySelect' | 'invalid' | 'scalar'\n}\n\nexport type PolymorphicJoinWherePlan = Map<string, WherePathPlan>\n\n/**\n * Analyzes every leaf path in a polymorphic join where clause before SQL is built. Each plan entry\n * records the flattened column path, the compatible field shape for each target collection, and\n * whether the path uses a scalar column or a has-many select value table. A field may be absent\n * from some target collections; those branches compare against SQL NULL or an empty JSON array.\n *\n * Paths are marked as invalid when their storage shapes conflict, require separate-row\n * traversal, have no matching field, lack a required column, or collide after path flattening.\n *\n * @returns A plan keyed by each unique schema path in `where`.\n * @throws If a target collection or its mapped database table is not available in the adapter.\n */\nexport const createPolymorphicJoinWherePlan = ({\n adapter,\n collections,\n where,\n}: {\n adapter: DrizzleAdapter\n collections: string[]\n where: Where\n}): PolymorphicJoinWherePlan => {\n const collectionContexts = collections.map((collection) => {\n const collectionConfig = adapter.payload.collections[collection]?.config\n\n if (!collectionConfig) {\n throw new Error(`Unknown polymorphic join collection \"${collection}\"`)\n }\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(collection))\n const table = tableName ? (adapter.tables[tableName] as GenericTable | undefined) : undefined\n\n if (!table) {\n throw new Error(`Polymorphic join collection \"${collection}\" has no database table`)\n }\n\n return { collection, collectionConfig, table, tableName }\n })\n const schemaPathsByColumnPath = new Map<string, Set<string>>()\n const schemaPaths = new Set(getWhereSchemaPaths(where))\n\n for (const schemaPath of schemaPaths) {\n const columnPath = getColumnPath(schemaPath)\n const paths = schemaPathsByColumnPath.get(columnPath) ?? new Set<string>()\n\n paths.add(schemaPath)\n schemaPathsByColumnPath.set(columnPath, paths)\n }\n\n const plan: PolymorphicJoinWherePlan = new Map()\n\n for (const schemaPath of schemaPaths) {\n const columnPath = getColumnPath(schemaPath)\n const fieldsByCollection = new Map<string, CollectionWhereField>()\n let isFieldPresent = schemaPath === 'id' || schemaPath === 'relationTo'\n let hasManySelect = false\n let hasUnsupportedFieldShape = false\n const scalarQueryValueSignatures = new Set<string>()\n\n for (const { collection, collectionConfig, table, tableName } of collectionContexts) {\n const fieldAtPath = getFieldByPath({\n fields: collectionConfig.flattenedFields,\n path: schemaPath,\n })\n\n if (schemaPath === 'id') {\n const idColumn = table['id'] as Column | undefined\n\n if (!idColumn) {\n hasUnsupportedFieldShape = true\n } else {\n scalarQueryValueSignatures.add(`id:${idColumn.getSQLType()}`)\n fieldsByCollection.set(collection, {\n type: 'scalar',\n field:\n fieldAtPath?.field ??\n ({\n name: 'id',\n type: isUUIDType(adapter.idType) ? 'text' : 'number',\n } as FlattenedField),\n isUUID: !fieldAtPath && isUUIDType(adapter.idType),\n })\n }\n\n continue\n }\n\n if (!fieldAtPath) {\n if (\n pathHasUnsupportedNestedContainer({\n fields: collectionConfig.flattenedFields,\n path: schemaPath,\n })\n ) {\n hasUnsupportedFieldShape = true\n }\n\n continue\n }\n\n isFieldPresent = true\n\n if (pathHasSeparateRows({ fields: collectionConfig.flattenedFields, path: schemaPath })) {\n hasUnsupportedFieldShape = true\n continue\n }\n\n if (fieldAtPath.field.type === 'select' && fieldAtPath.field.hasMany) {\n if (fieldAtPath.pathHasLocalized) {\n hasUnsupportedFieldShape = true\n continue\n }\n\n hasManySelect = true\n fieldsByCollection.set(collection, {\n type: 'hasManySelect',\n field: fieldAtPath.field,\n })\n continue\n }\n\n const fieldTable = fieldAtPath.pathHasLocalized\n ? adapter.tables[`${tableName}${adapter.localesSuffix}`]\n : table\n const fieldColumn = fieldTable?.[columnPath] as Column | undefined\n\n if (!fieldColumn) {\n hasUnsupportedFieldShape = true\n continue\n }\n\n fieldsByCollection.set(collection, {\n type: 'scalar',\n field: fieldAtPath.field,\n ...(fieldAtPath.pathHasLocalized && { isLocalized: true }),\n isUUID: fieldColumn.columnType === 'PgUUID',\n })\n scalarQueryValueSignatures.add(\n getScalarQueryValueSignature({ column: fieldColumn, field: fieldAtPath.field }),\n )\n }\n\n const hasColumnPathCollision = (schemaPathsByColumnPath.get(columnPath)?.size ?? 0) > 1\n const isInvalid =\n hasColumnPathCollision ||\n !isFieldPresent ||\n hasUnsupportedFieldShape ||\n (hasManySelect && scalarQueryValueSignatures.size > 0) ||\n scalarQueryValueSignatures.size > 1\n\n plan.set(schemaPath, {\n type: isInvalid ? 'invalid' : hasManySelect ? 'hasManySelect' : 'scalar',\n columnPath,\n fieldsByCollection,\n schemaPath,\n })\n }\n\n return plan\n}\n\nconst textQueryFieldTypes = new Set<FlattenedField['type']>([\n 'code',\n 'email',\n 'slug',\n 'text',\n 'textarea',\n])\n\nconst getScalarQueryValueSignature = ({\n column,\n field,\n}: {\n column: Column\n field: FlattenedField\n}): string => {\n if (field.type === 'select' || field.type === 'radio') {\n const optionValues = field.options.map((option) =>\n typeof option === 'string' ? option : option.value,\n )\n\n return `${field.type}:${JSON.stringify(optionValues)}`\n }\n\n if (textQueryFieldTypes.has(field.type)) {\n return 'text'\n }\n\n return `${field.type}:${column.getSQLType()}`\n}\n\nconst getWhereSchemaPaths = (where: Where): string[] => {\n const paths: string[] = []\n\n for (const key in where) {\n if (['AND', 'OR'].includes(key.toUpperCase())) {\n if (Array.isArray(where[key])) {\n for (const nestedWhere of where[key]) {\n paths.push(...getWhereSchemaPaths(nestedWhere))\n }\n }\n } else {\n paths.push(key)\n }\n }\n\n return paths\n}\n\nconst getColumnPath = (schemaPath: string): string =>\n schemaPath\n .split('.')\n .map((segment) => sanitizePathSegment(segment))\n .join('_')\n\nconst pathHasSeparateRows = ({ fields, path }: { fields: FlattenedField[]; path: string }) => {\n const pathSegments = path.split('.')\n\n for (let segmentIndex = 1; segmentIndex < pathSegments.length; segmentIndex++) {\n const fieldAtParentPath = getFieldByPath({\n fields,\n path: pathSegments.slice(0, segmentIndex).join('.'),\n })\n\n if (fieldAtParentPath?.field.type === 'array' || fieldAtParentPath?.field.type === 'blocks') {\n return true\n }\n }\n\n return false\n}\n\nconst pathHasUnsupportedNestedContainer = ({\n fields,\n path,\n}: {\n fields: FlattenedField[]\n path: string\n}) => {\n const pathSegments = path.split('.')\n\n for (let segmentIndex = 1; segmentIndex < pathSegments.length; segmentIndex++) {\n const fieldAtParentPath = getFieldByPath({\n fields,\n path: pathSegments.slice(0, segmentIndex).join('.'),\n })\n\n if (!fieldAtParentPath) {\n return false\n }\n\n if (!['group', 'tab'].includes(fieldAtParentPath.field.type)) {\n return true\n }\n }\n\n return false\n}\n"],"names":["getFieldByPath","toSnakeCase","isUUIDType","sanitizePathSegment","createPolymorphicJoinWherePlan","adapter","collections","where","collectionContexts","map","collection","collectionConfig","payload","config","Error","tableName","tableNameMap","get","table","tables","undefined","schemaPathsByColumnPath","Map","schemaPaths","Set","getWhereSchemaPaths","schemaPath","columnPath","getColumnPath","paths","add","set","plan","fieldsByCollection","isFieldPresent","hasManySelect","hasUnsupportedFieldShape","scalarQueryValueSignatures","fieldAtPath","fields","flattenedFields","path","idColumn","getSQLType","type","field","name","idType","isUUID","pathHasUnsupportedNestedContainer","pathHasSeparateRows","hasMany","pathHasLocalized","fieldTable","localesSuffix","fieldColumn","isLocalized","columnType","getScalarQueryValueSignature","column","hasColumnPathCollision","size","isInvalid","textQueryFieldTypes","optionValues","options","option","value","JSON","stringify","has","key","includes","toUpperCase","Array","isArray","nestedWhere","push","split","segment","join","pathSegments","segmentIndex","length","fieldAtParentPath","slice"],"mappings":"AAEA,SAA8BA,cAAc,QAAoB,UAAS;AACzE,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,UAAU,QAAQ,6BAA4B;AACvD,SAASC,mBAAmB,QAAQ,sCAAqC;AAoBzE;;;;;;;;;;;CAWC,GACD,OAAO,MAAMC,iCAAiC,CAAC,EAC7CC,OAAO,EACPC,WAAW,EACXC,KAAK,EAKN;IACC,MAAMC,qBAAqBF,YAAYG,GAAG,CAAC,CAACC;QAC1C,MAAMC,mBAAmBN,QAAQO,OAAO,CAACN,WAAW,CAACI,WAAW,EAAEG;QAElE,IAAI,CAACF,kBAAkB;YACrB,MAAM,IAAIG,MAAM,CAAC,qCAAqC,EAAEJ,WAAW,CAAC,CAAC;QACvE;QAEA,MAAMK,YAAYV,QAAQW,YAAY,CAACC,GAAG,CAAChB,YAAYS;QACvD,MAAMQ,QAAQH,YAAaV,QAAQc,MAAM,CAACJ,UAAU,GAAgCK;QAEpF,IAAI,CAACF,OAAO;YACV,MAAM,IAAIJ,MAAM,CAAC,6BAA6B,EAAEJ,WAAW,uBAAuB,CAAC;QACrF;QAEA,OAAO;YAAEA;YAAYC;YAAkBO;YAAOH;QAAU;IAC1D;IACA,MAAMM,0BAA0B,IAAIC;IACpC,MAAMC,cAAc,IAAIC,IAAIC,oBAAoBlB;IAEhD,KAAK,MAAMmB,cAAcH,YAAa;QACpC,MAAMI,aAAaC,cAAcF;QACjC,MAAMG,QAAQR,wBAAwBJ,GAAG,CAACU,eAAe,IAAIH;QAE7DK,MAAMC,GAAG,CAACJ;QACVL,wBAAwBU,GAAG,CAACJ,YAAYE;IAC1C;IAEA,MAAMG,OAAiC,IAAIV;IAE3C,KAAK,MAAMI,cAAcH,YAAa;QACpC,MAAMI,aAAaC,cAAcF;QACjC,MAAMO,qBAAqB,IAAIX;QAC/B,IAAIY,iBAAiBR,eAAe,QAAQA,eAAe;QAC3D,IAAIS,gBAAgB;QACpB,IAAIC,2BAA2B;QAC/B,MAAMC,6BAA6B,IAAIb;QAEvC,KAAK,MAAM,EAAEd,UAAU,EAAEC,gBAAgB,EAAEO,KAAK,EAAEH,SAAS,EAAE,IAAIP,mBAAoB;YACnF,MAAM8B,cAActC,eAAe;gBACjCuC,QAAQ5B,iBAAiB6B,eAAe;gBACxCC,MAAMf;YACR;YAEA,IAAIA,eAAe,MAAM;gBACvB,MAAMgB,WAAWxB,KAAK,CAAC,KAAK;gBAE5B,IAAI,CAACwB,UAAU;oBACbN,2BAA2B;gBAC7B,OAAO;oBACLC,2BAA2BP,GAAG,CAAC,CAAC,GAAG,EAAEY,SAASC,UAAU,IAAI;oBAC5DV,mBAAmBF,GAAG,CAACrB,YAAY;wBACjCkC,MAAM;wBACNC,OACEP,aAAaO,SACZ;4BACCC,MAAM;4BACNF,MAAM1C,WAAWG,QAAQ0C,MAAM,IAAI,SAAS;wBAC9C;wBACFC,QAAQ,CAACV,eAAepC,WAAWG,QAAQ0C,MAAM;oBACnD;gBACF;gBAEA;YACF;YAEA,IAAI,CAACT,aAAa;gBAChB,IACEW,kCAAkC;oBAChCV,QAAQ5B,iBAAiB6B,eAAe;oBACxCC,MAAMf;gBACR,IACA;oBACAU,2BAA2B;gBAC7B;gBAEA;YACF;YAEAF,iBAAiB;YAEjB,IAAIgB,oBAAoB;gBAAEX,QAAQ5B,iBAAiB6B,eAAe;gBAAEC,MAAMf;YAAW,IAAI;gBACvFU,2BAA2B;gBAC3B;YACF;YAEA,IAAIE,YAAYO,KAAK,CAACD,IAAI,KAAK,YAAYN,YAAYO,KAAK,CAACM,OAAO,EAAE;gBACpE,IAAIb,YAAYc,gBAAgB,EAAE;oBAChChB,2BAA2B;oBAC3B;gBACF;gBAEAD,gBAAgB;gBAChBF,mBAAmBF,GAAG,CAACrB,YAAY;oBACjCkC,MAAM;oBACNC,OAAOP,YAAYO,KAAK;gBAC1B;gBACA;YACF;YAEA,MAAMQ,aAAaf,YAAYc,gBAAgB,GAC3C/C,QAAQc,MAAM,CAAC,GAAGJ,YAAYV,QAAQiD,aAAa,EAAE,CAAC,GACtDpC;YACJ,MAAMqC,cAAcF,YAAY,CAAC1B,WAAW;YAE5C,IAAI,CAAC4B,aAAa;gBAChBnB,2BAA2B;gBAC3B;YACF;YAEAH,mBAAmBF,GAAG,CAACrB,YAAY;gBACjCkC,MAAM;gBACNC,OAAOP,YAAYO,KAAK;gBACxB,GAAIP,YAAYc,gBAAgB,IAAI;oBAAEI,aAAa;gBAAK,CAAC;gBACzDR,QAAQO,YAAYE,UAAU,KAAK;YACrC;YACApB,2BAA2BP,GAAG,CAC5B4B,6BAA6B;gBAAEC,QAAQJ;gBAAaV,OAAOP,YAAYO,KAAK;YAAC;QAEjF;QAEA,MAAMe,yBAAyB,AAACvC,CAAAA,wBAAwBJ,GAAG,CAACU,aAAakC,QAAQ,CAAA,IAAK;QACtF,MAAMC,YACJF,0BACA,CAAC1B,kBACDE,4BACCD,iBAAiBE,2BAA2BwB,IAAI,GAAG,KACpDxB,2BAA2BwB,IAAI,GAAG;QAEpC7B,KAAKD,GAAG,CAACL,YAAY;YACnBkB,MAAMkB,YAAY,YAAY3B,gBAAgB,kBAAkB;YAChER;YACAM;YACAP;QACF;IACF;IAEA,OAAOM;AACT,EAAC;AAED,MAAM+B,sBAAsB,IAAIvC,IAA4B;IAC1D;IACA;IACA;IACA;IACA;CACD;AAED,MAAMkC,+BAA+B,CAAC,EACpCC,MAAM,EACNd,KAAK,EAIN;IACC,IAAIA,MAAMD,IAAI,KAAK,YAAYC,MAAMD,IAAI,KAAK,SAAS;QACrD,MAAMoB,eAAenB,MAAMoB,OAAO,CAACxD,GAAG,CAAC,CAACyD,SACtC,OAAOA,WAAW,WAAWA,SAASA,OAAOC,KAAK;QAGpD,OAAO,GAAGtB,MAAMD,IAAI,CAAC,CAAC,EAAEwB,KAAKC,SAAS,CAACL,eAAe;IACxD;IAEA,IAAID,oBAAoBO,GAAG,CAACzB,MAAMD,IAAI,GAAG;QACvC,OAAO;IACT;IAEA,OAAO,GAAGC,MAAMD,IAAI,CAAC,CAAC,EAAEe,OAAOhB,UAAU,IAAI;AAC/C;AAEA,MAAMlB,sBAAsB,CAAClB;IAC3B,MAAMsB,QAAkB,EAAE;IAE1B,IAAK,MAAM0C,OAAOhE,MAAO;QACvB,IAAI;YAAC;YAAO;SAAK,CAACiE,QAAQ,CAACD,IAAIE,WAAW,KAAK;YAC7C,IAAIC,MAAMC,OAAO,CAACpE,KAAK,CAACgE,IAAI,GAAG;gBAC7B,KAAK,MAAMK,eAAerE,KAAK,CAACgE,IAAI,CAAE;oBACpC1C,MAAMgD,IAAI,IAAIpD,oBAAoBmD;gBACpC;YACF;QACF,OAAO;YACL/C,MAAMgD,IAAI,CAACN;QACb;IACF;IAEA,OAAO1C;AACT;AAEA,MAAMD,gBAAgB,CAACF,aACrBA,WACGoD,KAAK,CAAC,KACNrE,GAAG,CAAC,CAACsE,UAAY5E,oBAAoB4E,UACrCC,IAAI,CAAC;AAEV,MAAM9B,sBAAsB,CAAC,EAAEX,MAAM,EAAEE,IAAI,EAA8C;IACvF,MAAMwC,eAAexC,KAAKqC,KAAK,CAAC;IAEhC,IAAK,IAAII,eAAe,GAAGA,eAAeD,aAAaE,MAAM,EAAED,eAAgB;QAC7E,MAAME,oBAAoBpF,eAAe;YACvCuC;YACAE,MAAMwC,aAAaI,KAAK,CAAC,GAAGH,cAAcF,IAAI,CAAC;QACjD;QAEA,IAAII,mBAAmBvC,MAAMD,SAAS,WAAWwC,mBAAmBvC,MAAMD,SAAS,UAAU;YAC3F,OAAO;QACT;IACF;IAEA,OAAO;AACT;AAEA,MAAMK,oCAAoC,CAAC,EACzCV,MAAM,EACNE,IAAI,EAIL;IACC,MAAMwC,eAAexC,KAAKqC,KAAK,CAAC;IAEhC,IAAK,IAAII,eAAe,GAAGA,eAAeD,aAAaE,MAAM,EAAED,eAAgB;QAC7E,MAAME,oBAAoBpF,eAAe;YACvCuC;YACAE,MAAMwC,aAAaI,KAAK,CAAC,GAAGH,cAAcF,IAAI,CAAC;QACjD;QAEA,IAAI,CAACI,mBAAmB;YACtB,OAAO;QACT;QAEA,IAAI,CAAC;YAAC;YAAS;SAAM,CAACZ,QAAQ,CAACY,kBAAkBvC,KAAK,CAACD,IAAI,GAAG;YAC5D,OAAO;QACT;IACF;IAEA,OAAO;AACT"}
@@ -2,12 +2,17 @@ import type { FindArgs, FlattenedField } from 'payload';
2
2
  import type { DrizzleAdapter } from '../types.js';
3
3
  type Args = {
4
4
  adapter: DrizzleAdapter;
5
+ branchVisibility?: {
6
+ branch: string;
7
+ collectionSlug: string;
8
+ mode?: 'documents' | 'history';
9
+ };
5
10
  collectionSlug?: string;
6
11
  fields: FlattenedField[];
7
12
  tableName: string;
8
13
  versions?: boolean;
9
14
  } & Omit<FindArgs, 'collection'>;
10
- export declare const findMany: ({ adapter, collectionSlug, draftsEnabled, fields, joins: joinQuery, limit: limitArg, locale, page, pagination, req, select, sort, tableName, versions, where: whereArg, }: Args) => Promise<{
15
+ export declare const findMany: ({ adapter, branchVisibility, collectionSlug, draftsEnabled, fields, joins: joinQuery, limit: limitArg, locale, page, pagination, req, select, sort, tableName, versions, where: whereArg, }: Args) => Promise<{
11
16
  docs: any;
12
17
  hasNextPage: boolean;
13
18
  hasPrevPage: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../src/find/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AASjD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEhC,eAAO,MAAM,QAAQ,8KAgBlB,IAAI;;;;;;;;;;;EAwMN,CAAA"}
1
+ {"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../src/find/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAInE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAUjD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,gBAAgB,CAAC,EAAE;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,cAAc,EAAE,MAAM,CAAA;QACtB,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;KAC/B,CAAA;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEhC,eAAO,MAAM,QAAQ,gMAiBlB,IAAI;;;;;;;;;;;EA6NN,CAAA"}
@@ -1,11 +1,12 @@
1
- import { asc, desc, inArray, max, min } from 'drizzle-orm';
1
+ import { and, asc, desc, inArray, max, min, sql } from 'drizzle-orm';
2
+ import { buildBranchVisibility } from '../queries/buildBranchVisibility.js';
2
3
  import { buildQuery } from '../queries/buildQuery.js';
3
4
  import { selectDistinct } from '../queries/selectDistinct.js';
4
5
  import { transform } from '../transform/read/index.js';
5
6
  import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js';
6
7
  import { getTransaction } from '../utilities/getTransaction.js';
7
8
  import { buildFindManyArgs } from './buildFindManyArgs.js';
8
- export const findMany = async function find({ adapter, collectionSlug, draftsEnabled, fields, joins: joinQuery, limit: limitArg, locale, page = 1, pagination, req, select, sort, tableName, versions, where: whereArg }) {
9
+ export const findMany = async function find({ adapter, branchVisibility, collectionSlug, draftsEnabled, fields, joins: joinQuery, limit: limitArg, locale, page = 1, pagination, req, select, sort, tableName, versions, where: whereArg }) {
9
10
  let limit = limitArg;
10
11
  let totalDocs;
11
12
  let totalPages;
@@ -17,14 +18,25 @@ export const findMany = async function find({ adapter, collectionSlug, draftsEna
17
18
  pagination = false;
18
19
  limit = undefined;
19
20
  }
20
- const { joins, orderBy, selectFields, where } = buildQuery({
21
+ const { joins, orderBy, selectFields, where: queryWhere } = buildQuery({
21
22
  adapter,
22
23
  fields,
23
24
  locale,
25
+ req,
24
26
  sort,
25
27
  tableName,
26
28
  where: whereArg
27
29
  });
30
+ const table = adapter.tables[tableName];
31
+ const branchVisibilityWhere = branchVisibility ? buildBranchVisibility({
32
+ adapter,
33
+ branch: branchVisibility.branch,
34
+ canonicalIDExpression: versions ? sql`COALESCE(${table._branchParent}, ${table.parent})` : undefined,
35
+ collectionSlug: branchVisibility.collectionSlug,
36
+ mode: branchVisibility.mode,
37
+ table
38
+ }) : undefined;
39
+ const where = branchVisibilityWhere ? and(queryWhere, branchVisibilityWhere) : queryWhere;
28
40
  const orderedIDMap = {};
29
41
  let orderedIDs;
30
42
  const findManyArgs = buildFindManyArgs({
@@ -36,6 +48,7 @@ export const findMany = async function find({ adapter, collectionSlug, draftsEna
36
48
  joinQuery,
37
49
  joins,
38
50
  locale,
51
+ req,
39
52
  select,
40
53
  tableName,
41
54
  versions
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { asc, desc, inArray, max, min } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { buildQuery } from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n collectionSlug,\n draftsEnabled,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = (page - 1) * limit\n\n if (limit === 0) {\n pagination = false\n limit = undefined\n }\n\n const { joins, orderBy, selectFields, where } = buildQuery({\n adapter,\n fields,\n locale,\n sort,\n tableName,\n where: whereArg,\n })\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n select,\n tableName,\n versions,\n })\n\n if (orderBy) {\n for (const key in selectFields) {\n const column = selectFields[key]\n if (!column || column.primary) {\n continue\n }\n\n if (\n !orderBy.some(\n (col) =>\n col.column.name === column.name &&\n getNameFromDrizzleTable(col.column.table) === getNameFromDrizzleTable(column.table),\n )\n ) {\n delete selectFields[key]\n }\n }\n }\n\n const db = await getTransaction(adapter, req)\n\n const oneToManyJoinedTableNames = new Set(\n joins.filter((j) => j.isOneToMany).map((j) => getNameFromDrizzleTable(j.table)),\n )\n\n const hasSortOnOneToMany =\n oneToManyJoinedTableNames.size > 0 &&\n orderBy?.some(({ column }) =>\n oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table)),\n )\n\n let selectDistinctResult: { id: number | string }[] | undefined\n\n // avoid duplicate results by using a group query instead of select distinct when there is a sort on a one-to-many joined table\n if (hasSortOnOneToMany) {\n const mainTable = adapter.tables[tableName]\n let groupQuery = (db as any).select({ id: mainTable.id }).from(mainTable).$dynamic()\n\n if (where) {\n groupQuery = groupQuery.where(where)\n }\n\n joins.forEach(({ type, condition, table }) => {\n groupQuery = groupQuery[type ?? 'leftJoin'](table, condition)\n })\n\n groupQuery = groupQuery.groupBy(mainTable.id)\n\n groupQuery = groupQuery.orderBy(() =>\n orderBy.map(({ column, order }) => {\n if (oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table))) {\n return order === asc ? asc(min(column)) : desc(max(column))\n }\n return order(column)\n }),\n )\n\n selectDistinctResult = await groupQuery.offset(offset).limit(limit)\n } else {\n selectDistinctResult = await selectDistinct({\n adapter,\n db,\n joins,\n query: ({ query }) => {\n if (orderBy) {\n query = query.orderBy(() => orderBy.map(({ column, order }) => order(column)))\n }\n return query.offset(offset).limit(limit)\n },\n selectFields,\n tableName,\n where,\n })\n }\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n tableName,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["asc","desc","inArray","max","min","buildQuery","selectDistinct","transform","getNameFromDrizzleTable","getTransaction","buildFindManyArgs","findMany","find","adapter","collectionSlug","draftsEnabled","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","sort","tableName","versions","where","whereArg","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","orderedIDMap","orderedIDs","findManyArgs","depth","key","column","primary","some","col","name","table","db","oneToManyJoinedTableNames","Set","filter","j","isOneToMany","map","hasSortOnOneToMany","size","has","selectDistinctResult","mainTable","tables","groupQuery","id","from","$dynamic","forEach","type","condition","groupBy","order","query","length","docs","nextPage","prevPage","i","Object","keys","findPromise","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/find/findMany.ts"],"sourcesContent":["import type { FindArgs, FlattenedField, TypeWithID } from 'payload'\n\nimport { and, asc, desc, inArray, max, min, sql } from 'drizzle-orm'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { buildBranchVisibility } from '../queries/buildBranchVisibility.js'\nimport { buildQuery } from '../queries/buildQuery.js'\nimport { selectDistinct } from '../queries/selectDistinct.js'\nimport { transform } from '../transform/read/index.js'\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\nimport { getTransaction } from '../utilities/getTransaction.js'\nimport { buildFindManyArgs } from './buildFindManyArgs.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n branchVisibility?: {\n branch: string\n collectionSlug: string\n mode?: 'documents' | 'history'\n }\n collectionSlug?: string\n fields: FlattenedField[]\n tableName: string\n versions?: boolean\n} & Omit<FindArgs, 'collection'>\n\nexport const findMany = async function find({\n adapter,\n branchVisibility,\n collectionSlug,\n draftsEnabled,\n fields,\n joins: joinQuery,\n limit: limitArg,\n locale,\n page = 1,\n pagination,\n req,\n select,\n sort,\n tableName,\n versions,\n where: whereArg,\n}: Args) {\n let limit = limitArg\n let totalDocs: number\n let totalPages: number\n let hasPrevPage: boolean\n let hasNextPage: boolean\n let pagingCounter: number\n const offset = (page - 1) * limit\n\n if (limit === 0) {\n pagination = false\n limit = undefined\n }\n\n const {\n joins,\n orderBy,\n selectFields,\n where: queryWhere,\n } = buildQuery({\n adapter,\n fields,\n locale,\n req,\n sort,\n tableName,\n where: whereArg,\n })\n const table = adapter.tables[tableName]\n const branchVisibilityWhere = branchVisibility\n ? buildBranchVisibility({\n adapter,\n branch: branchVisibility.branch,\n canonicalIDExpression: versions\n ? sql`COALESCE(${table._branchParent}, ${table.parent})`\n : undefined,\n collectionSlug: branchVisibility.collectionSlug,\n mode: branchVisibility.mode,\n table,\n })\n : undefined\n const where = branchVisibilityWhere ? and(queryWhere, branchVisibilityWhere) : queryWhere\n\n const orderedIDMap: Record<number | string, number> = {}\n let orderedIDs: (number | string)[]\n\n const findManyArgs = buildFindManyArgs({\n adapter,\n collectionSlug,\n depth: 0,\n draftsEnabled,\n fields,\n joinQuery,\n joins,\n locale,\n req,\n select,\n tableName,\n versions,\n })\n\n if (orderBy) {\n for (const key in selectFields) {\n const column = selectFields[key]\n if (!column || column.primary) {\n continue\n }\n\n if (\n !orderBy.some(\n (col) =>\n col.column.name === column.name &&\n getNameFromDrizzleTable(col.column.table) === getNameFromDrizzleTable(column.table),\n )\n ) {\n delete selectFields[key]\n }\n }\n }\n\n const db = await getTransaction(adapter, req)\n\n const oneToManyJoinedTableNames = new Set(\n joins.filter((j) => j.isOneToMany).map((j) => getNameFromDrizzleTable(j.table)),\n )\n\n const hasSortOnOneToMany =\n oneToManyJoinedTableNames.size > 0 &&\n orderBy?.some(({ column }) =>\n oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table)),\n )\n\n let selectDistinctResult: { id: number | string }[] | undefined\n\n // avoid duplicate results by using a group query instead of select distinct when there is a sort on a one-to-many joined table\n if (hasSortOnOneToMany) {\n const mainTable = adapter.tables[tableName]\n let groupQuery = (db as any).select({ id: mainTable.id }).from(mainTable).$dynamic()\n\n if (where) {\n groupQuery = groupQuery.where(where)\n }\n\n joins.forEach(({ type, condition, table }) => {\n groupQuery = groupQuery[type ?? 'leftJoin'](table, condition)\n })\n\n groupQuery = groupQuery.groupBy(mainTable.id)\n\n groupQuery = groupQuery.orderBy(() =>\n orderBy.map(({ column, order }) => {\n if (oneToManyJoinedTableNames.has(getNameFromDrizzleTable(column.table))) {\n return order === asc ? asc(min(column)) : desc(max(column))\n }\n return order(column)\n }),\n )\n\n selectDistinctResult = await groupQuery.offset(offset).limit(limit)\n } else {\n selectDistinctResult = await selectDistinct({\n adapter,\n db,\n joins,\n query: ({ query }) => {\n if (orderBy) {\n query = query.orderBy(() => orderBy.map(({ column, order }) => order(column)))\n }\n return query.offset(offset).limit(limit)\n },\n selectFields,\n tableName,\n where,\n })\n }\n\n if (selectDistinctResult) {\n if (selectDistinctResult.length === 0) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 0,\n prevPage: null,\n totalDocs: 0,\n totalPages: 0,\n }\n } else {\n // set the id in an object for sorting later\n selectDistinctResult.forEach(({ id }, i) => {\n orderedIDMap[id] = i\n })\n orderedIDs = Object.keys(orderedIDMap)\n findManyArgs.where = inArray(adapter.tables[tableName].id, orderedIDs)\n }\n } else {\n findManyArgs.limit = limit\n findManyArgs.offset = offset\n findManyArgs.orderBy = () => orderBy.map(({ column, order }) => order(column))\n\n if (where) {\n findManyArgs.where = where\n }\n }\n\n const findPromise = db.query[tableName].findMany(findManyArgs)\n\n if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) {\n totalDocs = await adapter.countDistinct({\n db,\n joins,\n tableName,\n where,\n })\n\n totalPages = typeof limit === 'number' && limit !== 0 ? Math.ceil(totalDocs / limit) : 1\n hasPrevPage = page > 1\n hasNextPage = totalPages > page\n pagingCounter = (page - 1) * limit + 1\n }\n\n const rawDocs = await findPromise\n // sort rawDocs from selectQuery\n if (Object.keys(orderedIDMap).length > 0) {\n rawDocs.sort((a, b) => orderedIDMap[a.id] - orderedIDMap[b.id])\n }\n\n if (pagination === false || !totalDocs) {\n totalDocs = rawDocs.length\n totalPages = 1\n pagingCounter = 1\n hasPrevPage = false\n hasNextPage = false\n }\n\n const docs = rawDocs.map((data: TypeWithID) => {\n return transform({\n adapter,\n config: adapter.payload.config,\n data,\n fields,\n joinQuery,\n tableName,\n })\n })\n\n return {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: limitArg,\n nextPage: hasNextPage ? page + 1 : null,\n page,\n pagingCounter,\n prevPage: hasPrevPage ? page - 1 : null,\n totalDocs,\n totalPages,\n }\n}\n"],"names":["and","asc","desc","inArray","max","min","sql","buildBranchVisibility","buildQuery","selectDistinct","transform","getNameFromDrizzleTable","getTransaction","buildFindManyArgs","findMany","find","adapter","branchVisibility","collectionSlug","draftsEnabled","fields","joins","joinQuery","limit","limitArg","locale","page","pagination","req","select","sort","tableName","versions","where","whereArg","totalDocs","totalPages","hasPrevPage","hasNextPage","pagingCounter","offset","undefined","orderBy","selectFields","queryWhere","table","tables","branchVisibilityWhere","branch","canonicalIDExpression","_branchParent","parent","mode","orderedIDMap","orderedIDs","findManyArgs","depth","key","column","primary","some","col","name","db","oneToManyJoinedTableNames","Set","filter","j","isOneToMany","map","hasSortOnOneToMany","size","has","selectDistinctResult","mainTable","groupQuery","id","from","$dynamic","forEach","type","condition","groupBy","order","query","length","docs","nextPage","prevPage","i","Object","keys","findPromise","countDistinct","Math","ceil","rawDocs","a","b","data","config","payload"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type FlattenedField, type JoinQuery, type SelectMode, type SelectType } from 'payload';
1
+ import type { FlattenedField, JoinQuery, PayloadRequest, SelectMode, SelectType } from 'payload';
2
2
  import type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js';
3
3
  import type { Result } from './buildFindManyArgs.js';
4
4
  type TraverseFieldArgs = {
@@ -16,6 +16,7 @@ type TraverseFieldArgs = {
16
16
  locale?: string;
17
17
  parentIsLocalized?: boolean;
18
18
  path: string;
19
+ req?: Partial<PayloadRequest>;
19
20
  select?: SelectType;
20
21
  selectAllOnCurrentLevel?: boolean;
21
22
  selectMode?: SelectMode;
@@ -29,6 +30,6 @@ type TraverseFieldArgs = {
29
30
  texts?: boolean;
30
31
  };
31
32
  };
32
- export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery, joins, locale, parentIsLocalized, path, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
33
+ export declare const traverseFields: ({ _locales, adapter, collectionSlug, currentArgs, currentTableName, depth, draftsEnabled, fields, forceWithFields, joinQuery, joins, locale, parentIsLocalized, path, req, select, selectAllOnCurrentLevel, selectMode, tablePath, topLevelArgs, topLevelTableName, versions, withTabledFields, }: TraverseFieldArgs) => Record<string, unknown>;
33
34
  export {};
34
35
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,cAAc,EAGnB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AA6EpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,iSAuBxB,iBAAiB,4BAkyBnB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EAEX,MAAM,SAAS,CAAA;AAgBhB,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAA;AACvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAepD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,sSAwBxB,iBAAiB,4BAitBnB,CAAA"}