@payloadcms/drizzle 3.0.0-canary.e14c80d → 3.0.0-canary.e1fc0e0

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 (300) hide show
  1. package/dist/count.d.ts.map +1 -1
  2. package/dist/count.js +1 -1
  3. package/dist/count.js.map +1 -1
  4. package/dist/createGlobalVersion.d.ts +1 -1
  5. package/dist/createGlobalVersion.d.ts.map +1 -1
  6. package/dist/createGlobalVersion.js +6 -2
  7. package/dist/createGlobalVersion.js.map +1 -1
  8. package/dist/createTableName.d.ts.map +1 -1
  9. package/dist/createTableName.js +6 -2
  10. package/dist/createTableName.js.map +1 -1
  11. package/dist/createVersion.d.ts +1 -1
  12. package/dist/createVersion.d.ts.map +1 -1
  13. package/dist/createVersion.js +21 -14
  14. package/dist/createVersion.js.map +1 -1
  15. package/dist/deleteOne.d.ts.map +1 -1
  16. package/dist/deleteOne.js +5 -3
  17. package/dist/deleteOne.js.map +1 -1
  18. package/dist/deleteVersions.js +1 -1
  19. package/dist/deleteVersions.js.map +1 -1
  20. package/dist/destroy.d.ts.map +1 -1
  21. package/dist/destroy.js +3 -1
  22. package/dist/destroy.js.map +1 -1
  23. package/dist/exports/postgres.d.ts +15 -0
  24. package/dist/exports/postgres.d.ts.map +1 -0
  25. package/dist/exports/postgres.js +16 -0
  26. package/dist/exports/postgres.js.map +1 -0
  27. package/dist/find/buildFindManyArgs.d.ts +14 -7
  28. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  29. package/dist/find/buildFindManyArgs.js +9 -2
  30. package/dist/find/buildFindManyArgs.js.map +1 -1
  31. package/dist/find/findMany.d.ts +2 -1
  32. package/dist/find/findMany.d.ts.map +1 -1
  33. package/dist/find/findMany.js +8 -4
  34. package/dist/find/findMany.js.map +1 -1
  35. package/dist/find/traverseFields.d.ts +8 -3
  36. package/dist/find/traverseFields.d.ts.map +1 -1
  37. package/dist/find/traverseFields.js +157 -17
  38. package/dist/find/traverseFields.js.map +1 -1
  39. package/dist/find.d.ts.map +1 -1
  40. package/dist/find.js +2 -1
  41. package/dist/find.js.map +1 -1
  42. package/dist/findGlobalVersions.js +1 -1
  43. package/dist/findGlobalVersions.js.map +1 -1
  44. package/dist/findMigrationDir.d.ts.map +1 -1
  45. package/dist/findMigrationDir.js +3 -1
  46. package/dist/findMigrationDir.js.map +1 -1
  47. package/dist/findOne.d.ts +1 -1
  48. package/dist/findOne.d.ts.map +1 -1
  49. package/dist/findOne.js +2 -1
  50. package/dist/findOne.js.map +1 -1
  51. package/dist/findVersions.js +1 -1
  52. package/dist/findVersions.js.map +1 -1
  53. package/dist/index.d.ts +3 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/migrate.js +1 -0
  58. package/dist/migrate.js.map +1 -1
  59. package/dist/migrateDown.d.ts.map +1 -1
  60. package/dist/migrateDown.js +1 -1
  61. package/dist/migrateDown.js.map +1 -1
  62. package/dist/migrateFresh.d.ts.map +1 -1
  63. package/dist/migrateFresh.js +1 -0
  64. package/dist/migrateFresh.js.map +1 -1
  65. package/dist/migrateRefresh.d.ts.map +1 -1
  66. package/dist/migrateRefresh.js +2 -1
  67. package/dist/migrateRefresh.js.map +1 -1
  68. package/dist/migrateReset.d.ts.map +1 -1
  69. package/dist/migrateReset.js +5 -3
  70. package/dist/migrateReset.js.map +1 -1
  71. package/dist/migrateStatus.js +0 -1
  72. package/dist/migrateStatus.js.map +1 -1
  73. package/dist/postgres/countDistinct.d.ts +3 -0
  74. package/dist/postgres/countDistinct.d.ts.map +1 -0
  75. package/dist/postgres/countDistinct.js +24 -0
  76. package/dist/postgres/countDistinct.js.map +1 -0
  77. package/dist/postgres/createDatabase.d.ts +14 -0
  78. package/dist/postgres/createDatabase.d.ts.map +1 -0
  79. package/dist/postgres/createDatabase.js +76 -0
  80. package/dist/postgres/createDatabase.js.map +1 -0
  81. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts +2 -0
  82. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.d.ts.map +1 -0
  83. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js +16 -0
  84. package/dist/postgres/createJSONQuery/convertPathToJSONTraversal.js.map +1 -0
  85. package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts +2 -0
  86. package/dist/postgres/createJSONQuery/formatJSONPathSegment.d.ts.map +1 -0
  87. package/dist/postgres/createJSONQuery/formatJSONPathSegment.js +5 -0
  88. package/dist/postgres/createJSONQuery/formatJSONPathSegment.js.map +1 -0
  89. package/dist/postgres/createJSONQuery/index.d.ts +10 -0
  90. package/dist/postgres/createJSONQuery/index.d.ts.map +1 -0
  91. package/dist/postgres/createJSONQuery/index.js +54 -0
  92. package/dist/postgres/createJSONQuery/index.js.map +1 -0
  93. package/dist/postgres/createMigration.d.ts +3 -0
  94. package/dist/postgres/createMigration.d.ts.map +1 -0
  95. package/dist/postgres/createMigration.js +92 -0
  96. package/dist/postgres/createMigration.js.map +1 -0
  97. package/dist/postgres/defaultSnapshot.d.ts +3 -0
  98. package/dist/postgres/defaultSnapshot.d.ts.map +1 -0
  99. package/dist/postgres/defaultSnapshot.js +18 -0
  100. package/dist/postgres/defaultSnapshot.js.map +1 -0
  101. package/dist/postgres/deleteWhere.d.ts +3 -0
  102. package/dist/postgres/deleteWhere.d.ts.map +1 -0
  103. package/dist/postgres/deleteWhere.js +6 -0
  104. package/dist/postgres/deleteWhere.js.map +1 -0
  105. package/dist/postgres/dropDatabase.d.ts +3 -0
  106. package/dist/postgres/dropDatabase.d.ts.map +1 -0
  107. package/dist/postgres/dropDatabase.js +9 -0
  108. package/dist/postgres/dropDatabase.js.map +1 -0
  109. package/dist/postgres/execute.d.ts +3 -0
  110. package/dist/postgres/execute.d.ts.map +1 -0
  111. package/dist/postgres/execute.js +11 -0
  112. package/dist/postgres/execute.js.map +1 -0
  113. package/dist/postgres/getMigrationTemplate.d.ts +4 -0
  114. package/dist/postgres/getMigrationTemplate.d.ts.map +1 -0
  115. package/dist/postgres/getMigrationTemplate.js +13 -0
  116. package/dist/postgres/getMigrationTemplate.js.map +1 -0
  117. package/dist/postgres/init.d.ts +3 -0
  118. package/dist/postgres/init.d.ts.map +1 -0
  119. package/dist/postgres/init.js +104 -0
  120. package/dist/postgres/init.js.map +1 -0
  121. package/dist/postgres/insert.d.ts +3 -0
  122. package/dist/postgres/insert.d.ts.map +1 -0
  123. package/dist/postgres/insert.js +12 -0
  124. package/dist/postgres/insert.js.map +1 -0
  125. package/dist/postgres/requireDrizzleKit.d.ts +3 -0
  126. package/dist/postgres/requireDrizzleKit.d.ts.map +1 -0
  127. package/dist/postgres/requireDrizzleKit.js +5 -0
  128. package/dist/postgres/requireDrizzleKit.js.map +1 -0
  129. package/dist/postgres/schema/build.d.ts +42 -0
  130. package/dist/postgres/schema/build.d.ts.map +1 -0
  131. package/dist/postgres/schema/build.js +404 -0
  132. package/dist/postgres/schema/build.js.map +1 -0
  133. package/dist/postgres/schema/createIndex.d.ts +11 -0
  134. package/dist/postgres/schema/createIndex.d.ts.map +1 -0
  135. package/dist/postgres/schema/createIndex.js +20 -0
  136. package/dist/postgres/schema/createIndex.js.map +1 -0
  137. package/dist/postgres/schema/idToUUID.d.ts +3 -0
  138. package/dist/postgres/schema/idToUUID.d.ts.map +1 -0
  139. package/dist/postgres/schema/idToUUID.js +11 -0
  140. package/dist/postgres/schema/idToUUID.js.map +1 -0
  141. package/dist/postgres/schema/parentIDColumnMap.d.ts +4 -0
  142. package/dist/postgres/schema/parentIDColumnMap.d.ts.map +1 -0
  143. package/dist/postgres/schema/parentIDColumnMap.js +9 -0
  144. package/dist/postgres/schema/parentIDColumnMap.js.map +1 -0
  145. package/dist/postgres/schema/setColumnID.d.ts +11 -0
  146. package/dist/postgres/schema/setColumnID.d.ts.map +1 -0
  147. package/dist/postgres/schema/setColumnID.js +24 -0
  148. package/dist/postgres/schema/setColumnID.js.map +1 -0
  149. package/dist/postgres/schema/traverseFields.d.ts +42 -0
  150. package/dist/postgres/schema/traverseFields.d.ts.map +1 -0
  151. package/dist/postgres/schema/traverseFields.js +739 -0
  152. package/dist/postgres/schema/traverseFields.js.map +1 -0
  153. package/dist/postgres/schema/withDefault.d.ts +4 -0
  154. package/dist/postgres/schema/withDefault.d.ts.map +1 -0
  155. package/dist/postgres/schema/withDefault.js +12 -0
  156. package/dist/postgres/schema/withDefault.js.map +1 -0
  157. package/dist/postgres/types.d.ts +139 -0
  158. package/dist/postgres/types.d.ts.map +1 -0
  159. package/dist/postgres/types.js +3 -0
  160. package/dist/postgres/types.js.map +1 -0
  161. package/dist/queries/addJoinTable.d.ts +11 -0
  162. package/dist/queries/addJoinTable.d.ts.map +1 -0
  163. package/dist/queries/addJoinTable.js +13 -0
  164. package/dist/queries/addJoinTable.js.map +1 -0
  165. package/dist/queries/buildAndOrConditions.d.ts +1 -1
  166. package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
  167. package/dist/queries/buildAndOrConditions.js +2 -4
  168. package/dist/queries/buildAndOrConditions.js.map +1 -1
  169. package/dist/queries/buildOrderBy.d.ts +18 -0
  170. package/dist/queries/buildOrderBy.d.ts.map +1 -0
  171. package/dist/queries/buildOrderBy.js +51 -0
  172. package/dist/queries/buildOrderBy.js.map +1 -0
  173. package/dist/queries/buildQuery.d.ts +5 -4
  174. package/dist/queries/buildQuery.d.ts.map +1 -1
  175. package/dist/queries/buildQuery.js +12 -47
  176. package/dist/queries/buildQuery.js.map +1 -1
  177. package/dist/queries/getTableColumnFromPath.d.ts +6 -2
  178. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  179. package/dist/queries/getTableColumnFromPath.js +78 -30
  180. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  181. package/dist/queries/operatorMap.d.ts.map +1 -1
  182. package/dist/queries/operatorMap.js.map +1 -1
  183. package/dist/queries/parseParams.d.ts +1 -1
  184. package/dist/queries/parseParams.d.ts.map +1 -1
  185. package/dist/queries/parseParams.js +52 -6
  186. package/dist/queries/parseParams.js.map +1 -1
  187. package/dist/queries/sanitizeQueryValue.d.ts +12 -1
  188. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  189. package/dist/queries/sanitizeQueryValue.js +81 -23
  190. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  191. package/dist/queries/selectDistinct.d.ts +3 -4
  192. package/dist/queries/selectDistinct.d.ts.map +1 -1
  193. package/dist/queries/selectDistinct.js.map +1 -1
  194. package/dist/queryDrafts.d.ts.map +1 -1
  195. package/dist/queryDrafts.js +5 -6
  196. package/dist/queryDrafts.js.map +1 -1
  197. package/dist/transactions/beginTransaction.d.ts.map +1 -1
  198. package/dist/transactions/beginTransaction.js +5 -1
  199. package/dist/transactions/beginTransaction.js.map +1 -1
  200. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  201. package/dist/transactions/commitTransaction.js +3 -1
  202. package/dist/transactions/commitTransaction.js.map +1 -1
  203. package/dist/transform/read/hasManyNumber.d.ts +2 -1
  204. package/dist/transform/read/hasManyNumber.d.ts.map +1 -1
  205. package/dist/transform/read/hasManyNumber.js +12 -2
  206. package/dist/transform/read/hasManyNumber.js.map +1 -1
  207. package/dist/transform/read/hasManyText.d.ts +2 -1
  208. package/dist/transform/read/hasManyText.d.ts.map +1 -1
  209. package/dist/transform/read/hasManyText.js +12 -2
  210. package/dist/transform/read/hasManyText.js.map +1 -1
  211. package/dist/transform/read/index.d.ts +3 -2
  212. package/dist/transform/read/index.d.ts.map +1 -1
  213. package/dist/transform/read/index.js +3 -2
  214. package/dist/transform/read/index.js.map +1 -1
  215. package/dist/transform/read/relationship.d.ts +2 -1
  216. package/dist/transform/read/relationship.d.ts.map +1 -1
  217. package/dist/transform/read/relationship.js +15 -6
  218. package/dist/transform/read/relationship.js.map +1 -1
  219. package/dist/transform/read/traverseFields.d.ts +10 -2
  220. package/dist/transform/read/traverseFields.d.ts.map +1 -1
  221. package/dist/transform/read/traverseFields.js +170 -56
  222. package/dist/transform/read/traverseFields.js.map +1 -1
  223. package/dist/transform/write/array.d.ts +6 -1
  224. package/dist/transform/write/array.d.ts.map +1 -1
  225. package/dist/transform/write/array.js +7 -3
  226. package/dist/transform/write/array.js.map +1 -1
  227. package/dist/transform/write/blocks.d.ts +8 -3
  228. package/dist/transform/write/blocks.d.ts.map +1 -1
  229. package/dist/transform/write/blocks.js +19 -7
  230. package/dist/transform/write/blocks.js.map +1 -1
  231. package/dist/transform/write/index.d.ts.map +1 -1
  232. package/dist/transform/write/index.js +1 -1
  233. package/dist/transform/write/index.js.map +1 -1
  234. package/dist/transform/write/relationships.d.ts.map +1 -1
  235. package/dist/transform/write/relationships.js +6 -2
  236. package/dist/transform/write/relationships.js.map +1 -1
  237. package/dist/transform/write/selects.d.ts.map +1 -1
  238. package/dist/transform/write/selects.js +1 -1
  239. package/dist/transform/write/selects.js.map +1 -1
  240. package/dist/transform/write/traverseFields.d.ts +6 -1
  241. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  242. package/dist/transform/write/traverseFields.js +58 -19
  243. package/dist/transform/write/traverseFields.js.map +1 -1
  244. package/dist/types.d.ts +2 -1
  245. package/dist/types.d.ts.map +1 -1
  246. package/dist/types.js.map +1 -1
  247. package/dist/update.d.ts.map +1 -1
  248. package/dist/update.js +3 -2
  249. package/dist/update.js.map +1 -1
  250. package/dist/updateGlobalVersion.js +2 -2
  251. package/dist/updateGlobalVersion.js.map +1 -1
  252. package/dist/updateVersion.js +2 -2
  253. package/dist/updateVersion.js.map +1 -1
  254. package/dist/upsertRow/deleteExistingRowsByPath.d.ts.map +1 -1
  255. package/dist/upsertRow/deleteExistingRowsByPath.js +6 -2
  256. package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -1
  257. package/dist/upsertRow/index.d.ts +1 -1
  258. package/dist/upsertRow/index.d.ts.map +1 -1
  259. package/dist/upsertRow/index.js +50 -12
  260. package/dist/upsertRow/index.js.map +1 -1
  261. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  262. package/dist/upsertRow/insertArrays.js +5 -2
  263. package/dist/upsertRow/insertArrays.js.map +1 -1
  264. package/dist/upsertRow/types.d.ts +8 -5
  265. package/dist/upsertRow/types.d.ts.map +1 -1
  266. package/dist/upsertRow/types.js.map +1 -1
  267. package/dist/utilities/buildIndexName.d.ts +7 -0
  268. package/dist/utilities/buildIndexName.d.ts.map +1 -0
  269. package/dist/utilities/buildIndexName.js +14 -0
  270. package/dist/utilities/buildIndexName.js.map +1 -0
  271. package/dist/utilities/createBlocksMap.d.ts.map +1 -1
  272. package/dist/utilities/createBlocksMap.js +4 -2
  273. package/dist/utilities/createBlocksMap.js.map +1 -1
  274. package/dist/utilities/createRelationshipMap.d.ts.map +1 -1
  275. package/dist/utilities/createRelationshipMap.js +3 -1
  276. package/dist/utilities/createRelationshipMap.js.map +1 -1
  277. package/dist/utilities/executeSchemaHooks.d.ts +24 -0
  278. package/dist/utilities/executeSchemaHooks.d.ts.map +1 -0
  279. package/dist/utilities/executeSchemaHooks.js +21 -0
  280. package/dist/utilities/executeSchemaHooks.js.map +1 -0
  281. package/dist/utilities/extendDrizzleTable.d.ts +19 -0
  282. package/dist/utilities/extendDrizzleTable.d.ts.map +1 -0
  283. package/dist/utilities/extendDrizzleTable.js +38 -0
  284. package/dist/utilities/extendDrizzleTable.js.map +1 -0
  285. package/dist/utilities/getCollectionIdType.d.ts +7 -0
  286. package/dist/utilities/getCollectionIdType.d.ts.map +1 -0
  287. package/dist/utilities/getCollectionIdType.js +11 -0
  288. package/dist/utilities/getCollectionIdType.js.map +1 -0
  289. package/dist/utilities/getNameFromDrizzleTable.d.ts +3 -0
  290. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -0
  291. package/dist/utilities/getNameFromDrizzleTable.js +6 -0
  292. package/dist/utilities/getNameFromDrizzleTable.js.map +1 -0
  293. package/dist/utilities/hasLocalesTable.d.ts.map +1 -1
  294. package/dist/utilities/hasLocalesTable.js +12 -4
  295. package/dist/utilities/hasLocalesTable.js.map +1 -1
  296. package/dist/utilities/isPolymorphicRelationship.d.ts +6 -0
  297. package/dist/utilities/isPolymorphicRelationship.d.ts.map +1 -0
  298. package/dist/utilities/isPolymorphicRelationship.js +5 -0
  299. package/dist/utilities/isPolymorphicRelationship.js.map +1 -0
  300. package/package.json +14 -7
