Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
33 KiB
Plaintext
1 line
33 KiB
Plaintext
{"version":3,"sources":["../../src/schema/build.ts"],"sourcesContent":["import type { FlattenedField, SanitizedCompoundIndex } from 'payload'\n\nimport { InvalidConfiguration } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n DrizzleAdapter,\n IDType,\n RawColumn,\n RawForeignKey,\n RawIndex,\n RawRelation,\n RawTable,\n RelationMap,\n SetColumnID,\n} from '../types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { buildForeignKeyName } from '../utilities/buildForeignKeyName.js'\nimport { buildIndexName } from '../utilities/buildIndexName.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: DrizzleAdapter\n baseColumns?: Record<string, RawColumn>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseForeignKeys?: Record<string, RawForeignKey>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseIndexes?: Record<string, RawIndex>\n blocksTableNameMap: Record<string, number>\n buildNumbers?: boolean\n buildRelationships?: boolean\n compoundIndexes?: SanitizedCompoundIndex[]\n disableNotNull: boolean\n disableRelsTableUnique?: boolean\n disableUnique: boolean\n fields: FlattenedField[]\n parentIsLocalized: boolean\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: IDType\n rootTableName?: string\n rootUniqueRelationships?: Set<string>\n setColumnID: SetColumnID\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 baseForeignKeys = {},\n baseIndexes = {},\n blocksTableNameMap,\n compoundIndexes,\n disableNotNull,\n disableRelsTableUnique = false,\n disableUnique = false,\n fields,\n parentIsLocalized,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n rootUniqueRelationships,\n setColumnID,\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, RawColumn> = baseColumns\n const indexes: Record<string, RawIndex> = baseIndexes\n\n const localesColumns: Record<string, RawColumn> = {}\n const localesIndexes: Record<string, RawIndex> = {}\n let localesTable: RawTable\n let textsTable: RawTable\n let numbersTable: RawTable\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: RawTable\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 blocksTableNameMap,\n columns,\n disableNotNull,\n disableRelsTableUnique,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentIsLocalized,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n setColumnID,\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 = {\n name: 'created_at',\n type: 'timestamp',\n defaultNow: true,\n mode: 'string',\n notNull: true,\n precision: 3,\n withTimezone: true,\n }\n\n columns.updatedAt = {\n name: 'updated_at',\n type: 'timestamp',\n defaultNow: true,\n mode: 'string',\n notNull: true,\n precision: 3,\n withTimezone: true,\n }\n }\n\n const table: RawTable = {\n name: tableName,\n columns,\n foreignKeys: baseForeignKeys,\n indexes,\n }\n\n adapter.rawTables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n adapter.rawTables[localeTableName] = localesTable\n\n localesColumns.id = {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n }\n\n localesColumns._locale = {\n name: '_locale',\n type: 'enum',\n locale: true,\n notNull: true,\n }\n\n localesColumns._parentID = {\n name: '_parent_id',\n type: idColType,\n notNull: true,\n }\n\n localesIndexes._localeParent = {\n name: buildIndexName({\n name: `${localeTableName}_locale_parent_id_unique`,\n adapter,\n appendSuffix: false,\n }),\n on: ['_locale', '_parentID'],\n unique: true,\n }\n\n localesTable = {\n name: localeTableName,\n columns: localesColumns,\n foreignKeys: {\n _parentIdFk: {\n name: buildForeignKeyName({ name: `${localeTableName}_parent_id`, adapter }),\n columns: ['_parentID'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: localesIndexes,\n }\n\n adapter.rawTables[localeTableName] = localesTable\n\n const localeRelations: Record<string, RawRelation> = {\n _parentID: {\n type: 'one',\n fields: [\n {\n name: '_parentID',\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: '_locales',\n to: tableName,\n },\n }\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n localeRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: localeTableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n localeRelations[key] = {\n type: 'many',\n relationName: key,\n to: target,\n }\n }\n })\n adapter.rawRelations[localeTableName] = localeRelations\n }\n\n if (compoundIndexes) {\n for (const index of compoundIndexes) {\n let someLocalized: boolean | null = null\n const columns: string[] = []\n\n const getTableToUse = () => {\n if (someLocalized) {\n return localesTable\n }\n\n return table\n }\n\n for (const { path, pathHasLocalized } of index.fields) {\n if (someLocalized === null) {\n someLocalized = pathHasLocalized\n }\n\n if (someLocalized !== pathHasLocalized) {\n throw new InvalidConfiguration(\n `Compound indexes within localized and non localized fields are not supported in SQL. Expected ${path} to be ${someLocalized ? 'non' : ''} localized.`,\n )\n }\n\n const columnPath = path.replaceAll('.', '_')\n\n if (!getTableToUse().columns[columnPath]) {\n throw new InvalidConfiguration(\n `Column ${columnPath} for compound index on ${path} was not found in the ${getTableToUse().name} table.`,\n )\n }\n\n columns.push(columnPath)\n }\n\n if (someLocalized) {\n columns.push('_locale')\n }\n\n let name = columns.join('_')\n // truncate against the limit, buildIndexName will handle collisions\n if (name.length > 63) {\n name = 'compound_index'\n }\n\n const indexName = buildIndexName({ name, adapter })\n\n getTableToUse().indexes[indexName] = {\n name: indexName,\n on: columns,\n unique: disableUnique ? false : index.unique,\n }\n }\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n adapter.rawTables[textsTableName] = textsTable\n\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n\n notNull: true,\n },\n text: {\n name: 'text',\n type: 'varchar',\n },\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const textsTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({\n name: `${textsTableName}_order_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyTextField === 'index') {\n textsTableIndexes.text_idx = {\n name: buildIndexName({ name: `${textsTableName}_text`, adapter }),\n on: 'text',\n }\n }\n\n if (hasLocalizedManyTextField) {\n textsTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${textsTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n textsTable = {\n name: textsTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${textsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: textsTableIndexes,\n }\n\n adapter.rawTables[textsTableName] = textsTable\n\n adapter.rawRelations[textsTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: textsTableName,\n },\n ],\n references: ['id'],\n relationName: '_texts',\n to: tableName,\n },\n }\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n adapter.rawTables[numbersTableName] = numbersTable\n const columns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n number: {\n name: 'number',\n type: 'numeric',\n },\n order: {\n name: 'order',\n type: 'integer',\n notNull: true,\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const numbersTableIndexes: Record<string, RawIndex> = {\n orderParentIdx: {\n name: buildIndexName({ name: `${numbersTableName}_order_parent`, adapter }),\n on: ['order', 'parent'],\n },\n }\n\n if (hasManyNumberField === 'index') {\n numbersTableIndexes.numberIdx = {\n name: buildIndexName({ name: `${numbersTableName}_number`, adapter }),\n on: 'number',\n }\n }\n\n if (hasLocalizedManyNumberField) {\n numbersTableIndexes.localeParent = {\n name: buildIndexName({\n name: `${numbersTableName}_locale_parent`,\n adapter,\n appendSuffix: false,\n }),\n on: ['locale', 'parent'],\n }\n }\n\n numbersTable = {\n name: numbersTableName,\n columns,\n foreignKeys: {\n parentFk: {\n name: buildForeignKeyName({ name: `${numbersTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n },\n indexes: numbersTableIndexes,\n }\n\n adapter.rawTables[numbersTableName] = numbersTable\n\n adapter.rawRelations[numbersTableName] = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: numbersTableName,\n },\n ],\n references: ['id'],\n relationName: '_numbers',\n to: tableName,\n },\n }\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, RawColumn> = {\n id: {\n name: 'id',\n type: 'serial',\n primaryKey: true,\n },\n order: {\n name: 'order',\n type: 'integer',\n },\n parent: {\n name: 'parent_id',\n type: idColType,\n notNull: true,\n },\n path: {\n name: 'path',\n type: 'varchar',\n notNull: true,\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = {\n name: 'locale',\n type: 'enum',\n locale: true,\n }\n }\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n const relationshipIndexes: Record<string, RawIndex> = {\n order: {\n name: buildIndexName({ name: `${relationshipsTableName}_order`, adapter }),\n on: 'order',\n },\n parentIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_parent`, adapter }),\n on: 'parent',\n },\n pathIdx: {\n name: buildIndexName({ name: `${relationshipsTableName}_path`, adapter }),\n on: 'path',\n },\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipIndexes.localeIdx = {\n name: buildIndexName({ name: `${relationshipsTableName}_locale`, adapter }),\n on: 'locale',\n }\n }\n\n const relationshipForeignKeys: Record<string, RawForeignKey> = {\n parentFk: {\n name: buildForeignKeyName({ name: `${relationshipsTableName}_parent`, adapter }),\n columns: ['parent'],\n foreignColumns: [\n {\n name: 'id',\n table: tableName,\n },\n ],\n onDelete: 'cascade',\n },\n }\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: 'integer' | 'numeric' | 'uuid' | 'varchar' =\n 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] = {\n name: `${formattedRelationTo}_id`,\n type: colType,\n }\n\n relationshipForeignKeys[`${relationTo}IdFk`] = {\n name: buildForeignKeyName({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}`,\n adapter,\n }),\n columns: [colName],\n foreignColumns: [\n {\n name: 'id',\n table: formattedRelationTo,\n },\n ],\n onDelete: 'cascade',\n }\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 relationshipIndexes[indexName] = {\n name: indexName,\n on: indexColumns,\n unique,\n }\n })\n\n relationshipsTable = {\n name: relationshipsTableName,\n columns: relationshipColumns,\n foreignKeys: relationshipForeignKeys,\n indexes: relationshipIndexes,\n }\n\n adapter.rawTables[relationshipsTableName] = relationshipsTable\n\n const relationshipsTableRelations: Record<string, RawRelation> = {\n parent: {\n type: 'one',\n fields: [\n {\n name: 'parent',\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: '_rels',\n to: tableName,\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\n relationshipsTableRelations[idColumnName] = {\n type: 'one',\n fields: [\n {\n name: idColumnName,\n table: relationshipsTableName,\n },\n ],\n references: ['id'],\n relationName: relationTo,\n to: relatedTableName,\n }\n })\n adapter.rawRelations[relationshipsTableName] = relationshipsTableRelations\n }\n }\n\n const tableRelations: Record<string, RawRelation> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n tableRelations[key] = {\n type: 'one',\n fields: [\n {\n name: key,\n table: tableName,\n },\n ],\n references: ['id'],\n relationName: key,\n to: target,\n }\n }\n if (type === 'many') {\n tableRelations[key] = {\n type: 'many',\n relationName: relationName || key,\n to: target,\n }\n }\n })\n\n if (hasLocalizedField) {\n tableRelations._locales = {\n type: 'many',\n relationName: '_locales',\n to: localesTable.name,\n }\n }\n\n if (isRoot && textsTable) {\n tableRelations._texts = {\n type: 'many',\n relationName: '_texts',\n to: textsTable.name,\n }\n }\n\n if (isRoot && numbersTable) {\n tableRelations._numbers = {\n type: 'many',\n relationName: '_numbers',\n to: numbersTable.name,\n }\n }\n\n if (relationships.size && relationshipsTable) {\n tableRelations._rels = {\n type: 'many',\n relationName: '_rels',\n to: relationshipsTable.name,\n }\n }\n\n adapter.rawRelations[tableName] = tableRelations\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["InvalidConfiguration","toSnakeCase","createTableName","buildForeignKeyName","buildIndexName","traverseFields","buildTable","adapter","baseColumns","baseForeignKeys","baseIndexes","blocksTableNameMap","compoundIndexes","disableNotNull","disableRelsTableUnique","disableUnique","fields","parentIsLocalized","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","rootUniqueRelationships","setColumnID","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","name","defaultNow","mode","notNull","precision","withTimezone","updatedAt","table","foreignKeys","rawTables","size","localeTableName","localesSuffix","id","primaryKey","_locale","locale","_parentID","_localeParent","appendSuffix","on","unique","_parentIdFk","foreignColumns","onDelete","localeRelations","references","to","rawRelations","index","someLocalized","getTableToUse","path","pathHasLocalized","columnPath","replaceAll","push","join","length","indexName","textsTableName","order","parent","text","textsTableIndexes","orderParentIdx","text_idx","localeParent","parentFk","numbersTableName","number","numbersTableIndexes","numberIdx","relationshipColumns","relationshipsTableName","relationshipsSuffix","relationshipIndexes","parentIdx","pathIdx","localeIdx","relationshipForeignKeys","relationTo","relationshipConfig","payload","collections","config","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","colName","indexColumns","has","relationshipsTableRelations","relatedTableName","idColumnName","tableRelations","_locales","_texts","_numbers","_rels"],"mappings":"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"} |