@payloadcms/drizzle 4.0.0-internal.2fddfc0 → 4.0.0-internal.314c594

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 (171) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/createTableName.d.ts.map +1 -1
  3. package/dist/createTableName.js +2 -7
  4. package/dist/createTableName.js.map +1 -1
  5. package/dist/exports/postgres.d.ts +2 -0
  6. package/dist/exports/postgres.d.ts.map +1 -1
  7. package/dist/exports/postgres.js +2 -0
  8. package/dist/exports/postgres.js.map +1 -1
  9. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  10. package/dist/find/findMany.d.ts.map +1 -1
  11. package/dist/find/traverseFields.d.ts.map +1 -1
  12. package/dist/index.d.ts +3 -3
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/postgres/createDatabase.d.ts.map +1 -1
  17. package/dist/postgres/createExtensions.d.ts.map +1 -1
  18. package/dist/postgres/createJSONQuery/index.d.ts.map +1 -1
  19. package/dist/postgres/init.d.ts.map +1 -1
  20. package/dist/postgres/init.js +6 -0
  21. package/dist/postgres/init.js.map +1 -1
  22. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/index.d.ts.map +1 -1
  23. package/dist/postgres/predefinedMigrations/v2-v3/fetchAndResave/traverseFields.d.ts.map +1 -1
  24. package/dist/postgres/predefinedMigrations/v2-v3/groupUpSQLStatements.d.ts.map +1 -1
  25. package/dist/postgres/predefinedMigrations/v2-v3/index.d.ts.map +1 -1
  26. package/dist/postgres/predefinedMigrations/v2-v3/migrateRelationships.d.ts.map +1 -1
  27. package/dist/postgres/predefinedMigrations/v2-v3/traverseFields.d.ts.map +1 -1
  28. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts +15 -0
  29. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.d.ts.map +1 -0
  30. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js +25 -0
  31. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.js.map +1 -0
  32. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js +91 -0
  33. package/dist/postgres/query/assertOperatorHandlerExtensionsInstalled.spec.js.map +1 -0
  34. package/dist/postgres/query/postgresUnaccent.d.ts +13 -0
  35. package/dist/postgres/query/postgresUnaccent.d.ts.map +1 -0
  36. package/dist/postgres/query/postgresUnaccent.js +40 -0
  37. package/dist/postgres/query/postgresUnaccent.js.map +1 -0
  38. package/dist/postgres/query/postgresUnaccent.spec.js +71 -0
  39. package/dist/postgres/query/postgresUnaccent.spec.js.map +1 -0
  40. package/dist/postgres/schema/buildDrizzleTable.d.ts.map +1 -1
  41. package/dist/postgres/schema/geometryColumn.d.ts +2 -2
  42. package/dist/postgres/schema/geometryColumn.d.ts.map +1 -1
  43. package/dist/postgres/types.d.ts +13 -2
  44. package/dist/postgres/types.d.ts.map +1 -1
  45. package/dist/postgres/types.js.map +1 -1
  46. package/dist/queries/addJoinTable.d.ts +1 -1
  47. package/dist/queries/addJoinTable.d.ts.map +1 -1
  48. package/dist/queries/buildOperatorConstraint.d.ts +22 -0
  49. package/dist/queries/buildOperatorConstraint.d.ts.map +1 -0
  50. package/dist/queries/buildOperatorConstraint.js +63 -0
  51. package/dist/queries/buildOperatorConstraint.js.map +1 -0
  52. package/dist/queries/buildOperatorConstraint.spec.js +348 -0
  53. package/dist/queries/buildOperatorConstraint.spec.js.map +1 -0
  54. package/dist/queries/buildOrderBy.d.ts +1 -1
  55. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  56. package/dist/queries/buildQuery.d.ts.map +1 -1
  57. package/dist/queries/getTableAlias.d.ts.map +1 -1
  58. package/dist/queries/getTableColumnFromPath.d.ts +12 -3
  59. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  60. package/dist/queries/getTableColumnFromPath.js +50 -27
  61. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  62. package/dist/queries/operatorMap.d.ts +7 -3
  63. package/dist/queries/operatorMap.d.ts.map +1 -1
  64. package/dist/queries/operatorMap.js.map +1 -1
  65. package/dist/queries/parseParams.d.ts.map +1 -1
  66. package/dist/queries/parseParams.js +203 -8
  67. package/dist/queries/parseParams.js.map +1 -1
  68. package/dist/queries/resolveRelationshipPath.d.ts +36 -0
  69. package/dist/queries/resolveRelationshipPath.d.ts.map +1 -0
  70. package/dist/queries/resolveRelationshipPath.js +66 -0
  71. package/dist/queries/resolveRelationshipPath.js.map +1 -0
  72. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  73. package/dist/queries/selectDistinct.d.ts.map +1 -1
  74. package/dist/queries/validateOperatorHandlers.d.ts +8 -0
  75. package/dist/queries/validateOperatorHandlers.d.ts.map +1 -0
  76. package/dist/queries/validateOperatorHandlers.js +30 -0
  77. package/dist/queries/validateOperatorHandlers.js.map +1 -0
  78. package/dist/queries/validateOperatorHandlers.spec.js +142 -0
  79. package/dist/queries/validateOperatorHandlers.spec.js.map +1 -0
  80. package/dist/schema/build.d.ts.map +1 -1
  81. package/dist/schema/buildDrizzleRelations.d.ts.map +1 -1
  82. package/dist/schema/buildRawSchema.d.ts.map +1 -1
  83. package/dist/schema/buildRawSchema.spec.js +290 -0
  84. package/dist/schema/buildRawSchema.spec.js.map +1 -0
  85. package/dist/schema/idToUUID.d.ts.map +1 -1
  86. package/dist/schema/traverseFields.d.ts.map +1 -1
  87. package/dist/schema/traverseFields.js +6 -5
  88. package/dist/schema/traverseFields.js.map +1 -1
  89. package/dist/schema/withDefault.d.ts.map +1 -1
  90. package/dist/sqlite/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -1
  91. package/dist/sqlite/createJSONQuery/index.d.ts.map +1 -1
  92. package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
  93. package/dist/transform/read/hasManyText.d.ts.map +1 -1
  94. package/dist/transform/read/index.d.ts.map +1 -1
  95. package/dist/transform/read/relationship.d.ts.map +1 -1
  96. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  97. package/dist/transform/write/array.d.ts.map +1 -1
  98. package/dist/transform/write/blocks.d.ts.map +1 -1
  99. package/dist/transform/write/index.d.ts.map +1 -1
  100. package/dist/transform/write/numbers.d.ts.map +1 -1
  101. package/dist/transform/write/relationships.d.ts.map +1 -1
  102. package/dist/transform/write/selects.d.ts.map +1 -1
  103. package/dist/transform/write/texts.d.ts.map +1 -1
  104. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  105. package/dist/types.d.ts +50 -6
  106. package/dist/types.d.ts.map +1 -1
  107. package/dist/types.js +1 -3
  108. package/dist/types.js.map +1 -1
  109. package/dist/updateJobs.d.ts.map +1 -1
  110. package/dist/updateJobs.js +37 -0
  111. package/dist/updateJobs.js.map +1 -1
  112. package/dist/upsertRow/deleteExistingArrayRows.d.ts.map +1 -1
  113. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  114. package/dist/upsertRow/handleUpsertError.d.ts.map +1 -1
  115. package/dist/upsertRow/index.d.ts.map +1 -1
  116. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  117. package/dist/upsertRow/insertArrays.js +2 -1
  118. package/dist/upsertRow/insertArrays.js.map +1 -1
  119. package/dist/upsertRow/shouldUseOptimizedUpsertRow.d.ts.map +1 -1
  120. package/dist/utilities/appendPrefixToKeys.d.ts.map +1 -1
  121. package/dist/utilities/blocksToJsonMigrator.d.ts.map +1 -1
  122. package/dist/utilities/buildCreateMigration.d.ts.map +1 -1
  123. package/dist/utilities/buildForeignKeyName.d.ts.map +1 -1
  124. package/dist/utilities/buildForeignKeyName.js +3 -2
  125. package/dist/utilities/buildForeignKeyName.js.map +1 -1
  126. package/dist/utilities/buildIndexName.d.ts.map +1 -1
  127. package/dist/utilities/buildIndexName.js +3 -2
  128. package/dist/utilities/buildIndexName.js.map +1 -1
  129. package/dist/utilities/checkTruncatedIdentifiers.d.ts +13 -0
  130. package/dist/utilities/checkTruncatedIdentifiers.d.ts.map +1 -0
  131. package/dist/utilities/checkTruncatedIdentifiers.js +56 -0
  132. package/dist/utilities/checkTruncatedIdentifiers.js.map +1 -0
  133. package/dist/utilities/checkTruncatedIdentifiers.spec.js +301 -0
  134. package/dist/utilities/checkTruncatedIdentifiers.spec.js.map +1 -0
  135. package/dist/utilities/createBlocksMap.d.ts.map +1 -1
  136. package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
  137. package/dist/utilities/createSchemaGenerator.d.ts.map +1 -1
  138. package/dist/utilities/escapeSQLValue.d.ts.map +1 -1
  139. package/dist/utilities/executeSchemaHooks.d.ts.map +1 -1
  140. package/dist/utilities/extendDrizzleTable.d.ts.map +1 -1
  141. package/dist/utilities/getArrayRelationName.d.ts.map +1 -1
  142. package/dist/utilities/getCollectionIdType.d.ts.map +1 -1
  143. package/dist/utilities/getMigrationTemplate.d.ts.map +1 -1
  144. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -1
  145. package/dist/utilities/getPrimaryDb.d.ts +1 -1
  146. package/dist/utilities/getPrimaryDb.d.ts.map +1 -1
  147. package/dist/utilities/getTransaction.d.ts +1 -1
  148. package/dist/utilities/getTransaction.d.ts.map +1 -1
  149. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  150. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -1
  151. package/dist/utilities/isUUIDType.d.ts.map +1 -1
  152. package/dist/utilities/json.d.ts.map +1 -1
  153. package/dist/utilities/migrationTableExists.d.ts.map +1 -1
  154. package/dist/utilities/parseError.d.ts.map +1 -1
  155. package/dist/utilities/pushDevSchema.d.ts.map +1 -1
  156. package/dist/utilities/rawConstraint.d.ts.map +1 -1
  157. package/dist/utilities/sanitizePathSegment.d.ts.map +1 -1
  158. package/dist/utilities/validateExistingBlockIsIdentical.d.ts +1 -5
  159. package/dist/utilities/validateExistingBlockIsIdentical.d.ts.map +1 -1
  160. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  161. package/dist/utilities/validateIdentifierLength.d.ts +12 -0
  162. package/dist/utilities/validateIdentifierLength.d.ts.map +1 -0
  163. package/dist/utilities/validateIdentifierLength.js +18 -0
  164. package/dist/utilities/validateIdentifierLength.js.map +1 -0
  165. package/dist/utilities/validateIdentifierLength.spec.js +19 -0
  166. package/dist/utilities/validateIdentifierLength.spec.js.map +1 -0
  167. package/package.json +4 -4
  168. package/dist/find/chainMethods.d.ts +0 -20
  169. package/dist/find/chainMethods.d.ts.map +0 -1
  170. package/dist/find/chainMethods.js +0 -16
  171. package/dist/find/chainMethods.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"updateJobs.d.ts","sourceRoot":"","sources":["../src/updateJobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAYhD,eAAO,MAAM,UAAU,EAAE,UA2FxB,CAAA"}
