@payloadcms/drizzle 4.0.0-internal.e7d4ebc → 4.0.0-internal.ea6e8f8

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 (280) 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/countVersions.d.ts.map +1 -1
  5. package/dist/countVersions.js +28 -4
  6. package/dist/countVersions.js.map +1 -1
  7. package/dist/createGlobalVersion.d.ts.map +1 -1
  8. package/dist/createGlobalVersion.js +15 -2
  9. package/dist/createGlobalVersion.js.map +1 -1
  10. package/dist/createTableName.d.ts.map +1 -1
  11. package/dist/createTableName.js +2 -7
  12. package/dist/createTableName.js.map +1 -1
  13. package/dist/createVersion.d.ts.map +1 -1
  14. package/dist/createVersion.js +12 -1
  15. package/dist/createVersion.js.map +1 -1
  16. package/dist/deleteBranchGlobal.d.ts +10 -0
  17. package/dist/deleteBranchGlobal.d.ts.map +1 -0
  18. package/dist/deleteBranchGlobal.js +27 -0
  19. package/dist/deleteBranchGlobal.js.map +1 -0
  20. package/dist/deleteOne.d.ts.map +1 -1
  21. package/dist/deleteOne.js +18 -1
  22. package/dist/deleteOne.js.map +1 -1
  23. package/dist/exports/postgres.d.ts +3 -0
  24. package/dist/exports/postgres.d.ts.map +1 -1
  25. package/dist/exports/postgres.js +3 -0
  26. package/dist/exports/postgres.js.map +1 -1
  27. package/dist/exports/sqlite.d.ts +1 -0
  28. package/dist/exports/sqlite.d.ts.map +1 -1
  29. package/dist/exports/sqlite.js +1 -0
  30. package/dist/exports/sqlite.js.map +1 -1
  31. package/dist/find/buildFindManyArgs.d.ts +3 -2
  32. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  33. package/dist/find/buildFindManyArgs.js +2 -1
  34. package/dist/find/buildFindManyArgs.js.map +1 -1
  35. package/dist/find/buildPolymorphicJoinQuery.d.ts +39 -0
  36. package/dist/find/buildPolymorphicJoinQuery.d.ts.map +1 -0
  37. package/dist/find/buildPolymorphicJoinQuery.js +152 -0
  38. package/dist/find/buildPolymorphicJoinQuery.js.map +1 -0
  39. package/dist/find/buildPolymorphicJoinWhere.d.ts +20 -0
  40. package/dist/find/buildPolymorphicJoinWhere.d.ts.map +1 -0
  41. package/dist/find/buildPolymorphicJoinWhere.js +301 -0
  42. package/dist/find/buildPolymorphicJoinWhere.js.map +1 -0
  43. package/dist/find/createPolymorphicJoinWherePlan.d.ts +37 -0
  44. package/dist/find/createPolymorphicJoinWherePlan.d.ts.map +1 -0
  45. package/dist/find/createPolymorphicJoinWherePlan.js +191 -0
  46. package/dist/find/createPolymorphicJoinWherePlan.js.map +1 -0
  47. package/dist/find/findMany.d.ts +6 -1
  48. package/dist/find/findMany.d.ts.map +1 -1
  49. package/dist/find/findMany.js +16 -3
  50. package/dist/find/findMany.js.map +1 -1
  51. package/dist/find/traverseFields.d.ts +3 -2
  52. package/dist/find/traverseFields.d.ts.map +1 -1
  53. package/dist/find/traverseFields.js +72 -197
  54. package/dist/find/traverseFields.js.map +1 -1
  55. package/dist/find.d.ts.map +1 -1
  56. package/dist/find.js +32 -4
  57. package/dist/find.js.map +1 -1
  58. package/dist/findDistinct.d.ts.map +1 -1
  59. package/dist/findDistinct.js +107 -8
  60. package/dist/findDistinct.js.map +1 -1
  61. package/dist/findGlobal.d.ts.map +1 -1
  62. package/dist/findGlobal.js +22 -5
  63. package/dist/findGlobal.js.map +1 -1
  64. package/dist/findGlobalVersions.js +8 -3
  65. package/dist/findGlobalVersions.js.map +1 -1
  66. package/dist/findOne.d.ts +1 -1
  67. package/dist/findOne.d.ts.map +1 -1
  68. package/dist/findOne.js +30 -3
  69. package/dist/findOne.js.map +1 -1
  70. package/dist/findVersions.d.ts.map +1 -1
  71. package/dist/findVersions.js +32 -5
  72. package/dist/findVersions.js.map +1 -1
  73. package/dist/index.d.ts +6 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +4 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/migrate.d.ts.map +1 -1
  78. package/dist/migrate.js +41 -15
  79. package/dist/migrate.js.map +1 -1
  80. package/dist/migrateDown.d.ts +2 -1
  81. package/dist/migrateDown.d.ts.map +1 -1
  82. package/dist/migrateDown.js +17 -4
  83. package/dist/migrateDown.js.map +1 -1
  84. package/dist/migrateFresh.d.ts +4 -2
  85. package/dist/migrateFresh.d.ts.map +1 -1
  86. package/dist/migrateFresh.js +26 -9
  87. package/dist/migrateFresh.js.map +1 -1
  88. package/dist/migrateRefresh.d.ts +2 -1
  89. package/dist/migrateRefresh.d.ts.map +1 -1
  90. package/dist/migrateRefresh.js +20 -5
  91. package/dist/migrateRefresh.js.map +1 -1
  92. package/dist/migrateReset.d.ts +2 -1
  93. package/dist/migrateReset.d.ts.map +1 -1
  94. package/dist/migrateReset.js +18 -4
  95. package/dist/migrateReset.js.map +1 -1
  96. package/dist/migrateStatus.d.ts +2 -1
  97. package/dist/migrateStatus.d.ts.map +1 -1
  98. package/dist/migrateStatus.js +11 -6
  99. package/dist/migrateStatus.js.map +1 -1
  100. package/dist/postgres/createJSONQuery/index.js +3 -3
  101. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  102. package/dist/postgres/init.d.ts.map +1 -1
  103. package/dist/postgres/init.js +6 -0
  104. package/dist/postgres/init.js.map +1 -1
  105. package/dist/postgres/insert.d.ts.map +1 -1
  106. package/dist/postgres/insert.js +4 -2
  107. package/dist/postgres/insert.js.map +1 -1
  108. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts +35 -0
  109. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  110. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js +185 -0
  111. package/dist/postgres/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  112. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  113. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js +8 -4
  114. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.js.map +1 -1
  115. package/dist/postgres/predefinedMigrations/v2-v3/index.js +1 -1
  116. package/dist/postgres/predefinedMigrations/v2-v3/index.js.map +1 -1
  117. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  118. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  119. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  120. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  121. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  122. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  123. package/dist/postgres/query/postgresUnaccent.js +40 -0
  124. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  125. package/dist/postgres/types.d.ts +17 -2
  126. package/dist/postgres/types.d.ts.map +1 -1
  127. package/dist/postgres/types.js.map +1 -1
  128. package/dist/queries/buildAndOrConditions.d.ts +3 -2
  129. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  130. package/dist/queries/buildAndOrConditions.js +2 -1
  131. package/dist/queries/buildAndOrConditions.js.map +1 -1
  132. package/dist/queries/buildBranchVisibility.d.ts +11 -0
  133. package/dist/queries/buildBranchVisibility.d.ts.map +1 -0
  134. package/dist/queries/buildBranchVisibility.js +48 -0
  135. package/dist/queries/buildBranchVisibility.js.map +1 -0
  136. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  137. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  138. package/dist/queries/buildOperatorConstraint.js +63 -0
  139. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  140. package/dist/queries/buildOrderBy.d.ts +3 -2
  141. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  142. package/dist/queries/buildOrderBy.js +2 -1
  143. package/dist/queries/buildOrderBy.js.map +1 -1
  144. package/dist/queries/buildQuery.d.ts +3 -2
  145. package/dist/queries/buildQuery.d.ts.map +1 -1
  146. package/dist/queries/buildQuery.js +4 -2
  147. package/dist/queries/buildQuery.js.map +1 -1
  148. package/dist/queries/getTableColumnFromPath.d.ts +15 -5
  149. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  150. package/dist/queries/getTableColumnFromPath.js +225 -54
  151. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  152. package/dist/queries/operatorMap.d.ts +7 -3
  153. package/dist/queries/operatorMap.d.ts.map +1 -1
  154. package/dist/queries/operatorMap.js.map +1 -1
  155. package/dist/queries/parseParams.d.ts +3 -2
  156. package/dist/queries/parseParams.d.ts.map +1 -1
  157. package/dist/queries/parseParams.js +266 -11
  158. package/dist/queries/parseParams.js.map +1 -1
  159. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  160. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  161. package/dist/queries/resolveRelationshipPath.js +66 -0
  162. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  163. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  164. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  165. package/dist/queries/validateOperatorHandlers.js +30 -0
  166. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  167. package/dist/queryDrafts.d.ts.map +1 -1
  168. package/dist/queryDrafts.js +23 -4
  169. package/dist/queryDrafts.js.map +1 -1
  170. package/dist/schema/build.d.ts.map +1 -1
  171. package/dist/schema/build.js +20 -17
  172. package/dist/schema/build.js.map +1 -1
  173. package/dist/schema/traverseFields.js +5 -5
  174. package/dist/schema/traverseFields.js.map +1 -1
  175. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js +3 -2
  176. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.js.map +1 -1
  177. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  178. package/dist/sqlite/createJSONQuery/index.js +6 -5
  179. package/dist/sqlite/createJSONQuery/index.js.map +1 -1
  180. package/dist/sqlite/insert.d.ts.map +1 -1
  181. package/dist/sqlite/insert.js +9 -4
  182. package/dist/sqlite/insert.js.map +1 -1
  183. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts +15 -0
  184. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.d.ts.map +1 -0
  185. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js +114 -0
  186. package/dist/sqlite/predefinedMigrations/sizes-to-variants/index.js.map +1 -0
  187. package/dist/sqlite/types.d.ts +4 -0
  188. package/dist/sqlite/types.d.ts.map +1 -1
  189. package/dist/sqlite/types.js.map +1 -1
  190. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  191. package/dist/transactions/beginTransaction.js +13 -5
  192. package/dist/transactions/beginTransaction.js.map +1 -1
  193. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  194. package/dist/transactions/commitTransaction.js +1 -5
  195. package/dist/transactions/commitTransaction.js.map +1 -1
  196. package/dist/transform/write/array.d.ts +3 -2
  197. package/dist/transform/write/array.d.ts.map +1 -1
  198. package/dist/transform/write/array.js +2 -1
  199. package/dist/transform/write/array.js.map +1 -1
  200. package/dist/transform/write/blocks.d.ts +3 -2
  201. package/dist/transform/write/blocks.d.ts.map +1 -1
  202. package/dist/transform/write/blocks.js +2 -1
  203. package/dist/transform/write/blocks.js.map +1 -1
  204. package/dist/transform/write/index.d.ts.map +1 -1
  205. package/dist/transform/write/index.js +2 -0
  206. package/dist/transform/write/index.js.map +1 -1
  207. package/dist/transform/write/traverseFields.d.ts +2 -1
  208. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  209. package/dist/transform/write/traverseFields.js +40 -20
  210. package/dist/transform/write/traverseFields.js.map +1 -1
  211. package/dist/transform/write/types.d.ts +7 -0
  212. package/dist/transform/write/types.d.ts.map +1 -1
  213. package/dist/transform/write/types.js.map +1 -1
  214. package/dist/types.d.ts +51 -2
  215. package/dist/types.d.ts.map +1 -1
  216. package/dist/types.js.map +1 -1
  217. package/dist/updateGlobal.d.ts +5 -1
  218. package/dist/updateGlobal.d.ts.map +1 -1
  219. package/dist/updateGlobal.js +96 -4
  220. package/dist/updateGlobal.js.map +1 -1
  221. package/dist/updateJobs.d.ts.map +1 -1
  222. package/dist/updateJobs.js +37 -0
  223. package/dist/updateJobs.js.map +1 -1
  224. package/dist/updateOne.d.ts.map +1 -1
  225. package/dist/updateOne.js +86 -4
  226. package/dist/updateOne.js.map +1 -1
  227. package/dist/upsertBranchGlobalChange.d.ts +3 -0
  228. package/dist/upsertBranchGlobalChange.d.ts.map +1 -0
  229. package/dist/upsertBranchGlobalChange.js +35 -0
  230. package/dist/upsertBranchGlobalChange.js.map +1 -0
  231. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  232. package/dist/upsertRow/deleteExistingRowsByPath.js +17 -12
  233. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  234. package/dist/upsertRow/index.d.ts +1 -1
  235. package/dist/upsertRow/index.d.ts.map +1 -1
  236. package/dist/upsertRow/index.js +156 -46
  237. package/dist/upsertRow/index.js.map +1 -1
  238. package/dist/upsertRow/types.d.ts +3 -0
  239. package/dist/upsertRow/types.d.ts.map +1 -1
  240. package/dist/upsertRow/types.js.map +1 -1
  241. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  242. package/dist/utilities/buildCreateMigration.js +12 -8
  243. package/dist/utilities/buildCreateMigration.js.map +1 -1
  244. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts +15 -0
  245. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.d.ts.map +1 -0
  246. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js +110 -0
  247. package/dist/utilities/buildDynamicPredefinedSizesToVariantsMigration.js.map +1 -0
  248. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  249. package/dist/utilities/buildForeignKeyName.js +3 -2
  250. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  251. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  252. package/dist/utilities/buildIndexName.js +3 -2
  253. package/dist/utilities/buildIndexName.js.map +1 -1
  254. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  255. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  256. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  257. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  258. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  259. package/dist/utilities/createSchemaGenerator.js +3 -0
  260. package/dist/utilities/createSchemaGenerator.js.map +1 -1
  261. package/dist/utilities/getSizesToVariantsRenames.d.ts +54 -0
  262. package/dist/utilities/getSizesToVariantsRenames.d.ts.map +1 -0
  263. package/dist/utilities/getSizesToVariantsRenames.js +251 -0
  264. package/dist/utilities/getSizesToVariantsRenames.js.map +1 -0
  265. package/dist/utilities/parseJSONPathSegment.d.ts +9 -0
  266. package/dist/utilities/parseJSONPathSegment.d.ts.map +1 -0
  267. package/dist/utilities/parseJSONPathSegment.js +17 -0
  268. package/dist/utilities/parseJSONPathSegment.js.map +1 -0
  269. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  270. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  271. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  272. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  273. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  274. package/dist/utilities/validateIdentifierLength.js +18 -0
  275. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  276. package/package.json +3 -3
  277. package/dist/upsertRow/handleUpsertError.spec.js +0 -42
  278. package/dist/upsertRow/handleUpsertError.spec.js.map +0 -1
  279. package/dist/utilities/isValidStringID.spec.js +0 -15
  280. package/dist/utilities/isValidStringID.spec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"migrateReset.d.ts","sourceRoot":"","sources":["../src/migrateReset.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKhD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EtE"}
