@payloadcms/drizzle 3.0.0-canary.b922438 → 3.0.0-canary.bb00d64

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