@payloadcms/drizzle 3.0.0-canary.f1f97ff → 3.0.0-canary.fb04843

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