@payloadcms/drizzle 3.0.0-beta.116 → 3.0.0-beta.118

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 (42) hide show
  1. package/dist/find/buildFindManyArgs.d.ts +2 -1
  2. package/dist/find/buildFindManyArgs.d.ts.map +1 -1
  3. package/dist/find/buildFindManyArgs.js +3 -2
  4. package/dist/find/buildFindManyArgs.js.map +1 -1
  5. package/dist/find/findMany.d.ts +2 -1
  6. package/dist/find/findMany.d.ts.map +1 -1
  7. package/dist/find/findMany.js +3 -2
  8. package/dist/find/findMany.js.map +1 -1
  9. package/dist/find/traverseFields.d.ts +2 -1
  10. package/dist/find/traverseFields.d.ts.map +1 -1
  11. package/dist/find/traverseFields.js +83 -74
  12. package/dist/find/traverseFields.js.map +1 -1
  13. package/dist/postgres/init.d.ts.map +1 -1
  14. package/dist/postgres/init.js +0 -1
  15. package/dist/postgres/init.js.map +1 -1
  16. package/dist/postgres/schema/build.d.ts +2 -3
  17. package/dist/postgres/schema/build.d.ts.map +1 -1
  18. package/dist/postgres/schema/build.js +1 -2
  19. package/dist/postgres/schema/build.js.map +1 -1
  20. package/dist/postgres/schema/traverseFields.d.ts +2 -3
  21. package/dist/postgres/schema/traverseFields.d.ts.map +1 -1
  22. package/dist/postgres/schema/traverseFields.js +1 -27
  23. package/dist/postgres/schema/traverseFields.js.map +1 -1
  24. package/dist/queries/addJoinTable.d.ts +11 -0
  25. package/dist/queries/addJoinTable.d.ts.map +1 -0
  26. package/dist/queries/addJoinTable.js +13 -0
  27. package/dist/queries/addJoinTable.js.map +1 -0
  28. package/dist/queries/buildOrderBy.d.ts.map +1 -1
  29. package/dist/queries/buildOrderBy.js +0 -1
  30. package/dist/queries/buildOrderBy.js.map +1 -1
  31. package/dist/queries/getTableColumnFromPath.d.ts +1 -2
  32. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  33. package/dist/queries/getTableColumnFromPath.js +19 -21
  34. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  35. package/dist/queryDrafts.d.ts.map +1 -1
  36. package/dist/queryDrafts.js +3 -1
  37. package/dist/queryDrafts.js.map +1 -1
  38. package/dist/utilities/getNameFromDrizzleTable.d.ts +3 -0
  39. package/dist/utilities/getNameFromDrizzleTable.d.ts.map +1 -0
  40. package/dist/utilities/getNameFromDrizzleTable.js +6 -0
  41. package/dist/utilities/getNameFromDrizzleTable.js.map +1 -0
  42. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/build.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport type { Field, SanitizedJoins } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n foreignKey,\n index,\n integer,\n numeric,\n serial,\n timestamp,\n unique,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n GenericTable,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { buildIndexName } from '../../utilities/buildIndexName.js'\nimport { createIndex } from './createIndex.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseExtraConfig?: BaseExtraConfig\n buildNumbers?: boolean\n buildRelationships?: boolean\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique: boolean\n fields: Field[]\n joins?: SanitizedJoins\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: string\n rootTableName?: string\n rootUniqueRelationships?: Set<string>\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n disableNotNull,\n disableRelsTableUnique = false,\n disableUnique = false,\n fields,\n joins,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n rootUniqueRelationships,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n const localesColumns: Record<string, PgColumnBuilder> = {}\n const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n let localesTable: GenericTable | PgTableWithColumns<any>\n let textsTable: GenericTable | PgTableWithColumns<any>\n let numbersTable: GenericTable | PgTableWithColumns<any>\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n // Unique relationships to the base collection\n const uniqueRelationships: Set<string> = rootUniqueRelationships || new Set()\n\n let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique,\n fields,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = timestamp('created_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n columns.updatedAt = timestamp('updated_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n }\n\n const table = adapter.pgSchema.table(tableName, columns, (cols) => {\n const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func]) => {\n config[key] = func(cols)\n return config\n }, {})\n\n const result = Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n\n return result\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n localesColumns.id = serial('id').primaryKey()\n localesColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').notNull()\n\n localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols) => {\n return Object.entries(localesIndexes).reduce(\n (acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n },\n {\n _localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(\n cols._locale,\n cols._parentID,\n ),\n _parentIdFk: foreignKey({\n name: `${localeTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n adapter.relations[`relations_${localeTableName}`] = relations(localesTable, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n result._parentID = one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n // name the relationship by what the many() relationName is\n relationName: '_locales',\n })\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [localesTable[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], {\n relationName: key,\n })\n }\n })\n\n return result\n })\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n text: varchar('text'),\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n textsTable = adapter.pgSchema.table(textsTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${textsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyTextField === 'index') {\n config.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n config.localeParent = index(`${textsTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[textsTableName] = textsTable\n\n adapter.relations[`relations_${textsTableName}`] = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n relationName: '_texts',\n }),\n }))\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n number: numeric('number'),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${numbersTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyNumberField === 'index') {\n config.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n config.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n adapter.relations[`relations_${numbersTableName}`] = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n relationName: '_numbers',\n }),\n }))\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order'),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n const relationExtraConfig: BaseExtraConfig = {}\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n const colName = `${relationTo}ID`\n\n relationshipColumns[colName] = parentIDColumnMap[colType](`${formattedRelationTo}_id`)\n\n relationExtraConfig[`${relationTo}IdFk`] = (cols) =>\n foreignKey({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`,\n columns: [cols[colName]],\n foreignColumns: [adapter.tables[formattedRelationTo].id],\n }).onDelete('cascade')\n\n const indexColumns = [colName]\n\n const unique = !disableUnique && uniqueRelationships.has(relationTo)\n\n if (unique) {\n indexColumns.push('path')\n }\n if (hasLocalizedRelationshipField) {\n indexColumns.push('locale')\n }\n\n const indexName = buildIndexName({\n name: `${relationshipsTableName}_${formattedRelationTo}_id`,\n adapter,\n })\n\n relationExtraConfig[indexName] = createIndex({\n name: indexColumns,\n indexName,\n unique,\n })\n })\n\n relationshipsTable = adapter.pgSchema.table(\n relationshipsTableName,\n relationshipColumns,\n (cols) => {\n const result: Record<string, ForeignKeyBuilder | IndexBuilder> = Object.entries(\n relationExtraConfig,\n ).reduce(\n (config, [key, func]) => {\n config[key] = func(cols)\n return config\n },\n {\n order: index(`${relationshipsTableName}_order_idx`).on(cols.order),\n parentFk: foreignKey({\n name: `${relationshipsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),\n pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),\n },\n )\n\n if (hasLocalizedRelationshipField) {\n result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale)\n }\n\n return result\n },\n )\n\n adapter.tables[relationshipsTableName] = relationshipsTable\n\n adapter.relations[`relations_${relationshipsTableName}`] = relations(\n relationshipsTable,\n ({ one }) => {\n const result: Record<string, Relation<string>> = {\n parent: one(table, {\n fields: [relationshipsTable.parent],\n references: [table.id],\n relationName: '_rels',\n }),\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n result[idColumnName] = one(adapter.tables[relatedTableName], {\n fields: [relationshipsTable[idColumnName]],\n references: [adapter.tables[relatedTableName].id],\n relationName: relationTo,\n })\n })\n\n return result\n },\n )\n }\n }\n\n adapter.relations[`relations_${tableName}`] = relations(table, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [table[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: relationName || key })\n }\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable, { relationName: '_locales' })\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable, { relationName: '_texts' })\n }\n\n if (hasManyNumberField) {\n result._numbers = many(numbersTable, { relationName: '_numbers' })\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["relations","foreignKey","index","integer","numeric","serial","timestamp","unique","varchar","toSnakeCase","createTableName","buildIndexName","createIndex","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","disableNotNull","disableRelsTableUnique","disableUnique","fields","joins","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","rootUniqueRelationships","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","uniqueRelationships","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","func","result","acc","colName","tables","size","localeTableName","localesSuffix","id","primaryKey","_locale","enums","enum__locales","_parentID","_localeParent","on","_parentIdFk","name","foreignColumns","onDelete","many","one","references","textsTableName","order","parent","path","text","locale","orderParentIdx","parentFk","text_idx","localeParent","numbersTableName","number","numberIdx","relationshipColumns","relationExtraConfig","relationshipsTableName","relationshipsSuffix","relationTo","relationshipConfig","payload","collections","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","indexColumns","has","push","indexName","parentIdx","pathIdx","localeIdx","relatedTableName","idColumnName","_locales","_texts","_numbers","_rels"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/postgres/schema/build.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport type { Field, SanitizedJoins } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n foreignKey,\n index,\n integer,\n numeric,\n serial,\n timestamp,\n unique,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n GenericTable,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { buildIndexName } from '../../utilities/buildIndexName.js'\nimport { createIndex } from './createIndex.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseExtraConfig?: BaseExtraConfig\n buildNumbers?: boolean\n buildRelationships?: boolean\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique: boolean\n fields: Field[]\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: string\n rootTableName?: string\n rootUniqueRelationships?: Set<string>\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n disableNotNull,\n disableRelsTableUnique = false,\n disableUnique = false,\n fields,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n rootUniqueRelationships,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n const localesColumns: Record<string, PgColumnBuilder> = {}\n const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n let localesTable: GenericTable | PgTableWithColumns<any>\n let textsTable: GenericTable | PgTableWithColumns<any>\n let numbersTable: GenericTable | PgTableWithColumns<any>\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n // Unique relationships to the base collection\n const uniqueRelationships: Set<string> = rootUniqueRelationships || new Set()\n\n let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = timestamp('created_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n columns.updatedAt = timestamp('updated_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n }\n\n const table = adapter.pgSchema.table(tableName, columns, (cols) => {\n const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func]) => {\n config[key] = func(cols)\n return config\n }, {})\n\n const result = Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n\n return result\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n localesColumns.id = serial('id').primaryKey()\n localesColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').notNull()\n\n localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols) => {\n return Object.entries(localesIndexes).reduce(\n (acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n },\n {\n _localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(\n cols._locale,\n cols._parentID,\n ),\n _parentIdFk: foreignKey({\n name: `${localeTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n adapter.relations[`relations_${localeTableName}`] = relations(localesTable, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n result._parentID = one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n // name the relationship by what the many() relationName is\n relationName: '_locales',\n })\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [localesTable[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], {\n relationName: key,\n })\n }\n })\n\n return result\n })\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n text: varchar('text'),\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n textsTable = adapter.pgSchema.table(textsTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${textsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyTextField === 'index') {\n config.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n config.localeParent = index(`${textsTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[textsTableName] = textsTable\n\n adapter.relations[`relations_${textsTableName}`] = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n relationName: '_texts',\n }),\n }))\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n number: numeric('number'),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${numbersTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyNumberField === 'index') {\n config.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n config.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n adapter.relations[`relations_${numbersTableName}`] = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n relationName: '_numbers',\n }),\n }))\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order'),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n const relationExtraConfig: BaseExtraConfig = {}\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n const colName = `${relationTo}ID`\n\n relationshipColumns[colName] = parentIDColumnMap[colType](`${formattedRelationTo}_id`)\n\n relationExtraConfig[`${relationTo}IdFk`] = (cols) =>\n foreignKey({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`,\n columns: [cols[colName]],\n foreignColumns: [adapter.tables[formattedRelationTo].id],\n }).onDelete('cascade')\n\n const indexColumns = [colName]\n\n const unique = !disableUnique && uniqueRelationships.has(relationTo)\n\n if (unique) {\n indexColumns.push('path')\n }\n if (hasLocalizedRelationshipField) {\n indexColumns.push('locale')\n }\n\n const indexName = buildIndexName({\n name: `${relationshipsTableName}_${formattedRelationTo}_id`,\n adapter,\n })\n\n relationExtraConfig[indexName] = createIndex({\n name: indexColumns,\n indexName,\n unique,\n })\n })\n\n relationshipsTable = adapter.pgSchema.table(\n relationshipsTableName,\n relationshipColumns,\n (cols) => {\n const result: Record<string, ForeignKeyBuilder | IndexBuilder> = Object.entries(\n relationExtraConfig,\n ).reduce(\n (config, [key, func]) => {\n config[key] = func(cols)\n return config\n },\n {\n order: index(`${relationshipsTableName}_order_idx`).on(cols.order),\n parentFk: foreignKey({\n name: `${relationshipsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),\n pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),\n },\n )\n\n if (hasLocalizedRelationshipField) {\n result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale)\n }\n\n return result\n },\n )\n\n adapter.tables[relationshipsTableName] = relationshipsTable\n\n adapter.relations[`relations_${relationshipsTableName}`] = relations(\n relationshipsTable,\n ({ one }) => {\n const result: Record<string, Relation<string>> = {\n parent: one(table, {\n fields: [relationshipsTable.parent],\n references: [table.id],\n relationName: '_rels',\n }),\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n result[idColumnName] = one(adapter.tables[relatedTableName], {\n fields: [relationshipsTable[idColumnName]],\n references: [adapter.tables[relatedTableName].id],\n relationName: relationTo,\n })\n })\n\n return result\n },\n )\n }\n }\n\n adapter.relations[`relations_${tableName}`] = relations(table, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [table[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: relationName || key })\n }\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable, { relationName: '_locales' })\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable, { relationName: '_texts' })\n }\n\n if (hasManyNumberField) {\n result._numbers = many(numbersTable, { relationName: '_numbers' })\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["relations","foreignKey","index","integer","numeric","serial","timestamp","unique","varchar","toSnakeCase","createTableName","buildIndexName","createIndex","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","disableNotNull","disableRelsTableUnique","disableUnique","fields","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","rootUniqueRelationships","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","uniqueRelationships","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","func","result","acc","colName","tables","size","localeTableName","localesSuffix","id","primaryKey","_locale","enums","enum__locales","_parentID","_localeParent","on","_parentIdFk","name","foreignColumns","onDelete","many","one","references","textsTableName","order","parent","path","text","locale","orderParentIdx","parentFk","text_idx","localeParent","numbersTableName","number","numberIdx","relationshipColumns","relationExtraConfig","relationshipsTableName","relationshipsSuffix","relationTo","relationshipConfig","payload","collections","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","indexColumns","has","push","indexName","parentIdx","pathIdx","localeIdx","relatedTableName","idColumnName","_locales","_texts","_numbers","_rels"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core';
