@payloadcms/drizzle 4.0.0-internal.9496957 → 4.0.0-internal.952ed66

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
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n Column,\n ColumnBaseConfig,\n ColumnDataType,\n DrizzleConfig,\n ExtractTablesWithRelations,\n Relation,\n Relations,\n SQL,\n TableRelationalConfig,\n} from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { NodePgDatabase, NodePgQueryResultHKT } from 'drizzle-orm/node-postgres'\nimport type {\n PgColumn,\n PgTable,\n PgTransaction,\n Precision,\n UpdateDeleteAction,\n} from 'drizzle-orm/pg-core'\nimport type { SQLiteColumn, SQLiteTable, SQLiteTransaction } from 'drizzle-orm/sqlite-core'\nimport type { Result } from 'drizzle-orm/sqlite-core/session'\nimport type {\n BaseDatabaseAdapter,\n FlattenedField,\n MigrationData,\n Operator,\n Payload,\n PayloadRequest,\n} from 'payload'\n\nimport type { BuildQueryJoinAliases } from './queries/buildQuery.js'\n\nexport { BuildQueryJoinAliases }\n\nimport type { ResultSet } from '@libsql/client'\nimport type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { SQLiteRaw } from 'drizzle-orm/sqlite-core/query-builders/raw'\nimport type { QueryResult } from 'pg'\n\nimport type { DrizzleResolvedOperator, Operators } from './queries/operatorMap.js'\n\nexport type PostgresDB = NodePgDatabase<Record<string, unknown>>\n\nexport type SQLiteDB = LibSQLDatabase<\n Record<string, GenericRelation | GenericTable> & Record<string, unknown>\n>\n\nexport type GenericPgColumn = PgColumn<\n ColumnBaseConfig<ColumnDataType, string>,\n Record<string, unknown>\n>\n\nexport type GenericColumns<T> = {\n [x: string]: T\n}\n\ntype GenericPgTable = PgTable<{\n columns: GenericColumns<GenericPgColumn>\n dialect: string\n name: string\n schema: undefined\n}>\n\ntype GenericSQLiteTable = SQLiteTable<{\n columns: GenericColumns<SQLiteColumn>\n dialect: string\n name: string\n schema: undefined\n}>\n\nexport type GenericColumn = GenericPgColumn | SQLiteColumn\n\nexport type GenericTable = GenericPgTable | GenericSQLiteTable\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type TransactionSQLite = SQLiteTransaction<\n 'async',\n Result<'async', unknown>,\n Record<string, unknown>,\n { tsName: TableRelationalConfig }\n>\nexport type TransactionPg = PgTransaction<\n NodePgQueryResultHKT,\n Record<string, unknown>,\n ExtractTablesWithRelations<Record<string, unknown>>\n>\n\nexport type DrizzleTransaction = TransactionPg | TransactionSQLite\n\nexport type CountDistinct = (args: {\n column?: PgColumn<any> | SQLiteColumn<any>\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: DrizzleAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: DrizzleTransaction | LibSQLDatabase | PostgresDB\n drizzle?: LibSQLDatabase | PostgresDB\n raw?: string\n sql?: SQL<unknown>\n}) =>\n | Promise<QueryResult<Record<string, T>>>\n | SQLiteRaw<Promise<{ rows: T[] }>>\n | SQLiteRaw<ResultSet>\n\nexport type Insert = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n onConflictDoUpdate?: unknown\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\nexport type RequireDrizzleKit = () => {\n generateDrizzleJson: (\n args: Record<string, unknown>,\n ) => DrizzleSnapshotJSON | Promise<DrizzleSnapshotJSON>\n generateMigration: (prev: DrizzleSnapshotJSON, cur: DrizzleSnapshotJSON) => Promise<string[]>\n pushSchema: (\n schema: Record<string, unknown>,\n drizzle: DrizzleAdapter['drizzle'],\n filterSchema?: string[],\n tablesFilter?: string[],\n extensionsFilter?: string[],\n ) => Promise<{ apply; hasDataLoss; warnings }>\n upSnapshot?: (snapshot: Record<string, unknown>) => DrizzleSnapshotJSON\n}\n\nexport type Migration = {\n down: ({\n db,\n payload,\n req,\n }: {\n db?: DrizzleTransaction | LibSQLDatabase<Record<string, never>> | PostgresDB\n payload: Payload\n req: PayloadRequest\n }) => Promise<void>\n up: ({\n db,\n payload,\n req,\n }: {\n db?: DrizzleTransaction | LibSQLDatabase | PostgresDB\n payload: Payload\n req: PayloadRequest\n }) => Promise<void>\n} & MigrationData\n\nexport type CreateJSONQueryArgs = {\n column?: Column | string\n operator: string\n pathSegments: string[]\n rawColumn?: SQL<unknown>\n table?: string\n treatAsArray?: string[]\n treatRootAsArray?: boolean\n value: boolean | number | number[] | string | string[]\n}\n\n/**\n * Abstract relation link\n */\nexport type RawRelation =\n | {\n fields: { name: string; table: string }[]\n references: string[]\n relationName?: string\n to: string\n type: 'one'\n }\n | {\n relationName?: string\n to: string\n type: 'many'\n }\n\n/**\n * Abstract SQL table that later gets converted by database specific implementation to Drizzle\n */\nexport type RawTable = {\n columns: Record<string, RawColumn>\n foreignKeys?: Record<string, RawForeignKey>\n indexes?: Record<string, RawIndex>\n name: string\n}\n\n/**\n * Abstract SQL foreign key that later gets converted by database specific implementation to Drizzle\n */\nexport type RawForeignKey = {\n columns: string[]\n foreignColumns: { name: string; table: string }[]\n name: string\n onDelete?: UpdateDeleteAction\n onUpdate?: UpdateDeleteAction\n}\n\n/**\n * Abstract SQL index that later gets converted by database specific implementation to Drizzle\n */\nexport type RawIndex = {\n name: string\n on: string | string[]\n unique?: boolean\n}\n\n/**\n * Abstract SQL column that later gets converted by database specific implementation to Drizzle\n */\nexport type BaseRawColumn = {\n default?: any\n name: string\n notNull?: boolean\n primaryKey?: boolean\n reference?: {\n name: string\n onDelete: UpdateDeleteAction\n table: string\n }\n}\n\n/**\n * Postgres: native timestamp type\n * SQLite: text column, defaultNow achieved through strftime('%Y-%m-%dT%H:%M:%fZ', 'now'). withTimezone/precision have no any effect.\n */\nexport type TimestampRawColumn = {\n defaultNow?: boolean\n mode: 'date' | 'string'\n precision: Precision\n type: 'timestamp'\n withTimezone?: boolean\n} & BaseRawColumn\n\n/**\n * Postgres: native UUID type and db lavel defaultRandom\n * SQLite: text type and defaultRandom in the app level\n */\nexport type UUIDRawColumn = {\n defaultRandom?: boolean\n /** App-side UUID v7 default (Postgres & SQLite); mutually exclusive with defaultRandom in practice */\n defaultV7?: boolean\n type: 'uuid'\n} & BaseRawColumn\n\n/**\n * Accepts either `locale: true` to have options from locales or `options` string array\n * Postgres: native enums\n * SQLite: text column with checks.\n */\nexport type EnumRawColumn = (\n | {\n enumName: string\n options: string[]\n type: 'enum'\n }\n | {\n locale: true\n type: 'enum'\n }\n) &\n BaseRawColumn\n\nexport type IntegerRawColumn = {\n /**\n * SQLite only.\n * Enable [AUTOINCREMENT](https://www.sqlite.org/autoinc.html) for primary key to ensure that the same ID cannot be reused from previously deleted rows.\n */\n autoIncrement?: boolean\n type: 'integer'\n} & BaseRawColumn\n\nexport type VectorRawColumn = {\n dimensions?: number\n type: 'vector'\n} & BaseRawColumn\n\nexport type HalfVecRawColumn = {\n dimensions?: number\n type: 'halfvec'\n} & BaseRawColumn\n\nexport type SparseVecRawColumn = {\n dimensions?: number\n type: 'sparsevec'\n} & BaseRawColumn\n\nexport type BinaryVecRawColumn = {\n dimensions?: number\n type: 'bit'\n} & BaseRawColumn\n\nexport type RawColumn =\n | ({\n type: 'boolean' | 'geometry' | 'jsonb' | 'numeric' | 'serial' | 'text' | 'varchar'\n } & BaseRawColumn)\n | BinaryVecRawColumn\n | EnumRawColumn\n | HalfVecRawColumn\n | IntegerRawColumn\n | SparseVecRawColumn\n | TimestampRawColumn\n | UUIDRawColumn\n | VectorRawColumn\n\nexport type IDType = 'integer' | 'numeric' | 'text' | 'uuid' | 'varchar'\n\nexport type SetColumnID = (args: {\n adapter: DrizzleAdapter\n columns: Record<string, RawColumn>\n fields: FlattenedField[]\n}) => IDType\n\nexport type ColumnToCodeConverter = (args: {\n adapter: DrizzleAdapter\n addEnum: (name: string, options: string[]) => void\n addImport: (from: string, name: string) => void\n circularEdges?: Set<string>\n column: RawColumn\n locales?: string[]\n tableKey: string\n}) => string\n\nexport type BuildDrizzleTable<T extends DrizzleAdapter = DrizzleAdapter> = (args: {\n adapter: T\n locales: string[]\n rawTable: RawTable\n}) => void\n\nexport type BlocksToJsonBlockToMigrate = {\n data: Record<string, unknown> | Record<string, unknown>[]\n fieldAccessor: (number | string)[]\n}\n\nexport interface BaseBlocksToJsonEntityToMigrate {\n blocks: BlocksToJsonBlockToMigrate[]\n originalData: Record<string, any>\n}\n\nexport interface CollectionOrVersionBlocksToJsonEntityToMigrate\n extends BaseBlocksToJsonEntityToMigrate {\n id: number | string\n slug: string\n type: 'collection' | 'collectionVersion' | 'globalVersion'\n}\n\nexport interface GlobalBlocksToJsonEntityToMigrate extends BaseBlocksToJsonEntityToMigrate {\n slug: string\n type: 'global'\n}\n\nexport type BlocksToJsonEntityToMigrate =\n | CollectionOrVersionBlocksToJsonEntityToMigrate\n | GlobalBlocksToJsonEntityToMigrate\n\nexport interface BlocksToJsonMigrator {\n collectAndSaveEntitiesToBatches(\n req: PayloadRequest,\n options?: {\n batchSize?: number\n },\n ): Promise<void>\n getMigrationStatements(): Promise<{\n statements: string\n writeDrizzleSnapshot(filePath: string): void\n }>\n migrateEntitiesFromTempFolder(\n req: PayloadRequest,\n options?: {\n clearBatches?: boolean\n },\n ): Promise<void>\n setTempFolder(tempFolderPath: string): void\n updatePayloadConfigFile(): Promise<void>\n}\n\n/**\n * The information passed to a query-operator handler for one user-facing leaf comparison.\n */\nexport type DrizzleOperatorHandlerContext = {\n adapter: DrizzleAdapter\n column: Column | SQL\n field: FlattenedField\n locale?: string\n /** The operator supplied by the Payload query, before any adapter conversions. */\n originalOperator: Operator\n path: string\n /** The operator actually sent to the database after Payload's existing conversions. */\n resolvedOperator: DrizzleResolvedOperator\n storage: 'column'\n value: unknown\n}\n\n/**\n * Transforms the column and/or value of a matching operator before the default (or replacement)\n * comparison runs. Multiple matching transform handlers compose in configuration order.\n */\nexport type DrizzleOperandTransformHandler = {\n build?: never\n /** Restricts the handler to these Payload field types. Omit to match every field type. */\n fieldTypes?: FlattenedField['type'][]\n name: string\n operators: DrizzleResolvedOperator[]\n transformOperands: (context: DrizzleOperatorHandlerContext) => {\n column: Column | SQL\n value: unknown\n }\n}\n\n/**\n * Replaces the default comparison for a matching operator entirely. Runs after every matching\n * `transformOperands` handler has already run.\n */\nexport type DrizzleOperatorReplacementHandler = {\n build: (context: DrizzleOperatorHandlerContext) => SQL\n /** Restricts the handler to these Payload field types. Omit to match every field type. */\n fieldTypes?: FlattenedField['type'][]\n name: string\n operators: DrizzleResolvedOperator[]\n transformOperands?: never\n}\n\nexport type DrizzleOperatorHandler =\n | DrizzleOperandTransformHandler\n | DrizzleOperatorReplacementHandler\n\nexport type DrizzleQueryConfig = {\n operatorHandlers?: DrizzleOperatorHandler[]\n}\n\nexport interface DrizzleAdapter extends BaseDatabaseAdapter {\n blocksAsJSON?: boolean\n blocksToJsonMigrator?: BlocksToJsonMigrator\n convertPathToJSONTraversal?: (incomingSegments: string[]) => string\n countDistinct: CountDistinct\n createJSONQuery: (args: CreateJSONQueryArgs) => string\n defaultDrizzleSnapshot: Record<string, unknown>\n deleteWhere: DeleteWhere\n drizzle: LibSQLDatabase | PostgresDB\n dropDatabase: DropDatabase\n enums?: never | Record<string, unknown>\n execute: Execute<unknown>\n features: {\n json?: boolean\n }\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n\n foreignKeys: Set<string>\n idType: 'serial' | 'uuid' | 'uuidv7'\n indexes: Set<string>\n initializing: Promise<void>\n insert: Insert\n /**\n * Timestamp (ms) of the last write operation. When read replicas are configured,\n * reads within `readReplicasAfterWriteInterval` ms of this timestamp are routed to the\n * primary to guarantee read-after-write consistency.\n */\n lastWriteTimestamp?: number\n limitedBoundParameters?: boolean\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operatorHandlers: DrizzleOperatorHandler[]\n operators: Operators\n /**\n * When read replicas are configured, holds the unwrapped primary drizzle instance\n * (before withReplicas wrapping). Used for reads that are part of write operations\n * to avoid replication lag.\n */\n primaryDrizzle?: PostgresDB\n push: boolean\n rawRelations: Record<string, Record<string, RawRelation>>\n rawTables: Record<string, RawTable>\n /**\n * How long (ms) after a write to route reads to the primary instead of a\n * read replica. Avoids stale reads caused by replication lag.\n * @default 2000\n */\n readReplicasAfterWriteInterval: number\n\n rejectInitializing: () => void\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n requireDrizzleKit: RequireDrizzleKit\n resolveInitializing: () => void\n\n schema: Record<string, unknown>\n\n schemaName?: string\n sessions: {\n [id: string]: {\n db: DrizzleTransaction\n reject: () => Promise<void>\n resolve: () => Promise<void>\n }\n }\n tableNameMap: Map<string, string>\n tables: Record<string, any>\n transactionOptions: unknown\n versionsSuffix?: string\n}\n\nexport type RelationMap = Map<\n string,\n {\n localized: boolean\n relationName?: string\n target: string\n type: 'many' | 'one'\n }\n>\n"],"names":[],"mappings":"AAogBA,WAQC"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n Column,\n ColumnBaseConfig,\n ColumnDataType,\n DrizzleConfig,\n ExtractTablesWithRelations,\n Relation,\n Relations,\n SQL,\n TableRelationalConfig,\n} from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { NodePgDatabase, NodePgQueryResultHKT } from 'drizzle-orm/node-postgres'\nimport type {\n PgColumn,\n PgTable,\n PgTransaction,\n Precision,\n UpdateDeleteAction,\n} from 'drizzle-orm/pg-core'\nimport type { SQLiteColumn, SQLiteTable, SQLiteTransaction } from 'drizzle-orm/sqlite-core'\nimport type { Result } from 'drizzle-orm/sqlite-core/session'\nimport type {\n BaseDatabaseAdapter,\n FlattenedField,\n MigrationData,\n Operator,\n Payload,\n PayloadRequest,\n} from 'payload'\n\nimport type { BuildQueryJoinAliases } from './queries/buildQuery.js'\n\nexport { BuildQueryJoinAliases }\n\nimport type { ResultSet } from '@libsql/client'\nimport type { DrizzleSnapshotJSON } from 'drizzle-kit/api'\nimport type { SQLiteRaw } from 'drizzle-orm/sqlite-core/query-builders/raw'\nimport type { QueryResult } from 'pg'\n\nimport type { DrizzleResolvedOperator, Operators } from './queries/operatorMap.js'\n\nexport type PostgresDB = NodePgDatabase<Record<string, unknown>>\n\nexport type SQLiteDB = LibSQLDatabase<\n Record<string, GenericRelation | GenericTable> & Record<string, unknown>\n>\n\nexport type GenericPgColumn = PgColumn<\n ColumnBaseConfig<ColumnDataType, string>,\n Record<string, unknown>\n>\n\nexport type GenericColumns<T> = {\n [x: string]: T\n}\n\ntype GenericPgTable = PgTable<{\n columns: GenericColumns<GenericPgColumn>\n dialect: string\n name: string\n schema: undefined\n}>\n\ntype GenericSQLiteTable = SQLiteTable<{\n columns: GenericColumns<SQLiteColumn>\n dialect: string\n name: string\n schema: undefined\n}>\n\nexport type GenericColumn = GenericPgColumn | SQLiteColumn\n\nexport type GenericTable = GenericPgTable | GenericSQLiteTable\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type TransactionSQLite = SQLiteTransaction<\n 'async',\n Result<'async', unknown>,\n Record<string, unknown>,\n { tsName: TableRelationalConfig }\n>\nexport type TransactionPg = PgTransaction<\n NodePgQueryResultHKT,\n Record<string, unknown>,\n ExtractTablesWithRelations<Record<string, unknown>>\n>\n\nexport type DrizzleTransaction = TransactionPg | TransactionSQLite\n\nexport type CountDistinct = (args: {\n column?: PgColumn<any> | SQLiteColumn<any>\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: DrizzleAdapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: DrizzleTransaction | LibSQLDatabase | PostgresDB\n drizzle?: LibSQLDatabase | PostgresDB\n raw?: string\n sql?: SQL<unknown>\n}) =>\n | Promise<QueryResult<Record<string, T>>>\n | SQLiteRaw<Promise<{ rows: T[] }>>\n | SQLiteRaw<ResultSet>\n\nexport type Insert = (args: {\n db: DrizzleTransaction | LibSQLDatabase | PostgresDB\n onConflictDoNothing?: unknown\n onConflictDoUpdate?: unknown\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\nexport type RequireDrizzleKit = () => Promise<{\n generateDrizzleJson: (\n args: Record<string, unknown>,\n ) => DrizzleSnapshotJSON | Promise<DrizzleSnapshotJSON>\n generateMigration: (prev: DrizzleSnapshotJSON, cur: DrizzleSnapshotJSON) => Promise<string[]>\n pushSchema: (\n schema: Record<string, unknown>,\n drizzle: DrizzleAdapter['drizzle'],\n filterSchema?: string[],\n tablesFilter?: string[],\n extensionsFilter?: string[],\n ) => Promise<{ apply; hasDataLoss; warnings }>\n upSnapshot?: (snapshot: Record<string, unknown>) => DrizzleSnapshotJSON\n}>\n\nexport type Migration = {\n down: ({\n db,\n payload,\n req,\n }: {\n db?: DrizzleTransaction | LibSQLDatabase<Record<string, never>> | PostgresDB\n payload: Payload\n req: PayloadRequest\n }) => Promise<void>\n up: ({\n db,\n payload,\n req,\n }: {\n db?: DrizzleTransaction | LibSQLDatabase | PostgresDB\n payload: Payload\n req: PayloadRequest\n }) => Promise<void>\n} & MigrationData\n\nexport type CreateJSONQueryArgs = {\n column?: Column | string\n operator: string\n pathSegments: string[]\n rawColumn?: SQL<unknown>\n table?: string\n treatAsArray?: string[]\n treatRootAsArray?: boolean\n value: boolean | number | number[] | string | string[]\n}\n\n/**\n * Abstract relation link\n */\nexport type RawRelation =\n | {\n fields: { name: string; table: string }[]\n references: string[]\n relationName?: string\n to: string\n type: 'one'\n }\n | {\n relationName?: string\n to: string\n type: 'many'\n }\n\n/**\n * Abstract SQL table that later gets converted by database specific implementation to Drizzle\n */\nexport type RawTable = {\n columns: Record<string, RawColumn>\n foreignKeys?: Record<string, RawForeignKey>\n indexes?: Record<string, RawIndex>\n name: string\n}\n\n/**\n * Abstract SQL foreign key that later gets converted by database specific implementation to Drizzle\n */\nexport type RawForeignKey = {\n columns: string[]\n foreignColumns: { name: string; table: string }[]\n name: string\n onDelete?: UpdateDeleteAction\n onUpdate?: UpdateDeleteAction\n}\n\n/**\n * Abstract SQL index that later gets converted by database specific implementation to Drizzle\n */\nexport type RawIndex = {\n name: string\n on: string | string[]\n unique?: boolean\n}\n\n/**\n * Abstract SQL column that later gets converted by database specific implementation to Drizzle\n */\nexport type BaseRawColumn = {\n default?: any\n name: string\n notNull?: boolean\n primaryKey?: boolean\n reference?: {\n name: string\n onDelete: UpdateDeleteAction\n table: string\n }\n}\n\n/**\n * Postgres: native timestamp type\n * SQLite: text column, defaultNow achieved through strftime('%Y-%m-%dT%H:%M:%fZ', 'now'). withTimezone/precision have no any effect.\n */\nexport type TimestampRawColumn = {\n defaultNow?: boolean\n mode: 'date' | 'string'\n precision: Precision\n type: 'timestamp'\n withTimezone?: boolean\n} & BaseRawColumn\n\n/**\n * Postgres: native UUID type and db lavel defaultRandom\n * SQLite: text type and defaultRandom in the app level\n */\nexport type UUIDRawColumn = {\n defaultRandom?: boolean\n /** App-side UUID v7 default (Postgres & SQLite); mutually exclusive with defaultRandom in practice */\n defaultV7?: boolean\n type: 'uuid'\n} & BaseRawColumn\n\n/**\n * Accepts either `locale: true` to have options from locales or `options` string array\n * Postgres: native enums\n * SQLite: text column with checks.\n */\nexport type EnumRawColumn = (\n | {\n enumName: string\n options: string[]\n type: 'enum'\n }\n | {\n locale: true\n type: 'enum'\n }\n) &\n BaseRawColumn\n\nexport type IntegerRawColumn = {\n /**\n * SQLite only.\n * Enable [AUTOINCREMENT](https://www.sqlite.org/autoinc.html) for primary key to ensure that the same ID cannot be reused from previously deleted rows.\n */\n autoIncrement?: boolean\n type: 'integer'\n} & BaseRawColumn\n\nexport type VectorRawColumn = {\n dimensions?: number\n type: 'vector'\n} & BaseRawColumn\n\nexport type HalfVecRawColumn = {\n dimensions?: number\n type: 'halfvec'\n} & BaseRawColumn\n\nexport type SparseVecRawColumn = {\n dimensions?: number\n type: 'sparsevec'\n} & BaseRawColumn\n\nexport type BinaryVecRawColumn = {\n dimensions?: number\n type: 'bit'\n} & BaseRawColumn\n\nexport type RawColumn =\n | ({\n type: 'boolean' | 'geometry' | 'jsonb' | 'numeric' | 'serial' | 'text' | 'varchar'\n } & BaseRawColumn)\n | BinaryVecRawColumn\n | EnumRawColumn\n | HalfVecRawColumn\n | IntegerRawColumn\n | SparseVecRawColumn\n | TimestampRawColumn\n | UUIDRawColumn\n | VectorRawColumn\n\nexport type IDType = 'integer' | 'numeric' | 'text' | 'uuid' | 'varchar'\n\nexport type SetColumnID = (args: {\n adapter: DrizzleAdapter\n columns: Record<string, RawColumn>\n fields: FlattenedField[]\n}) => IDType\n\nexport type ColumnToCodeConverter = (args: {\n adapter: DrizzleAdapter\n addEnum: (name: string, options: string[]) => void\n addImport: (from: string, name: string) => void\n circularEdges?: Set<string>\n column: RawColumn\n locales?: string[]\n tableKey: string\n}) => string\n\nexport type BuildDrizzleTable<T extends DrizzleAdapter = DrizzleAdapter> = (args: {\n adapter: T\n locales: string[]\n rawTable: RawTable\n}) => void\n\nexport type BlocksToJsonBlockToMigrate = {\n data: Record<string, unknown> | Record<string, unknown>[]\n fieldAccessor: (number | string)[]\n}\n\nexport interface BaseBlocksToJsonEntityToMigrate {\n blocks: BlocksToJsonBlockToMigrate[]\n originalData: Record<string, any>\n}\n\nexport interface CollectionOrVersionBlocksToJsonEntityToMigrate extends BaseBlocksToJsonEntityToMigrate {\n id: number | string\n slug: string\n type: 'collection' | 'collectionVersion' | 'globalVersion'\n}\n\nexport interface GlobalBlocksToJsonEntityToMigrate extends BaseBlocksToJsonEntityToMigrate {\n slug: string\n type: 'global'\n}\n\nexport type BlocksToJsonEntityToMigrate =\n | CollectionOrVersionBlocksToJsonEntityToMigrate\n | GlobalBlocksToJsonEntityToMigrate\n\nexport interface BlocksToJsonMigrator {\n collectAndSaveEntitiesToBatches(\n req: PayloadRequest,\n options?: {\n batchSize?: number\n },\n ): Promise<void>\n getMigrationStatements(): Promise<{\n statements: string\n writeDrizzleSnapshot(filePath: string): void\n }>\n migrateEntitiesFromTempFolder(\n req: PayloadRequest,\n options?: {\n clearBatches?: boolean\n },\n ): Promise<void>\n setTempFolder(tempFolderPath: string): void\n updatePayloadConfigFile(): Promise<void>\n}\n\n/**\n * The information passed to a query-operator handler for one user-facing leaf comparison.\n */\nexport type DrizzleOperatorHandlerContext = {\n adapter: DrizzleAdapter\n column: Column | SQL\n field: FlattenedField\n locale?: string\n /** The operator supplied by the Payload query, before any adapter conversions. */\n originalOperator: Operator\n path: string\n /** The operator actually sent to the database after Payload's existing conversions. */\n resolvedOperator: DrizzleResolvedOperator\n storage: 'column'\n value: unknown\n}\n\n/**\n * Transforms the column and/or value of a matching operator before the default (or replacement)\n * comparison runs. Multiple matching transform handlers compose in configuration order.\n */\nexport type DrizzleOperandTransformHandler = {\n build?: never\n /** Restricts the handler to these Payload field types. Omit to match every field type. */\n fieldTypes?: FlattenedField['type'][]\n name: string\n operators: DrizzleResolvedOperator[]\n transformOperands: (context: DrizzleOperatorHandlerContext) => {\n column: Column | SQL\n value: unknown\n }\n}\n\n/**\n * Replaces the default comparison for a matching operator entirely. Runs after every matching\n * `transformOperands` handler has already run.\n */\nexport type DrizzleOperatorReplacementHandler = {\n build: (context: DrizzleOperatorHandlerContext) => SQL\n /** Restricts the handler to these Payload field types. Omit to match every field type. */\n fieldTypes?: FlattenedField['type'][]\n name: string\n operators: DrizzleResolvedOperator[]\n transformOperands?: never\n}\n\nexport type DrizzleOperatorHandler =\n | DrizzleOperandTransformHandler\n | DrizzleOperatorReplacementHandler\n\nexport type DrizzleQueryConfig = {\n operatorHandlers?: DrizzleOperatorHandler[]\n}\n\nexport interface DrizzleAdapter extends BaseDatabaseAdapter {\n blocksAsJSON?: boolean\n blocksToJsonMigrator?: BlocksToJsonMigrator\n convertPathToJSONTraversal?: (incomingSegments: string[]) => string\n countDistinct: CountDistinct\n createJSONQuery: (args: CreateJSONQueryArgs) => string\n defaultDrizzleSnapshot: Record<string, unknown>\n deleteWhere: DeleteWhere\n drizzle: LibSQLDatabase | PostgresDB\n dropDatabase: DropDatabase\n enums?: never | Record<string, unknown>\n execute: Execute<unknown>\n features: {\n json?: boolean\n }\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n\n foreignKeys: Set<string>\n idType: 'serial' | 'uuid' | 'uuidv7'\n indexes: Set<string>\n initializing: Promise<void>\n insert: Insert\n /**\n * Timestamp (ms) of the last write operation. When read replicas are configured,\n * reads within `readReplicasAfterWriteInterval` ms of this timestamp are routed to the\n * primary to guarantee read-after-write consistency.\n */\n lastWriteTimestamp?: number\n limitedBoundParameters?: boolean\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n operatorHandlers: DrizzleOperatorHandler[]\n operators: Operators\n /**\n * When read replicas are configured, holds the unwrapped primary drizzle instance\n * (before withReplicas wrapping). Used for reads that are part of write operations\n * to avoid replication lag.\n */\n primaryDrizzle?: PostgresDB\n push: boolean\n rawRelations: Record<string, Record<string, RawRelation>>\n rawTables: Record<string, RawTable>\n /**\n * How long (ms) after a write to route reads to the primary instead of a\n * read replica. Avoids stale reads caused by replication lag.\n * @default 2000\n */\n readReplicasAfterWriteInterval: number\n\n rejectInitializing: () => void\n relations: Record<string, GenericRelation>\n relationshipsSuffix?: string\n requireDrizzleKit: RequireDrizzleKit\n resolveInitializing: () => void\n\n schema: Record<string, unknown>\n\n schemaName?: string\n sessions: {\n [id: string]: {\n db: DrizzleTransaction\n reject: () => Promise<void>\n resolve: () => Promise<void>\n }\n }\n tableNameMap: Map<string, string>\n tables: Record<string, any>\n transactionOptions: unknown\n versionsSuffix?: string\n}\n\nexport type RelationMap = Map<\n string,\n {\n localized: boolean\n relationName?: string\n target: string\n type: 'many' | 'one'\n }\n>\n"],"names":[],"mappings":"AAogBA,WAQC"}
@@ -1,4 +1,8 @@
1
1
  import type { UpdateGlobalArgs } from 'payload';
