@payloadcms/drizzle 3.0.0-canary.6d066c2 → 3.0.0-canary.71da5b9

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