@payloadcms/drizzle 3.0.0-canary.23fcb9e → 3.0.0-canary.291e44c

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