1
+ {"version":3,"file":"migrateReset.d.ts","sourceRoot":"","sources":["../src/migrateReset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAW9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKhD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAkFjF"}
@@ -1,4 +1,4 @@
1
- import { commitTransaction, createLocalReq, getMigrations, initTransaction, killTransaction, readMigrationFiles } from 'payload';
1
+ import { commitTransaction, createPayloadRequest, getMigrations, initTransaction, killTransaction, readMigrationFiles } from 'payload';
2
2
  import { getTransaction } from './utilities/getTransaction.js';
3
3
  import { migrationTableExists } from './utilities/migrationTableExists.js';
4
4
  /**
@@ -15,10 +15,16 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
15
15
  payload.logger.info({
16
16
  msg: 'No migrations to reset.'
17
17
  });
18
- return;
18
+ return {
19
+ migrated: [],
20
+ rolledBack: []
21
+ };
19
22
  }
20
- const req = await createLocalReq({}, payload);
23
+ const req = await createPayloadRequest({
24
+ payload
25
+ });
21
26
  existingMigrations.reverse();
27
+ const rolledBack = [];
22
28
  // Rollback all migrations in order
23
29
  for (const migration of existingMigrations){
24
30
  const migrationFile = migrationFiles.find((m)=>m.name === migration.name);
@@ -45,10 +51,12 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
45
51
  await payload.delete({
46
52
  id: migration.id,
47
53
  collection: 'payload-migrations',
54
+ overrideAccess: true,
48
55
  req
49
56
  });
50
57
  }
51
58
  await commitTransaction(req);
59
+ rolledBack.push(migrationFile.name);
52
60
  } catch (err) {
53
61
  let msg = `Error running migration ${migrationFile.name}.`;
54
62
  if (err instanceof Error) {
@@ -59,7 +67,7 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
59
67
  err,
60
68
  msg
61
69
  });
62
- process.exit(1);
70
+ throw err;
63
71
  }
64
72
  }
65
73
  // Delete dev migration
@@ -68,6 +76,7 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
68
76
  try {
69
77
  await payload.delete({
70
78
  collection: 'payload-migrations',
79
+ overrideAccess: true,
71
80
  where: {
72
81
  batch: {
73
82
  equals: -1
@@ -79,8 +88,13 @@ import { migrationTableExists } from './utilities/migrationTableExists.js';
79
88
  err,
80
89
  msg: 'Error deleting dev migration'
81
90
  });
91
+ throw err;
82
92
  }
83
93
  }
94
+ return {
95
+ migrated: [],
96
+ rolledBack
97
+ };
84
98
  }
85
99
 
86
100
  //# sourceMappingURL=migrateReset.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/migrateReset.ts"],"sourcesContent":["import {\n commitTransaction,\n createLocalReq,\n getMigrations,\n initTransaction,\n killTransaction,\n readMigrationFiles,\n} from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\n\n/**\n * Run all migrate down functions\n */\nexport async function migrateReset(this: DrizzleAdapter): Promise<void> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n const { existingMigrations } = await getMigrations({ payload })\n\n if (!existingMigrations?.length) {\n payload.logger.info({ msg: 'No migrations to reset.' })\n return\n }\n\n const req = await createLocalReq({}, payload)\n\n existingMigrations.reverse()\n\n // Rollback all migrations in order\n for (const migration of existingMigrations) {\n const migrationFile = migrationFiles.find((m) => m.name === migration.name)\n try {\n if (!migrationFile) {\n throw new Error(`Migration ${migration.name} not found locally.`)\n }\n\n const start = Date.now()\n payload.logger.info({ msg: `Migrating down: ${migrationFile.name}` })\n await initTransaction(req)\n const db = await getTransaction(this, req)\n await migrationFile.down({ db, payload, req })\n payload.logger.info({\n msg: `Migrated down: ${migrationFile.name} (${Date.now() - start}ms)`,\n })\n\n const tableExists = await migrationTableExists(this, db)\n if (tableExists) {\n await payload.delete({\n id: migration.id,\n collection: 'payload-migrations',\n req,\n })\n }\n\n await commitTransaction(req)\n } catch (err: unknown) {\n let msg = `Error running migration ${migrationFile.name}.`\n\n if (err instanceof Error) {\n msg += ` ${err.message}`\n }\n\n await killTransaction(req)\n payload.logger.error({\n err,\n msg,\n })\n process.exit(1)\n }\n }\n\n // Delete dev migration\n\n const tableExists = await migrationTableExists(this)\n if (tableExists) {\n try {\n await payload.delete({\n collection: 'payload-migrations',\n where: {\n batch: {\n equals: -1,\n },\n },\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: 'Error deleting dev migration' })\n }\n }\n}\n"],"names":["commitTransaction","createLocalReq","getMigrations","initTransaction","killTransaction","readMigrationFiles","getTransaction","migrationTableExists","migrateReset","payload","migrationFiles","existingMigrations","length","logger","info","msg","req","reverse","migration","migrationFile","find","m","name","Error","start","Date","now","db","down","tableExists","delete","id","collection","err","message","error","process","exit","where","batch","equals"],"mappings":"AAAA,SACEA,iBAAiB,EACjBC,cAAc,EACdC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,kBAAkB,QACb,UAAS;AAIhB,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,oBAAoB,QAAQ,sCAAqC;AAE1E;;CAEC,GACD,OAAO,eAAeC;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI;IACxB,MAAMC,iBAAiB,MAAML,mBAAmB;QAAEI;IAAQ;IAE1D,MAAM,EAAEE,kBAAkB,EAAE,GAAG,MAAMT,cAAc;QAAEO;IAAQ;IAE7D,IAAI,CAACE,oBAAoBC,QAAQ;QAC/BH,QAAQI,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK;QAA0B;QACrD;IACF;IAEA,MAAMC,MAAM,MAAMf,eAAe,CAAC,GAAGQ;IAErCE,mBAAmBM,OAAO;IAE1B,mCAAmC;IACnC,KAAK,MAAMC,aAAaP,mBAAoB;QAC1C,MAAMQ,gBAAgBT,eAAeU,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ,UAAUI,IAAI;QAC1E,IAAI;YACF,IAAI,CAACH,eAAe;gBAClB,MAAM,IAAII,MAAM,CAAC,UAAU,EAAEL,UAAUI,IAAI,CAAC,mBAAmB,CAAC;YAClE;YAEA,MAAME,QAAQC,KAAKC,GAAG;YACtBjB,QAAQI,MAAM,CAACC,IAAI,CAAC;gBAAEC,KAAK,CAAC,gBAAgB,EAAEI,cAAcG,IAAI,EAAE;YAAC;YACnE,MAAMnB,gBAAgBa;YACtB,MAAMW,KAAK,MAAMrB,eAAe,IAAI,EAAEU;YACtC,MAAMG,cAAcS,IAAI,CAAC;gBAAED;gBAAIlB;gBAASO;YAAI;YAC5CP,QAAQI,MAAM,CAACC,IAAI,CAAC;gBAClBC,KAAK,CAAC,gBAAgB,EAAEI,cAAcG,IAAI,CAAC,EAAE,EAAEG,KAAKC,GAAG,KAAKF,MAAM,GAAG,CAAC;YACxE;YAEA,MAAMK,cAAc,MAAMtB,qBAAqB,IAAI,EAAEoB;YACrD,IAAIE,aAAa;gBACf,MAAMpB,QAAQqB,MAAM,CAAC;oBACnBC,IAAIb,UAAUa,EAAE;oBAChBC,YAAY;oBACZhB;gBACF;YACF;YAEA,MAAMhB,kBAAkBgB;QAC1B,EAAE,OAAOiB,KAAc;YACrB,IAAIlB,MAAM,CAAC,wBAAwB,EAAEI,cAAcG,IAAI,CAAC,CAAC,CAAC;YAE1D,IAAIW,eAAeV,OAAO;gBACxBR,OAAO,CAAC,CAAC,EAAEkB,IAAIC,OAAO,EAAE;YAC1B;YAEA,MAAM9B,gBAAgBY;YACtBP,QAAQI,MAAM,CAACsB,KAAK,CAAC;gBACnBF;gBACAlB;YACF;YACAqB,QAAQC,IAAI,CAAC;QACf;IACF;IAEA,uBAAuB;IAEvB,MAAMR,cAAc,MAAMtB,qBAAqB,IAAI;IACnD,IAAIsB,aAAa;QACf,IAAI;YACF,MAAMpB,QAAQqB,MAAM,CAAC;gBACnBE,YAAY;gBACZM,OAAO;oBACLC,OAAO;wBACLC,QAAQ,CAAC;oBACX;gBACF;YACF;QACF,EAAE,OAAOP,KAAc;YACrBxB,QAAQI,MAAM,CAACsB,KAAK,CAAC;gBAAEF;gBAAKlB,KAAK;YAA+B;QAClE;IACF;AACF"}
1
+ {"version":3,"sources":["../src/migrateReset.ts"],"sourcesContent":["import type { MigrationResult } from 'payload'\n\nimport {\n commitTransaction,\n createPayloadRequest,\n getMigrations,\n initTransaction,\n killTransaction,\n readMigrationFiles,\n} from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { getTransaction } from './utilities/getTransaction.js'\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\n\n/**\n * Run all migrate down functions\n */\nexport async function migrateReset(this: DrizzleAdapter): Promise<MigrationResult> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n const { existingMigrations } = await getMigrations({ payload })\n\n if (!existingMigrations?.length) {\n payload.logger.info({ msg: 'No migrations to reset.' })\n return { migrated: [], rolledBack: [] }\n }\n\n const req = await createPayloadRequest({ payload })\n\n existingMigrations.reverse()\n const rolledBack: string[] = []\n\n // Rollback all migrations in order\n for (const migration of existingMigrations) {\n const migrationFile = migrationFiles.find((m) => m.name === migration.name)\n try {\n if (!migrationFile) {\n throw new Error(`Migration ${migration.name} not found locally.`)\n }\n\n const start = Date.now()\n payload.logger.info({ msg: `Migrating down: ${migrationFile.name}` })\n await initTransaction(req)\n const db = await getTransaction(this, req)\n await migrationFile.down({ db, payload, req })\n payload.logger.info({\n msg: `Migrated down: ${migrationFile.name} (${Date.now() - start}ms)`,\n })\n\n const tableExists = await migrationTableExists(this, db)\n if (tableExists) {\n await payload.delete({\n id: migration.id,\n collection: 'payload-migrations',\n overrideAccess: true,\n req,\n })\n }\n\n await commitTransaction(req)\n rolledBack.push(migrationFile.name)\n } catch (err: unknown) {\n let msg = `Error running migration ${migrationFile.name}.`\n\n if (err instanceof Error) {\n msg += ` ${err.message}`\n }\n\n await killTransaction(req)\n payload.logger.error({\n err,\n msg,\n })\n throw err\n }\n }\n\n // Delete dev migration\n\n const tableExists = await migrationTableExists(this)\n if (tableExists) {\n try {\n await payload.delete({\n collection: 'payload-migrations',\n overrideAccess: true,\n where: {\n batch: {\n equals: -1,\n },\n },\n })\n } catch (err: unknown) {\n payload.logger.error({ err, msg: 'Error deleting dev migration' })\n throw err\n }\n }\n\n return { migrated: [], rolledBack }\n}\n"],"names":["commitTransaction","createPayloadRequest","getMigrations","initTransaction","killTransaction","readMigrationFiles","getTransaction","migrationTableExists","migrateReset","payload","migrationFiles","existingMigrations","length","logger","info","msg","migrated","rolledBack","req","reverse","migration","migrationFile","find","m","name","Error","start","Date","now","db","down","tableExists","delete","id","collection","overrideAccess","push","err","message","error","where","batch","equals"],"mappings":"AAEA,SACEA,iBAAiB,EACjBC,oBAAoB,EACpBC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,kBAAkB,QACb,UAAS;AAIhB,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,oBAAoB,QAAQ,sCAAqC;AAE1E;;CAEC,GACD,OAAO,eAAeC;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI;IACxB,MAAMC,iBAAiB,MAAML,mBAAmB;QAAEI;IAAQ;IAE1D,MAAM,EAAEE,kBAAkB,EAAE,GAAG,MAAMT,cAAc;QAAEO;IAAQ;IAE7D,IAAI,CAACE,oBAAoBC,QAAQ;QAC/BH,QAAQI,MAAM,CAACC,IAAI,CAAC;YAAEC,KAAK;QAA0B;QACrD,OAAO;YAAEC,UAAU,EAAE;YAAEC,YAAY,EAAE;QAAC;IACxC;IAEA,MAAMC,MAAM,MAAMjB,qBAAqB;QAAEQ;IAAQ;IAEjDE,mBAAmBQ,OAAO;IAC1B,MAAMF,aAAuB,EAAE;IAE/B,mCAAmC;IACnC,KAAK,MAAMG,aAAaT,mBAAoB;QAC1C,MAAMU,gBAAgBX,eAAeY,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ,UAAUI,IAAI;QAC1E,IAAI;YACF,IAAI,CAACH,eAAe;gBAClB,MAAM,IAAII,MAAM,CAAC,UAAU,EAAEL,UAAUI,IAAI,CAAC,mBAAmB,CAAC;YAClE;YAEA,MAAME,QAAQC,KAAKC,GAAG;YACtBnB,QAAQI,MAAM,CAACC,IAAI,CAAC;gBAAEC,KAAK,CAAC,gBAAgB,EAAEM,cAAcG,IAAI,EAAE;YAAC;YACnE,MAAMrB,gBAAgBe;YACtB,MAAMW,KAAK,MAAMvB,eAAe,IAAI,EAAEY;YACtC,MAAMG,cAAcS,IAAI,CAAC;gBAAED;gBAAIpB;gBAASS;YAAI;YAC5CT,QAAQI,MAAM,CAACC,IAAI,CAAC;gBAClBC,KAAK,CAAC,gBAAgB,EAAEM,cAAcG,IAAI,CAAC,EAAE,EAAEG,KAAKC,GAAG,KAAKF,MAAM,GAAG,CAAC;YACxE;YAEA,MAAMK,cAAc,MAAMxB,qBAAqB,IAAI,EAAEsB;YACrD,IAAIE,aAAa;gBACf,MAAMtB,QAAQuB,MAAM,CAAC;oBACnBC,IAAIb,UAAUa,EAAE;oBAChBC,YAAY;oBACZC,gBAAgB;oBAChBjB;gBACF;YACF;YAEA,MAAMlB,kBAAkBkB;YACxBD,WAAWmB,IAAI,CAACf,cAAcG,IAAI;QACpC,EAAE,OAAOa,KAAc;YACrB,IAAItB,MAAM,CAAC,wBAAwB,EAAEM,cAAcG,IAAI,CAAC,CAAC,CAAC;YAE1D,IAAIa,eAAeZ,OAAO;gBACxBV,OAAO,CAAC,CAAC,EAAEsB,IAAIC,OAAO,EAAE;YAC1B;YAEA,MAAMlC,gBAAgBc;YACtBT,QAAQI,MAAM,CAAC0B,KAAK,CAAC;gBACnBF;gBACAtB;YACF;YACA,MAAMsB;QACR;IACF;IAEA,uBAAuB;IAEvB,MAAMN,cAAc,MAAMxB,qBAAqB,IAAI;IACnD,IAAIwB,aAAa;QACf,IAAI;YACF,MAAMtB,QAAQuB,MAAM,CAAC;gBACnBE,YAAY;gBACZC,gBAAgB;gBAChBK,OAAO;oBACLC,OAAO;wBACLC,QAAQ,CAAC;oBACX;gBACF;YACF;QACF,EAAE,OAAOL,KAAc;YACrB5B,QAAQI,MAAM,CAAC0B,KAAK,CAAC;gBAAEF;gBAAKtB,KAAK;YAA+B;YAChE,MAAMsB;QACR;IACF;IAEA,OAAO;QAAErB,UAAU,EAAE;QAAEC;IAAW;AACpC"}
@@ -1,3 +1,4 @@
1
+ import type { MigrationStatus } from 'payload';
1
2
  import type { DrizzleAdapter } from './types.js';
2
- export declare function migrateStatus(this: DrizzleAdapter): Promise<void>;
3
+ export declare function migrateStatus(this: DrizzleAdapter): Promise<MigrationStatus[]>;
3
4
  //# sourceMappingURL=migrateStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrateStatus.d.ts","sourceRoot":"","sources":["../src/migrateStatus.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAIhD,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCvE"}
1
+ {"version":3,"file":"migrateStatus.d.ts","sourceRoot":"","sources":["../src/migrateStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAK9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAIhD,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA2CpF"}
@@ -21,24 +21,29 @@ export async function migrateStatus() {
21
21
  payload.logger.info({
22
22
  msg: 'No migrations found.'
23
23
  });
24
- return;
24
+ return [];
25
25
  }
26
26
  // Compare migration files to existing migrations
27
27
  const statuses = migrationFiles.map((migration)=>{
28
28
  const existingMigration = existingMigrations.find((m)=>m.name === migration.name);
29
29
  return {
30
- Name: migration.name,
31
- Batch: existingMigration?.batch,
32
- Ran: existingMigration ? 'Yes' : 'No'
30
+ name: migration.name,
31
+ batch: existingMigration?.batch,
32
+ ran: Boolean(existingMigration)
33
33
  };
34
34
  });
35
35
  const p = new Table();
36
36
  statuses.forEach((s)=>{
37
- p.addRow(s, {
38
- color: s.Ran === 'Yes' ? 'green' : 'red'
37
+ p.addRow({
38
+ Batch: s.batch,
39
+ Name: s.name,
40
+ Ran: s.ran ? 'Yes' : 'No'
41
+ }, {
42
+ color: s.ran ? 'green' : 'red'
39
43
  });
40
44
  });
41
45
  p.printTable();
46
+ return statuses;
42
47
  }
43
48
 
44
49
  //# sourceMappingURL=migrateStatus.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/migrateStatus.ts"],"sourcesContent":["import { Table } from 'console-table-printer'\nimport { getMigrations, readMigrationFiles } from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\n\nexport async function migrateStatus(this: DrizzleAdapter): Promise<void> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n payload.logger.debug({\n msg: `Found ${migrationFiles.length} migration files.`,\n })\n\n let existingMigrations = []\n const hasMigrationTable = await migrationTableExists(this)\n\n if (hasMigrationTable) {\n ;({ existingMigrations } = await getMigrations({ payload }))\n }\n\n if (!migrationFiles.length) {\n payload.logger.info({ msg: 'No migrations found.' })\n return\n }\n\n // Compare migration files to existing migrations\n const statuses = migrationFiles.map((migration) => {\n const existingMigration = existingMigrations.find((m) => m.name === migration.name)\n return {\n Name: migration.name,\n\n Batch: existingMigration?.batch,\n Ran: existingMigration ? 'Yes' : 'No',\n }\n })\n\n const p = new Table()\n\n statuses.forEach((s) => {\n p.addRow(s, {\n color: s.Ran === 'Yes' ? 'green' : 'red',\n })\n })\n p.printTable()\n}\n"],"names":["Table","getMigrations","readMigrationFiles","migrationTableExists","migrateStatus","payload","migrationFiles","logger","debug","msg","length","existingMigrations","hasMigrationTable","info","statuses","map","migration","existingMigration","find","m","name","Name","Batch","batch","Ran","p","forEach","s","addRow","color","printTable"],"mappings":"AAAA,SAASA,KAAK,QAAQ,wBAAuB;AAC7C,SAASC,aAAa,EAAEC,kBAAkB,QAAQ,UAAS;AAI3D,SAASC,oBAAoB,QAAQ,sCAAqC;AAE1E,OAAO,eAAeC;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI;IACxB,MAAMC,iBAAiB,MAAMJ,mBAAmB;QAAEG;IAAQ;IAE1DA,QAAQE,MAAM,CAACC,KAAK,CAAC;QACnBC,KAAK,CAAC,MAAM,EAAEH,eAAeI,MAAM,CAAC,iBAAiB,CAAC;IACxD;IAEA,IAAIC,qBAAqB,EAAE;IAC3B,MAAMC,oBAAoB,MAAMT,qBAAqB,IAAI;IAEzD,IAAIS,mBAAmB;;QACnB,CAAA,EAAED,kBAAkB,EAAE,GAAG,MAAMV,cAAc;YAAEI;QAAQ,EAAC;IAC5D;IAEA,IAAI,CAACC,eAAeI,MAAM,EAAE;QAC1BL,QAAQE,MAAM,CAACM,IAAI,CAAC;YAAEJ,KAAK;QAAuB;QAClD;IACF;IAEA,iDAAiD;IACjD,MAAMK,WAAWR,eAAeS,GAAG,CAAC,CAACC;QACnC,MAAMC,oBAAoBN,mBAAmBO,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ,UAAUI,IAAI;QAClF,OAAO;YACLC,MAAML,UAAUI,IAAI;YAEpBE,OAAOL,mBAAmBM;YAC1BC,KAAKP,oBAAoB,QAAQ;QACnC;IACF;IAEA,MAAMQ,IAAI,IAAIzB;IAEdc,SAASY,OAAO,CAAC,CAACC;QAChBF,EAAEG,MAAM,CAACD,GAAG;YACVE,OAAOF,EAAEH,GAAG,KAAK,QAAQ,UAAU;QACrC;IACF;IACAC,EAAEK,UAAU;AACd"}
1
+ {"version":3,"sources":["../src/migrateStatus.ts"],"sourcesContent":["import type { MigrationStatus } from 'payload'\n\nimport { Table } from 'console-table-printer'\nimport { getMigrations, readMigrationFiles } from 'payload'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { migrationTableExists } from './utilities/migrationTableExists.js'\n\nexport async function migrateStatus(this: DrizzleAdapter): Promise<MigrationStatus[]> {\n const { payload } = this\n const migrationFiles = await readMigrationFiles({ payload })\n\n payload.logger.debug({\n msg: `Found ${migrationFiles.length} migration files.`,\n })\n\n let existingMigrations = []\n const hasMigrationTable = await migrationTableExists(this)\n\n if (hasMigrationTable) {\n ;({ existingMigrations } = await getMigrations({ payload }))\n }\n\n if (!migrationFiles.length) {\n payload.logger.info({ msg: 'No migrations found.' })\n return []\n }\n\n // Compare migration files to existing migrations\n const statuses = migrationFiles.map((migration) => {\n const existingMigration = existingMigrations.find((m) => m.name === migration.name)\n return {\n name: migration.name,\n batch: existingMigration?.batch,\n ran: Boolean(existingMigration),\n }\n })\n\n const p = new Table()\n\n statuses.forEach((s) => {\n p.addRow(\n { Batch: s.batch, Name: s.name, Ran: s.ran ? 'Yes' : 'No' },\n {\n color: s.ran ? 'green' : 'red',\n },\n )\n })\n p.printTable()\n\n return statuses\n}\n"],"names":["Table","getMigrations","readMigrationFiles","migrationTableExists","migrateStatus","payload","migrationFiles","logger","debug","msg","length","existingMigrations","hasMigrationTable","info","statuses","map","migration","existingMigration","find","m","name","batch","ran","Boolean","p","forEach","s","addRow","Batch","Name","Ran","color","printTable"],"mappings":"AAEA,SAASA,KAAK,QAAQ,wBAAuB;AAC7C,SAASC,aAAa,EAAEC,kBAAkB,QAAQ,UAAS;AAI3D,SAASC,oBAAoB,QAAQ,sCAAqC;AAE1E,OAAO,eAAeC;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI;IACxB,MAAMC,iBAAiB,MAAMJ,mBAAmB;QAAEG;IAAQ;IAE1DA,QAAQE,MAAM,CAACC,KAAK,CAAC;QACnBC,KAAK,CAAC,MAAM,EAAEH,eAAeI,MAAM,CAAC,iBAAiB,CAAC;IACxD;IAEA,IAAIC,qBAAqB,EAAE;IAC3B,MAAMC,oBAAoB,MAAMT,qBAAqB,IAAI;IAEzD,IAAIS,mBAAmB;;QACnB,CAAA,EAAED,kBAAkB,EAAE,GAAG,MAAMV,cAAc;YAAEI;QAAQ,EAAC;IAC5D;IAEA,IAAI,CAACC,eAAeI,MAAM,EAAE;QAC1BL,QAAQE,MAAM,CAACM,IAAI,CAAC;YAAEJ,KAAK;QAAuB;QAClD,OAAO,EAAE;IACX;IAEA,iDAAiD;IACjD,MAAMK,WAAWR,eAAeS,GAAG,CAAC,CAACC;QACnC,MAAMC,oBAAoBN,mBAAmBO,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ,UAAUI,IAAI;QAClF,OAAO;YACLA,MAAMJ,UAAUI,IAAI;YACpBC,OAAOJ,mBAAmBI;YAC1BC,KAAKC,QAAQN;QACf;IACF;IAEA,MAAMO,IAAI,IAAIxB;IAEdc,SAASW,OAAO,CAAC,CAACC;QAChBF,EAAEG,MAAM,CACN;YAAEC,OAAOF,EAAEL,KAAK;YAAEQ,MAAMH,EAAEN,IAAI;YAAEU,KAAKJ,EAAEJ,GAAG,GAAG,QAAQ;QAAK,GAC1D;YACES,OAAOL,EAAEJ,GAAG,GAAG,UAAU;QAC3B;IAEJ;IACAE,EAAEQ,UAAU;IAEZ,OAAOlB;AACT"}
@@ -1,6 +1,6 @@
1
1
  import { APIError } from 'payload';
2
2
  import { SAFE_STRING_REGEX } from '../../utilities/escapeSQLValue.js';
3
- import { sanitizePathSegment } from '../../utilities/sanitizePathSegment.js';
3
+ import { parseJSONPathSegment } from '../../utilities/parseJSONPathSegment.js';
4
4
  const operatorMap = {
5
5
  contains: '~',
6
6
  equals: '==',
@@ -12,7 +12,7 @@ const operatorMap = {
12
12
  };
13
13
  const sanitizeValue = (value, operator)=>{
14
14
  if (value === null) {
15
- return `NULL`;
15
+ return `null`;
16
16
  }
17
17
  if (typeof value === 'number' || typeof value === 'boolean') {
18
18
  return `${value}`;
@@ -33,7 +33,7 @@ const sanitizeValue = (value, operator)=>{
33
33
  export const createJSONQuery = ({ column, operator, pathSegments, value })=>{
34
34
  const columnName = typeof column === 'object' ? column.name : column;
35
35
  const jsonPaths = pathSegments.slice(1).map((key)=>{
36
- return `${sanitizePathSegment(key)}[*]`;
36
+ return `${parseJSONPathSegment(key).value}[*]`;
37
37
  }).join('.');
38
38
  const fullPath = pathSegments.length === 1 ? '$[*]' : `$.${jsonPaths}`;
39
39
  let sql = '';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/createJSONQuery/index.ts"],"sourcesContent":["import { APIError } from 'payload'\n\nimport type { CreateJSONQueryArgs } from '../../types.js'\n\nimport { SAFE_STRING_REGEX } from '../../utilities/escapeSQLValue.js'\nimport { sanitizePathSegment } from '../../utilities/sanitizePathSegment.js'\n\nconst operatorMap: Record<string, string> = {\n contains: '~',\n equals: '==',\n in: 'in',\n like: 'like_regex',\n not_equals: '!=',\n not_in: 'in',\n not_like: '!like_regex',\n}\n\nconst sanitizeValue = (value: unknown, operator?: string): string => {\n if (value === null) {\n return `NULL`\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return `${value}`\n }\n\n if (typeof value !== 'string') {\n throw new Error('Invalid value type')\n }\n\n if (!SAFE_STRING_REGEX.test(value)) {\n throw new APIError(`${value} is not allowed as a JSON query value`, 400)\n }\n\n const escaped = value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n\n const prefix = ['like', 'not_like'].includes(operator ?? '') ? '(?i)' : ''\n\n return `\"${prefix}${escaped}\"`\n}\n\nexport const createJSONQuery = ({ column, operator, pathSegments, value }: CreateJSONQueryArgs) => {\n const columnName = typeof column === 'object' ? column.name : column\n const jsonPaths = pathSegments\n .slice(1)\n .map((key) => {\n return `${sanitizePathSegment(key)}[*]`\n })\n .join('.')\n\n const fullPath = pathSegments.length === 1 ? '$[*]' : `$.${jsonPaths}`\n\n let sql = ''\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(value)) {\n sql = '('\n value.forEach((item, i) => {\n sql = `${sql}${createJSONQuery({ column, operator: operator === 'in' ? 'equals' : 'not_equals', pathSegments, value: item })}${i === value.length - 1 ? '' : ` ${operator === 'in' ? 'OR' : 'AND'} `}`\n })\n sql = `${sql})`\n } else if (operator === 'exists') {\n sql = `${value === false ? 'NOT ' : ''}jsonb_path_exists(${columnName}, '${fullPath}')`\n } else if (['not_like'].includes(operator)) {\n const mappedOperator = operatorMap[operator]\n\n sql = `NOT jsonb_path_exists(${columnName}, '${fullPath} ? (@ ${mappedOperator.substring(1)} ${sanitizeValue(value, operator)})')`\n } else {\n sql = `jsonb_path_exists(${columnName}, '${fullPath} ? (@ ${operatorMap[operator]} ${sanitizeValue(value, operator)})')`\n }\n\n return sql\n}\n"],"names":["APIError","SAFE_STRING_REGEX","sanitizePathSegment","operatorMap","contains","equals","in","like","not_equals","not_in","not_like","sanitizeValue","value","operator","Error","test","escaped","replace","prefix","includes","createJSONQuery","column","pathSegments","columnName","name","jsonPaths","slice","map","key","join","fullPath","length","sql","Array","isArray","forEach","item","i","mappedOperator","substring"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,UAAS;AAIlC,SAASC,iBAAiB,QAAQ,oCAAmC;AACrE,SAASC,mBAAmB,QAAQ,yCAAwC;AAE5E,MAAMC,cAAsC;IAC1CC,UAAU;IACVC,QAAQ;IACRC,IAAI;IACJC,MAAM;IACNC,YAAY;IACZC,QAAQ;IACRC,UAAU;AACZ;AAEA,MAAMC,gBAAgB,CAACC,OAAgBC;IACrC,IAAID,UAAU,MAAM;QAClB,OAAO,CAAC,IAAI,CAAC;IACf;IAEA,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,WAAW;QAC3D,OAAO,GAAGA,OAAO;IACnB;IAEA,IAAI,OAAOA,UAAU,UAAU;QAC7B,MAAM,IAAIE,MAAM;IAClB;IAEA,IAAI,CAACb,kBAAkBc,IAAI,CAACH,QAAQ;QAClC,MAAM,IAAIZ,SAAS,GAAGY,MAAM,qCAAqC,CAAC,EAAE;IACtE;IAEA,MAAMI,UAAUJ,MAAMK,OAAO,CAAC,OAAO,QAAQA,OAAO,CAAC,MAAM;IAE3D,MAAMC,SAAS;QAAC;QAAQ;KAAW,CAACC,QAAQ,CAACN,YAAY,MAAM,SAAS;IAExE,OAAO,CAAC,CAAC,EAAEK,SAASF,QAAQ,CAAC,CAAC;AAChC;AAEA,OAAO,MAAMI,kBAAkB,CAAC,EAAEC,MAAM,EAAER,QAAQ,EAAES,YAAY,EAAEV,KAAK,EAAuB;IAC5F,MAAMW,aAAa,OAAOF,WAAW,WAAWA,OAAOG,IAAI,GAAGH;IAC9D,MAAMI,YAAYH,aACfI,KAAK,CAAC,GACNC,GAAG,CAAC,CAACC;QACJ,OAAO,GAAG1B,oBAAoB0B,KAAK,GAAG,CAAC;IACzC,GACCC,IAAI,CAAC;IAER,MAAMC,WAAWR,aAAaS,MAAM,KAAK,IAAI,SAAS,CAAC,EAAE,EAAEN,WAAW;IAEtE,IAAIO,MAAM;IAEV,IAAI;QAAC;QAAM;KAAS,CAACb,QAAQ,CAACN,aAAaoB,MAAMC,OAAO,CAACtB,QAAQ;QAC/DoB,MAAM;QACNpB,MAAMuB,OAAO,CAAC,CAACC,MAAMC;YACnBL,MAAM,GAAGA,MAAMZ,gBAAgB;gBAAEC;gBAAQR,UAAUA,aAAa,OAAO,WAAW;gBAAcS;gBAAcV,OAAOwB;YAAK,KAAKC,MAAMzB,MAAMmB,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAElB,aAAa,OAAO,OAAO,MAAM,CAAC,CAAC,EAAE;QACxM;QACAmB,MAAM,GAAGA,IAAI,CAAC,CAAC;IACjB,OAAO,IAAInB,aAAa,UAAU;QAChCmB,MAAM,GAAGpB,UAAU,QAAQ,SAAS,GAAG,kBAAkB,EAAEW,WAAW,GAAG,EAAEO,SAAS,EAAE,CAAC;IACzF,OAAO,IAAI;QAAC;KAAW,CAACX,QAAQ,CAACN,WAAW;QAC1C,MAAMyB,iBAAiBnC,WAAW,CAACU,SAAS;QAE5CmB,MAAM,CAAC,sBAAsB,EAAET,WAAW,GAAG,EAAEO,SAAS,MAAM,EAAEQ,eAAeC,SAAS,CAAC,GAAG,CAAC,EAAE5B,cAAcC,OAAOC,UAAU,GAAG,CAAC;IACpI,OAAO;QACLmB,MAAM,CAAC,kBAAkB,EAAET,WAAW,GAAG,EAAEO,SAAS,MAAM,EAAE3B,WAAW,CAACU,SAAS,CAAC,CAAC,EAAEF,cAAcC,OAAOC,UAAU,GAAG,CAAC;IAC1H;IAEA,OAAOmB;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/postgres/createJSONQuery/index.ts"],"sourcesContent":["import { APIError } from 'payload'\n\nimport type { CreateJSONQueryArgs } from '../../types.js'\n\nimport { SAFE_STRING_REGEX } from '../../utilities/escapeSQLValue.js'\nimport { parseJSONPathSegment } from '../../utilities/parseJSONPathSegment.js'\n\nconst operatorMap: Record<string, string> = {\n contains: '~',\n equals: '==',\n in: 'in',\n like: 'like_regex',\n not_equals: '!=',\n not_in: 'in',\n not_like: '!like_regex',\n}\n\nconst sanitizeValue = (value: unknown, operator?: string): string => {\n if (value === null) {\n return `null`\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return `${value}`\n }\n\n if (typeof value !== 'string') {\n throw new Error('Invalid value type')\n }\n\n if (!SAFE_STRING_REGEX.test(value)) {\n throw new APIError(`${value} is not allowed as a JSON query value`, 400)\n }\n\n const escaped = value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n\n const prefix = ['like', 'not_like'].includes(operator ?? '') ? '(?i)' : ''\n\n return `\"${prefix}${escaped}\"`\n}\n\nexport const createJSONQuery = ({ column, operator, pathSegments, value }: CreateJSONQueryArgs) => {\n const columnName = typeof column === 'object' ? column.name : column\n const jsonPaths = pathSegments\n .slice(1)\n .map((key) => {\n return `${parseJSONPathSegment(key).value}[*]`\n })\n .join('.')\n\n const fullPath = pathSegments.length === 1 ? '$[*]' : `$.${jsonPaths}`\n\n let sql = ''\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(value)) {\n sql = '('\n value.forEach((item, i) => {\n sql = `${sql}${createJSONQuery({ column, operator: operator === 'in' ? 'equals' : 'not_equals', pathSegments, value: item })}${i === value.length - 1 ? '' : ` ${operator === 'in' ? 'OR' : 'AND'} `}`\n })\n sql = `${sql})`\n } else if (operator === 'exists') {\n sql = `${value === false ? 'NOT ' : ''}jsonb_path_exists(${columnName}, '${fullPath}')`\n } else if (['not_like'].includes(operator)) {\n const mappedOperator = operatorMap[operator]\n\n sql = `NOT jsonb_path_exists(${columnName}, '${fullPath} ? (@ ${mappedOperator.substring(1)} ${sanitizeValue(value, operator)})')`\n } else {\n sql = `jsonb_path_exists(${columnName}, '${fullPath} ? (@ ${operatorMap[operator]} ${sanitizeValue(value, operator)})')`\n }\n\n return sql\n}\n"],"names":["APIError","SAFE_STRING_REGEX","parseJSONPathSegment","operatorMap","contains","equals","in","like","not_equals","not_in","not_like","sanitizeValue","value","operator","Error","test","escaped","replace","prefix","includes","createJSONQuery","column","pathSegments","columnName","name","jsonPaths","slice","map","key","join","fullPath","length","sql","Array","isArray","forEach","item","i","mappedOperator","substring"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,UAAS;AAIlC,SAASC,iBAAiB,QAAQ,oCAAmC;AACrE,SAASC,oBAAoB,QAAQ,0CAAyC;AAE9E,MAAMC,cAAsC;IAC1CC,UAAU;IACVC,QAAQ;IACRC,IAAI;IACJC,MAAM;IACNC,YAAY;IACZC,QAAQ;IACRC,UAAU;AACZ;AAEA,MAAMC,gBAAgB,CAACC,OAAgBC;IACrC,IAAID,UAAU,MAAM;QAClB,OAAO,CAAC,IAAI,CAAC;IACf;IAEA,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,WAAW;QAC3D,OAAO,GAAGA,OAAO;IACnB;IAEA,IAAI,OAAOA,UAAU,UAAU;QAC7B,MAAM,IAAIE,MAAM;IAClB;IAEA,IAAI,CAACb,kBAAkBc,IAAI,CAACH,QAAQ;QAClC,MAAM,IAAIZ,SAAS,GAAGY,MAAM,qCAAqC,CAAC,EAAE;IACtE;IAEA,MAAMI,UAAUJ,MAAMK,OAAO,CAAC,OAAO,QAAQA,OAAO,CAAC,MAAM;IAE3D,MAAMC,SAAS;QAAC;QAAQ;KAAW,CAACC,QAAQ,CAACN,YAAY,MAAM,SAAS;IAExE,OAAO,CAAC,CAAC,EAAEK,SAASF,QAAQ,CAAC,CAAC;AAChC;AAEA,OAAO,MAAMI,kBAAkB,CAAC,EAAEC,MAAM,EAAER,QAAQ,EAAES,YAAY,EAAEV,KAAK,EAAuB;IAC5F,MAAMW,aAAa,OAAOF,WAAW,WAAWA,OAAOG,IAAI,GAAGH;IAC9D,MAAMI,YAAYH,aACfI,KAAK,CAAC,GACNC,GAAG,CAAC,CAACC;QACJ,OAAO,GAAG1B,qBAAqB0B,KAAKhB,KAAK,CAAC,GAAG,CAAC;IAChD,GACCiB,IAAI,CAAC;IAER,MAAMC,WAAWR,aAAaS,MAAM,KAAK,IAAI,SAAS,CAAC,EAAE,EAAEN,WAAW;IAEtE,IAAIO,MAAM;IAEV,IAAI;QAAC;QAAM;KAAS,CAACb,QAAQ,CAACN,aAAaoB,MAAMC,OAAO,CAACtB,QAAQ;QAC/DoB,MAAM;QACNpB,MAAMuB,OAAO,CAAC,CAACC,MAAMC;YACnBL,MAAM,GAAGA,MAAMZ,gBAAgB;gBAAEC;gBAAQR,UAAUA,aAAa,OAAO,WAAW;gBAAcS;gBAAcV,OAAOwB;YAAK,KAAKC,MAAMzB,MAAMmB,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAElB,aAAa,OAAO,OAAO,MAAM,CAAC,CAAC,EAAE;QACxM;QACAmB,MAAM,GAAGA,IAAI,CAAC,CAAC;IACjB,OAAO,IAAInB,aAAa,UAAU;QAChCmB,MAAM,GAAGpB,UAAU,QAAQ,SAAS,GAAG,kBAAkB,EAAEW,WAAW,GAAG,EAAEO,SAAS,EAAE,CAAC;IACzF,OAAO,IAAI;QAAC;KAAW,CAACX,QAAQ,CAACN,WAAW;QAC1C,MAAMyB,iBAAiBnC,WAAW,CAACU,SAAS;QAE5CmB,MAAM,CAAC,sBAAsB,EAAET,WAAW,GAAG,EAAEO,SAAS,MAAM,EAAEQ,eAAeC,SAAS,CAAC,GAAG,CAAC,EAAE5B,cAAcC,OAAOC,UAAU,GAAG,CAAC;IACpI,OAAO;QACLmB,MAAM,CAAC,kBAAkB,EAAET,WAAW,GAAG,EAAEO,SAAS,MAAM,EAAE3B,WAAW,CAACU,SAAS,CAAC,CAAC,EAAEF,cAAcC,OAAOC,UAAU,GAAG,CAAC;IAC1H;IAEA,OAAOmB;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/postgres/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAUnC,eAAO,MAAM,IAAI,EAAE,IAkClB,CAAA"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/postgres/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAWnC,eAAO,MAAM,IAAI,EAAE,IAqClB,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js';
2
2
  import { buildRawSchema } from '../schema/buildRawSchema.js';
3
+ import { checkTruncatedIdentifiers } from '../utilities/checkTruncatedIdentifiers.js';
3
4
  import { executeSchemaHooks } from '../utilities/executeSchemaHooks.js';
4
5
  import { buildDrizzleTable } from './schema/buildDrizzleTable.js';
5
6
  import { setColumnID } from './schema/setColumnID.js';
@@ -14,6 +15,11 @@ export const init = async function init() {
14
15
  type: 'beforeSchemaInit',
15
16
  adapter: this
16
17
  });
18
+ // Warn on identifiers Postgres will truncate past 63 chars; throw only when two collide.
19
+ checkTruncatedIdentifiers({
20
+ adapter: this,
21
+ logWarnings: process.env.NODE_ENV !== 'production'
22
+ });
17
23
  if (this.payload.config.localization) {
18
24
  this.enums.enum__locales = this.pgSchema.enum('_locales', this.payload.config.localization.locales.map(({ code })=>code));
19
25
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init } from 'payload'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js'\nimport { buildRawSchema } from '../schema/buildRawSchema.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildDrizzleTable } from './schema/buildDrizzleTable.js'\nimport { setColumnID } from './schema/setColumnID.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n this.rawRelations = {}\n this.rawTables = {}\n\n buildRawSchema({\n adapter: this,\n setColumnID,\n })\n\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n for (const tableName in this.rawTables) {\n buildDrizzleTable({ adapter: this, rawTable: this.rawTables[tableName] })\n }\n\n buildDrizzleRelations({\n adapter: this,\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n\n this.schema = {\n pgSchema: this.pgSchema,\n ...this.tables,\n ...this.relations,\n ...this.enums,\n }\n}\n"],"names":["buildDrizzleRelations","buildRawSchema","executeSchemaHooks","buildDrizzleTable","setColumnID","init","rawRelations","rawTables","adapter","type","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","tableName","rawTable","schema","tables","relations"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,qCAAoC;AAC1E,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,kBAAkB,QAAQ,qCAAoC;AACvE,SAASC,iBAAiB,QAAQ,gCAA+B;AACjE,SAASC,WAAW,QAAQ,0BAAyB;AAErD,OAAO,MAAMC,OAAa,eAAeA;IACvC,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,SAAS,GAAG,CAAC;IAElBN,eAAe;QACbO,SAAS,IAAI;QACbJ;IACF;IAEA,MAAMF,mBAAmB;QAAEO,MAAM;QAAoBD,SAAS,IAAI;IAAC;IAEnE,IAAI,IAAI,CAACE,OAAO,CAACC,MAAM,CAACC,YAAY,EAAE;QACpC,IAAI,CAACC,KAAK,CAACC,aAAa,GAAG,IAAI,CAACC,QAAQ,CAACC,IAAI,CAC3C,YACA,IAAI,CAACN,OAAO,CAACC,MAAM,CAACC,YAAY,CAACK,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA;IAE/D;IAEA,IAAK,MAAMC,aAAa,IAAI,CAACb,SAAS,CAAE;QACtCJ,kBAAkB;YAAEK,SAAS,IAAI;YAAEa,UAAU,IAAI,CAACd,SAAS,CAACa,UAAU;QAAC;IACzE;IAEApB,sBAAsB;QACpBQ,SAAS,IAAI;IACf;IAEA,MAAMN,mBAAmB;QAAEO,MAAM;QAAmBD,SAAS,IAAI;IAAC;IAElE,IAAI,CAACc,MAAM,GAAG;QACZP,UAAU,IAAI,CAACA,QAAQ;QACvB,GAAG,IAAI,CAACQ,MAAM;QACd,GAAG,IAAI,CAACC,SAAS;QACjB,GAAG,IAAI,CAACX,KAAK;IACf;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init } from 'payload'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { buildDrizzleRelations } from '../schema/buildDrizzleRelations.js'\nimport { buildRawSchema } from '../schema/buildRawSchema.js'\nimport { checkTruncatedIdentifiers } from '../utilities/checkTruncatedIdentifiers.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildDrizzleTable } from './schema/buildDrizzleTable.js'\nimport { setColumnID } from './schema/setColumnID.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n this.rawRelations = {}\n this.rawTables = {}\n\n buildRawSchema({\n adapter: this,\n setColumnID,\n })\n\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n // Warn on identifiers Postgres will truncate past 63 chars; throw only when two collide.\n checkTruncatedIdentifiers({ adapter: this, logWarnings: process.env.NODE_ENV !== 'production' })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n for (const tableName in this.rawTables) {\n buildDrizzleTable({ adapter: this, rawTable: this.rawTables[tableName] })\n }\n\n buildDrizzleRelations({\n adapter: this,\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n\n this.schema = {\n pgSchema: this.pgSchema,\n ...this.tables,\n ...this.relations,\n ...this.enums,\n }\n}\n"],"names":["buildDrizzleRelations","buildRawSchema","checkTruncatedIdentifiers","executeSchemaHooks","buildDrizzleTable","setColumnID","init","rawRelations","rawTables","adapter","type","logWarnings","process","env","NODE_ENV","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","tableName","rawTable","schema","tables","relations"],"mappings":"AAIA,SAASA,qBAAqB,QAAQ,qCAAoC;AAC1E,SAASC,cAAc,QAAQ,8BAA6B;AAC5D,SAASC,yBAAyB,QAAQ,4CAA2C;AACrF,SAASC,kBAAkB,QAAQ,qCAAoC;AACvE,SAASC,iBAAiB,QAAQ,gCAA+B;AACjE,SAASC,WAAW,QAAQ,0BAAyB;AAErD,OAAO,MAAMC,OAAa,eAAeA;IACvC,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,SAAS,GAAG,CAAC;IAElBP,eAAe;QACbQ,SAAS,IAAI;QACbJ;IACF;IAEA,MAAMF,mBAAmB;QAAEO,MAAM;QAAoBD,SAAS,IAAI;IAAC;IAEnE,yFAAyF;IACzFP,0BAA0B;QAAEO,SAAS,IAAI;QAAEE,aAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK;IAAa;IAE9F,IAAI,IAAI,CAACC,OAAO,CAACC,MAAM,CAACC,YAAY,EAAE;QACpC,IAAI,CAACC,KAAK,CAACC,aAAa,GAAG,IAAI,CAACC,QAAQ,CAACC,IAAI,CAC3C,YACA,IAAI,CAACN,OAAO,CAACC,MAAM,CAACC,YAAY,CAACK,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA;IAE/D;IAEA,IAAK,MAAMC,aAAa,IAAI,CAACjB,SAAS,CAAE;QACtCJ,kBAAkB;YAAEK,SAAS,IAAI;YAAEiB,UAAU,IAAI,CAAClB,SAAS,CAACiB,UAAU;QAAC;IACzE;IAEAzB,sBAAsB;QACpBS,SAAS,IAAI;IACf;IAEA,MAAMN,mBAAmB;QAAEO,MAAM;QAAmBD,SAAS,IAAI;IAAC;IAElE,IAAI,CAACkB,MAAM,GAAG;QACZP,UAAU,IAAI,CAACA,QAAQ;QACvB,GAAG,IAAI,CAACQ,MAAM;QACd,GAAG,IAAI,CAACC,SAAS;QACjB,GAAG,IAAI,CAACX,KAAK;IACf;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../src/postgres/insert.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,MAAM,EAAE,MAoBpB,CAAA"}
1
+ {"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../src/postgres/insert.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,MAAM,EAAE,MA2BpB,CAAA"}
@@ -1,7 +1,9 @@
1
- export const insert = async function insert({ db, onConflictDoUpdate, tableName, values }) {
1
+ export const insert = async function insert({ db, onConflictDoNothing, onConflictDoUpdate, tableName, values }) {
2
2
  const table = this.tables[tableName];
3
3
  let result;
4
- if (onConflictDoUpdate) {
4
+ if (onConflictDoNothing) {
5
+ result = await db.insert(table).values(values).onConflictDoNothing(onConflictDoNothing).returning();
6
+ } else if (onConflictDoUpdate) {
5
7
  result = await db.insert(table).values(values).onConflictDoUpdate(onConflictDoUpdate).returning();
6
8
  } else {
7
9
  result = await db.insert(table).values(values).returning();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/insert.ts"],"sourcesContent":["import type { TransactionPg } from '../types.js'\nimport type { Insert } from './types.js'\n\nexport const insert: Insert = async function insert({\n db,\n onConflictDoUpdate,\n tableName,\n values,\n}): Promise<Record<string, unknown>[]> {\n const table = this.tables[tableName]\n let result\n\n if (onConflictDoUpdate) {\n result = await (db as TransactionPg)\n .insert(table)\n .values(values)\n .onConflictDoUpdate(onConflictDoUpdate)\n .returning()\n } else {\n result = await (db as TransactionPg).insert(table).values(values).returning()\n }\n\n return result\n}\n"],"names":["insert","db","onConflictDoUpdate","tableName","values","table","tables","result","returning"],"mappings":"AAGA,OAAO,MAAMA,SAAiB,eAAeA,OAAO,EAClDC,EAAE,EACFC,kBAAkB,EAClBC,SAAS,EACTC,MAAM,EACP;IACC,MAAMC,QAAQ,IAAI,CAACC,MAAM,CAACH,UAAU;IACpC,IAAII;IAEJ,IAAIL,oBAAoB;QACtBK,SAAS,MAAM,AAACN,GACbD,MAAM,CAACK,OACPD,MAAM,CAACA,QACPF,kBAAkB,CAACA,oBACnBM,SAAS;IACd,OAAO;QACLD,SAAS,MAAM,AAACN,GAAqBD,MAAM,CAACK,OAAOD,MAAM,CAACA,QAAQI,SAAS;IAC7E;IAEA,OAAOD;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/postgres/insert.ts"],"sourcesContent":["import type { TransactionPg } from '../types.js'\nimport type { Insert } from './types.js'\n\nexport const insert: Insert = async function insert({\n db,\n onConflictDoNothing,\n onConflictDoUpdate,\n tableName,\n values,\n}): Promise<Record<string, unknown>[]> {\n const table = this.tables[tableName]\n let result\n\n if (onConflictDoNothing) {\n result = await (db as TransactionPg)\n .insert(table)\n .values(values)\n .onConflictDoNothing(onConflictDoNothing)\n .returning()\n } else if (onConflictDoUpdate) {\n result = await (db as TransactionPg)\n .insert(table)\n .values(values)\n .onConflictDoUpdate(onConflictDoUpdate)\n .returning()\n } else {\n result = await (db as TransactionPg).insert(table).values(values).returning()\n }\n\n return result\n}\n"],"names":["insert","db","onConflictDoNothing","onConflictDoUpdate","tableName","values","table","tables","result","returning"],"mappings":"AAGA,OAAO,MAAMA,SAAiB,eAAeA,OAAO,EAClDC,EAAE,EACFC,mBAAmB,EACnBC,kBAAkB,EAClBC,SAAS,EACTC,MAAM,EACP;IACC,MAAMC,QAAQ,IAAI,CAACC,MAAM,CAACH,UAAU;IACpC,IAAII;IAEJ,IAAIN,qBAAqB;QACvBM,SAAS,MAAM,AAACP,GACbD,MAAM,CAACM,OACPD,MAAM,CAACA,QACPH,mBAAmB,CAACA,qBACpBO,SAAS;IACd,OAAO,IAAIN,oBAAoB;QAC7BK,SAAS,MAAM,AAACP,GACbD,MAAM,CAACM,OACPD,MAAM,CAACA,QACPF,kBAAkB,CAACA,oBACnBM,SAAS;IACd,OAAO;QACLD,SAAS,MAAM,AAACP,GAAqBD,MAAM,CAACM,OAAOD,MAAM,CAACA,QAAQI,SAAS;IAC7E;IAEA,OAAOD;AACT,EAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Payload } from 'payload';
2
+ import type { SizesToVariantsDirection, SizesToVariantsIndexRename } from '../../../utilities/getSizesToVariantsRenames.js';
3
+ type ExistingPostgresIndex = {
4
+ columns: string[];
5
+ isPartial: boolean;
6
+ name: string;
7
+ unique: boolean;
8
+ };
9
+ /**
10
+ * Moves every upload collection's stored image sizes between the legacy `sizes_*` columns and
11
+ * `variants_*` (main and versions tables), renaming each column in place so no data is copied,
12
+ * then renames the indexes on those columns to what the current schema expects. Skips columns
13
+ * that are already renamed, so it's safe to re-run.
14
+ */
15
+ export declare function migratePostgresSizesToVariants({ db, direction, payload, }: {
16
+ db: any;
17
+ direction?: SizesToVariantsDirection;
18
+ payload: Payload;
19
+ }): Promise<void>;
20
+ export declare function reservePostgresLegacyIndexName({ existingIndexes, index, reservedRelationNames, }: {
21
+ existingIndexes: ExistingPostgresIndex[];
22
+ index: SizesToVariantsIndexRename;
23
+ reservedRelationNames: Set<string>;
24
+ }): string;
25
+ export declare function resolvePostgresIndexRename({ existingIndexes, index, tableName, }: {
26
+ existingIndexes: ExistingPostgresIndex[];
27
+ index: SizesToVariantsIndexRename;
28
+ tableName: string;
29
+ }): string | undefined;
30
+ export declare function getPostgresSchemaRelationNames({ db, schemaName, }: {
31
+ db: any;
32
+ schemaName: string;
33
+ }): Promise<Set<string>>;
34
+ export {};
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/postgres/predefinedMigrations/sizes-to-variants/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,iDAAiD,CAAA;AAUxD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAAC,EACnD,EAAE,EACF,SAAgB,EAChB,OAAO,GACR,EAAE;IACD,EAAE,EAAE,GAAG,CAAA;IACP,SAAS,CAAC,EAAE,wBAAwB,CAAA;IACpC,OAAO,EAAE,OAAO,CAAA;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EhB;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,eAAe,EACf,KAAK,EACL,qBAAqB,GACtB,EAAE;IACD,eAAe,EAAE,qBAAqB,EAAE,CAAA;IACxC,KAAK,EAAE,0BAA0B,CAAA;IACjC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACnC,GAAG,MAAM,CAgCT;AAED,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,KAAK,EACL,SAAS,GACV,EAAE;IACD,eAAe,EAAE,qBAAqB,EAAE,CAAA;IACxC,KAAK,EAAE,0BAA0B,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,MAAM,GAAG,SAAS,CA2CrB;AAoED,wBAAsB,8BAA8B,CAAC,EACnD,EAAE,EACF,UAAU,GACX,EAAE;IACD,EAAE,EAAE,GAAG,CAAA;IACP,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CASvB"}
@@ -0,0 +1,185 @@
1
+ import { sql } from 'drizzle-orm';
2
+ import { assertNoSizesToVariantsColumnCollisions, buildGeneratedLegacyIndexName, getSizesToVariantsRenames, isGeneratedLegacyIndexName } from '../../../utilities/getSizesToVariantsRenames.js';
3
+ /**
4
+ * Moves every upload collection's stored image sizes between the legacy `sizes_*` columns and
5
+ * `variants_*` (main and versions tables), renaming each column in place so no data is copied,
6
+ * then renames the indexes on those columns to what the current schema expects. Skips columns
7
+ * that are already renamed, so it's safe to re-run.
8
+ */ export async function migratePostgresSizesToVariants({ db, direction = 'up', payload }) {
9
+ const adapter = payload.db;
10
+ const schemaName = adapter.schemaName || 'public';
11
+ const plan = getSizesToVariantsRenames({
12
+ adapter,
13
+ direction
14
+ });
15
+ const plannedTables = [];
16
+ for (const tablePlan of plan){
17
+ const existingColumns = await getColumnNames({
18
+ db,
19
+ schemaName,
20
+ tableName: tablePlan.tableName
21
+ });
22
+ assertNoSizesToVariantsColumnCollisions({
23
+ columns: tablePlan.columns,
24
+ existingColumns,
25
+ tableName: tablePlan.tableName
26
+ });
27
+ plannedTables.push({
28
+ ...tablePlan,
29
+ existingColumns
30
+ });
31
+ }
32
+ const reservedRelationNames = direction === 'down' ? await getPostgresSchemaRelationNames({
33
+ db,
34
+ schemaName
35
+ }) : undefined;
36
+ for (const { columns, existingColumns, indexes, tableName } of plannedTables){
37
+ let renamedCount = 0;
38
+ for (const { from, to } of columns){
39
+ if (!existingColumns.has(from) || existingColumns.has(to)) {
40
+ continue;
41
+ }
42
+ await db.execute(sql`
43
+ ALTER TABLE ${sql.identifier(schemaName)}.${sql.identifier(tableName)}
44
+ RENAME COLUMN ${sql.identifier(from)} TO ${sql.identifier(to)}
45
+ `);
46
+ renamedCount++;
47
+ }
48
+ const existingIndexes = await getIndexes({
49
+ db,
50
+ schemaName,
51
+ tableName
52
+ });
53
+ for (const plannedIndex of indexes){
54
+ const index = reservedRelationNames && plannedIndex.legacyNameBase ? {
55
+ ...plannedIndex,
56
+ to: reservePostgresLegacyIndexName({
57
+ existingIndexes,
58
+ index: plannedIndex,
59
+ reservedRelationNames
60
+ })
61
+ } : plannedIndex;
62
+ const existingName = resolvePostgresIndexRename({
63
+ existingIndexes,
64
+ index,
65
+ tableName
66
+ });
67
+ if (!existingName) {
68
+ continue;
69
+ }
70
+ await db.execute(sql`
71
+ ALTER INDEX ${sql.identifier(schemaName)}.${sql.identifier(existingName)}
72
+ RENAME TO ${sql.identifier(index.to)}
73
+ `);
74
+ }
75
+ payload.logger.info({
76
+ msg: `sizes-to-variants (${direction}): renamed ${renamedCount} column(s) on "${tableName}"`
77
+ });
78
+ }
79
+ }
80
+ export function reservePostgresLegacyIndexName({ existingIndexes, index, reservedRelationNames }) {
81
+ const { legacyNameBase } = index;
82
+ if (!legacyNameBase) {
83
+ reservedRelationNames.add(index.to);
84
+ return index.to;
85
+ }
86
+ const existingDestination = existingIndexes.find((existingIndex)=>isCompatiblePostgresIndex({
87
+ existingIndex,
88
+ index
89
+ }) && isGeneratedLegacyIndexName({
90
+ indexName: existingIndex.name,
91
+ legacyNameBase
92
+ }));
93
+ if (existingDestination) {
94
+ reservedRelationNames.add(existingDestination.name);
95
+ return existingDestination.name;
96
+ }
97
+ let number = 0;
98
+ let indexName = buildGeneratedLegacyIndexName(legacyNameBase);
99
+ while(reservedRelationNames.has(indexName)){
100
+ number++;
101
+ indexName = buildGeneratedLegacyIndexName(legacyNameBase, number);
102
+ }
103
+ reservedRelationNames.add(indexName);
104
+ return indexName;
105
+ }
106
+ export function resolvePostgresIndexRename({ existingIndexes, index, tableName }) {
107
+ const destinationIndex = existingIndexes.find(({ name })=>name === index.to);
108
+ if (destinationIndex) {
109
+ if (!isCompatiblePostgresIndex({
110
+ existingIndex: destinationIndex,
111
+ index
112
+ })) {
113
+ throw new Error(`Cannot run the sizes-to-variants migration because index "${index.to}" on table "${tableName}" does not match the expected columns, uniqueness, or predicate.`);
114
+ }
115
+ return undefined;
116
+ }
117
+ let sourceIndex;
118
+ const { legacyNameBase } = index;
119
+ if (index.from) {
120
+ sourceIndex = existingIndexes.find(({ name })=>name === index.from);
121
+ } else if (legacyNameBase) {
122
+ const legacyCandidates = existingIndexes.filter((existingIndex)=>isGeneratedLegacyIndexName({
123
+ indexName: existingIndex.name,
124
+ legacyNameBase
125
+ }));
126
+ sourceIndex = legacyCandidates.find((existingIndex)=>isCompatiblePostgresIndex({
127
+ existingIndex,
128
+ index
129
+ })) ?? legacyCandidates[0];
130
+ }
131
+ if (!sourceIndex) {
132
+ return undefined;
133
+ }
134
+ if (!isCompatiblePostgresIndex({
135
+ existingIndex: sourceIndex,
136
+ index
137
+ })) {
138
+ throw new Error(`Cannot run the sizes-to-variants migration because index "${sourceIndex.name}" on table "${tableName}" does not match the expected columns, uniqueness, or predicate.`);
139
+ }
140
+ return sourceIndex.name === index.to ? undefined : sourceIndex.name;
141
+ }
142
+ function isCompatiblePostgresIndex({ existingIndex, index }) {
143
+ return existingIndex.columns.join(',') === index.columns.join(',') && existingIndex.unique === index.unique && !existingIndex.isPartial;
144
+ }
145
+ async function getColumnNames({ db, schemaName, tableName }) {
146
+ const result = await db.execute(sql`
147
+ SELECT column_name FROM information_schema.columns
148
+ WHERE table_schema = ${schemaName} AND table_name = ${tableName}
149
+ `);
150
+ return new Set(result.rows.map((row)=>row.column_name));
151
+ }
152
+ async function getIndexes({ db, schemaName, tableName }) {
153
+ const result = await db.execute(sql`
154
+ SELECT
155
+ i.relname AS name,
156
+ array_agg(a.attname::text ORDER BY k.ord) AS columns,
157
+ ix.indisunique AS is_unique,
158
+ ix.indpred IS NOT NULL AS is_partial
159
+ FROM pg_index ix
160
+ JOIN pg_class t ON t.oid = ix.indrelid
161
+ JOIN pg_namespace n ON n.oid = t.relnamespace
162
+ JOIN pg_class i ON i.oid = ix.indexrelid
163
+ CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, ord)
164
+ JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum
165
+ WHERE n.nspname = ${schemaName} AND t.relname = ${tableName}
166
+ GROUP BY i.relname, ix.indisunique, (ix.indpred IS NOT NULL)
167
+ `);
168
+ return result.rows.map((row)=>({
169
+ name: row.name,
170
+ columns: row.columns,
171
+ isPartial: row.is_partial,
172
+ unique: row.is_unique
173
+ }));
174
+ }
175
+ export async function getPostgresSchemaRelationNames({ db, schemaName }) {
176
+ const result = await db.execute(sql`
177
+ SELECT c.relname AS name
178
+ FROM pg_class c
179
+ JOIN pg_namespace n ON n.oid = c.relnamespace
180
+ WHERE n.nspname = ${schemaName}
181
+ `);
182
+ return new Set(result.rows.map((row)=>row.name));
183
+ }
184
+
185
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/postgres/predefinedMigrations/sizes-to-variants/index.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport { sql } from 'drizzle-orm'\n\nimport type {\n SizesToVariantsDirection,\n SizesToVariantsIndexRename,\n} from '../../../utilities/getSizesToVariantsRenames.js'\nimport type { BasePostgresAdapter } from '../../types.js'\n\nimport {\n assertNoSizesToVariantsColumnCollisions,\n buildGeneratedLegacyIndexName,\n getSizesToVariantsRenames,\n isGeneratedLegacyIndexName,\n} from '../../../utilities/getSizesToVariantsRenames.js'\n\ntype ExistingPostgresIndex = {\n columns: string[]\n isPartial: boolean\n name: string\n unique: boolean\n}\n\n/**\n * Moves every upload collection's stored image sizes between the legacy `sizes_*` columns and\n * `variants_*` (main and versions tables), renaming each column in place so no data is copied,\n * then renames the indexes on those columns to what the current schema expects. Skips columns\n * that are already renamed, so it's safe to re-run.\n */\nexport async function migratePostgresSizesToVariants({\n db,\n direction = 'up',\n payload,\n}: {\n db: any\n direction?: SizesToVariantsDirection\n payload: Payload\n}): Promise<void> {\n const adapter = payload.db as unknown as BasePostgresAdapter\n const schemaName = adapter.schemaName || 'public'\n const plan = getSizesToVariantsRenames({ adapter, direction })\n const plannedTables: Array<\n (typeof plan)[number] & {\n existingColumns: Set<string>\n }\n > = []\n\n for (const tablePlan of plan) {\n const existingColumns = await getColumnNames({\n db,\n schemaName,\n tableName: tablePlan.tableName,\n })\n\n assertNoSizesToVariantsColumnCollisions({\n columns: tablePlan.columns,\n existingColumns,\n tableName: tablePlan.tableName,\n })\n\n plannedTables.push({ ...tablePlan, existingColumns })\n }\n\n const reservedRelationNames =\n direction === 'down' ? await getPostgresSchemaRelationNames({ db, schemaName }) : undefined\n\n for (const { columns, existingColumns, indexes, tableName } of plannedTables) {\n let renamedCount = 0\n\n for (const { from, to } of columns) {\n if (!existingColumns.has(from) || existingColumns.has(to)) {\n continue\n }\n\n await db.execute(sql`\n ALTER TABLE ${sql.identifier(schemaName)}.${sql.identifier(tableName)}\n RENAME COLUMN ${sql.identifier(from)} TO ${sql.identifier(to)}\n `)\n renamedCount++\n }\n\n const existingIndexes = await getIndexes({ db, schemaName, tableName })\n\n for (const plannedIndex of indexes) {\n const index =\n reservedRelationNames && plannedIndex.legacyNameBase\n ? {\n ...plannedIndex,\n to: reservePostgresLegacyIndexName({\n existingIndexes,\n index: plannedIndex,\n reservedRelationNames,\n }),\n }\n : plannedIndex\n const existingName = resolvePostgresIndexRename({\n existingIndexes,\n index,\n tableName,\n })\n\n if (!existingName) {\n continue\n }\n\n await db.execute(sql`\n ALTER INDEX ${sql.identifier(schemaName)}.${sql.identifier(existingName)}\n RENAME TO ${sql.identifier(index.to)}\n `)\n }\n\n payload.logger.info({\n msg: `sizes-to-variants (${direction}): renamed ${renamedCount} column(s) on \"${tableName}\"`,\n })\n }\n}\n\nexport function reservePostgresLegacyIndexName({\n existingIndexes,\n index,\n reservedRelationNames,\n}: {\n existingIndexes: ExistingPostgresIndex[]\n index: SizesToVariantsIndexRename\n reservedRelationNames: Set<string>\n}): string {\n const { legacyNameBase } = index\n\n if (!legacyNameBase) {\n reservedRelationNames.add(index.to)\n return index.to\n }\n\n const existingDestination = existingIndexes.find(\n (existingIndex) =>\n isCompatiblePostgresIndex({ existingIndex, index }) &&\n isGeneratedLegacyIndexName({\n indexName: existingIndex.name,\n legacyNameBase,\n }),\n )\n\n if (existingDestination) {\n reservedRelationNames.add(existingDestination.name)\n return existingDestination.name\n }\n\n let number = 0\n let indexName = buildGeneratedLegacyIndexName(legacyNameBase)\n\n while (reservedRelationNames.has(indexName)) {\n number++\n indexName = buildGeneratedLegacyIndexName(legacyNameBase, number)\n }\n\n reservedRelationNames.add(indexName)\n return indexName\n}\n\nexport function resolvePostgresIndexRename({\n existingIndexes,\n index,\n tableName,\n}: {\n existingIndexes: ExistingPostgresIndex[]\n index: SizesToVariantsIndexRename\n tableName: string\n}): string | undefined {\n const destinationIndex = existingIndexes.find(({ name }) => name === index.to)\n\n if (destinationIndex) {\n if (!isCompatiblePostgresIndex({ existingIndex: destinationIndex, index })) {\n throw new Error(\n `Cannot run the sizes-to-variants migration because index \"${index.to}\" on table \"${tableName}\" does not match the expected columns, uniqueness, or predicate.`,\n )\n }\n\n return undefined\n }\n\n let sourceIndex: ExistingPostgresIndex | undefined\n const { legacyNameBase } = index\n\n if (index.from) {\n sourceIndex = existingIndexes.find(({ name }) => name === index.from)\n } else if (legacyNameBase) {\n const legacyCandidates = existingIndexes.filter((existingIndex) =>\n isGeneratedLegacyIndexName({\n indexName: existingIndex.name,\n legacyNameBase,\n }),\n )\n\n sourceIndex =\n legacyCandidates.find((existingIndex) =>\n isCompatiblePostgresIndex({ existingIndex, index }),\n ) ?? legacyCandidates[0]\n }\n\n if (!sourceIndex) {\n return undefined\n }\n\n if (!isCompatiblePostgresIndex({ existingIndex: sourceIndex, index })) {\n throw new Error(\n `Cannot run the sizes-to-variants migration because index \"${sourceIndex.name}\" on table \"${tableName}\" does not match the expected columns, uniqueness, or predicate.`,\n )\n }\n\n return sourceIndex.name === index.to ? undefined : sourceIndex.name\n}\n\nfunction isCompatiblePostgresIndex({\n existingIndex,\n index,\n}: {\n existingIndex: ExistingPostgresIndex\n index: SizesToVariantsIndexRename\n}): boolean {\n return (\n existingIndex.columns.join(',') === index.columns.join(',') &&\n existingIndex.unique === index.unique &&\n !existingIndex.isPartial\n )\n}\n\nasync function getColumnNames({\n db,\n schemaName,\n tableName,\n}: {\n db: any\n schemaName: string\n tableName: string\n}): Promise<Set<string>> {\n const result = await db.execute(sql`\n SELECT column_name FROM information_schema.columns\n WHERE table_schema = ${schemaName} AND table_name = ${tableName}\n `)\n\n return new Set(result.rows.map((row: { column_name: string }) => row.column_name))\n}\n\nasync function getIndexes({\n db,\n schemaName,\n tableName,\n}: {\n db: any\n schemaName: string\n tableName: string\n}): Promise<ExistingPostgresIndex[]> {\n const result = await db.execute(sql`\n SELECT\n i.relname AS name,\n array_agg(a.attname::text ORDER BY k.ord) AS columns,\n ix.indisunique AS is_unique,\n ix.indpred IS NOT NULL AS is_partial\n FROM pg_index ix\n JOIN pg_class t ON t.oid = ix.indrelid\n JOIN pg_namespace n ON n.oid = t.relnamespace\n JOIN pg_class i ON i.oid = ix.indexrelid\n CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, ord)\n JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum\n WHERE n.nspname = ${schemaName} AND t.relname = ${tableName}\n GROUP BY i.relname, ix.indisunique, (ix.indpred IS NOT NULL)\n `)\n\n return result.rows.map(\n (row: { columns: string[]; is_partial: boolean; is_unique: boolean; name: string }) => ({\n name: row.name,\n columns: row.columns,\n isPartial: row.is_partial,\n unique: row.is_unique,\n }),\n )\n}\n\nexport async function getPostgresSchemaRelationNames({\n db,\n schemaName,\n}: {\n db: any\n schemaName: string\n}): Promise<Set<string>> {\n const result = await db.execute(sql`\n SELECT c.relname AS name\n FROM pg_class c\n JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE n.nspname = ${schemaName}\n `)\n\n return new Set(result.rows.map((row: { name: string }) => row.name))\n}\n"],"names":["sql","assertNoSizesToVariantsColumnCollisions","buildGeneratedLegacyIndexName","getSizesToVariantsRenames","isGeneratedLegacyIndexName","migratePostgresSizesToVariants","db","direction","payload","adapter","schemaName","plan","plannedTables","tablePlan","existingColumns","getColumnNames","tableName","columns","push","reservedRelationNames","getPostgresSchemaRelationNames","undefined","indexes","renamedCount","from","to","has","execute","identifier","existingIndexes","getIndexes","plannedIndex","index","legacyNameBase","reservePostgresLegacyIndexName","existingName","resolvePostgresIndexRename","logger","info","msg","add","existingDestination","find","existingIndex","isCompatiblePostgresIndex","indexName","name","number","destinationIndex","Error","sourceIndex","legacyCandidates","filter","join","unique","isPartial","result","Set","rows","map","row","column_name","is_partial","is_unique"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK/C,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,EAAE,EAAE,UAAU,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,cAAc,mHAYxB,IAAI,kBA4MN,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK/C,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,EAAE,EAAE,UAAU,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,cAAc,mHAYxB,IAAI,kBAgNN,CAAA"}
@@ -13,7 +13,8 @@ export const fetchAndResave = async ({ adapter, collectionSlug, db, debug, docsT
13
13
  fallbackLocale: null,
14
14
  locale: 'all',
15
15
  req,
16
- showHiddenFields: true
16
+ showHiddenFields: true,
17
+ overrideAccess: true
17
18
  });
18
19
  if (debug) {
19
20
  payload.logger.info(`The collection "${collectionConfig.slug}" version with ID ${id} will be migrated`);
@@ -52,7 +53,8 @@ export const fetchAndResave = async ({ adapter, collectionSlug, db, debug, docsT
52
53
  fallbackLocale: null,
53
54
  locale: 'all',
54
55
  req,
55
- showHiddenFields: true
56
+ showHiddenFields: true,
57
+ overrideAccess: true
56
58
  });
57
59
  if (debug) {
58
60
  payload.logger.info(`The collection "${collectionConfig.slug}" with ID ${doc.id} will be migrated`);
@@ -97,7 +99,8 @@ export const fetchAndResave = async ({ adapter, collectionSlug, db, debug, docsT
97
99
  limit: 0,
98
100
  locale: 'all',
99
101
  req,
100
- showHiddenFields: true
102
+ showHiddenFields: true,
103
+ overrideAccess: true
101
104
  });
102
105
  if (debug) {
103
106
  payload.logger.info(`${docs.length} global "${globalSlug}" versions will be migrated`);
@@ -137,7 +140,8 @@ export const fetchAndResave = async ({ adapter, collectionSlug, db, debug, docsT
137
140
  fallbackLocale: null,
138
141
  locale: 'all',
139
142
  req,
140
- showHiddenFields: true
143
+ showHiddenFields: true,
144
+ overrideAccess: true
141
145
  });
142
146
  traverseFields({
143
147
  doc,