1
+ {"version":3,"file":"updateJobs.d.ts","sourceRoot":"","sources":["../src/updateJobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,SAAS,CAAA;AAsBhD,eAAO,MAAM,UAAU,EAAE,UAsIxB,CAAA"}
@@ -1,9 +1,13 @@
1
+ import { and, inArray, isNull, lte, or } from 'drizzle-orm';
1
2
  import toSnakeCase from 'to-snake-case';
2
3
  import { findMany } from './find/findMany.js';
4
+ import { transformForWrite } from './transform/write/index.js';
3
5
  import { upsertRow } from './upsertRow/index.js';
4
6
  import { shouldUseOptimizedUpsertRow } from './upsertRow/shouldUseOptimizedUpsertRow.js';
5
7
  import { getPrimaryDb } from './utilities/getPrimaryDb.js';
6
8
  import { getTransaction } from './utilities/getTransaction.js';
9
+ import { markWrite } from './utilities/readAfterWrite.js';
10
+ const isInitialJobClaim = (data)=>typeof data.processingToken === 'string' && typeof data.processingUntil === 'string' && Object.keys(data).every((field)=>field === 'processingToken' || field === 'processingUntil' || field === 'updatedAt');
7
11
  export const updateJobs = async function updateMany({ id, data, limit: limitArg, req, returning, sort: sortArg, where: whereArg }) {
8
12
  if (!data?.log?.length && !(data.log && typeof data.log === 'object' && '$push' in data.log)) {
9
13
  delete data.log;
@@ -54,6 +58,39 @@ export const updateJobs = async function updateMany({ id, data, limit: limitArg,
54
58
  return [];
55
59
  }
56
60
  const db = getPrimaryDb(this, await getTransaction(this, req));
61
+ if (isInitialJobClaim(data)) {
62
+ // Atomically claim jobs so multiple workers cannot pick up the same job.
63
+ // We don't need FOR UPDATE SKIP LOCKED here because of the compare-and-swap-style update using processingUntil and processingToken.
64
+ // The first update makes the where clause fail for other workers, so they cannot claim the same job.
65
+ const _db = db;
66
+ const table = this.tables[tableName];
67
+ const now = new Date().toISOString();
68
+ const { row } = transformForWrite({
69
+ adapter: this,
70
+ data,
71
+ enableAtomicWrites: true,
72
+ fields: collection.flattenedFields,
73
+ tableName
74
+ });
75
+ if (typeof row.updatedAt === 'undefined' || row.updatedAt === null) {
76
+ delete row.updatedAt;
77
+ }
78
+ const jobIDs = jobs.docs.map((job)=>job.id);
79
+ const claimedRows = await _db.update(table).set(row).where(and(inArray(table.id, jobIDs), or(isNull(table.processingUntil), lte(table.processingUntil, now)))).returning({
80
+ id: table.id
81
+ });
82
+ if (claimedRows.length) {
83
+ markWrite(this);
84
+ }
85
+ if (returning === false) {
86
+ return null;
87
+ }
88
+ const claimedIDs = new Set(claimedRows.map(({ id })=>id));
89
+ return jobs.docs.filter((job)=>claimedIDs.has(job.id)).map((job)=>({
90
+ ...job,
91
+ ...data
92
+ }));
93
+ }
57
94
  const results = [];
58
95
  // TODO: We need to batch this to reduce the amount of db calls. This can get very slow if we are updating a lot of rows.
59
96
  for (const job of jobs.docs){
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/updateJobs.ts"],"sourcesContent":["import type { UpdateJobs, Where } from 'payload'\n\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { findMany } from './find/findMany.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'\n\nexport const updateJobs: UpdateJobs = async function updateMany(\n this: DrizzleAdapter,\n { id, data, limit: limitArg, req, returning, sort: sortArg, where: whereArg },\n) {\n if (\n !(data?.log as object[])?.length &&\n !(data.log && typeof data.log === 'object' && '$push' in data.log)\n ) {\n delete data.log\n }\n\n const whereToUse: Where = id ? { id: { equals: id } } : whereArg\n const limit = id ? 1 : limitArg\n\n const collection = this.payload.collections['payload-jobs'].config\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n const sort = sortArg !== undefined && sortArg !== null ? sortArg : collection.defaultSort\n\n const useOptimizedUpsertRow = shouldUseOptimizedUpsertRow({\n data,\n fields: collection.flattenedFields,\n })\n\n if (useOptimizedUpsertRow && id) {\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const result = await upsertRow({\n id,\n adapter: this,\n collectionSlug: 'payload-jobs',\n data,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n operation: 'update',\n req,\n tableName,\n })\n\n return returning === false ? null : [result]\n }\n\n const jobs = await findMany({\n adapter: this,\n collectionSlug: 'payload-jobs',\n fields: collection.flattenedFields,\n limit: id ? 1 : limit,\n pagination: false,\n req,\n sort,\n tableName,\n where: whereToUse,\n })\n if (!jobs.docs.length) {\n return []\n }\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const results = []\n\n // TODO: We need to batch this to reduce the amount of db calls. This can get very slow if we are updating a lot of rows.\n for (const job of jobs.docs) {\n const updateData = useOptimizedUpsertRow\n ? data\n : {\n ...job,\n ...data,\n }\n\n const result = await upsertRow({\n id: job.id,\n adapter: this,\n collectionSlug: 'payload-jobs',\n data: updateData,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n operation: 'update',\n req,\n tableName,\n })\n\n results.push(result)\n }\n\n if (returning === false) {\n return null\n }\n\n return results\n}\n"],"names":["toSnakeCase","findMany","upsertRow","shouldUseOptimizedUpsertRow","getPrimaryDb","getTransaction","updateJobs","updateMany","id","data","limit","limitArg","req","returning","sort","sortArg","where","whereArg","log","length","whereToUse","equals","collection","payload","collections","config","tableName","tableNameMap","get","slug","undefined","defaultSort","useOptimizedUpsertRow","fields","flattenedFields","db","result","adapter","collectionSlug","ignoreResult","operation","jobs","pagination","docs","results","job","updateData","push"],"mappings":"AAEA,OAAOA,iBAAiB,gBAAe;AAIvC,SAASC,QAAQ,QAAQ,qBAAoB;AAC7C,SAASC,SAAS,QAAQ,uBAAsB;AAChD,SAASC,2BAA2B,QAAQ,6CAA4C;AACxF,SAASC,YAAY,QAAQ,8BAA6B;AAC1D,SAASC,cAAc,QAAQ,gCAA+B;AAE9D,OAAO,MAAMC,aAAyB,eAAeC,WAEnD,EAAEC,EAAE,EAAEC,IAAI,EAAEC,OAAOC,QAAQ,EAAEC,GAAG,EAAEC,SAAS,EAAEC,MAAMC,OAAO,EAAEC,OAAOC,QAAQ,EAAE;IAE7E,IACE,CAAER,MAAMS,KAAkBC,UAC1B,CAAEV,CAAAA,KAAKS,GAAG,IAAI,OAAOT,KAAKS,GAAG,KAAK,YAAY,WAAWT,KAAKS,GAAG,AAAD,GAChE;QACA,OAAOT,KAAKS,GAAG;IACjB;IAEA,MAAME,aAAoBZ,KAAK;QAAEA,IAAI;YAAEa,QAAQb;QAAG;IAAE,IAAIS;IACxD,MAAMP,QAAQF,KAAK,IAAIG;IAEvB,MAAMW,aAAa,IAAI,CAACC,OAAO,CAACC,WAAW,CAAC,eAAe,CAACC,MAAM;IAClE,MAAMC,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAAC5B,YAAYsB,WAAWO,IAAI;IACnE,MAAMf,OAAOC,YAAYe,aAAaf,YAAY,OAAOA,UAAUO,WAAWS,WAAW;IAEzF,MAAMC,wBAAwB7B,4BAA4B;QACxDM;QACAwB,QAAQX,WAAWY,eAAe;IACpC;IAEA,IAAIF,yBAAyBxB,IAAI;QAC/B,MAAM2B,KAAK/B,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEO;QAEzD,MAAMwB,SAAS,MAAMlC,UAAU;YAC7BM;YACA6B,SAAS,IAAI;YACbC,gBAAgB;YAChB7B;YACA0B;YACAF,QAAQX,WAAWY,eAAe;YAClCK,cAAc1B,cAAc;YAC5B2B,WAAW;YACX5B;YACAc;QACF;QAEA,OAAOb,cAAc,QAAQ,OAAO;YAACuB;SAAO;IAC9C;IAEA,MAAMK,OAAO,MAAMxC,SAAS;QAC1BoC,SAAS,IAAI;QACbC,gBAAgB;QAChBL,QAAQX,WAAWY,eAAe;QAClCxB,OAAOF,KAAK,IAAIE;QAChBgC,YAAY;QACZ9B;QACAE;QACAY;QACAV,OAAOI;IACT;IACA,IAAI,CAACqB,KAAKE,IAAI,CAACxB,MAAM,EAAE;QACrB,OAAO,EAAE;IACX;IAEA,MAAMgB,KAAK/B,aAAa,IAAI,EAAE,MAAMC,eAAe,IAAI,EAAEO;IAEzD,MAAMgC,UAAU,EAAE;IAElB,yHAAyH;IACzH,KAAK,MAAMC,OAAOJ,KAAKE,IAAI,CAAE;QAC3B,MAAMG,aAAad,wBACfvB,OACA;YACE,GAAGoC,GAAG;YACN,GAAGpC,IAAI;QACT;QAEJ,MAAM2B,SAAS,MAAMlC,UAAU;YAC7BM,IAAIqC,IAAIrC,EAAE;YACV6B,SAAS,IAAI;YACbC,gBAAgB;YAChB7B,MAAMqC;YACNX;YACAF,QAAQX,WAAWY,eAAe;YAClCK,cAAc1B,cAAc;YAC5B2B,WAAW;YACX5B;YACAc;QACF;QAEAkB,QAAQG,IAAI,CAACX;IACf;IAEA,IAAIvB,cAAc,OAAO;QACvB,OAAO;IACT;IAEA,OAAO+B;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/updateJobs.ts"],"sourcesContent":["import type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { UpdateJobs, Where } from 'payload'\n\nimport { and, inArray, isNull, lte, or } from 'drizzle-orm'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { DrizzleAdapter } from './types.js'\n\nimport { findMany } from './find/findMany.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\nconst isInitialJobClaim = (data: Record<string, unknown>): boolean =>\n typeof data.processingToken === 'string' &&\n typeof data.processingUntil === 'string' &&\n Object.keys(data).every(\n (field) => field === 'processingToken' || field === 'processingUntil' || field === 'updatedAt',\n )\n\nexport const updateJobs: UpdateJobs = async function updateMany(\n this: DrizzleAdapter,\n { id, data, limit: limitArg, req, returning, sort: sortArg, where: whereArg },\n) {\n if (\n !(data?.log as object[])?.length &&\n !(data.log && typeof data.log === 'object' && '$push' in data.log)\n ) {\n delete data.log\n }\n\n const whereToUse: Where = id ? { id: { equals: id } } : whereArg\n const limit = id ? 1 : limitArg\n\n const collection = this.payload.collections['payload-jobs'].config\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n const sort = sortArg !== undefined && sortArg !== null ? sortArg : collection.defaultSort\n\n const useOptimizedUpsertRow = shouldUseOptimizedUpsertRow({\n data,\n fields: collection.flattenedFields,\n })\n\n if (useOptimizedUpsertRow && id) {\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n const result = await upsertRow({\n id,\n adapter: this,\n collectionSlug: 'payload-jobs',\n data,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n operation: 'update',\n req,\n tableName,\n })\n\n return returning === false ? null : [result]\n }\n\n const jobs = await findMany({\n adapter: this,\n collectionSlug: 'payload-jobs',\n fields: collection.flattenedFields,\n limit: id ? 1 : limit,\n pagination: false,\n req,\n sort,\n tableName,\n where: whereToUse,\n })\n if (!jobs.docs.length) {\n return []\n }\n\n const db = getPrimaryDb(this, await getTransaction(this, req))\n\n if (isInitialJobClaim(data)) {\n // Atomically claim jobs so multiple workers cannot pick up the same job.\n // We don't need FOR UPDATE SKIP LOCKED here because of the compare-and-swap-style update using processingUntil and processingToken.\n // The first update makes the where clause fail for other workers, so they cannot claim the same job.\n const _db = db as LibSQLDatabase\n const table = this.tables[tableName]\n const now = new Date().toISOString()\n const { row } = transformForWrite({\n adapter: this,\n data,\n enableAtomicWrites: true,\n fields: collection.flattenedFields,\n tableName,\n })\n\n if (typeof row.updatedAt === 'undefined' || row.updatedAt === null) {\n delete row.updatedAt\n }\n\n const jobIDs = jobs.docs.map((job) => job.id)\n const claimedRows = await _db\n .update(table)\n .set(row)\n .where(\n and(\n inArray(table.id, jobIDs),\n or(isNull(table.processingUntil), lte(table.processingUntil, now)),\n ),\n )\n .returning({ id: table.id })\n\n if (claimedRows.length) {\n markWrite(this)\n }\n\n if (returning === false) {\n return null\n }\n\n const claimedIDs = new Set(claimedRows.map(({ id }) => id))\n return jobs.docs.filter((job) => claimedIDs.has(job.id)).map((job) => ({ ...job, ...data }))\n }\n\n const results = []\n\n // TODO: We need to batch this to reduce the amount of db calls. This can get very slow if we are updating a lot of rows.\n for (const job of jobs.docs) {\n const updateData = useOptimizedUpsertRow\n ? data\n : {\n ...job,\n ...data,\n }\n\n const result = await upsertRow({\n id: job.id,\n adapter: this,\n collectionSlug: 'payload-jobs',\n data: updateData,\n db,\n fields: collection.flattenedFields,\n ignoreResult: returning === false,\n operation: 'update',\n req,\n tableName,\n })\n\n results.push(result)\n }\n\n if (returning === false) {\n return null\n }\n\n return results\n}\n"],"names":["and","inArray","isNull","lte","or","toSnakeCase","findMany","transformForWrite","upsertRow","shouldUseOptimizedUpsertRow","getPrimaryDb","getTransaction","markWrite","isInitialJobClaim","data","processingToken","processingUntil","Object","keys","every","field","updateJobs","updateMany","id","limit","limitArg","req","returning","sort","sortArg","where","whereArg","log","length","whereToUse","equals","collection","payload","collections","config","tableName","tableNameMap","get","slug","undefined","defaultSort","useOptimizedUpsertRow","fields","flattenedFields","db","result","adapter","collectionSlug","ignoreResult","operation","jobs","pagination","docs","_db","table","tables","now","Date","toISOString","row","enableAtomicWrites","updatedAt","jobIDs","map","job","claimedRows","update","set","claimedIDs","Set","filter","has","results","updateData","push"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deleteExistingArrayRows.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingArrayRows.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,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAU,uCAK3C,IAAI,KAAG,OAAO,CAAC,IAAI,CAUrB,CAAA"}
1
+ {"version":3,"file":"deleteExistingArrayRows.d.ts","sourceRoot":"","sources":["../../src/upsertRow/deleteExistingArrayRows.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,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,uBAAuB,0CAKjC,IAAI,KAAG,OAAO,CAAC,IAAI,CAUrB,CAAA"}
@@ -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,GAAU,iGAS5C,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,CA4CrB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"handleUpsertError.d.ts","sourceRoot":"","sources":["../../src/upsertRow/handleUpsertError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,kFAQ/B,qBAAqB,KAAG,KAkE1B,CAAA"}
1
+ {"version":3,"file":"handleUpsertError.d.ts","sourceRoot":"","sources":["../../src/upsertRow/handleUpsertError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,qFAQ3B,qBAAqB,KAAG,KAkE1B,CAAA"}
@@ -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,EAAE,6KAqB7E,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;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 +1 @@
1
- {"version":3,"file":"insertArrays.d.ts","sourceRoot":"","sources":["../../src/upsertRow/insertArrays.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,EAAE,CAAA;IACH,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;CAC1C,CAAA;AAYD,eAAO,MAAM,YAAY,GAAU,+CAMhC,IAAI,KAAG,OAAO,CAAC,IAAI,CAgGrB,CAAA"}
1
+ {"version":3,"file":"insertArrays.d.ts","sourceRoot":"","sources":["../../src/upsertRow/insertArrays.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,EAAE,CAAA;IACH,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAA;IAClD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;CAC1C,CAAA;AAYD,eAAO,MAAM,YAAY,kDAMtB,IAAI,KAAG,OAAO,CAAC,IAAI,CAiGrB,CAAA"}
@@ -78,7 +78,8 @@ export const insertArrays = async ({ adapter, arrays, db, parentRows, uuidMap =
78
78
  adapter,
79
79
  arrays: row.arrays,
80
80
  db,
81
- parentRows: insertedRows
81
+ parentRows: insertedRows,
82
+ uuidMap
82
83
  });
83
84
  }
84
85
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/upsertRow/insertArrays.ts"],"sourcesContent":["import type { ArrayRowToInsert } from '../transform/write/types.js'\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }[]\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n parentRows: Record<string, unknown>[]\n uuidMap?: Record<string, number | string>\n}\n\ntype RowsByTable = {\n [tableName: string]: {\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }[]\n locales: Record<string, unknown>[]\n rows: Record<string, unknown>[]\n }\n}\n\nexport const insertArrays = async ({\n adapter,\n arrays,\n db,\n parentRows,\n uuidMap = {},\n}: Args): Promise<void> => {\n // Maintain a map of flattened rows by table\n const rowsByTable: RowsByTable = {}\n\n arrays.forEach((arraysByTable, parentRowIndex) => {\n if (!arraysByTable || Object.keys(arraysByTable).length === 0) {\n return\n }\n Object.entries(arraysByTable).forEach(([tableName, arrayRows]) => {\n // If the table doesn't exist in map, initialize it\n if (!rowsByTable[tableName]) {\n rowsByTable[tableName] = {\n arrays: [],\n locales: [],\n rows: [],\n }\n }\n\n const parentID = parentRows[parentRowIndex].id\n\n // Add any sub arrays that need to be created\n // We will call this recursively below\n arrayRows.forEach((arrayRow) => {\n if (Object.keys(arrayRow.arrays).length > 0) {\n rowsByTable[tableName].arrays.push(arrayRow.arrays)\n }\n\n // Set up parent IDs for both row and locale row\n arrayRow.row._parentID = parentID\n rowsByTable[tableName].rows.push(arrayRow.row)\n\n Object.entries(arrayRow.locales).forEach(([arrayRowLocale, arrayRowLocaleData]) => {\n arrayRowLocaleData._parentID = arrayRow.row.id\n arrayRowLocaleData._locale = arrayRowLocale\n rowsByTable[tableName].locales.push(arrayRowLocaleData)\n if (!arrayRow.row.id) {\n arrayRowLocaleData._getParentID = (rows: { _uuid: string; id: number }[]) => {\n const { id } = rows.find((each) => each._uuid === arrayRow.row._uuid)\n return id\n }\n }\n })\n })\n })\n })\n\n // Insert all corresponding arrays\n // (one insert per array table)\n for (const [tableName, row] of Object.entries(rowsByTable)) {\n // the nested arrays need the ID for the parentID foreign key\n let insertedRows: Args['parentRows']\n if (row.rows.length > 0) {\n insertedRows = await adapter.insert({\n db,\n tableName,\n values: row.rows,\n })\n\n insertedRows.forEach((row) => {\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n uuidMap[row._uuid] = row.id\n }\n })\n }\n\n // Insert locale rows\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`] && row.locales.length > 0) {\n if (!row.locales[0]._parentID) {\n row.locales = row.locales.map((localeRow) => {\n if (typeof localeRow._getParentID === 'function') {\n localeRow._parentID = localeRow._getParentID(insertedRows)\n delete localeRow._getParentID\n }\n return localeRow\n })\n }\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: row.locales,\n })\n }\n\n // If there are sub arrays, call this function recursively\n if (row.arrays.length > 0) {\n await insertArrays({\n adapter,\n arrays: row.arrays,\n db,\n parentRows: insertedRows,\n })\n }\n }\n}\n"],"names":["insertArrays","adapter","arrays","db","parentRows","uuidMap","rowsByTable","forEach","arraysByTable","parentRowIndex","Object","keys","length","entries","tableName","arrayRows","locales","rows","parentID","id","arrayRow","push","row","_parentID","arrayRowLocale","arrayRowLocaleData","_locale","_getParentID","find","each","_uuid","insertedRows","insert","values","tables","localesSuffix","map","localeRow"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/upsertRow/insertArrays.ts"],"sourcesContent":["import type { ArrayRowToInsert } from '../transform/write/types.js'\nimport type { DrizzleAdapter, DrizzleTransaction } from '../types.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }[]\n db: DrizzleAdapter['drizzle'] | DrizzleTransaction\n parentRows: Record<string, unknown>[]\n uuidMap?: Record<string, number | string>\n}\n\ntype RowsByTable = {\n [tableName: string]: {\n arrays: {\n [tableName: string]: ArrayRowToInsert[]\n }[]\n locales: Record<string, unknown>[]\n rows: Record<string, unknown>[]\n }\n}\n\nexport const insertArrays = async ({\n adapter,\n arrays,\n db,\n parentRows,\n uuidMap = {},\n}: Args): Promise<void> => {\n // Maintain a map of flattened rows by table\n const rowsByTable: RowsByTable = {}\n\n arrays.forEach((arraysByTable, parentRowIndex) => {\n if (!arraysByTable || Object.keys(arraysByTable).length === 0) {\n return\n }\n Object.entries(arraysByTable).forEach(([tableName, arrayRows]) => {\n // If the table doesn't exist in map, initialize it\n if (!rowsByTable[tableName]) {\n rowsByTable[tableName] = {\n arrays: [],\n locales: [],\n rows: [],\n }\n }\n\n const parentID = parentRows[parentRowIndex].id\n\n // Add any sub arrays that need to be created\n // We will call this recursively below\n arrayRows.forEach((arrayRow) => {\n if (Object.keys(arrayRow.arrays).length > 0) {\n rowsByTable[tableName].arrays.push(arrayRow.arrays)\n }\n\n // Set up parent IDs for both row and locale row\n arrayRow.row._parentID = parentID\n rowsByTable[tableName].rows.push(arrayRow.row)\n\n Object.entries(arrayRow.locales).forEach(([arrayRowLocale, arrayRowLocaleData]) => {\n arrayRowLocaleData._parentID = arrayRow.row.id\n arrayRowLocaleData._locale = arrayRowLocale\n rowsByTable[tableName].locales.push(arrayRowLocaleData)\n if (!arrayRow.row.id) {\n arrayRowLocaleData._getParentID = (rows: { _uuid: string; id: number }[]) => {\n const { id } = rows.find((each) => each._uuid === arrayRow.row._uuid)\n return id\n }\n }\n })\n })\n })\n })\n\n // Insert all corresponding arrays\n // (one insert per array table)\n for (const [tableName, row] of Object.entries(rowsByTable)) {\n // the nested arrays need the ID for the parentID foreign key\n let insertedRows: Args['parentRows']\n if (row.rows.length > 0) {\n insertedRows = await adapter.insert({\n db,\n tableName,\n values: row.rows,\n })\n\n insertedRows.forEach((row) => {\n if (\n typeof row._uuid === 'string' &&\n (typeof row.id === 'string' || typeof row.id === 'number')\n ) {\n uuidMap[row._uuid] = row.id\n }\n })\n }\n\n // Insert locale rows\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`] && row.locales.length > 0) {\n if (!row.locales[0]._parentID) {\n row.locales = row.locales.map((localeRow) => {\n if (typeof localeRow._getParentID === 'function') {\n localeRow._parentID = localeRow._getParentID(insertedRows)\n delete localeRow._getParentID\n }\n return localeRow\n })\n }\n await adapter.insert({\n db,\n tableName: `${tableName}${adapter.localesSuffix}`,\n values: row.locales,\n })\n }\n\n // If there are sub arrays, call this function recursively\n if (row.arrays.length > 0) {\n await insertArrays({\n adapter,\n arrays: row.arrays,\n db,\n parentRows: insertedRows,\n uuidMap,\n })\n }\n }\n}\n"],"names":["insertArrays","adapter","arrays","db","parentRows","uuidMap","rowsByTable","forEach","arraysByTable","parentRowIndex","Object","keys","length","entries","tableName","arrayRows","locales","rows","parentID","id","arrayRow","push","row","_parentID","arrayRowLocale","arrayRowLocaleData","_locale","_getParentID","find","each","_uuid","insertedRows","insert","values","tables","localesSuffix","map","localeRow"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shouldUseOptimizedUpsertRow.d.ts","sourceRoot":"","sources":["../../src/upsertRow/shouldUseOptimizedUpsertRow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,mBAGzC;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB,QA8EA,CAAA"}
1
+ {"version":3,"file":"shouldUseOptimizedUpsertRow.d.ts","sourceRoot":"","sources":["../../src/upsertRow/shouldUseOptimizedUpsertRow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,sBAGrC;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB,QA8EA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"appendPrefixToKeys.d.ts","sourceRoot":"","sources":["../../src/utilities/appendPrefixToKeys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,MAAM,KAAG,CAI9E,CAAA"}
1
+ {"version":3,"file":"appendPrefixToKeys.d.ts","sourceRoot":"","sources":["../../src/utilities/appendPrefixToKeys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,GAAI,CAAC,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,MAAM,KAAG,CAI9E,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"blocksToJsonMigrator.d.ts","sourceRoot":"","sources":["../../src/utilities/blocksToJsonMigrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAExB,OAAO,EAGR,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EAGV,oBAAoB,EACpB,cAAc,EACf,MAAM,aAAa,CAAA;AA8rBpB,eAAO,MAAM,0BAA0B,GAAI,iDAIxC;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,oBAEH,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,SAAS,OAAO,KAAG,oBAQ1D,CAAA;AAED,eAAO,MAAM,2CAA2C,GAAI,kBAEzD;IACD,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,wBAoCH,CAAA"}
1
+ {"version":3,"file":"blocksToJsonMigrator.d.ts","sourceRoot":"","sources":["../../src/utilities/blocksToJsonMigrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAExB,OAAO,EAGR,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EAGV,oBAAoB,EACpB,cAAc,EACf,MAAM,aAAa,CAAA;AA8rBpB,eAAO,MAAM,0BAA0B,oDAIpC;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,oBAEH,CAAA;AAED,eAAO,MAAM,uBAAuB,YAAa,OAAO,KAAG,oBAQ1D,CAAA;AAED,eAAO,MAAM,2CAA2C,qBAErD;IACD,WAAW,EAAE,MAAM,CAAA;CACpB,KAAG,wBAoCH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildCreateMigration.d.ts","sourceRoot":"","sources":["../../src/utilities/buildCreateMigration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,SAAS,CAAA;AAWvD,eAAO,MAAM,oBAAoB,GAAI,kDAIlC;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,eA6IH,CAAA"}
1
+ {"version":3,"file":"buildCreateMigration.d.ts","sourceRoot":"","sources":["../../src/utilities/buildCreateMigration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,SAAS,CAAA;AAWvD,eAAO,MAAM,oBAAoB,qDAI9B;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,MAAM,CAAA;CACnF,KAAG,eA6IH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildForeignKeyName.d.ts","sourceRoot":"","sources":["../../src/utilities/buildForeignKeyName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,mBAAmB,GAAI,4BAIjC;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAkBH,CAAA"}
1
+ {"version":3,"file":"buildForeignKeyName.d.ts","sourceRoot":"","sources":["../../src/utilities/buildForeignKeyName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,mBAAmB,+BAI7B;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAkBH,CAAA"}
@@ -1,8 +1,9 @@
1
+ import { maxGeneratedIdentifierLength } from './validateIdentifierLength.js';
1
2
  export const buildForeignKeyName = ({ name, adapter, number = 0 })=>{
2
3
  let foreignKeyName = `${name}${number ? `_${number}` : ''}_fk`;
3
- if (foreignKeyName.length > 60) {
4
+ if (foreignKeyName.length > maxGeneratedIdentifierLength) {
4
5
  const suffix = `${number ? `_${number}` : ''}_fk`;
5
- foreignKeyName = `${name.slice(0, 60 - suffix.length)}${suffix}`;
6
+ foreignKeyName = `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`;
6
7
  }
7
8
  if (!adapter.foreignKeys.has(foreignKeyName)) {
8
9
  adapter.foreignKeys.add(foreignKeyName);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildForeignKeyName.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\nexport const buildForeignKeyName = ({\n name,\n adapter,\n number = 0,\n}: {\n adapter: DrizzleAdapter\n name: string\n number?: number\n}): string => {\n let foreignKeyName = `${name}${number ? `_${number}` : ''}_fk`\n\n if (foreignKeyName.length > 60) {\n const suffix = `${number ? `_${number}` : ''}_fk`\n foreignKeyName = `${name.slice(0, 60 - suffix.length)}${suffix}`\n }\n\n if (!adapter.foreignKeys.has(foreignKeyName)) {\n adapter.foreignKeys.add(foreignKeyName)\n return foreignKeyName\n }\n\n return buildForeignKeyName({\n name,\n adapter,\n number: number + 1,\n })\n}\n"],"names":["buildForeignKeyName","name","adapter","number","foreignKeyName","length","suffix","slice","foreignKeys","has","add"],"mappings":"AAEA,OAAO,MAAMA,sBAAsB,CAAC,EAClCC,IAAI,EACJC,OAAO,EACPC,SAAS,CAAC,EAKX;IACC,IAAIC,iBAAiB,GAAGH,OAAOE,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,GAAG,GAAG,CAAC;IAE9D,IAAIC,eAAeC,MAAM,GAAG,IAAI;QAC9B,MAAMC,SAAS,GAAGH,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,GAAG,GAAG,CAAC;QACjDC,iBAAiB,GAAGH,KAAKM,KAAK,CAAC,GAAG,KAAKD,OAAOD,MAAM,IAAIC,QAAQ;IAClE;IAEA,IAAI,CAACJ,QAAQM,WAAW,CAACC,GAAG,CAACL,iBAAiB;QAC5CF,QAAQM,WAAW,CAACE,GAAG,CAACN;QACxB,OAAOA;IACT;IAEA,OAAOJ,oBAAoB;QACzBC;QACAC;QACAC,QAAQA,SAAS;IACnB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/buildForeignKeyName.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\nimport { maxGeneratedIdentifierLength } from './validateIdentifierLength.js'\n\nexport const buildForeignKeyName = ({\n name,\n adapter,\n number = 0,\n}: {\n adapter: DrizzleAdapter\n name: string\n number?: number\n}): string => {\n let foreignKeyName = `${name}${number ? `_${number}` : ''}_fk`\n\n if (foreignKeyName.length > maxGeneratedIdentifierLength) {\n const suffix = `${number ? `_${number}` : ''}_fk`\n foreignKeyName = `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`\n }\n\n if (!adapter.foreignKeys.has(foreignKeyName)) {\n adapter.foreignKeys.add(foreignKeyName)\n return foreignKeyName\n }\n\n return buildForeignKeyName({\n name,\n adapter,\n number: number + 1,\n })\n}\n"],"names":["maxGeneratedIdentifierLength","buildForeignKeyName","name","adapter","number","foreignKeyName","length","suffix","slice","foreignKeys","has","add"],"mappings":"AAEA,SAASA,4BAA4B,QAAQ,gCAA+B;AAE5E,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,IAAI,EACJC,OAAO,EACPC,SAAS,CAAC,EAKX;IACC,IAAIC,iBAAiB,GAAGH,OAAOE,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,GAAG,GAAG,CAAC;IAE9D,IAAIC,eAAeC,MAAM,GAAGN,8BAA8B;QACxD,MAAMO,SAAS,GAAGH,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,GAAG,GAAG,CAAC;QACjDC,iBAAiB,GAAGH,KAAKM,KAAK,CAAC,GAAGR,+BAA+BO,OAAOD,MAAM,IAAIC,QAAQ;IAC5F;IAEA,IAAI,CAACJ,QAAQM,WAAW,CAACC,GAAG,CAACL,iBAAiB;QAC5CF,QAAQM,WAAW,CAACE,GAAG,CAACN;QACxB,OAAOA;IACT;IAEA,OAAOJ,oBAAoB;QACzBC;QACAC;QACAC,QAAQA,SAAS;IACnB;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildIndexName.d.ts","sourceRoot":"","sources":["../../src/utilities/buildIndexName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc,GAAI,0CAK5B;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAmBH,CAAA"}
1
+ {"version":3,"file":"buildIndexName.d.ts","sourceRoot":"","sources":["../../src/utilities/buildIndexName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,cAAc,6CAKxB;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAmBH,CAAA"}
@@ -1,8 +1,9 @@
1
+ import { maxGeneratedIdentifierLength } from './validateIdentifierLength.js';
1
2
  export const buildIndexName = ({ name, adapter, appendSuffix = true, number = 0 })=>{
2
3
  let indexName = `${name}${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`;
3
- if (indexName.length > 60) {
4
+ if (indexName.length > maxGeneratedIdentifierLength) {
4
5
  const suffix = `${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`;
5
- indexName = `${name.slice(0, 60 - suffix.length)}${suffix}`;
6
+ indexName = `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`;
6
7
  }
7
8
  if (!adapter.indexes.has(indexName) && !(indexName in adapter.rawTables)) {
8
9
  adapter.indexes.add(indexName);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildIndexName.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\nexport const buildIndexName = ({\n name,\n adapter,\n appendSuffix = true,\n number = 0,\n}: {\n adapter: DrizzleAdapter\n appendSuffix?: boolean\n name: string\n number?: number\n}): string => {\n let indexName = `${name}${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`\n\n if (indexName.length > 60) {\n const suffix = `${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`\n indexName = `${name.slice(0, 60 - suffix.length)}${suffix}`\n }\n\n if (!adapter.indexes.has(indexName) && !(indexName in adapter.rawTables)) {\n adapter.indexes.add(indexName)\n return indexName\n }\n\n return buildIndexName({\n name,\n adapter,\n appendSuffix,\n number: number + 1,\n })\n}\n"],"names":["buildIndexName","name","adapter","appendSuffix","number","indexName","length","suffix","slice","indexes","has","rawTables","add"],"mappings":"AAEA,OAAO,MAAMA,iBAAiB,CAAC,EAC7BC,IAAI,EACJC,OAAO,EACPC,eAAe,IAAI,EACnBC,SAAS,CAAC,EAMX;IACC,IAAIC,YAAY,GAAGJ,OAAOG,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,KAAKD,eAAe,SAAS,IAAI;IAEnF,IAAIE,UAAUC,MAAM,GAAG,IAAI;QACzB,MAAMC,SAAS,GAAGH,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,KAAKD,eAAe,SAAS,IAAI;QAC3EE,YAAY,GAAGJ,KAAKO,KAAK,CAAC,GAAG,KAAKD,OAAOD,MAAM,IAAIC,QAAQ;IAC7D;IAEA,IAAI,CAACL,QAAQO,OAAO,CAACC,GAAG,CAACL,cAAc,CAAEA,CAAAA,aAAaH,QAAQS,SAAS,AAAD,GAAI;QACxET,QAAQO,OAAO,CAACG,GAAG,CAACP;QACpB,OAAOA;IACT;IAEA,OAAOL,eAAe;QACpBC;QACAC;QACAC;QACAC,QAAQA,SAAS;IACnB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/buildIndexName.ts"],"sourcesContent":["import type { DrizzleAdapter } from '../types.js'\n\nimport { maxGeneratedIdentifierLength } from './validateIdentifierLength.js'\n\nexport const buildIndexName = ({\n name,\n adapter,\n appendSuffix = true,\n number = 0,\n}: {\n adapter: DrizzleAdapter\n appendSuffix?: boolean\n name: string\n number?: number\n}): string => {\n let indexName = `${name}${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`\n\n if (indexName.length > maxGeneratedIdentifierLength) {\n const suffix = `${number ? `_${number}` : ''}${appendSuffix ? '_idx' : ''}`\n indexName = `${name.slice(0, maxGeneratedIdentifierLength - suffix.length)}${suffix}`\n }\n\n if (!adapter.indexes.has(indexName) && !(indexName in adapter.rawTables)) {\n adapter.indexes.add(indexName)\n return indexName\n }\n\n return buildIndexName({\n name,\n adapter,\n appendSuffix,\n number: number + 1,\n })\n}\n"],"names":["maxGeneratedIdentifierLength","buildIndexName","name","adapter","appendSuffix","number","indexName","length","suffix","slice","indexes","has","rawTables","add"],"mappings":"AAEA,SAASA,4BAA4B,QAAQ,gCAA+B;AAE5E,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,IAAI,EACJC,OAAO,EACPC,eAAe,IAAI,EACnBC,SAAS,CAAC,EAMX;IACC,IAAIC,YAAY,GAAGJ,OAAOG,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,KAAKD,eAAe,SAAS,IAAI;IAEnF,IAAIE,UAAUC,MAAM,GAAGP,8BAA8B;QACnD,MAAMQ,SAAS,GAAGH,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,KAAKD,eAAe,SAAS,IAAI;QAC3EE,YAAY,GAAGJ,KAAKO,KAAK,CAAC,GAAGT,+BAA+BQ,OAAOD,MAAM,IAAIC,QAAQ;IACvF;IAEA,IAAI,CAACL,QAAQO,OAAO,CAACC,GAAG,CAACL,cAAc,CAAEA,CAAAA,aAAaH,QAAQS,SAAS,AAAD,GAAI;QACxET,QAAQO,OAAO,CAACG,GAAG,CAACP;QACpB,OAAOA;IACT;IAEA,OAAOL,eAAe;QACpBC;QACAC;QACAC;QACAC,QAAQA,SAAS;IACnB;AACF,EAAC"}
@@ -0,0 +1,13 @@
1
+ import type { DrizzleAdapter } from '../types.js';
2
+ /**
3
+ * Warns about identifiers Postgres will silently truncate past 63 chars, and throws
4
+ * when two of them truncate to the same name (a schema Postgres can't create anyway).
5
+ *
6
+ * Base table/enum names throw during construction, so this only covers concatenated
7
+ * identifiers: companion tables, columns, and inline index/foreign key names.
8
+ */
9
+ export declare const checkTruncatedIdentifiers: ({ adapter, logWarnings, }: {
10
+ adapter: Pick<DrizzleAdapter, 'payload' | 'rawTables'>;
11
+ logWarnings: boolean;
12
+ }) => void;
13
+ //# sourceMappingURL=checkTruncatedIdentifiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkTruncatedIdentifiers.d.ts","sourceRoot":"","sources":["../../src/utilities/checkTruncatedIdentifiers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAOjD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,8BAGnC;IACD,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,WAAW,CAAC,CAAA;IACtD,WAAW,EAAE,OAAO,CAAA;CACrB,KAAG,IAgEH,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { APIError } from 'payload';
2
+ import { maxIdentifierLength } from './validateIdentifierLength.js';
3
+ const truncate = (name)=>name.length > maxIdentifierLength ? name.slice(0, maxIdentifierLength) : name;
4
+ /**
5
+ * Warns about identifiers Postgres will silently truncate past 63 chars, and throws
6
+ * when two of them truncate to the same name (a schema Postgres can't create anyway).
7
+ *
8
+ * Base table/enum names throw during construction, so this only covers concatenated
9
+ * identifiers: companion tables, columns, and inline index/foreign key names.
10
+ */ export const checkTruncatedIdentifiers = ({ adapter, logWarnings })=>{
11
+ const truncatedNames = new Set();
12
+ const collisions = new Set();
13
+ // finalName -> originalName, per namespace, to detect post-truncation collisions
14
+ const tableNames = new Map();
15
+ const indexNames = new Map();
16
+ const foreignKeyNames = new Map();
17
+ const check = (original, seen)=>{
18
+ const final = truncate(original);
19
+ const existing = seen.get(final);
20
+ if (existing !== undefined && existing !== original) {
21
+ collisions.add(`"${existing}" and "${original}" both become "${final}"`);
22
+ return;
23
+ }
24
+ seen.set(final, original);
25
+ if (final !== original) {
26
+ truncatedNames.add(original);
27
+ }
28
+ };
29
+ for(const tableName in adapter.rawTables){
30
+ const table = adapter.rawTables[tableName];
31
+ check(table.name, tableNames);
32
+ // Columns only collide with other columns in the same table.
33
+ const columnNames = new Map();
34
+ for(const columnKey in table.columns){
35
+ check(table.columns[columnKey].name, columnNames);
36
+ }
37
+ if (table.indexes) {
38
+ for(const indexKey in table.indexes){
39
+ check(table.indexes[indexKey].name, indexNames);
40
+ }
41
+ }
42
+ if (table.foreignKeys) {
43
+ for(const foreignKeyKey in table.foreignKeys){
44
+ check(table.foreignKeys[foreignKeyKey].name, foreignKeyNames);
45
+ }
46
+ }
47
+ }
48
+ if (collisions.size > 0) {
49
+ throw new APIError(`Multiple identifiers exceed Postgres's ${maxIdentifierLength}-character limit and truncate to the same name, which Postgres cannot create: ${Array.from(collisions).join('; ')}. Use the dbName property to give them shorter, distinct names.`);
50
+ }
51
+ if (logWarnings && truncatedNames.size > 0) {
52
+ adapter.payload.logger.warn(`The following identifiers exceed Postgres's ${maxIdentifierLength}-character limit and will be silently truncated, which can leave the database out of sync with your Payload schema: ${Array.from(truncatedNames).join(', ')}. Use the dbName property to shorten them.`);
53
+ }
54
+ };
55
+
56
+ //# sourceMappingURL=checkTruncatedIdentifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/checkTruncatedIdentifiers.ts"],"sourcesContent":["import { APIError } from 'payload'\n\nimport type { DrizzleAdapter } from '../types.js'\n\nimport { maxIdentifierLength } from './validateIdentifierLength.js'\n\nconst truncate = (name: string): string =>\n name.length > maxIdentifierLength ? name.slice(0, maxIdentifierLength) : name\n\n/**\n * Warns about identifiers Postgres will silently truncate past 63 chars, and throws\n * when two of them truncate to the same name (a schema Postgres can't create anyway).\n *\n * Base table/enum names throw during construction, so this only covers concatenated\n * identifiers: companion tables, columns, and inline index/foreign key names.\n */\nexport const checkTruncatedIdentifiers = ({\n adapter,\n logWarnings,\n}: {\n adapter: Pick<DrizzleAdapter, 'payload' | 'rawTables'>\n logWarnings: boolean\n}): void => {\n const truncatedNames = new Set<string>()\n const collisions = new Set<string>()\n\n // finalName -> originalName, per namespace, to detect post-truncation collisions\n const tableNames = new Map<string, string>()\n const indexNames = new Map<string, string>()\n const foreignKeyNames = new Map<string, string>()\n\n const check = (original: string, seen: Map<string, string>) => {\n const final = truncate(original)\n\n const existing = seen.get(final)\n if (existing !== undefined && existing !== original) {\n collisions.add(`\"${existing}\" and \"${original}\" both become \"${final}\"`)\n return\n }\n\n seen.set(final, original)\n\n if (final !== original) {\n truncatedNames.add(original)\n }\n }\n\n for (const tableName in adapter.rawTables) {\n const table = adapter.rawTables[tableName]\n\n check(table.name, tableNames)\n\n // Columns only collide with other columns in the same table.\n const columnNames = new Map<string, string>()\n for (const columnKey in table.columns) {\n check(table.columns[columnKey].name, columnNames)\n }\n\n if (table.indexes) {\n for (const indexKey in table.indexes) {\n check(table.indexes[indexKey].name, indexNames)\n }\n }\n\n if (table.foreignKeys) {\n for (const foreignKeyKey in table.foreignKeys) {\n check(table.foreignKeys[foreignKeyKey].name, foreignKeyNames)\n }\n }\n }\n\n if (collisions.size > 0) {\n throw new APIError(\n `Multiple identifiers exceed Postgres's ${maxIdentifierLength}-character limit and truncate to the same name, which Postgres cannot create: ${Array.from(\n collisions,\n ).join('; ')}. Use the dbName property to give them shorter, distinct names.`,\n )\n }\n\n if (logWarnings && truncatedNames.size > 0) {\n adapter.payload.logger.warn(\n `The following identifiers exceed Postgres's ${maxIdentifierLength}-character limit and will be silently truncated, which can leave the database out of sync with your Payload schema: ${Array.from(\n truncatedNames,\n ).join(', ')}. Use the dbName property to shorten them.`,\n )\n }\n}\n"],"names":["APIError","maxIdentifierLength","truncate","name","length","slice","checkTruncatedIdentifiers","adapter","logWarnings","truncatedNames","Set","collisions","tableNames","Map","indexNames","foreignKeyNames","check","original","seen","final","existing","get","undefined","add","set","tableName","rawTables","table","columnNames","columnKey","columns","indexes","indexKey","foreignKeys","foreignKeyKey","size","Array","from","join","payload","logger","warn"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,UAAS;AAIlC,SAASC,mBAAmB,QAAQ,gCAA+B;AAEnE,MAAMC,WAAW,CAACC,OAChBA,KAAKC,MAAM,GAAGH,sBAAsBE,KAAKE,KAAK,CAAC,GAAGJ,uBAAuBE;AAE3E;;;;;;CAMC,GACD,OAAO,MAAMG,4BAA4B,CAAC,EACxCC,OAAO,EACPC,WAAW,EAIZ;IACC,MAAMC,iBAAiB,IAAIC;IAC3B,MAAMC,aAAa,IAAID;IAEvB,iFAAiF;IACjF,MAAME,aAAa,IAAIC;IACvB,MAAMC,aAAa,IAAID;IACvB,MAAME,kBAAkB,IAAIF;IAE5B,MAAMG,QAAQ,CAACC,UAAkBC;QAC/B,MAAMC,QAAQjB,SAASe;QAEvB,MAAMG,WAAWF,KAAKG,GAAG,CAACF;QAC1B,IAAIC,aAAaE,aAAaF,aAAaH,UAAU;YACnDN,WAAWY,GAAG,CAAC,CAAC,CAAC,EAAEH,SAAS,OAAO,EAAEH,SAAS,eAAe,EAAEE,MAAM,CAAC,CAAC;YACvE;QACF;QAEAD,KAAKM,GAAG,CAACL,OAAOF;QAEhB,IAAIE,UAAUF,UAAU;YACtBR,eAAec,GAAG,CAACN;QACrB;IACF;IAEA,IAAK,MAAMQ,aAAalB,QAAQmB,SAAS,CAAE;QACzC,MAAMC,QAAQpB,QAAQmB,SAAS,CAACD,UAAU;QAE1CT,MAAMW,MAAMxB,IAAI,EAAES;QAElB,6DAA6D;QAC7D,MAAMgB,cAAc,IAAIf;QACxB,IAAK,MAAMgB,aAAaF,MAAMG,OAAO,CAAE;YACrCd,MAAMW,MAAMG,OAAO,CAACD,UAAU,CAAC1B,IAAI,EAAEyB;QACvC;QAEA,IAAID,MAAMI,OAAO,EAAE;YACjB,IAAK,MAAMC,YAAYL,MAAMI,OAAO,CAAE;gBACpCf,MAAMW,MAAMI,OAAO,CAACC,SAAS,CAAC7B,IAAI,EAAEW;YACtC;QACF;QAEA,IAAIa,MAAMM,WAAW,EAAE;YACrB,IAAK,MAAMC,iBAAiBP,MAAMM,WAAW,CAAE;gBAC7CjB,MAAMW,MAAMM,WAAW,CAACC,cAAc,CAAC/B,IAAI,EAAEY;YAC/C;QACF;IACF;IAEA,IAAIJ,WAAWwB,IAAI,GAAG,GAAG;QACvB,MAAM,IAAInC,SACR,CAAC,uCAAuC,EAAEC,oBAAoB,8EAA8E,EAAEmC,MAAMC,IAAI,CACtJ1B,YACA2B,IAAI,CAAC,MAAM,+DAA+D,CAAC;IAEjF;IAEA,IAAI9B,eAAeC,eAAe0B,IAAI,GAAG,GAAG;QAC1C5B,QAAQgC,OAAO,CAACC,MAAM,CAACC,IAAI,CACzB,CAAC,4CAA4C,EAAExC,oBAAoB,oHAAoH,EAAEmC,MAAMC,IAAI,CACjM5B,gBACA6B,IAAI,CAAC,MAAM,0CAA0C,CAAC;IAE5D;AACF,EAAC"}