2
2
  import type { DrizzleAdapter } from './types.js';
3
- export declare function updateGlobal<T extends Record<string, unknown>>(this: DrizzleAdapter, { slug, data, req, returning, select }: UpdateGlobalArgs): Promise<T>;
3
+ type BranchUpdateGlobalArgs = {
4
+ branchConflictData?: Record<string, unknown>;
5
+ } & UpdateGlobalArgs;
6
+ export declare function updateGlobal<T extends Record<string, unknown>>(this: DrizzleAdapter, { slug, branch, branchConflictData, data, req, returning, select }: BranchUpdateGlobalArgs): Promise<T>;
7
+ export {};
4
8
  //# sourceMappingURL=updateGlobal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateGlobal.d.ts","sourceRoot":"","sources":["../src/updateGlobal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAI/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,IAAI,EAAE,cAAc,EACpB,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,gBAAgB,GACvD,OAAO,CAAC,CAAC,CAAC,CA2BZ"}
1
+ {"version":3,"file":"updateGlobal.d.ts","sourceRoot":"","sources":["../src/updateGlobal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA0B,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAOvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAOhD,KAAK,sBAAsB,GAAG;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7C,GAAG,gBAAgB,CAAA;AAEpB,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,IAAI,EAAE,cAAc,EACpB,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,sBAAsB,GACzF,OAAO,CAAC,CAAC,CAAC,CAkFZ"}
@@ -1,21 +1,79 @@
1
+ import { deepCopyObjectSimple, resolveBranchGlobalWrite } from 'payload';
2
+ import { traverseFields } from 'payload/shared';
1
3
  import toSnakeCase from 'to-snake-case';
4
+ import { v4 as uuid } from 'uuid';
5
+ import { findGlobal } from './findGlobal.js';
2
6
  import { upsertRow } from './upsertRow/index.js';
3
7
  import { getPrimaryDb } from './utilities/getPrimaryDb.js';
4
8
  import { getTransaction } from './utilities/getTransaction.js';
5
- export async function updateGlobal({ slug, data, req, returning, select }) {
9
+ export async function updateGlobal({ slug, branch, branchConflictData, data, req, returning, select }) {
6
10
  const globalConfig = this.payload.globals.config.find((config)=>config.slug === slug);
7
11
  const tableName = this.tableNameMap.get(toSnakeCase(globalConfig.slug));
8
12
  const db = getPrimaryDb(this, await getTransaction(this, req));
9
- const existingGlobal = await db.query[tableName].findFirst({});
13
+ const writeBranch = resolveBranchGlobalWrite({
14
+ branch,
15
+ globalSlug: slug,
16
+ req
17
+ });
18
+ // Each global has its own table holding one row per branch. On a branch the
19
+ // write targets that branch's row, seeded from main's content the first time
20
+ // the global is touched.
21
+ const rows = await db.query[tableName].findMany({});
22
+ const existingGlobal = writeBranch ? rows.find((row)=>row._branch === writeBranch) : rows.find((row)=>(row._branch ?? 'main') === 'main');
23
+ const mainRow = rows.find((row)=>(row._branch ?? 'main') === 'main');
24
+ const mainGlobal = writeBranch && !existingGlobal ? await findGlobal.call(this, {
25
+ slug,
26
+ branch: false,
27
+ locale: 'all',
28
+ req,
29
+ where: typeof mainRow?.id === 'string' || typeof mainRow?.id === 'number' ? {
30
+ id: {
31
+ equals: mainRow.id
32
+ }
33
+ } : {
34
+ _branch: {
35
+ equals: 'main'
36
+ }
37
+ }
38
+ }) : null;
39
+ const mainSource = mainGlobal && Object.keys(mainGlobal).length ? mainGlobal : mainRow ?? {};
40
+ const { id: _mainID, _branch: _mainBranch, globalType: _mainGlobalType, ...mainData } = mainSource;
41
+ const branchData = writeBranch ? {
42
+ ...data,
43
+ _branch: writeBranch
44
+ } : data;
45
+ const branchConflictWriteData = writeBranch ? {
46
+ ...branchConflictData ?? data,
47
+ _branch: writeBranch
48
+ } : data;
49
+ const dataToWrite = writeBranch && !existingGlobal ? copyGlobalDataWithFreshRowIDs({
50
+ config: this.payload.config,
51
+ data: {
52
+ ...mainData,
53
+ ...branchData
54
+ },
55
+ fields: globalConfig.fields
56
+ }) : branchData;
57
+ const conflictDataToWrite = writeBranch && !existingGlobal ? copyGlobalDataWithFreshRowIDs({
58
+ config: this.payload.config,
59
+ data: branchConflictWriteData,
60
+ fields: globalConfig.fields
61
+ }) : branchConflictWriteData;
10
62
  const result = await upsertRow({
11
- ...existingGlobal ? {
63
+ ...writeBranch ? {
64
+ operation: 'update',
65
+ ...!existingGlobal ? {
66
+ upsertConflictData: conflictDataToWrite
67
+ } : {},
68
+ upsertTarget: this.tables[tableName]._branch
69
+ } : existingGlobal ? {
12
70
  id: existingGlobal.id,
13
71
  operation: 'update'
14
72
  } : {
15
73
  operation: 'create'
16
74
  },
17
75
  adapter: this,
18
- data,
76
+ data: dataToWrite,
19
77
  db,
20
78
  fields: globalConfig.flattenedFields,
21
79
  globalSlug: slug,
@@ -30,5 +88,39 @@ export async function updateGlobal({ slug, data, req, returning, select }) {
30
88
  result.globalType = slug;
31
89
  return result;
32
90
  }
91
+ const copyGlobalDataWithFreshRowIDs = ({ config, data, fields })=>{
92
+ const clonedData = deepCopyObjectSimple(data);
93
+ traverseFields({
94
+ callback: ({ field, ref })=>{
95
+ if (field.type !== 'array' && field.type !== 'blocks' || !('name' in field) || !field.name || !ref || typeof ref !== 'object') {
96
+ return;
97
+ }
98
+ const value = ref[field.name];
99
+ const rekeyRows = (rows)=>{
100
+ if (!Array.isArray(rows)) {
101
+ return;
102
+ }
103
+ for (const row of rows){
104
+ if (row && typeof row === 'object' && 'id' in row) {
105
+ const rowData = row;
106
+ rowData.id = typeof rowData.id === 'string' ? uuid() : undefined;
107
+ }
108
+ }
109
+ };
110
+ if (Array.isArray(value)) {
111
+ rekeyRows(value);
112
+ } else if (value && typeof value === 'object') {
113
+ for (const localizedRows of Object.values(value)){
114
+ rekeyRows(localizedRows);
115
+ }
116
+ }
117
+ },
118
+ config,
119
+ fields,
120
+ fillEmpty: false,
121
+ ref: clonedData
122
+ });
123
+ return clonedData;
124
+ };
33
125
 
34
126
  //# sourceMappingURL=updateGlobal.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/updateGlobal.ts"],"sourcesContent":["import type { UpdateGlobalArgs } from 'payload'\n\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { upsertRow } from './upsertRow/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport async function updateGlobal<T extends Record<string, unknown>>(\n this: DrizzleAdapter,\n { slug, data, req, returning, select }: UpdateGlobalArgs,\n): Promise<T> {\n const globalConfig = this.payload.globals.config.find((config) => config.slug === slug)\n const tableName = this.tableNameMap.get(toSnakeCase(globalConfig.slug))\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n const existingGlobal = await db.query[tableName].findFirst({})\n\n const result = await upsertRow<{ globalType: string } & T>({\n ...(existingGlobal ? { id: existingGlobal.id, operation: 'update' } : { operation: 'create' }),\n adapter: this,\n data,\n db,\n fields: globalConfig.flattenedFields,\n globalSlug: slug,\n ignoreResult: returning === false,\n req,\n select,\n tableName,\n })\n\n if (returning === false) {\n return null\n }\n\n result.globalType = slug\n\n return result\n}\n"],"names":["toSnakeCase","upsertRow","getPrimaryDb","getTransaction","updateGlobal","slug","data","req","returning","select","globalConfig","payload","globals","config","find","tableName","tableNameMap","get","db","existingGlobal","query","findFirst","result","id","operation","adapter","fields","flattenedFields","globalSlug","ignoreResult","globalType"],"mappings":"AAEA,OAAOA,iBAAiB,gBAAe;AAIvC,SAASC,SAAS,QAAQ,uBAAsB;AAChD,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAE9D,OAAO,eAAeC,aAEpB,EAAEC,IAAI,EAAEC,IAAI,EAAEC,GAAG,EAAEC,SAAS,EAAEC,MAAM,EAAoB;IAExD,MAAMC,eAAe,IAAI,CAACC,OAAO,CAACC,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAACD,SAAWA,OAAOR,IAAI,KAAKA;IAClF,MAAMU,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAACjB,YAAYU,aAAaL,IAAI;IAErE,MAAMa,KAAKhB,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEI;IACzD,MAAMY,iBAAiB,MAAMD,GAAGE,KAAK,CAACL,UAAU,CAACM,SAAS,CAAC,CAAC;IAE5D,MAAMC,SAAS,MAAMrB,UAAsC;QACzD,GAAIkB,iBAAiB;YAAEI,IAAIJ,eAAeI,EAAE;YAAEC,WAAW;QAAS,IAAI;YAAEA,WAAW;QAAS,CAAC;QAC7FC,SAAS,IAAI;QACbnB;QACAY;QACAQ,QAAQhB,aAAaiB,eAAe;QACpCC,YAAYvB;QACZwB,cAAcrB,cAAc;QAC5BD;QACAE;QACAM;IACF;IAEA,IAAIP,cAAc,OAAO;QACvB,OAAO;IACT;IAEAc,OAAOQ,UAAU,GAAGzB;IAEpB,OAAOiB;AACT"}
1
+ {"version":3,"sources":["../src/updateGlobal.ts"],"sourcesContent":["import type { Field, SanitizedConfig, UpdateGlobalArgs } from 'payload'\n\nimport { deepCopyObjectSimple, resolveBranchGlobalWrite } from 'payload'\nimport { traverseFields } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\nimport { v4 as uuid } from 'uuid'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { findGlobal } from './findGlobal.js'\nimport { upsertRow } from './upsertRow/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\ntype BranchUpdateGlobalArgs = {\n branchConflictData?: Record<string, unknown>\n} & UpdateGlobalArgs\n\nexport async function updateGlobal<T extends Record<string, unknown>>(\n this: DrizzleAdapter,\n { slug, branch, branchConflictData, data, req, returning, select }: BranchUpdateGlobalArgs,\n): Promise<T> {\n const globalConfig = this.payload.globals.config.find((config) => config.slug === slug)\n const tableName = this.tableNameMap.get(toSnakeCase(globalConfig.slug))\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const writeBranch = resolveBranchGlobalWrite({ branch, globalSlug: slug, req })\n\n // Each global has its own table holding one row per branch. On a branch the\n // write targets that branch's row, seeded from main's content the first time\n // the global is touched.\n const rows = await db.query[tableName].findMany({})\n const existingGlobal = writeBranch\n ? rows.find((row: Record<string, unknown>) => row._branch === writeBranch)\n : rows.find((row: Record<string, unknown>) => (row._branch ?? 'main') === 'main')\n\n const mainRow = rows.find((row: Record<string, unknown>) => (row._branch ?? 'main') === 'main')\n const mainGlobal =\n writeBranch && !existingGlobal\n ? await findGlobal.call(this, {\n slug,\n branch: false,\n locale: 'all',\n req,\n where:\n typeof mainRow?.id === 'string' || typeof mainRow?.id === 'number'\n ? { id: { equals: mainRow.id } }\n : { _branch: { equals: 'main' } },\n })\n : null\n const mainSource = mainGlobal && Object.keys(mainGlobal).length ? mainGlobal : (mainRow ?? {})\n\n const { id: _mainID, _branch: _mainBranch, globalType: _mainGlobalType, ...mainData } = mainSource\n const branchData = writeBranch ? { ...data, _branch: writeBranch } : data\n const branchConflictWriteData = writeBranch\n ? { ...(branchConflictData ?? data), _branch: writeBranch }\n : data\n const dataToWrite =\n writeBranch && !existingGlobal\n ? copyGlobalDataWithFreshRowIDs({\n config: this.payload.config,\n data: { ...mainData, ...branchData },\n fields: globalConfig.fields,\n })\n : branchData\n const conflictDataToWrite =\n writeBranch && !existingGlobal\n ? copyGlobalDataWithFreshRowIDs({\n config: this.payload.config,\n data: branchConflictWriteData,\n fields: globalConfig.fields,\n })\n : branchConflictWriteData\n\n const result = await upsertRow<{ globalType: string } & T>({\n ...(writeBranch\n ? {\n operation: 'update' as const,\n ...(!existingGlobal ? { upsertConflictData: conflictDataToWrite } : {}),\n upsertTarget: this.tables[tableName]._branch,\n }\n : existingGlobal\n ? { id: existingGlobal.id, operation: 'update' as const }\n : { operation: 'create' as const }),\n adapter: this,\n data: dataToWrite,\n db,\n fields: globalConfig.flattenedFields,\n globalSlug: slug,\n ignoreResult: returning === false,\n req,\n select,\n tableName,\n })\n\n if (returning === false) {\n return null\n }\n\n result.globalType = slug\n\n return result\n}\n\nconst copyGlobalDataWithFreshRowIDs = ({\n config,\n data,\n fields,\n}: {\n config: SanitizedConfig\n data: Record<string, unknown>\n fields: Field[]\n}): Record<string, unknown> => {\n const clonedData = deepCopyObjectSimple(data)\n\n traverseFields({\n callback: ({ field, ref }) => {\n if (\n (field.type !== 'array' && field.type !== 'blocks') ||\n !('name' in field) ||\n !field.name ||\n !ref ||\n typeof ref !== 'object'\n ) {\n return\n }\n\n const value = (ref as Record<string, unknown>)[field.name]\n const rekeyRows = (rows: unknown) => {\n if (!Array.isArray(rows)) {\n return\n }\n\n for (const row of rows) {\n if (row && typeof row === 'object' && 'id' in row) {\n const rowData = row as Record<string, unknown>\n\n rowData.id = typeof rowData.id === 'string' ? uuid() : undefined\n }\n }\n }\n\n if (Array.isArray(value)) {\n rekeyRows(value)\n } else if (value && typeof value === 'object') {\n for (const localizedRows of Object.values(value as Record<string, unknown>)) {\n rekeyRows(localizedRows)\n }\n }\n },\n config,\n fields,\n fillEmpty: false,\n ref: clonedData,\n })\n\n return clonedData\n}\n"],"names":["deepCopyObjectSimple","resolveBranchGlobalWrite","traverseFields","toSnakeCase","v4","uuid","findGlobal","upsertRow","getPrimaryDb","getTransaction","updateGlobal","slug","branch","branchConflictData","data","req","returning","select","globalConfig","payload","globals","config","find","tableName","tableNameMap","get","db","writeBranch","globalSlug","rows","query","findMany","existingGlobal","row","_branch","mainRow","mainGlobal","call","locale","where","id","equals","mainSource","Object","keys","length","_mainID","_mainBranch","globalType","_mainGlobalType","mainData","branchData","branchConflictWriteData","dataToWrite","copyGlobalDataWithFreshRowIDs","fields","conflictDataToWrite","result","operation","upsertConflictData","upsertTarget","tables","adapter","flattenedFields","ignoreResult","clonedData","callback","field","ref","type","name","value","rekeyRows","Array","isArray","rowData","undefined","localizedRows","values","fillEmpty"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAYxC,eAAO,MAAM,SAAS,EAAE,SAqFvB,CAAA"}
1
+ {"version":3,"file":"updateOne.d.ts","sourceRoot":"","sources":["../src/updateOne.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAuBxC,eAAO,MAAM,SAAS,EAAE,SA2KvB,CAAA"}
package/dist/updateOne.js CHANGED
@@ -1,24 +1,97 @@
1
+ import { and, eq } from 'drizzle-orm';
2
+ import { applyBranchIDProjection, resolveBranchQuery, resolveBranchRowID, withBranchIDSelect } from 'payload';
1
3
  import toSnakeCase from 'to-snake-case';
2
4
  import { buildQuery } from './queries/buildQuery.js';
3
5
  import { selectDistinct } from './queries/selectDistinct.js';
6
+ import { transform } from './transform/read/index.js';
7
+ import { transformForWrite } from './transform/write/index.js';
4
8
  import { upsertRow } from './upsertRow/index.js';
9
+ import { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpsertRow.js';
5
10
  import { getPrimaryDb } from './utilities/getPrimaryDb.js';
6
11
  import { getTransaction } from './utilities/getTransaction.js';
7
- export const updateOne = async function updateOne({ id, collection: collectionSlug, data, joins: joinQuery, locale, options = {
12
+ import { markWrite } from './utilities/readAfterWrite.js';
13
+ export const updateOne = async function updateOne({ id, branch, collection: collectionSlug, data, joins: joinQuery, locale, options = {
8
14
  upsert: false
9
15
  }, req, returning, select, where: whereArg }) {
10
16
  const collection = this.payload.collections[collectionSlug].config;
11
17
  const tableName = this.tableNameMap.get(toSnakeCase(collection.slug));
12
- let idToUpdate = id;
18
+ let idToUpdate = id === undefined || id === null ? id : await resolveBranchRowID({
19
+ id,
20
+ branch,
21
+ collectionSlug,
22
+ req
23
+ });
24
+ let whereToUpdate;
13
25
  const db = getPrimaryDb(this, await getTransaction(this, req));
14
26
  if (!idToUpdate) {
27
+ whereArg = await resolveBranchQuery({
28
+ branch,
29
+ collectionSlug,
30
+ req,
31
+ where: whereArg
32
+ });
15
33
  const { joins, selectFields, where } = buildQuery({
16
34
  adapter: this,
17
35
  fields: collection.flattenedFields,
18
36
  locale,
37
+ req,
19
38
  tableName,
20
39
  where: whereArg
21
40
  });
41
+ // A `where` that needs joins cannot be applied to the UPDATE statement itself, so those
42
+ // queries keep resolving a matching id first and then update that row unconditionally
43
+ whereToUpdate = joins.length === 0 ? where : undefined;
44
+ if (options.atomic === true) {
45
+ if (joins.length > 0) {
46
+ throw new Error('Atomic where updates do not support predicates that require joins');
47
+ }
48
+ if (!shouldUseOptimizedUpsertRow({
49
+ data,
50
+ fields: collection.flattenedFields
51
+ })) {
52
+ throw new Error('Atomic where updates only support fields stored on the main table');
53
+ }
54
+ const { arraysToPush, row } = transformForWrite({
55
+ adapter: this,
56
+ data,
57
+ enableAtomicWrites: true,
58
+ fields: collection.flattenedFields,
59
+ tableName
60
+ });
61
+ if (arraysToPush && Object.keys(arraysToPush).length) {
62
+ throw new Error('Atomic where updates do not support array operations');
63
+ }
64
+ const table = this.tables[tableName];
65
+ const matchingRowQuery = db.select({
66
+ id: table.id
67
+ }).from(table).where(where).limit(1);
68
+ // PostgreSQL must lock the candidate before applying LIMIT so a waiting caller can
69
+ // continue to another match if a concurrent update makes the first row ineligible.
70
+ // SQLite serializes writers and does not support SELECT ... FOR UPDATE.
71
+ const matchingRow = this.name === 'postgres' ? matchingRowQuery.for('update') : matchingRowQuery;
72
+ markWrite(this);
73
+ const docs = await db.update(table).set(row).where(and(eq(table.id, matchingRow), where)).returning();
74
+ if (!docs[0]) {
75
+ return null;
76
+ }
77
+ const result = transform({
78
+ adapter: this,
79
+ config: this.payload.config,
80
+ data: docs[0],
81
+ fields: collection.flattenedFields,
82
+ joinQuery: false,
83
+ tableName
84
+ });
85
+ applyBranchIDProjection({
86
+ branch,
87
+ collectionSlug,
88
+ docs: [
89
+ result
90
+ ],
91
+ req
92
+ });
93
+ return result;
94
+ }
22
95
  // selectDistinct will only return if there are joins
23
96
  const selectDistinctResult = await selectDistinct({
24
97
  adapter: this,
@@ -57,12 +130,28 @@ export const updateOne = async function updateOne({ id, collection: collectionSl
57
130
  joinQuery,
58
131
  operation: 'update',
59
132
  req,
60
- select,
61
- tableName
133
+ select: withBranchIDSelect({
134
+ branch,
135
+ collectionSlug,
136
+ req,
137
+ select
138
+ }),
139
+ tableName,
140
+ where: whereToUpdate
62
141
  });
63
142
  if (returning === false) {
64
143
  return null;
65
144
  }
145
+ // The row written on a branch is the shadow row, so the document it returns
146
+ // carries that row's primary key rather than the document's canonical ID.
147
+ applyBranchIDProjection({
148
+ branch,
149
+ collectionSlug,
150
+ docs: [
151
+ result
152
+ ],
153
+ req
154
+ });
66
155
  return result;
67
156
  };
68
157
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { UpdateOne } from 'payload'\n\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { upsertRow } from './upsertRow/index.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: DrizzleAdapter,\n {\n id,\n collection: collectionSlug,\n data,\n joins: joinQuery,\n locale,\n options = { upsert: false },\n req,\n returning,\n select,\n where: whereArg,\n },\n) {\n const collection = this.payload.collections[collectionSlug].config\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n let idToUpdate = id\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n if (!idToUpdate) {\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale,\n tableName,\n where: whereArg,\n })\n\n // selectDistinct will only return if there are joins\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n db,\n joins,\n query: ({ query }) => query.limit(1),\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n idToUpdate = selectDistinctResult?.[0]?.id\n // If id wasn't passed but `where` without any joins, retrieve it with findFirst\n } else if (whereArg && !joins.length) {\n const table = this.tables[tableName]\n\n const docsToUpdate = await (db as LibSQLDatabase)\n .select({\n id: table.id,\n })\n .from(table)\n .where(where)\n .limit(1)\n idToUpdate = docsToUpdate?.[0]?.id\n }\n }\n\n if (!idToUpdate && !options.upsert) {\n // TODO: In 4.0, if returning === false, we should differentiate between:\n // - No document found to update\n // - Document found, but returning === false\n return null\n }\n\n const result = await upsertRow({\n id: idToUpdate,\n adapter: this,\n collectionSlug,\n data,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n joinQuery,\n operation: 'update',\n req,\n select,\n tableName,\n })\n\n if (returning === false) {\n return null\n }\n\n return result\n}\n"],"names":["toSnakeCase","buildQuery","selectDistinct","upsertRow","getPrimaryDb","getTransaction","updateOne","id","collection","collectionSlug","data","joins","joinQuery","locale","options","upsert","req","returning","select","where","whereArg","payload","collections","config","tableName","tableNameMap","get","slug","idToUpdate","db","selectFields","adapter","fields","flattenedFields","selectDistinctResult","query","limit","length","table","tables","docsToUpdate","from","result","ignoreResult","operation"],"mappings":"AAGA,OAAOA,iBAAiB,gBAAe;AAIvC,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,SAAS,QAAQ,uBAAsB;AAChD,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAE9D,OAAO,MAAMC,YAAuB,eAAeA,UAEjD,EACEC,EAAE,EACFC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,OAAOC,SAAS,EAChBC,MAAM,EACNC,UAAU;IAAEC,QAAQ;AAAM,CAAC,EAC3BC,GAAG,EACHC,SAAS,EACTC,MAAM,EACNC,OAAOC,QAAQ,EAChB;IAED,MAAMZ,aAAa,IAAI,CAACa,OAAO,CAACC,WAAW,CAACb,eAAe,CAACc,MAAM;IAClE,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAAC1B,YAAYQ,WAAWmB,IAAI;IACnE,IAAIC,aAAarB;IAEjB,MAAMsB,KAAKzB,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEW;IAEzD,IAAI,CAACY,YAAY;QACf,MAAM,EAAEjB,KAAK,EAAEmB,YAAY,EAAEX,KAAK,EAAE,GAAGlB,WAAW;YAChD8B,SAAS,IAAI;YACbC,QAAQxB,WAAWyB,eAAe;YAClCpB;YACAW;YACAL,OAAOC;QACT;QAEA,qDAAqD;QACrD,MAAMc,uBAAuB,MAAMhC,eAAe;YAChD6B,SAAS,IAAI;YACbF;YACAlB;YACAwB,OAAO,CAAC,EAAEA,KAAK,EAAE,GAAKA,MAAMC,KAAK,CAAC;YAClCN;YACAN;YACAL;QACF;QAEA,IAAIe,sBAAsB,CAAC,EAAE,EAAE3B,IAAI;YACjCqB,aAAaM,sBAAsB,CAAC,EAAE,EAAE3B;QACxC,gFAAgF;QAClF,OAAO,IAAIa,YAAY,CAACT,MAAM0B,MAAM,EAAE;YACpC,MAAMC,QAAQ,IAAI,CAACC,MAAM,CAACf,UAAU;YAEpC,MAAMgB,eAAe,MAAM,AAACX,GACzBX,MAAM,CAAC;gBACNX,IAAI+B,MAAM/B,EAAE;YACd,GACCkC,IAAI,CAACH,OACLnB,KAAK,CAACA,OACNiB,KAAK,CAAC;YACTR,aAAaY,cAAc,CAAC,EAAE,EAAEjC;QAClC;IACF;IAEA,IAAI,CAACqB,cAAc,CAACd,QAAQC,MAAM,EAAE;QAClC,yEAAyE;QACzE,gCAAgC;QAChC,4CAA4C;QAC5C,OAAO;IACT;IAEA,MAAM2B,SAAS,MAAMvC,UAAU;QAC7BI,IAAIqB;QACJG,SAAS,IAAI;QACbtB;QACAC;QACAmB;QACAG,QAAQxB,WAAWyB,eAAe;QAClCU,cAAc1B,cAAc;QAC5BL;QACAgC,WAAW;QACX5B;QACAE;QACAM;IACF;IAEA,IAAIP,cAAc,OAAO;QACvB,OAAO;IACT;IAEA,OAAOyB;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/updateOne.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { UpdateOne } from 'payload'\n\nimport { and, eq } from 'drizzle-orm'\nimport {\n applyBranchIDProjection,\n resolveBranchQuery,\n resolveBranchRowID,\n withBranchIDSelect,\n} from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter, PostgresDB } from './types.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { selectDistinct } from './queries/selectDistinct.js'\nimport { transform } from './transform/read/index.js'\nimport { transformForWrite } from './transform/write/index.js'\nimport { upsertRow } from './upsertRow/index.js'\nimport { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpsertRow.js'\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const updateOne: UpdateOne = async function updateOne(\n this: DrizzleAdapter,\n {\n id,\n branch,\n collection: collectionSlug,\n data,\n joins: joinQuery,\n locale,\n options = { upsert: false },\n req,\n returning,\n select,\n where: whereArg,\n },\n) {\n const collection = this.payload.collections[collectionSlug].config\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n let idToUpdate =\n id === undefined || id === null\n ? id\n : await resolveBranchRowID({ id, branch, collectionSlug, req })\n let whereToUpdate: SQL<unknown> | undefined\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n if (!idToUpdate) {\n whereArg = await resolveBranchQuery({ branch, collectionSlug, req, where: whereArg })\n\n const { joins, selectFields, where } = buildQuery({\n adapter: this,\n fields: collection.flattenedFields,\n locale,\n req,\n tableName,\n where: whereArg,\n })\n // A `where` that needs joins cannot be applied to the UPDATE statement itself, so those\n // queries keep resolving a matching id first and then update that row unconditionally\n whereToUpdate = joins.length === 0 ? where : undefined\n\n if (options.atomic === true) {\n if (joins.length > 0) {\n throw new Error('Atomic where updates do not support predicates that require joins')\n }\n\n if (!shouldUseOptimizedUpsertRow({ data, fields: collection.flattenedFields })) {\n throw new Error('Atomic where updates only support fields stored on the main table')\n }\n\n const { arraysToPush, row } = transformForWrite({\n adapter: this,\n data,\n enableAtomicWrites: true,\n fields: collection.flattenedFields,\n tableName,\n })\n\n if (arraysToPush && Object.keys(arraysToPush).length) {\n throw new Error('Atomic where updates do not support array operations')\n }\n\n const table = this.tables[tableName]\n const matchingRowQuery = (db as PostgresDB)\n .select({ id: table.id })\n .from(table)\n .where(where)\n .limit(1)\n\n // PostgreSQL must lock the candidate before applying LIMIT so a waiting caller can\n // continue to another match if a concurrent update makes the first row ineligible.\n // SQLite serializes writers and does not support SELECT ... FOR UPDATE.\n const matchingRow =\n this.name === 'postgres' ? matchingRowQuery.for('update') : matchingRowQuery\n\n markWrite(this)\n\n const docs = await (db as LibSQLDatabase)\n .update(table)\n .set(row)\n .where(and(eq(table.id, matchingRow), where))\n .returning()\n\n if (!docs[0]) {\n return null\n }\n\n const result = transform({\n adapter: this,\n config: this.payload.config,\n data: docs[0],\n fields: collection.flattenedFields,\n joinQuery: false,\n tableName,\n })\n\n applyBranchIDProjection({\n branch,\n collectionSlug,\n docs: [result as Record<string, unknown>],\n req,\n })\n\n return result\n }\n\n // selectDistinct will only return if there are joins\n const selectDistinctResult = await selectDistinct({\n adapter: this,\n db,\n joins,\n query: ({ query }) => query.limit(1),\n selectFields,\n tableName,\n where,\n })\n\n if (selectDistinctResult?.[0]?.id) {\n idToUpdate = selectDistinctResult?.[0]?.id\n // If id wasn't passed but `where` without any joins, retrieve it with findFirst\n } else if (whereArg && !joins.length) {\n const table = this.tables[tableName]\n\n const docsToUpdate = await (db as LibSQLDatabase)\n .select({\n id: table.id,\n })\n .from(table)\n .where(where)\n .limit(1)\n idToUpdate = docsToUpdate?.[0]?.id\n }\n }\n\n if (!idToUpdate && !options.upsert) {\n // TODO: In 4.0, if returning === false, we should differentiate between:\n // - No document found to update\n // - Document found, but returning === false\n return null\n }\n\n const result = await upsertRow({\n id: idToUpdate,\n adapter: this,\n collectionSlug,\n data,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n joinQuery,\n operation: 'update',\n req,\n select: withBranchIDSelect({ branch, collectionSlug, req, select }),\n tableName,\n where: whereToUpdate,\n })\n\n if (returning === false) {\n return null\n }\n\n // The row written on a branch is the shadow row, so the document it returns\n // carries that row's primary key rather than the document's canonical ID.\n applyBranchIDProjection({\n branch,\n collectionSlug,\n docs: [result as Record<string, unknown>],\n req,\n })\n\n return result\n}\n"],"names":["and","eq","applyBranchIDProjection","resolveBranchQuery","resolveBranchRowID","withBranchIDSelect","toSnakeCase","buildQuery","selectDistinct","transform","transformForWrite","upsertRow","shouldUseOptimizedUpsertRow","getPrimaryDb","getTransaction","markWrite","updateOne","id","branch","collection","collectionSlug","data","joins","joinQuery","locale","options","upsert","req","returning","select","where","whereArg","payload","collections","config","tableName","tableNameMap","get","slug","idToUpdate","undefined","whereToUpdate","db","selectFields","adapter","fields","flattenedFields","length","atomic","Error","arraysToPush","row","enableAtomicWrites","Object","keys","table","tables","matchingRowQuery","from","limit","matchingRow","name","for","docs","update","set","result","selectDistinctResult","query","docsToUpdate","ignoreResult","operation"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { UpsertBranchGlobalChange } from 'payload';
2
+ export declare const upsertBranchGlobalChange: UpsertBranchGlobalChange;
3
+ //# sourceMappingURL=upsertBranchGlobalChange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upsertBranchGlobalChange.d.ts","sourceRoot":"","sources":["../src/upsertBranchGlobalChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAWvD,eAAO,MAAM,wBAAwB,EAAE,wBAyBpC,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { branchChangesCollectionSlug } from 'payload';
2
+ import toSnakeCase from 'to-snake-case';
3
+ import { getPrimaryDb } from './utilities/getPrimaryDb.js';
4
+ import { getTransaction } from './utilities/getTransaction.js';
5
+ import { markWrite } from './utilities/readAfterWrite.js';
6
+ export const upsertBranchGlobalChange = async function upsertBranchGlobalChange({ branch, globalSlug, req }) {
7
+ const tableName = this.tableNameMap.get(toSnakeCase(branchChangesCollectionSlug));
8
+ const table = this.tables[tableName];
9
+ const db = getPrimaryDb(this, await getTransaction(this, req));
10
+ const now = new Date().toISOString();
11
+ await this.insert({
12
+ db,
13
+ onConflictDoUpdate: {
14
+ set: {
15
+ globalSlug
16
+ },
17
+ target: [
18
+ table.branch,
19
+ table.globalSlug
20
+ ]
21
+ },
22
+ tableName,
23
+ values: {
24
+ branch,
25
+ createdAt: now,
26
+ entityType: 'global',
27
+ globalSlug,
28
+ operation: 'update',
29
+ updatedAt: now
30
+ }
31
+ });
32
+ markWrite(this);
33
+ };
34
+
35
+ //# sourceMappingURL=upsertBranchGlobalChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/upsertBranchGlobalChange.ts"],"sourcesContent":["import type { UpsertBranchGlobalChange } from 'payload'\n\nimport { branchChangesCollectionSlug } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getPrimaryDb } from './utilities/getPrimaryDb.js'\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { markWrite } from './utilities/readAfterWrite.js'\n\nexport const upsertBranchGlobalChange: UpsertBranchGlobalChange =\n async function upsertBranchGlobalChange(this: DrizzleAdapter, { branch, globalSlug, req }) {\n const tableName = this.tableNameMap.get(toSnakeCase(branchChangesCollectionSlug))\n const table = this.tables[tableName]\n const db = getPrimaryDb(this, await getTransaction(this, req))\n const now = new Date().toISOString()\n\n await this.insert({\n db,\n onConflictDoUpdate: {\n set: { globalSlug },\n target: [table.branch, table.globalSlug],\n },\n tableName,\n values: {\n branch,\n createdAt: now,\n entityType: 'global',\n globalSlug,\n operation: 'update',\n updatedAt: now,\n },\n })\n\n markWrite(this)\n }\n"],"names":["branchChangesCollectionSlug","toSnakeCase","getPrimaryDb","getTransaction","markWrite","upsertBranchGlobalChange","branch","globalSlug","req","tableName","tableNameMap","get","table","tables","db","now","Date","toISOString","insert","onConflictDoUpdate","set","target","values","createdAt","entityType","operation","updatedAt"],"mappings":"AAEA,SAASA,2BAA2B,QAAQ,UAAS;AACrD,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,SAAS,QAAQ,gCAA+B;AAEzD,OAAO,MAAMC,2BACX,eAAeA,yBAA+C,EAAEC,MAAM,EAAEC,UAAU,EAAEC,GAAG,EAAE;IACvF,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAACV,YAAYD;IACpD,MAAMY,QAAQ,IAAI,CAACC,MAAM,CAACJ,UAAU;IACpC,MAAMK,KAAKZ,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEK;IACzD,MAAMO,MAAM,IAAIC,OAAOC,WAAW;IAElC,MAAM,IAAI,CAACC,MAAM,CAAC;QAChBJ;QACAK,oBAAoB;YAClBC,KAAK;gBAAEb;YAAW;YAClBc,QAAQ;gBAACT,MAAMN,MAAM;gBAAEM,MAAML,UAAU;aAAC;QAC1C;QACAE;QACAa,QAAQ;YACNhB;YACAiB,WAAWR;YACXS,YAAY;YACZjB;YACAkB,WAAW;YACXC,WAAWX;QACb;IACF;IAEAX,UAAU,IAAI;AAChB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"deleteExistingRowsByPath.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB,oGASlC,IAAI,KAAG,OAAO,CAAC,IAAI,CA4CrB,CAAA"}
1
+ {"version":3,"file":"deleteExistingRowsByPath.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,wBAAwB,oGASlC,IAAI,KAAG,OAAO,CAAC,IAAI,CAmDrB,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { and, eq, inArray } from 'drizzle-orm';
2
2
  export const deleteExistingRowsByPath = async ({ adapter, db, localeColumnName = '_locale', parentColumnName = '_parentID', parentID, pathColumnName = '_path', rows, tableName })=>{
3
- const localizedPathsToDelete = new Set();
3
+ const localizedPathsToDelete = new Map();
4
4
  const pathsToDelete = new Set();
5
5
  const table = adapter.tables[tableName];
6
6
  rows.forEach((row)=>{
@@ -8,24 +8,29 @@ export const deleteExistingRowsByPath = async ({ adapter, db, localeColumnName =
8
8
  const localeData = row[localeColumnName];
9
9
  if (typeof path === 'string') {
10
10
  if (typeof localeData === 'string') {
11
- localizedPathsToDelete.add(path);
11
+ const localePaths = localizedPathsToDelete.get(localeData) ?? new Set();
12
+ localePaths.add(path);
13
+ localizedPathsToDelete.set(localeData, localePaths);
12
14
  } else {
13
15
  pathsToDelete.add(path);
14
16
  }
15
17
  }
16
18
  });
17
19
  if (localizedPathsToDelete.size > 0) {
18
- const whereConstraints = [
19
- eq(table[parentColumnName], parentID)
20
- ];
21
- if (pathColumnName) {
22
- whereConstraints.push(inArray(table[pathColumnName], Array.from(localizedPathsToDelete)));
20
+ for (const [locale, localePaths] of localizedPathsToDelete){
21
+ const whereConstraints = [
22
+ eq(table[parentColumnName], parentID)
23
+ ];
24
+ if (pathColumnName) {
25
+ whereConstraints.push(inArray(table[pathColumnName], Array.from(localePaths)));
26
+ }
27
+ whereConstraints.push(eq(table[localeColumnName], locale));
28
+ await adapter.deleteWhere({
29
+ db,
30
+ tableName,
31
+ where: and(...whereConstraints)
32
+ });
23
33
  }
24
- await adapter.deleteWhere({
25
- db,
26
- tableName,
27
- where: and(...whereConstraints)
28
- });
29
34
  }
30
35
  if (pathsToDelete.size > 0) {
31
36
  const whereConstraints = [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"sourcesContent":["import { and, eq, inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n localeColumnName?: string\n parentColumnName?: string\n parentID: unknown\n pathColumnName?: string\n rows: Record<string, unknown>[]\n tableName: string\n}\n\nexport const deleteExistingRowsByPath = async ({\n adapter,\n db,\n localeColumnName = '_locale',\n parentColumnName = '_parentID',\n parentID,\n pathColumnName = '_path',\n rows,\n tableName,\n}: Args): Promise<void> => {\n const localizedPathsToDelete = new Set<string>()\n const pathsToDelete = new Set<string>()\n const table = adapter.tables[tableName]\n\n rows.forEach((row) => {\n const path = row[pathColumnName]\n const localeData = row[localeColumnName]\n if (typeof path === 'string') {\n if (typeof localeData === 'string') {\n localizedPathsToDelete.add(path)\n } else {\n pathsToDelete.add(path)\n }\n }\n })\n\n if (localizedPathsToDelete.size > 0) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(localizedPathsToDelete)))\n }\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n\n if (pathsToDelete.size > 0) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(pathsToDelete)))\n }\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n}\n"],"names":["and","eq","inArray","deleteExistingRowsByPath","adapter","db","localeColumnName","parentColumnName","parentID","pathColumnName","rows","tableName","localizedPathsToDelete","Set","pathsToDelete","table","tables","forEach","row","path","localeData","add","size","whereConstraints","push","Array","from","deleteWhere","where"],"mappings":"AAAA,SAASA,GAAG,EAAEC,EAAE,EAAEC,OAAO,QAAQ,cAAa;AAe9C,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,OAAO,EACPC,EAAE,EACFC,mBAAmB,SAAS,EAC5BC,mBAAmB,WAAW,EAC9BC,QAAQ,EACRC,iBAAiB,OAAO,EACxBC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,yBAAyB,IAAIC;IACnC,MAAMC,gBAAgB,IAAID;IAC1B,MAAME,QAAQX,QAAQY,MAAM,CAACL,UAAU;IAEvCD,KAAKO,OAAO,CAAC,CAACC;QACZ,MAAMC,OAAOD,GAAG,CAACT,eAAe;QAChC,MAAMW,aAAaF,GAAG,CAACZ,iBAAiB;QACxC,IAAI,OAAOa,SAAS,UAAU;YAC5B,IAAI,OAAOC,eAAe,UAAU;gBAClCR,uBAAuBS,GAAG,CAACF;YAC7B,OAAO;gBACLL,cAAcO,GAAG,CAACF;YACpB;QACF;IACF;IAEA,IAAIP,uBAAuBU,IAAI,GAAG,GAAG;QACnC,MAAMC,mBAAmB;YAACtB,GAAGc,KAAK,CAACR,iBAAiB,EAAEC;SAAU;QAEhE,IAAIC,gBAAgB;YAClBc,iBAAiBC,IAAI,CAACtB,QAAQa,KAAK,CAACN,eAAe,EAAEgB,MAAMC,IAAI,CAACd;QAClE;QAEA,MAAMR,QAAQuB,WAAW,CAAC;YACxBtB;YACAM;YACAiB,OAAO5B,OAAOuB;QAChB;IACF;IAEA,IAAIT,cAAcQ,IAAI,GAAG,GAAG;QAC1B,MAAMC,mBAAmB;YAACtB,GAAGc,KAAK,CAACR,iBAAiB,EAAEC;SAAU;QAEhE,IAAIC,gBAAgB;YAClBc,iBAAiBC,IAAI,CAACtB,QAAQa,KAAK,CAACN,eAAe,EAAEgB,MAAMC,IAAI,CAACZ;QAClE;QAEA,MAAMV,QAAQuB,WAAW,CAAC;YACxBtB;YACAM;YACAiB,OAAO5B,OAAOuB;QAChB;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/upsertRow/deleteExistingRowsByPath.ts"],"sourcesContent":["import { and, eq, inArray } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n localeColumnName?: string\n parentColumnName?: string\n parentID: unknown\n pathColumnName?: string\n rows: Record<string, unknown>[]\n tableName: string\n}\n\nexport const deleteExistingRowsByPath = async ({\n adapter,\n db,\n localeColumnName = '_locale',\n parentColumnName = '_parentID',\n parentID,\n pathColumnName = '_path',\n rows,\n tableName,\n}: Args): Promise<void> => {\n const localizedPathsToDelete = new Map<string, Set<string>>()\n const pathsToDelete = new Set<string>()\n const table = adapter.tables[tableName]\n\n rows.forEach((row) => {\n const path = row[pathColumnName]\n const localeData = row[localeColumnName]\n if (typeof path === 'string') {\n if (typeof localeData === 'string') {\n const localePaths = localizedPathsToDelete.get(localeData) ?? new Set<string>()\n\n localePaths.add(path)\n localizedPathsToDelete.set(localeData, localePaths)\n } else {\n pathsToDelete.add(path)\n }\n }\n })\n\n if (localizedPathsToDelete.size > 0) {\n for (const [locale, localePaths] of localizedPathsToDelete) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(localePaths)))\n }\n\n whereConstraints.push(eq(table[localeColumnName], locale))\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n }\n\n if (pathsToDelete.size > 0) {\n const whereConstraints = [eq(table[parentColumnName], parentID)]\n\n if (pathColumnName) {\n whereConstraints.push(inArray(table[pathColumnName], Array.from(pathsToDelete)))\n }\n\n await adapter.deleteWhere({\n db,\n tableName,\n where: and(...whereConstraints),\n })\n }\n}\n"],"names":["and","eq","inArray","deleteExistingRowsByPath","adapter","db","localeColumnName","parentColumnName","parentID","pathColumnName","rows","tableName","localizedPathsToDelete","Map","pathsToDelete","Set","table","tables","forEach","row","path","localeData","localePaths","get","add","set","size","locale","whereConstraints","push","Array","from","deleteWhere","where"],"mappings":"AAAA,SAASA,GAAG,EAAEC,EAAE,EAAEC,OAAO,QAAQ,cAAa;AAe9C,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,OAAO,EACPC,EAAE,EACFC,mBAAmB,SAAS,EAC5BC,mBAAmB,WAAW,EAC9BC,QAAQ,EACRC,iBAAiB,OAAO,EACxBC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,yBAAyB,IAAIC;IACnC,MAAMC,gBAAgB,IAAIC;IAC1B,MAAMC,QAAQZ,QAAQa,MAAM,CAACN,UAAU;IAEvCD,KAAKQ,OAAO,CAAC,CAACC;QACZ,MAAMC,OAAOD,GAAG,CAACV,eAAe;QAChC,MAAMY,aAAaF,GAAG,CAACb,iBAAiB;QACxC,IAAI,OAAOc,SAAS,UAAU;YAC5B,IAAI,OAAOC,eAAe,UAAU;gBAClC,MAAMC,cAAcV,uBAAuBW,GAAG,CAACF,eAAe,IAAIN;gBAElEO,YAAYE,GAAG,CAACJ;gBAChBR,uBAAuBa,GAAG,CAACJ,YAAYC;YACzC,OAAO;gBACLR,cAAcU,GAAG,CAACJ;YACpB;QACF;IACF;IAEA,IAAIR,uBAAuBc,IAAI,GAAG,GAAG;QACnC,KAAK,MAAM,CAACC,QAAQL,YAAY,IAAIV,uBAAwB;YAC1D,MAAMgB,mBAAmB;gBAAC3B,GAAGe,KAAK,CAACT,iBAAiB,EAAEC;aAAU;YAEhE,IAAIC,gBAAgB;gBAClBmB,iBAAiBC,IAAI,CAAC3B,QAAQc,KAAK,CAACP,eAAe,EAAEqB,MAAMC,IAAI,CAACT;YAClE;YAEAM,iBAAiBC,IAAI,CAAC5B,GAAGe,KAAK,CAACV,iBAAiB,EAAEqB;YAElD,MAAMvB,QAAQ4B,WAAW,CAAC;gBACxB3B;gBACAM;gBACAsB,OAAOjC,OAAO4B;YAChB;QACF;IACF;IAEA,IAAId,cAAcY,IAAI,GAAG,GAAG;QAC1B,MAAME,mBAAmB;YAAC3B,GAAGe,KAAK,CAACT,iBAAiB,EAAEC;SAAU;QAEhE,IAAIC,gBAAgB;YAClBmB,iBAAiBC,IAAI,CAAC3B,QAAQc,KAAK,CAACP,eAAe,EAAEqB,MAAMC,IAAI,CAACjB;QAClE;QAEA,MAAMV,QAAQ4B,WAAW,CAAC;YACxB3B;YACAM;YACAsB,OAAOjC,OAAO4B;QAChB;IACF;AACF,EAAC"}
@@ -7,5 +7,5 @@ import type { Args } from './types.js';
7
7
  *
8
8
  * adapter function replaces the entire row and does not support partial updates.
9
9
  */
10
- export declare const upsertRow: <T extends Record<string, unknown> | TypeWithID>({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, customID, joinQuery: _joinQuery, operation, path, req, select, tableName, upsertTarget, where, }: Args) => Promise<T>;
10
+ export declare const upsertRow: <T extends Record<string, unknown> | TypeWithID>({ id, adapter, collectionSlug, data, db, fields, globalSlug, ignoreResult, customID, joinQuery: _joinQuery, operation, path, req, select, tableName, upsertConflictData, upsertTarget, where, }: Args) => Promise<null | T>;
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upsertRow/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAKzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAqBtC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,+KAqB3E,IAAI,KAAG,OAAO,CAAC,CAAC,CAotBlB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upsertRow/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAMzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAqBtC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,mMAsB3E,IAAI,KAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CA01BzB,CAAA"}