@@ -0,0 +1,739 @@
1
+ import { relations } from 'drizzle-orm';
2
+ import { boolean, foreignKey, index, integer, jsonb, numeric, PgNumericBuilder, PgUUIDBuilder, PgVarcharBuilder, text, timestamp, varchar } from 'drizzle-orm/pg-core';
3
+ import { InvalidConfiguration } from 'payload';
4
+ import { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared';
5
+ import toSnakeCase from 'to-snake-case';
6
+ import { createTableName } from '../../createTableName.js';
7
+ import { buildIndexName } from '../../utilities/buildIndexName.js';
8
+ import { hasLocalesTable } from '../../utilities/hasLocalesTable.js';
9
+ import { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js';
10
+ import { buildTable } from './build.js';
11
+ import { createIndex } from './createIndex.js';
12
+ import { idToUUID } from './idToUUID.js';
13
+ import { parentIDColumnMap } from './parentIDColumnMap.js';
14
+ import { withDefault } from './withDefault.js';
15
+ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull, disableRelsTableUnique, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, uniqueRelationships, versions, withinLocalizedArrayOrBlock })=>{
16
+ const throwValidationError = true;
17
+ let hasLocalizedField = false;
18
+ let hasLocalizedRelationshipField = false;
19
+ let hasManyTextField = false;
20
+ let hasLocalizedManyTextField = false;
21
+ let hasManyNumberField = false;
22
+ let hasLocalizedManyNumberField = false;
23
+ let parentIDColType = 'integer';
24
+ if (columns.id instanceof PgUUIDBuilder) {
25
+ parentIDColType = 'uuid';
26
+ }
27
+ if (columns.id instanceof PgNumericBuilder) {
28
+ parentIDColType = 'numeric';
29
+ }
30
+ if (columns.id instanceof PgVarcharBuilder) {
31
+ parentIDColType = 'varchar';
32
+ }
33
+ fields.forEach((field)=>{
34
+ if ('name' in field && field.name === 'id') {
35
+ return;
36
+ }
37
+ if (fieldIsVirtual(field)) {
38
+ return;
39
+ }
40
+ let columnName;
41
+ let fieldName;
42
+ let targetTable = columns;
43
+ let targetIndexes = indexes;
44
+ if (fieldAffectsData(field)) {
45
+ columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(field.name)}`;
46
+ fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`;
47
+ // If field is localized,
48
+ // add the column to the locale table instead of main table
49
+ if (adapter.payload.config.localization && (field.localized || forceLocalized) && field.type !== 'array' && field.type !== 'blocks' && ('hasMany' in field && field.hasMany !== true || !('hasMany' in field))) {
50
+ hasLocalizedField = true;
51
+ targetTable = localesColumns;
52
+ targetIndexes = localesIndexes;
53
+ }
54
+ if ((field.unique || field.index || [
55
+ 'relationship',
56
+ 'upload'
57
+ ].includes(field.type)) && ![
58
+ 'array',
59
+ 'blocks',
60
+ 'group',
61
+ 'point'
62
+ ].includes(field.type) && !('hasMany' in field && field.hasMany === true) && !('relationTo' in field && Array.isArray(field.relationTo))) {
63
+ const unique = disableUnique !== true && field.unique;
64
+ if (unique) {
65
+ const constraintValue = `${fieldPrefix || ''}${field.name}`;
66
+ if (!adapter.fieldConstraints?.[rootTableName]) {
67
+ adapter.fieldConstraints[rootTableName] = {};
68
+ }
69
+ adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue;
70
+ }
71
+ const indexName = buildIndexName({
72
+ name: `${newTableName}_${columnName}`,
73
+ adapter
74
+ });
75
+ targetIndexes[indexName] = createIndex({
76
+ name: field.localized ? [
77
+ fieldName,
78
+ '_locale'
79
+ ] : fieldName,
80
+ indexName,
81
+ unique
82
+ });
83
+ }
84
+ }
85
+ switch(field.type){
86
+ case 'text':
87
+ {
88
+ if (field.hasMany) {
89
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
90
+ if (isLocalized) {
91
+ hasLocalizedManyTextField = true;
92
+ }
93
+ if (field.index) {
94
+ hasManyTextField = 'index';
95
+ } else if (!hasManyTextField) {
96
+ hasManyTextField = true;
97
+ }
98
+ if (field.unique) {
99
+ throw new InvalidConfiguration('Unique is not supported in Postgres for hasMany text fields.');
100
+ }
101
+ } else {
102
+ targetTable[fieldName] = withDefault(varchar(columnName), field);
103
+ }
104
+ break;
105
+ }
106
+ case 'email':
107
+ case 'code':
108
+ case 'textarea':
109
+ {
110
+ targetTable[fieldName] = withDefault(varchar(columnName), field);
111
+ break;
112
+ }
113
+ case 'number':
114
+ {
115
+ if (field.hasMany) {
116
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
117
+ if (isLocalized) {
118
+ hasLocalizedManyNumberField = true;
119
+ }
120
+ if (field.index) {
121
+ hasManyNumberField = 'index';
122
+ } else if (!hasManyNumberField) {
123
+ hasManyNumberField = true;
124
+ }
125
+ if (field.unique) {
126
+ throw new InvalidConfiguration('Unique is not supported in Postgres for hasMany number fields.');
127
+ }
128
+ } else {
129
+ targetTable[fieldName] = withDefault(numeric(columnName), field);
130
+ }
131
+ break;
132
+ }
133
+ case 'richText':
134
+ case 'json':
135
+ {
136
+ targetTable[fieldName] = withDefault(jsonb(columnName), field);
137
+ break;
138
+ }
139
+ case 'date':
140
+ {
141
+ targetTable[fieldName] = withDefault(timestamp(columnName, {
142
+ mode: 'string',
143
+ precision: 3,
144
+ withTimezone: true
145
+ }), field);
146
+ break;
147
+ }
148
+ case 'point':
149
+ {
150
+ break;
151
+ }
152
+ case 'radio':
153
+ case 'select':
154
+ {
155
+ const enumName = createTableName({
156
+ adapter,
157
+ config: field,
158
+ parentTableName: newTableName,
159
+ prefix: `enum_${newTableName}_`,
160
+ target: 'enumName',
161
+ throwValidationError
162
+ });
163
+ adapter.enums[enumName] = adapter.pgSchema.enum(enumName, field.options.map((option)=>{
164
+ if (optionIsObject(option)) {
165
+ return option.value;
166
+ }
167
+ return option;
168
+ }));
169
+ if (field.type === 'select' && field.hasMany) {
170
+ const selectTableName = createTableName({
171
+ adapter,
172
+ config: field,
173
+ parentTableName: newTableName,
174
+ prefix: `${newTableName}_`,
175
+ throwValidationError,
176
+ versionsCustomName: versions
177
+ });
178
+ const baseColumns = {
179
+ order: integer('order').notNull(),
180
+ parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),
181
+ value: adapter.enums[enumName]('value')
182
+ };
183
+ const baseExtraConfig = {
184
+ orderIdx: (cols)=>index(`${selectTableName}_order_idx`).on(cols.order),
185
+ parentFk: (cols)=>foreignKey({
186
+ name: `${selectTableName}_parent_fk`,
187
+ columns: [
188
+ cols.parent
189
+ ],
190
+ foreignColumns: [
191
+ adapter.tables[parentTableName].id
192
+ ]
193
+ }).onDelete('cascade'),
194
+ parentIdx: (cols)=>index(`${selectTableName}_parent_idx`).on(cols.parent)
195
+ };
196
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
197
+ if (isLocalized) {
198
+ baseColumns.locale = adapter.enums.enum__locales('locale').notNull();
199
+ baseExtraConfig.localeIdx = (cols)=>index(`${selectTableName}_locale_idx`).on(cols.locale);
200
+ }
201
+ if (field.index) {
202
+ baseExtraConfig.value = (cols)=>index(`${selectTableName}_value_idx`).on(cols.value);
203
+ }
204
+ buildTable({
205
+ adapter,
206
+ baseColumns,
207
+ baseExtraConfig,
208
+ disableNotNull,
209
+ disableUnique,
210
+ fields: [],
211
+ rootTableName,
212
+ tableName: selectTableName,
213
+ versions
214
+ });
215
+ relationsToBuild.set(fieldName, {
216
+ type: 'many',
217
+ // selects have their own localized table, independent of the base table.
218
+ localized: false,
219
+ target: selectTableName
220
+ });
221
+ adapter.relations[`relations_${selectTableName}`] = relations(adapter.tables[selectTableName], ({ one })=>({
222
+ parent: one(adapter.tables[parentTableName], {
223
+ fields: [
224
+ adapter.tables[selectTableName].parent
225
+ ],
226
+ references: [
227
+ adapter.tables[parentTableName].id
228
+ ],
229
+ relationName: fieldName
230
+ })
231
+ }));
232
+ } else {
233
+ targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field);
234
+ }
235
+ break;
236
+ }
237
+ case 'checkbox':
238
+ {
239
+ targetTable[fieldName] = withDefault(boolean(columnName), field);
240
+ break;
241
+ }
242
+ case 'array':
243
+ {
244
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
245
+ const arrayTableName = createTableName({
246
+ adapter,
247
+ config: field,
248
+ parentTableName: newTableName,
249
+ prefix: `${newTableName}_`,
250
+ throwValidationError,
251
+ versionsCustomName: versions
252
+ });
253
+ const baseColumns = {
254
+ _order: integer('_order').notNull(),
255
+ _parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull()
256
+ };
257
+ const baseExtraConfig = {
258
+ _orderIdx: (cols)=>index(`${arrayTableName}_order_idx`).on(cols._order),
259
+ _parentIDFk: (cols)=>foreignKey({
260
+ name: `${arrayTableName}_parent_id_fk`,
261
+ columns: [
262
+ cols['_parentID']
263
+ ],
264
+ foreignColumns: [
265
+ adapter.tables[parentTableName].id
266
+ ]
267
+ }).onDelete('cascade'),
268
+ _parentIDIdx: (cols)=>index(`${arrayTableName}_parent_id_idx`).on(cols._parentID)
269
+ };
270
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
271
+ if (isLocalized) {
272
+ baseColumns._locale = adapter.enums.enum__locales('_locale').notNull();
273
+ baseExtraConfig._localeIdx = (cols)=>index(`${arrayTableName}_locale_idx`).on(cols._locale);
274
+ }
275
+ const { hasLocalizedManyNumberField: subHasLocalizedManyNumberField, hasLocalizedManyTextField: subHasLocalizedManyTextField, hasLocalizedRelationshipField: subHasLocalizedRelationshipField, hasManyNumberField: subHasManyNumberField, hasManyTextField: subHasManyTextField, relationsToBuild: subRelationsToBuild } = buildTable({
276
+ adapter,
277
+ baseColumns,
278
+ baseExtraConfig,
279
+ disableNotNull: disableNotNullFromHere,
280
+ disableRelsTableUnique: true,
281
+ disableUnique,
282
+ fields: disableUnique ? idToUUID(field.fields) : field.fields,
283
+ rootRelationships: relationships,
284
+ rootRelationsToBuild,
285
+ rootTableIDColType,
286
+ rootTableName,
287
+ rootUniqueRelationships: uniqueRelationships,
288
+ tableName: arrayTableName,
289
+ versions,
290
+ withinLocalizedArrayOrBlock: isLocalized
291
+ });
292
+ if (subHasLocalizedManyNumberField) {
293
+ hasLocalizedManyNumberField = subHasLocalizedManyNumberField;
294
+ }
295
+ if (subHasLocalizedRelationshipField) {
296
+ hasLocalizedRelationshipField = subHasLocalizedRelationshipField;
297
+ }
298
+ if (subHasLocalizedManyTextField) {
299
+ hasLocalizedManyTextField = subHasLocalizedManyTextField;
300
+ }
301
+ if (subHasManyTextField) {
302
+ if (!hasManyTextField || subHasManyTextField === 'index') {
303
+ hasManyTextField = subHasManyTextField;
304
+ }
305
+ }
306
+ if (subHasManyNumberField) {
307
+ if (!hasManyNumberField || subHasManyNumberField === 'index') {
308
+ hasManyNumberField = subHasManyNumberField;
309
+ }
310
+ }
311
+ relationsToBuild.set(fieldName, {
312
+ type: 'many',
313
+ // arrays have their own localized table, independent of the base table.
314
+ localized: false,
315
+ target: arrayTableName
316
+ });
317
+ adapter.relations[`relations_${arrayTableName}`] = relations(adapter.tables[arrayTableName], ({ many, one })=>{
318
+ const result = {
319
+ _parentID: one(adapter.tables[parentTableName], {
320
+ fields: [
321
+ adapter.tables[arrayTableName]._parentID
322
+ ],
323
+ references: [
324
+ adapter.tables[parentTableName].id
325
+ ],
326
+ relationName: fieldName
327
+ })
328
+ };
329
+ if (hasLocalesTable(field.fields)) {
330
+ result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`], {
331
+ relationName: '_locales'
332
+ });
333
+ }
334
+ subRelationsToBuild.forEach(({ type, localized, target }, key)=>{
335
+ if (type === 'one') {
336
+ const arrayWithLocalized = localized ? `${arrayTableName}${adapter.localesSuffix}` : arrayTableName;
337
+ result[key] = one(adapter.tables[target], {
338
+ fields: [
339
+ adapter.tables[arrayWithLocalized][key]
340
+ ],
341
+ references: [
342
+ adapter.tables[target].id
343
+ ],
344
+ relationName: key
345
+ });
346
+ }
347
+ if (type === 'many') {
348
+ result[key] = many(adapter.tables[target], {
349
+ relationName: key
350
+ });
351
+ }
352
+ });
353
+ return result;
354
+ });
355
+ break;
356
+ }
357
+ case 'blocks':
358
+ {
359
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
360
+ field.blocks.forEach((block)=>{
361
+ const blockTableName = createTableName({
362
+ adapter,
363
+ config: block,
364
+ parentTableName: rootTableName,
365
+ prefix: `${rootTableName}_blocks_`,
366
+ throwValidationError,
367
+ versionsCustomName: versions
368
+ });
369
+ if (!adapter.tables[blockTableName]) {
370
+ const baseColumns = {
371
+ _order: integer('_order').notNull(),
372
+ _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),
373
+ _path: text('_path').notNull()
374
+ };
375
+ const baseExtraConfig = {
376
+ _orderIdx: (cols)=>index(`${blockTableName}_order_idx`).on(cols._order),
377
+ _parentIdFk: (cols)=>foreignKey({
378
+ name: `${blockTableName}_parent_id_fk`,
379
+ columns: [
380
+ cols._parentID
381
+ ],
382
+ foreignColumns: [
383
+ adapter.tables[rootTableName].id
384
+ ]
385
+ }).onDelete('cascade'),
386
+ _parentIDIdx: (cols)=>index(`${blockTableName}_parent_id_idx`).on(cols._parentID),
387
+ _pathIdx: (cols)=>index(`${blockTableName}_path_idx`).on(cols._path)
388
+ };
389
+ const isLocalized = Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock || forceLocalized;
390
+ if (isLocalized) {
391
+ baseColumns._locale = adapter.enums.enum__locales('_locale').notNull();
392
+ baseExtraConfig._localeIdx = (cols)=>index(`${blockTableName}_locale_idx`).on(cols._locale);
393
+ }
394
+ const { hasLocalizedManyNumberField: subHasLocalizedManyNumberField, hasLocalizedManyTextField: subHasLocalizedManyTextField, hasLocalizedRelationshipField: subHasLocalizedRelationshipField, hasManyNumberField: subHasManyNumberField, hasManyTextField: subHasManyTextField, relationsToBuild: subRelationsToBuild } = buildTable({
395
+ adapter,
396
+ baseColumns,
397
+ baseExtraConfig,
398
+ disableNotNull: disableNotNullFromHere,
399
+ disableRelsTableUnique: true,
400
+ disableUnique,
401
+ fields: disableUnique ? idToUUID(block.fields) : block.fields,
402
+ rootRelationships: relationships,
403
+ rootRelationsToBuild,
404
+ rootTableIDColType,
405
+ rootTableName,
406
+ rootUniqueRelationships: uniqueRelationships,
407
+ tableName: blockTableName,
408
+ versions,
409
+ withinLocalizedArrayOrBlock: isLocalized
410
+ });
411
+ if (subHasLocalizedManyNumberField) {
412
+ hasLocalizedManyNumberField = subHasLocalizedManyNumberField;
413
+ }
414
+ if (subHasLocalizedRelationshipField) {
415
+ hasLocalizedRelationshipField = subHasLocalizedRelationshipField;
416
+ }
417
+ if (subHasLocalizedManyTextField) {
418
+ hasLocalizedManyTextField = subHasLocalizedManyTextField;
419
+ }
420
+ if (subHasManyTextField) {
421
+ if (!hasManyTextField || subHasManyTextField === 'index') {
422
+ hasManyTextField = subHasManyTextField;
423
+ }
424
+ }
425
+ if (subHasManyNumberField) {
426
+ if (!hasManyNumberField || subHasManyNumberField === 'index') {
427
+ hasManyNumberField = subHasManyNumberField;
428
+ }
429
+ }
430
+ adapter.relations[`relations_${blockTableName}`] = relations(adapter.tables[blockTableName], ({ many, one })=>{
431
+ const result = {
432
+ _parentID: one(adapter.tables[rootTableName], {
433
+ fields: [
434
+ adapter.tables[blockTableName]._parentID
435
+ ],
436
+ references: [
437
+ adapter.tables[rootTableName].id
438
+ ],
439
+ relationName: `_blocks_${block.slug}`
440
+ })
441
+ };
442
+ if (hasLocalesTable(block.fields)) {
443
+ result._locales = many(adapter.tables[`${blockTableName}${adapter.localesSuffix}`], {
444
+ relationName: '_locales'
445
+ });
446
+ }
447
+ subRelationsToBuild.forEach(({ type, localized, target }, key)=>{
448
+ if (type === 'one') {
449
+ const blockWithLocalized = localized ? `${blockTableName}${adapter.localesSuffix}` : blockTableName;
450
+ result[key] = one(adapter.tables[target], {
451
+ fields: [
452
+ adapter.tables[blockWithLocalized][key]
453
+ ],
454
+ references: [
455
+ adapter.tables[target].id
456
+ ],
457
+ relationName: key
458
+ });
459
+ }
460
+ if (type === 'many') {
461
+ result[key] = many(adapter.tables[target], {
462
+ relationName: key
463
+ });
464
+ }
465
+ });
466
+ return result;
467
+ });
468
+ } else if (process.env.NODE_ENV !== 'production' && !versions) {
469
+ validateExistingBlockIsIdentical({
470
+ block,
471
+ localized: field.localized,
472
+ rootTableName,
473
+ table: adapter.tables[blockTableName],
474
+ tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`]
475
+ });
476
+ }
477
+ // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks
478
+ rootRelationsToBuild.set(`_blocks_${block.slug}`, {
479
+ type: 'many',
480
+ // blocks are not localized on the parent table
481
+ localized: false,
482
+ target: blockTableName
483
+ });
484
+ });
485
+ break;
486
+ }
487
+ case 'tab':
488
+ case 'group':
489
+ {
490
+ if (!('name' in field)) {
491
+ const { hasLocalizedField: groupHasLocalizedField, hasLocalizedManyNumberField: groupHasLocalizedManyNumberField, hasLocalizedManyTextField: groupHasLocalizedManyTextField, hasLocalizedRelationshipField: groupHasLocalizedRelationshipField, hasManyNumberField: groupHasManyNumberField, hasManyTextField: groupHasManyTextField } = traverseFields({
492
+ adapter,
493
+ columnPrefix,
494
+ columns,
495
+ disableNotNull,
496
+ disableUnique,
497
+ fieldPrefix,
498
+ fields: field.fields,
499
+ forceLocalized,
500
+ indexes,
501
+ localesColumns,
502
+ localesIndexes,
503
+ newTableName,
504
+ parentTableName,
505
+ relationships,
506
+ relationsToBuild,
507
+ rootRelationsToBuild,
508
+ rootTableIDColType,
509
+ rootTableName,
510
+ uniqueRelationships,
511
+ versions,
512
+ withinLocalizedArrayOrBlock
513
+ });
514
+ if (groupHasLocalizedField) {
515
+ hasLocalizedField = true;
516
+ }
517
+ if (groupHasLocalizedRelationshipField) {
518
+ hasLocalizedRelationshipField = true;
519
+ }
520
+ if (groupHasManyTextField) {
521
+ hasManyTextField = true;
522
+ }
523
+ if (groupHasLocalizedManyTextField) {
524
+ hasLocalizedManyTextField = true;
525
+ }
526
+ if (groupHasManyNumberField) {
527
+ hasManyNumberField = true;
528
+ }
529
+ if (groupHasLocalizedManyNumberField) {
530
+ hasLocalizedManyNumberField = true;
531
+ }
532
+ break;
533
+ }
534
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
535
+ const { hasLocalizedField: groupHasLocalizedField, hasLocalizedManyNumberField: groupHasLocalizedManyNumberField, hasLocalizedManyTextField: groupHasLocalizedManyTextField, hasLocalizedRelationshipField: groupHasLocalizedRelationshipField, hasManyNumberField: groupHasManyNumberField, hasManyTextField: groupHasManyTextField } = traverseFields({
536
+ adapter,
537
+ columnPrefix: `${columnName}_`,
538
+ columns,
539
+ disableNotNull: disableNotNullFromHere,
540
+ disableUnique,
541
+ fieldPrefix: `${fieldName}.`,
542
+ fields: field.fields,
543
+ forceLocalized: field.localized,
544
+ indexes,
545
+ localesColumns,
546
+ localesIndexes,
547
+ newTableName: `${parentTableName}_${columnName}`,
548
+ parentTableName,
549
+ relationships,
550
+ relationsToBuild,
551
+ rootRelationsToBuild,
552
+ rootTableIDColType,
553
+ rootTableName,
554
+ uniqueRelationships,
555
+ versions,
556
+ withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized
557
+ });
558
+ if (groupHasLocalizedField) {
559
+ hasLocalizedField = true;
560
+ }
561
+ if (groupHasLocalizedRelationshipField) {
562
+ hasLocalizedRelationshipField = true;
563
+ }
564
+ if (groupHasManyTextField) {
565
+ hasManyTextField = true;
566
+ }
567
+ if (groupHasLocalizedManyTextField) {
568
+ hasLocalizedManyTextField = true;
569
+ }
570
+ if (groupHasManyNumberField) {
571
+ hasManyNumberField = true;
572
+ }
573
+ if (groupHasLocalizedManyNumberField) {
574
+ hasLocalizedManyNumberField = true;
575
+ }
576
+ break;
577
+ }
578
+ case 'tabs':
579
+ {
580
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
581
+ const { hasLocalizedField: tabHasLocalizedField, hasLocalizedManyNumberField: tabHasLocalizedManyNumberField, hasLocalizedManyTextField: tabHasLocalizedManyTextField, hasLocalizedRelationshipField: tabHasLocalizedRelationshipField, hasManyNumberField: tabHasManyNumberField, hasManyTextField: tabHasManyTextField } = traverseFields({
582
+ adapter,
583
+ columnPrefix,
584
+ columns,
585
+ disableNotNull: disableNotNullFromHere,
586
+ disableUnique,
587
+ fieldPrefix,
588
+ fields: field.tabs.map((tab)=>({
589
+ ...tab,
590
+ type: 'tab'
591
+ })),
592
+ forceLocalized,
593
+ indexes,
594
+ localesColumns,
595
+ localesIndexes,
596
+ newTableName,
597
+ parentTableName,
598
+ relationships,
599
+ relationsToBuild,
600
+ rootRelationsToBuild,
601
+ rootTableIDColType,
602
+ rootTableName,
603
+ uniqueRelationships,
604
+ versions,
605
+ withinLocalizedArrayOrBlock
606
+ });
607
+ if (tabHasLocalizedField) {
608
+ hasLocalizedField = true;
609
+ }
610
+ if (tabHasLocalizedRelationshipField) {
611
+ hasLocalizedRelationshipField = true;
612
+ }
613
+ if (tabHasManyTextField) {
614
+ hasManyTextField = true;
615
+ }
616
+ if (tabHasLocalizedManyTextField) {
617
+ hasLocalizedManyTextField = true;
618
+ }
619
+ if (tabHasManyNumberField) {
620
+ hasManyNumberField = true;
621
+ }
622
+ if (tabHasLocalizedManyNumberField) {
623
+ hasLocalizedManyNumberField = true;
624
+ }
625
+ break;
626
+ }
627
+ case 'row':
628
+ case 'collapsible':
629
+ {
630
+ const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
631
+ const { hasLocalizedField: rowHasLocalizedField, hasLocalizedManyNumberField: rowHasLocalizedManyNumberField, hasLocalizedManyTextField: rowHasLocalizedManyTextField, hasLocalizedRelationshipField: rowHasLocalizedRelationshipField, hasManyNumberField: rowHasManyNumberField, hasManyTextField: rowHasManyTextField } = traverseFields({
632
+ adapter,
633
+ columnPrefix,
634
+ columns,
635
+ disableNotNull: disableNotNullFromHere,
636
+ disableUnique,
637
+ fieldPrefix,
638
+ fields: field.fields,
639
+ forceLocalized,
640
+ indexes,
641
+ localesColumns,
642
+ localesIndexes,
643
+ newTableName,
644
+ parentTableName,
645
+ relationships,
646
+ relationsToBuild,
647
+ rootRelationsToBuild,
648
+ rootTableIDColType,
649
+ rootTableName,
650
+ uniqueRelationships,
651
+ versions,
652
+ withinLocalizedArrayOrBlock
653
+ });
654
+ if (rowHasLocalizedField) {
655
+ hasLocalizedField = true;
656
+ }
657
+ if (rowHasLocalizedRelationshipField) {
658
+ hasLocalizedRelationshipField = true;
659
+ }
660
+ if (rowHasManyTextField) {
661
+ hasManyTextField = true;
662
+ }
663
+ if (rowHasLocalizedManyTextField) {
664
+ hasLocalizedManyTextField = true;
665
+ }
666
+ if (rowHasManyNumberField) {
667
+ hasManyNumberField = true;
668
+ }
669
+ if (rowHasLocalizedManyNumberField) {
670
+ hasLocalizedManyNumberField = true;
671
+ }
672
+ break;
673
+ }
674
+ case 'relationship':
675
+ case 'upload':
676
+ if (Array.isArray(field.relationTo)) {
677
+ field.relationTo.forEach((relation)=>{
678
+ relationships.add(relation);
679
+ if (field.unique && !disableUnique && !disableRelsTableUnique) {
680
+ uniqueRelationships.add(relation);
681
+ }
682
+ });
683
+ } else if (field.hasMany) {
684
+ relationships.add(field.relationTo);
685
+ if (field.unique && !disableUnique && !disableRelsTableUnique) {
686
+ uniqueRelationships.add(field.relationTo);
687
+ }
688
+ } else {
689
+ // simple relationships get a column on the targetTable with a foreign key to the relationTo table
690
+ const relationshipConfig = adapter.payload.collections[field.relationTo].config;
691
+ const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo));
692
+ // get the id type of the related collection
693
+ let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer';
694
+ const relatedCollectionCustomID = relationshipConfig.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
695
+ if (relatedCollectionCustomID?.type === 'number') {
696
+ colType = 'numeric';
697
+ }
698
+ if (relatedCollectionCustomID?.type === 'text') {
699
+ colType = 'varchar';
700
+ }
701
+ // make the foreign key column for relationship using the correct id column type
702
+ targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(()=>adapter.tables[tableName].id, {
703
+ onDelete: 'set null'
704
+ });
705
+ // add relationship to table
706
+ relationsToBuild.set(fieldName, {
707
+ type: 'one',
708
+ localized: adapter.payload.config.localization && (field.localized || forceLocalized),
709
+ target: tableName
710
+ });
711
+ // add notNull when not required
712
+ if (!disableNotNull && field.required && !field.admin?.condition) {
713
+ targetTable[fieldName].notNull();
714
+ }
715
+ break;
716
+ }
717
+ if (Boolean(field.localized && adapter.payload.config.localization) || withinLocalizedArrayOrBlock) {
718
+ hasLocalizedRelationshipField = true;
719
+ }
720
+ break;
721
+ default:
722
+ break;
723
+ }
724
+ const condition = field.admin && field.admin.condition;
725
+ if (!disableNotNull && targetTable[fieldName] && 'required' in field && field.required && !condition) {
726
+ targetTable[fieldName].notNull();
727
+ }
728
+ });
729
+ return {
730
+ hasLocalizedField,
731
+ hasLocalizedManyNumberField,
732
+ hasLocalizedManyTextField,
733
+ hasLocalizedRelationshipField,
734
+ hasManyNumberField,
735
+ hasManyTextField
736
+ };
737
+ };
738
+
739
+ //# sourceMappingURL=traverseFields.js.map