2
- import type { Field, SanitizedJoins, TabAsField } from 'payload';
2
+ import type { Field, TabAsField } from 'payload';
3
3
  import type { BasePostgresAdapter, GenericColumns, RelationMap } from '../types.js';
4
4
  type Args = {
5
5
  adapter: BasePostgresAdapter;
@@ -12,7 +12,6 @@ type Args = {
12
12
  fields: (Field | TabAsField)[];
13
13
  forceLocalized?: boolean;
14
14
  indexes: Record<string, (cols: GenericColumns) => IndexBuilder>;
15
- joins?: SanitizedJoins;
16
15
  localesColumns: Record<string, PgColumnBuilder>;
17
16
  localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>;
18
17
  newTableName: string;
@@ -38,6 +37,6 @@ type Result = {
38
37
  hasManyNumberField: 'index' | boolean;
39
38
  hasManyTextField: 'index' | boolean;
40
39
  };
41
- export declare const traverseFields: ({ adapter, columnPrefix, columns, disableNotNull, disableRelsTableUnique, disableUnique, fieldPrefix, fields, forceLocalized, indexes, joins, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, uniqueRelationships, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
40
+ export declare const traverseFields: ({ adapter, columnPrefix, columns, disableNotNull, disableRelsTableUnique, disableUnique, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, uniqueRelationships, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
42
41
  export {};
43
42
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAqBhE,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACZ,MAAM,aAAa,CAAA;AAYpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,yWAwBxB,IAAI,KAAG,MAm3BT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAkB,UAAU,EAAE,MAAM,SAAS,CAAA;AAqBhE,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACZ,MAAM,aAAa,CAAA;AAYpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,kWAuBxB,IAAI,KAAG,MAu1BT,CAAA"}
@@ -12,7 +12,7 @@ import { createIndex } from './createIndex.js';
12
12
  import { idToUUID } from './idToUUID.js';
13
13
  import { parentIDColumnMap } from './parentIDColumnMap.js';
14
14
  import { withDefault } from './withDefault.js';
15
- export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull, disableRelsTableUnique, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, joins, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, uniqueRelationships, versions, withinLocalizedArrayOrBlock })=>{
15
+ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull, disableRelsTableUnique, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, uniqueRelationships, versions, withinLocalizedArrayOrBlock })=>{
16
16
  const throwValidationError = true;
17
17
  let hasLocalizedField = false;
18
18
  let hasLocalizedRelationshipField = false;
@@ -498,7 +498,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
498
498
  fields: field.fields,
499
499
  forceLocalized,
500
500
  indexes,
501
- joins,
502
501
  localesColumns,
503
502
  localesIndexes,
504
503
  newTableName,
@@ -543,7 +542,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
543
542
  fields: field.fields,
544
543
  forceLocalized: field.localized,
545
544
  indexes,
546
- joins,
547
545
  localesColumns,
548
546
  localesIndexes,
549
547
  newTableName: `${parentTableName}_${columnName}`,
@@ -593,7 +591,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
593
591
  })),
594
592
  forceLocalized,
595
593
  indexes,
596
- joins,
597
594
  localesColumns,
598
595
  localesIndexes,
599
596
  newTableName,
@@ -641,7 +638,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
641
638
  fields: field.fields,
642
639
  forceLocalized,
643
640
  indexes,
644
- joins,
645
641
  localesColumns,
646
642
  localesIndexes,
647
643
  newTableName,
@@ -722,28 +718,6 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
722
718
  hasLocalizedRelationshipField = true;
723
719
  }
724
720
  break;
725
- case 'join':
726
- {
727
- // fieldName could be 'posts' or 'group_posts'
728
- // using `on` as the key for the relation
729
- const localized = adapter.payload.config.localization && field.localized;
730
- const fieldSchemaPath = `${fieldPrefix || ''}${field.name}`;
731
- let target;
732
- const joinConfig = joins[field.collection].find(({ schemaPath })=>fieldSchemaPath === schemaPath);
733
- if (joinConfig.targetField.hasMany) {
734
- target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`;
735
- } else {
736
- target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}`;
737
- }
738
- relationsToBuild.set(fieldName, {
739
- type: 'many',
740
- // joins are not localized on the parent table
741
- localized: false,
742
- relationName: field.on.replaceAll('.', '_'),
743
- target
744
- });
745
- break;
746
- }
747
721
  default:
748
722
  break;
749
723
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/traverseFields.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core'\nimport type { Field, SanitizedJoins, TabAsField } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n boolean,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n PgNumericBuilder,\n PgUUIDBuilder,\n PgVarcharBuilder,\n text,\n timestamp,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport { InvalidConfiguration } from 'payload'\nimport { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { buildIndexName } from '../../utilities/buildIndexName.js'\nimport { hasLocalesTable } from '../../utilities/hasLocalesTable.js'\nimport { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { buildTable } from './build.js'\nimport { createIndex } from './createIndex.js'\nimport { idToUUID } from './idToUUID.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n columnPrefix?: string\n columns: Record<string, PgColumnBuilder>\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: (Field | TabAsField)[]\n forceLocalized?: boolean\n indexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n joins?: SanitizedJoins\n localesColumns: Record<string, PgColumnBuilder>\n localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n newTableName: string\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: string\n rootTableName: string\n uniqueRelationships: Set<string>\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n if (columns.id instanceof PgUUIDBuilder) {\n parentIDColType = 'uuid'\n }\n if (columns.id instanceof PgNumericBuilder) {\n parentIDColType = 'numeric'\n }\n if (columns.id instanceof PgVarcharBuilder) {\n parentIDColType = 'varchar'\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let columnName: string\n let fieldName: string\n\n let targetTable = columns\n let targetIndexes = indexes\n\n if (fieldAffectsData(field)) {\n columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (field.localized || forceLocalized) &&\n field.type !== 'array' &&\n field.type !== 'blocks' &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) &&\n !['array', 'blocks', 'group', 'point'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true) &&\n !('relationTo' in field && Array.isArray(field.relationTo))\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n\n const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter })\n\n targetIndexes[indexName] = createIndex({\n name: field.localized ? [fieldName, '_locale'] : fieldName,\n indexName,\n unique,\n })\n }\n }\n\n switch (field.type) {\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n }\n break\n }\n case 'email':\n case 'code':\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(numeric(columnName), field)\n }\n break\n }\n\n case 'richText':\n case 'json': {\n targetTable[fieldName] = withDefault(jsonb(columnName), field)\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n timestamp(columnName, {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n }),\n field,\n )\n break\n }\n\n case 'point': {\n break\n }\n\n case 'radio':\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n adapter.enums[enumName] = adapter.pgSchema.enum(\n enumName,\n field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n }) as [string, ...string[]],\n )\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const baseColumns: Record<string, PgColumnBuilder> = {\n order: integer('order').notNull(),\n parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),\n value: adapter.enums[enumName]('value'),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n orderIdx: (cols) => index(`${selectTableName}_order_idx`).on(cols.order),\n parentFk: (cols) =>\n foreignKey({\n name: `${selectTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n parentIdx: (cols) => index(`${selectTableName}_parent_idx`).on(cols.parent),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = adapter.enums.enum__locales('locale').notNull()\n baseExtraConfig.localeIdx = (cols) =>\n index(`${selectTableName}_locale_idx`).on(cols.locale)\n }\n\n if (field.index) {\n baseExtraConfig.value = (cols) => index(`${selectTableName}_value_idx`).on(cols.value)\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull,\n disableUnique,\n fields: [],\n rootTableName,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.relations[`relations_${selectTableName}`] = relations(\n adapter.tables[selectTableName],\n ({ one }) => ({\n parent: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[selectTableName].parent],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }),\n )\n } else {\n targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field)\n }\n break\n }\n\n case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${arrayTableName}_order_idx`).on(cols._order),\n _parentIDFk: (cols) =>\n foreignKey({\n name: `${arrayTableName}_parent_id_fk`,\n columns: [cols['_parentID']],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${arrayTableName}_parent_id_idx`).on(cols._parentID),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${arrayTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(field.fields) : field.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n adapter.relations[`relations_${arrayTableName}`] = relations(\n adapter.tables[arrayTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[arrayTableName]._parentID],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }\n\n if (hasLocalesTable(field.fields)) {\n result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`], {\n relationName: '_locales',\n })\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[arrayWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n\n break\n }\n\n case 'blocks': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n field.blocks.forEach((block) => {\n const blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n if (!adapter.tables[blockTableName]) {\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),\n _path: text('_path').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${blockTableName}_order_idx`).on(cols._order),\n _parentIdFk: (cols) =>\n foreignKey({\n name: `${blockTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [adapter.tables[rootTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${blockTableName}_parent_id_idx`).on(cols._parentID),\n _pathIdx: (cols) => index(`${blockTableName}_path_idx`).on(cols._path),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${blockTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(block.fields) : block.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n adapter.relations[`relations_${blockTableName}`] = relations(\n adapter.tables[blockTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[rootTableName], {\n fields: [adapter.tables[blockTableName]._parentID],\n references: [adapter.tables[rootTableName].id],\n relationName: `_blocks_${block.slug}`,\n }),\n }\n\n if (hasLocalesTable(block.fields)) {\n result._locales = many(\n adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n { relationName: '_locales' },\n )\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[blockWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n } else if (process.env.NODE_ENV !== 'production' && !versions) {\n validateExistingBlockIsIdentical({\n block,\n localized: field.localized,\n rootTableName,\n table: adapter.tables[blockTableName],\n tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n })\n }\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(`_blocks_${block.slug}`, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n\n case 'tab':\n case 'group': {\n if (!('name' in field)) {\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.fields,\n forceLocalized: field.localized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'tabs': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: tabHasLocalizedField,\n hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,\n hasLocalizedManyTextField: tabHasLocalizedManyTextField,\n hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,\n hasManyNumberField: tabHasManyNumberField,\n hasManyTextField: tabHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n forceLocalized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (tabHasLocalizedField) {\n hasLocalizedField = true\n }\n if (tabHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (tabHasManyTextField) {\n hasManyTextField = true\n }\n if (tabHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (tabHasManyNumberField) {\n hasManyNumberField = true\n }\n if (tabHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'row':\n case 'collapsible': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n const {\n hasLocalizedField: rowHasLocalizedField,\n hasLocalizedManyNumberField: rowHasLocalizedManyNumberField,\n hasLocalizedManyTextField: rowHasLocalizedManyTextField,\n hasLocalizedRelationshipField: rowHasLocalizedRelationshipField,\n hasManyNumberField: rowHasManyNumberField,\n hasManyTextField: rowHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (rowHasLocalizedField) {\n hasLocalizedField = true\n }\n if (rowHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (rowHasManyTextField) {\n hasManyTextField = true\n }\n if (rowHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (rowHasManyNumberField) {\n hasManyNumberField = true\n }\n if (rowHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => {\n relationships.add(relation)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(relation)\n }\n })\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(field.relationTo)\n }\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(\n () => adapter.tables[tableName].id,\n { onDelete: 'set null' },\n )\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (field.localized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull()\n }\n break\n }\n\n if (\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n case 'join': {\n // fieldName could be 'posts' or 'group_posts'\n // using `on` as the key for the relation\n const localized = adapter.payload.config.localization && field.localized\n const fieldSchemaPath = `${fieldPrefix || ''}${field.name}`\n let target: string\n const joinConfig = joins[field.collection].find(\n ({ schemaPath }) => fieldSchemaPath === schemaPath,\n )\n if (joinConfig.targetField.hasMany) {\n target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`\n } else {\n target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}`\n }\n relationsToBuild.set(fieldName, {\n type: 'many',\n // joins are not localized on the parent table\n localized: false,\n relationName: field.on.replaceAll('.', '_'),\n target,\n })\n break\n }\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull()\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["relations","boolean","foreignKey","index","integer","jsonb","numeric","PgNumericBuilder","PgUUIDBuilder","PgVarcharBuilder","text","timestamp","varchar","InvalidConfiguration","fieldAffectsData","fieldIsVirtual","optionIsObject","toSnakeCase","createTableName","buildIndexName","hasLocalesTable","validateExistingBlockIsIdentical","buildTable","createIndex","idToUUID","parentIDColumnMap","withDefault","traverseFields","adapter","columnPrefix","columns","disableNotNull","disableRelsTableUnique","disableUnique","fieldPrefix","fields","forceLocalized","indexes","joins","localesColumns","localesIndexes","newTableName","parentTableName","relationships","relationsToBuild","rootRelationsToBuild","rootTableIDColType","rootTableName","uniqueRelationships","versions","withinLocalizedArrayOrBlock","throwValidationError","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","id","forEach","field","name","columnName","fieldName","targetTable","targetIndexes","replace","payload","config","localization","localized","type","hasMany","unique","includes","Array","isArray","relationTo","constraintValue","fieldConstraints","indexName","isLocalized","Boolean","mode","precision","withTimezone","enumName","prefix","target","enums","pgSchema","enum","options","map","option","value","selectTableName","versionsCustomName","baseColumns","order","notNull","parent","baseExtraConfig","orderIdx","cols","on","parentFk","foreignColumns","tables","onDelete","parentIdx","locale","enum__locales","localeIdx","tableName","set","one","references","relationName","disableNotNullFromHere","admin","condition","arrayTableName","_order","_parentID","_orderIdx","_parentIDFk","_parentIDIdx","_locale","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","rootRelationships","rootUniqueRelationships","many","result","_locales","localesSuffix","key","arrayWithLocalized","blocks","block","blockTableName","_path","_parentIdFk","_pathIdx","slug","blockWithLocalized","process","env","NODE_ENV","table","tableLocales","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","tabHasLocalizedField","tabHasLocalizedManyNumberField","tabHasLocalizedManyTextField","tabHasLocalizedRelationshipField","tabHasManyNumberField","tabHasManyTextField","tabs","tab","rowHasLocalizedField","rowHasLocalizedManyNumberField","rowHasLocalizedManyTextField","rowHasLocalizedRelationshipField","rowHasManyNumberField","rowHasManyTextField","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","required","fieldSchemaPath","joinConfig","collection","schemaPath","targetField","relationshipsSuffix","replaceAll"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/postgres/schema/traverseFields.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core'\nimport type { Field, SanitizedJoins, TabAsField } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n boolean,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n PgNumericBuilder,\n PgUUIDBuilder,\n PgVarcharBuilder,\n text,\n timestamp,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport { InvalidConfiguration } from 'payload'\nimport { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { buildIndexName } from '../../utilities/buildIndexName.js'\nimport { hasLocalesTable } from '../../utilities/hasLocalesTable.js'\nimport { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { buildTable } from './build.js'\nimport { createIndex } from './createIndex.js'\nimport { idToUUID } from './idToUUID.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n columnPrefix?: string\n columns: Record<string, PgColumnBuilder>\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: (Field | TabAsField)[]\n forceLocalized?: boolean\n indexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n localesColumns: Record<string, PgColumnBuilder>\n localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n newTableName: string\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: string\n rootTableName: string\n uniqueRelationships: Set<string>\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n if (columns.id instanceof PgUUIDBuilder) {\n parentIDColType = 'uuid'\n }\n if (columns.id instanceof PgNumericBuilder) {\n parentIDColType = 'numeric'\n }\n if (columns.id instanceof PgVarcharBuilder) {\n parentIDColType = 'varchar'\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let columnName: string\n let fieldName: string\n\n let targetTable = columns\n let targetIndexes = indexes\n\n if (fieldAffectsData(field)) {\n columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (field.localized || forceLocalized) &&\n field.type !== 'array' &&\n field.type !== 'blocks' &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index || ['relationship', 'upload'].includes(field.type)) &&\n !['array', 'blocks', 'group', 'point'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true) &&\n !('relationTo' in field && Array.isArray(field.relationTo))\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n\n const indexName = buildIndexName({ name: `${newTableName}_${columnName}`, adapter })\n\n targetIndexes[indexName] = createIndex({\n name: field.localized ? [fieldName, '_locale'] : fieldName,\n indexName,\n unique,\n })\n }\n }\n\n switch (field.type) {\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n }\n break\n }\n case 'email':\n case 'code':\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(numeric(columnName), field)\n }\n break\n }\n\n case 'richText':\n case 'json': {\n targetTable[fieldName] = withDefault(jsonb(columnName), field)\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n timestamp(columnName, {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n }),\n field,\n )\n break\n }\n\n case 'point': {\n break\n }\n\n case 'radio':\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n adapter.enums[enumName] = adapter.pgSchema.enum(\n enumName,\n field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n }) as [string, ...string[]],\n )\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const baseColumns: Record<string, PgColumnBuilder> = {\n order: integer('order').notNull(),\n parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),\n value: adapter.enums[enumName]('value'),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n orderIdx: (cols) => index(`${selectTableName}_order_idx`).on(cols.order),\n parentFk: (cols) =>\n foreignKey({\n name: `${selectTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n parentIdx: (cols) => index(`${selectTableName}_parent_idx`).on(cols.parent),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = adapter.enums.enum__locales('locale').notNull()\n baseExtraConfig.localeIdx = (cols) =>\n index(`${selectTableName}_locale_idx`).on(cols.locale)\n }\n\n if (field.index) {\n baseExtraConfig.value = (cols) => index(`${selectTableName}_value_idx`).on(cols.value)\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull,\n disableUnique,\n fields: [],\n rootTableName,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.relations[`relations_${selectTableName}`] = relations(\n adapter.tables[selectTableName],\n ({ one }) => ({\n parent: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[selectTableName].parent],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }),\n )\n } else {\n targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field)\n }\n break\n }\n\n case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${arrayTableName}_order_idx`).on(cols._order),\n _parentIDFk: (cols) =>\n foreignKey({\n name: `${arrayTableName}_parent_id_fk`,\n columns: [cols['_parentID']],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${arrayTableName}_parent_id_idx`).on(cols._parentID),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${arrayTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(field.fields) : field.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n adapter.relations[`relations_${arrayTableName}`] = relations(\n adapter.tables[arrayTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[arrayTableName]._parentID],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }\n\n if (hasLocalesTable(field.fields)) {\n result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`], {\n relationName: '_locales',\n })\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[arrayWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n\n break\n }\n\n case 'blocks': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n field.blocks.forEach((block) => {\n const blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n if (!adapter.tables[blockTableName]) {\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),\n _path: text('_path').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${blockTableName}_order_idx`).on(cols._order),\n _parentIdFk: (cols) =>\n foreignKey({\n name: `${blockTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [adapter.tables[rootTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${blockTableName}_parent_id_idx`).on(cols._parentID),\n _pathIdx: (cols) => index(`${blockTableName}_path_idx`).on(cols._path),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${blockTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableRelsTableUnique: true,\n disableUnique,\n fields: disableUnique ? idToUUID(block.fields) : block.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n rootUniqueRelationships: uniqueRelationships,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n adapter.relations[`relations_${blockTableName}`] = relations(\n adapter.tables[blockTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[rootTableName], {\n fields: [adapter.tables[blockTableName]._parentID],\n references: [adapter.tables[rootTableName].id],\n relationName: `_blocks_${block.slug}`,\n }),\n }\n\n if (hasLocalesTable(block.fields)) {\n result._locales = many(\n adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n { relationName: '_locales' },\n )\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[blockWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n } else if (process.env.NODE_ENV !== 'production' && !versions) {\n validateExistingBlockIsIdentical({\n block,\n localized: field.localized,\n rootTableName,\n table: adapter.tables[blockTableName],\n tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n })\n }\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(`_blocks_${block.slug}`, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n\n case 'tab':\n case 'group': {\n if (!('name' in field)) {\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.fields,\n forceLocalized: field.localized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'tabs': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: tabHasLocalizedField,\n hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,\n hasLocalizedManyTextField: tabHasLocalizedManyTextField,\n hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,\n hasManyNumberField: tabHasManyNumberField,\n hasManyTextField: tabHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (tabHasLocalizedField) {\n hasLocalizedField = true\n }\n if (tabHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (tabHasManyTextField) {\n hasManyTextField = true\n }\n if (tabHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (tabHasManyNumberField) {\n hasManyNumberField = true\n }\n if (tabHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'row':\n case 'collapsible': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n const {\n hasLocalizedField: rowHasLocalizedField,\n hasLocalizedManyNumberField: rowHasLocalizedManyNumberField,\n hasLocalizedManyTextField: rowHasLocalizedManyTextField,\n hasLocalizedRelationshipField: rowHasLocalizedRelationshipField,\n hasManyNumberField: rowHasManyNumberField,\n hasManyTextField: rowHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n uniqueRelationships,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (rowHasLocalizedField) {\n hasLocalizedField = true\n }\n if (rowHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (rowHasManyTextField) {\n hasManyTextField = true\n }\n if (rowHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (rowHasManyNumberField) {\n hasManyNumberField = true\n }\n if (rowHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => {\n relationships.add(relation)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(relation)\n }\n })\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n if (field.unique && !disableUnique && !disableRelsTableUnique) {\n uniqueRelationships.add(field.relationTo)\n }\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(\n () => adapter.tables[tableName].id,\n { onDelete: 'set null' },\n )\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (field.localized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull()\n }\n break\n }\n\n if (\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull()\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["relations","boolean","foreignKey","index","integer","jsonb","numeric","PgNumericBuilder","PgUUIDBuilder","PgVarcharBuilder","text","timestamp","varchar","InvalidConfiguration","fieldAffectsData","fieldIsVirtual","optionIsObject","toSnakeCase","createTableName","buildIndexName","hasLocalesTable","validateExistingBlockIsIdentical","buildTable","createIndex","idToUUID","parentIDColumnMap","withDefault","traverseFields","adapter","columnPrefix","columns","disableNotNull","disableRelsTableUnique","disableUnique","fieldPrefix","fields","forceLocalized","indexes","localesColumns","localesIndexes","newTableName","parentTableName","relationships","relationsToBuild","rootRelationsToBuild","rootTableIDColType","rootTableName","uniqueRelationships","versions","withinLocalizedArrayOrBlock","throwValidationError","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","id","forEach","field","name","columnName","fieldName","targetTable","targetIndexes","replace","payload","config","localization","localized","type","hasMany","unique","includes","Array","isArray","relationTo","constraintValue","fieldConstraints","indexName","isLocalized","Boolean","mode","precision","withTimezone","enumName","prefix","target","enums","pgSchema","enum","options","map","option","value","selectTableName","versionsCustomName","baseColumns","order","notNull","parent","baseExtraConfig","orderIdx","cols","on","parentFk","foreignColumns","tables","onDelete","parentIdx","locale","enum__locales","localeIdx","tableName","set","one","references","relationName","disableNotNullFromHere","admin","condition","arrayTableName","_order","_parentID","_orderIdx","_parentIDFk","_parentIDIdx","_locale","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","rootRelationships","rootUniqueRelationships","many","result","_locales","localesSuffix","key","arrayWithLocalized","blocks","block","blockTableName","_path","_parentIdFk","_pathIdx","slug","blockWithLocalized","process","env","NODE_ENV","table","tableLocales","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","tabHasLocalizedField","tabHasLocalizedManyNumberField","tabHasLocalizedManyTextField","tabHasLocalizedRelationshipField","tabHasManyNumberField","tabHasManyTextField","tabs","tab","rowHasLocalizedField","rowHasLocalizedManyNumberField","rowHasLocalizedManyTextField","rowHasLocalizedRelationshipField","rowHasManyNumberField","rowHasManyTextField","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","required"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { SQL } from 'drizzle-orm';
2
+ import type { PgTableWithColumns } from 'drizzle-orm/pg-core';
3
+ import type { GenericTable } from '../types.js';
4
+ import type { BuildQueryJoinAliases } from './buildQuery.js';
5
+ export declare const addJoinTable: ({ type, condition, joins, table, }: {
6
+ condition: SQL;
7
+ joins: BuildQueryJoinAliases;
8
+ table: GenericTable | PgTableWithColumns<any>;
9
+ type?: "innerJoin" | "leftJoin" | "rightJoin";
10
+ }) => void;
11
+ //# sourceMappingURL=addJoinTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addJoinTable.d.ts","sourceRoot":"","sources":["../../src/queries/addJoinTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAI5D,eAAO,MAAM,YAAY,uCAKtB;IACD,SAAS,EAAE,GAAG,CAAA;IACd,KAAK,EAAE,qBAAqB,CAAA;IAC5B,KAAK,EAAE,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,CAAA;CAC9C,SAMA,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js';
2
+ export const addJoinTable = ({ type, condition, joins, table })=>{
3
+ const name = getNameFromDrizzleTable(table);
4
+ if (!joins.some((eachJoin)=>getNameFromDrizzleTable(eachJoin.table) === name)) {
5
+ joins.push({
6
+ type,
7
+ condition,
8
+ table
9
+ });
10
+ }
11
+ };
12
+
13
+ //# sourceMappingURL=addJoinTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/queries/addJoinTable.ts"],"sourcesContent":["import type { SQL } from 'drizzle-orm'\nimport type { PgTableWithColumns } from 'drizzle-orm/pg-core'\n\nimport type { GenericTable } from '../types.js'\nimport type { BuildQueryJoinAliases } from './buildQuery.js'\n\nimport { getNameFromDrizzleTable } from '../utilities/getNameFromDrizzleTable.js'\n\nexport const addJoinTable = ({\n type,\n condition,\n joins,\n table,\n}: {\n condition: SQL\n joins: BuildQueryJoinAliases\n table: GenericTable | PgTableWithColumns<any>\n type?: 'innerJoin' | 'leftJoin' | 'rightJoin'\n}) => {\n const name = getNameFromDrizzleTable(table)\n\n if (!joins.some((eachJoin) => getNameFromDrizzleTable(eachJoin.table) === name)) {\n joins.push({ type, condition, table })\n }\n}\n"],"names":["getNameFromDrizzleTable","addJoinTable","type","condition","joins","table","name","some","eachJoin","push"],"mappings":"AAMA,SAASA,uBAAuB,QAAQ,0CAAyC;AAEjF,OAAO,MAAMC,eAAe,CAAC,EAC3BC,IAAI,EACJC,SAAS,EACTC,KAAK,EACLC,KAAK,EAMN;IACC,MAAMC,OAAON,wBAAwBK;IAErC,IAAI,CAACD,MAAMG,IAAI,CAAC,CAACC,WAAaR,wBAAwBQ,SAASH,KAAK,MAAMC,OAAO;QAC/EF,MAAMK,IAAI,CAAC;YAAEP;YAAMC;YAAWE;QAAM;IACtC;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildOrderBy.d.ts","sourceRoot":"","sources":["../../src/queries/buildOrderBy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAI9E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,uEAQtB,IAAI,KAAG,gBAAgB,CAAC,SAAS,CAoDnC,CAAA"}
1
+ {"version":3,"file":"buildOrderBy.d.ts","sourceRoot":"","sources":["../../src/queries/buildOrderBy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAI9E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,KAAK,EAAE,qBAAqB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,uEAQtB,IAAI,KAAG,gBAAgB,CAAC,SAAS,CAmDnC,CAAA"}
@@ -26,7 +26,6 @@ import { getTableColumnFromPath } from './getTableColumnFromPath.js';
26
26
  pathSegments: sortPath.replace(/__/g, '.').split('.'),
27
27
  selectFields,
28
28
  tableName,
29
- useAlias: true,
30
29
  value: sortPath
31
30
  });
32
31
  orderBy.column = sortTable?.[sortTableColumnName];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { Field } from 'payload'\n\nimport { asc, desc } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases, BuildQueryResult } from './buildQuery.js'\n\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n fields: Field[]\n joins: BuildQueryJoinAliases\n locale?: string\n selectFields: Record<string, GenericColumn>\n sort?: string\n tableName: string\n}\n\n/**\n * Gets the order by column and direction constructed from the sort argument adds the column to the select fields and joins if necessary\n */\nexport const buildOrderBy = ({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = {\n column: null,\n order: null,\n }\n\n if (sort) {\n let sortPath\n\n if (sort[0] === '-') {\n sortPath = sort.substring(1)\n orderBy.order = desc\n } else {\n sortPath = sort\n orderBy.order = asc\n }\n\n try {\n const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({\n adapter,\n collectionPath: sortPath,\n fields,\n joins,\n locale,\n pathSegments: sortPath.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n useAlias: true,\n value: sortPath,\n })\n orderBy.column = sortTable?.[sortTableColumnName]\n } catch (err) {\n // continue\n }\n }\n\n if (!orderBy?.column) {\n orderBy.order = desc\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (createdAt) {\n orderBy.column = createdAt\n } else {\n orderBy.column = adapter.tables[tableName].id\n }\n }\n\n if (orderBy.column) {\n selectFields.sort = orderBy.column\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getTableColumnFromPath","buildOrderBy","adapter","fields","joins","locale","selectFields","sort","tableName","orderBy","column","order","sortPath","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","replace","split","useAlias","value","err","createdAt","tables","id"],"mappings":"AAEA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,sBAAsB,QAAQ,8BAA6B;AAYpE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC;QAC3CC,QAAQ;QACRC,OAAO;IACT;IAEA,IAAIJ,MAAM;QACR,IAAIK;QAEJ,IAAIL,IAAI,CAAC,EAAE,KAAK,KAAK;YACnBK,WAAWL,KAAKM,SAAS,CAAC;YAC1BJ,QAAQE,KAAK,GAAGZ;QAClB,OAAO;YACLa,WAAWL;YACXE,QAAQE,KAAK,GAAGb;QAClB;QAEA,IAAI;YACF,MAAM,EAAEgB,YAAYC,mBAAmB,EAAEC,OAAOC,SAAS,EAAE,GAAGjB,uBAAuB;gBACnFE;gBACAgB,gBAAgBN;gBAChBT;gBACAC;gBACAC;gBACAc,cAAcP,SAASQ,OAAO,CAAC,OAAO,KAAKC,KAAK,CAAC;gBACjDf;gBACAE;gBACAc,UAAU;gBACVC,OAAOX;YACT;YACAH,QAAQC,MAAM,GAAGO,WAAW,CAACF,oBAAoB;QACnD,EAAE,OAAOS,KAAK;QACZ,WAAW;QACb;IACF;IAEA,IAAI,CAACf,SAASC,QAAQ;QACpBD,QAAQE,KAAK,GAAGZ;QAChB,MAAM0B,YAAYvB,QAAQwB,MAAM,CAAClB,UAAU,EAAEiB;QAE7C,IAAIA,WAAW;YACbhB,QAAQC,MAAM,GAAGe;QACnB,OAAO;YACLhB,QAAQC,MAAM,GAAGR,QAAQwB,MAAM,CAAClB,UAAU,CAACmB,EAAE;QAC/C;IACF;IAEA,IAAIlB,QAAQC,MAAM,EAAE;QAClBJ,aAAaC,IAAI,GAAGE,QAAQC,MAAM;IACpC;IAEA,OAAOD;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/queries/buildOrderBy.ts"],"sourcesContent":["import type { Field } from 'payload'\n\nimport { asc, desc } from 'drizzle-orm'\n\nimport type { DrizzleAdapter, GenericColumn } from '../types.js'\nimport type { BuildQueryJoinAliases, BuildQueryResult } from './buildQuery.js'\n\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n fields: Field[]\n joins: BuildQueryJoinAliases\n locale?: string\n selectFields: Record<string, GenericColumn>\n sort?: string\n tableName: string\n}\n\n/**\n * Gets the order by column and direction constructed from the sort argument adds the column to the select fields and joins if necessary\n */\nexport const buildOrderBy = ({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n sort,\n tableName,\n}: Args): BuildQueryResult['orderBy'] => {\n const orderBy: BuildQueryResult['orderBy'] = {\n column: null,\n order: null,\n }\n\n if (sort) {\n let sortPath\n\n if (sort[0] === '-') {\n sortPath = sort.substring(1)\n orderBy.order = desc\n } else {\n sortPath = sort\n orderBy.order = asc\n }\n\n try {\n const { columnName: sortTableColumnName, table: sortTable } = getTableColumnFromPath({\n adapter,\n collectionPath: sortPath,\n fields,\n joins,\n locale,\n pathSegments: sortPath.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: sortPath,\n })\n orderBy.column = sortTable?.[sortTableColumnName]\n } catch (err) {\n // continue\n }\n }\n\n if (!orderBy?.column) {\n orderBy.order = desc\n const createdAt = adapter.tables[tableName]?.createdAt\n\n if (createdAt) {\n orderBy.column = createdAt\n } else {\n orderBy.column = adapter.tables[tableName].id\n }\n }\n\n if (orderBy.column) {\n selectFields.sort = orderBy.column\n }\n\n return orderBy\n}\n"],"names":["asc","desc","getTableColumnFromPath","buildOrderBy","adapter","fields","joins","locale","selectFields","sort","tableName","orderBy","column","order","sortPath","substring","columnName","sortTableColumnName","table","sortTable","collectionPath","pathSegments","replace","split","value","err","createdAt","tables","id"],"mappings":"AAEA,SAASA,GAAG,EAAEC,IAAI,QAAQ,cAAa;AAKvC,SAASC,sBAAsB,QAAQ,8BAA6B;AAYpE;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,YAAY,EACZC,IAAI,EACJC,SAAS,EACJ;IACL,MAAMC,UAAuC;QAC3CC,QAAQ;QACRC,OAAO;IACT;IAEA,IAAIJ,MAAM;QACR,IAAIK;QAEJ,IAAIL,IAAI,CAAC,EAAE,KAAK,KAAK;YACnBK,WAAWL,KAAKM,SAAS,CAAC;YAC1BJ,QAAQE,KAAK,GAAGZ;QAClB,OAAO;YACLa,WAAWL;YACXE,QAAQE,KAAK,GAAGb;QAClB;QAEA,IAAI;YACF,MAAM,EAAEgB,YAAYC,mBAAmB,EAAEC,OAAOC,SAAS,EAAE,GAAGjB,uBAAuB;gBACnFE;gBACAgB,gBAAgBN;gBAChBT;gBACAC;gBACAC;gBACAc,cAAcP,SAASQ,OAAO,CAAC,OAAO,KAAKC,KAAK,CAAC;gBACjDf;gBACAE;gBACAc,OAAOV;YACT;YACAH,QAAQC,MAAM,GAAGO,WAAW,CAACF,oBAAoB;QACnD,EAAE,OAAOQ,KAAK;QACZ,WAAW;QACb;IACF;IAEA,IAAI,CAACd,SAASC,QAAQ;QACpBD,QAAQE,KAAK,GAAGZ;QAChB,MAAMyB,YAAYtB,QAAQuB,MAAM,CAACjB,UAAU,EAAEgB;QAE7C,IAAIA,WAAW;YACbf,QAAQC,MAAM,GAAGc;QACnB,OAAO;YACLf,QAAQC,MAAM,GAAGR,QAAQuB,MAAM,CAACjB,UAAU,CAACkB,EAAE;QAC/C;IACF;IAEA,IAAIjB,QAAQC,MAAM,EAAE;QAClBJ,aAAaC,IAAI,GAAGE,QAAQC,MAAM;IACpC;IAEA,OAAOD;AACT,EAAC"}