@payloadcms/drizzle 3.2.2 → 3.2.3-canary.3e78927

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 (50) hide show
  1. package/dist/countGlobalVersions.js.map +1 -1
  2. package/dist/countVersions.js.map +1 -1
  3. package/dist/createGlobalVersion.js.map +1 -1
  4. package/dist/createTableName.js.map +1 -1
  5. package/dist/createVersion.d.ts.map +1 -1
  6. package/dist/createVersion.js +1 -0
  7. package/dist/createVersion.js.map +1 -1
  8. package/dist/deleteVersions.js.map +1 -1
  9. package/dist/find/buildFindManyArgs.js.map +1 -1
  10. package/dist/find/traverseFields.js.map +1 -1
  11. package/dist/findGlobalVersions.js.map +1 -1
  12. package/dist/findVersions.js.map +1 -1
  13. package/dist/migrate.js +1 -0
  14. package/dist/migrate.js.map +1 -1
  15. package/dist/migrateDown.js.map +1 -1
  16. package/dist/migrateFresh.js.map +1 -1
  17. package/dist/migrateRefresh.js.map +1 -1
  18. package/dist/migrateReset.js.map +1 -1
  19. package/dist/migrateStatus.js +1 -0
  20. package/dist/migrateStatus.js.map +1 -1
  21. package/dist/postgres/createDatabase.js.map +1 -1
  22. package/dist/postgres/createExtensions.js.map +1 -1
  23. package/dist/postgres/createJSONQuery/index.js.map +1 -1
  24. package/dist/postgres/createMigration.js.map +1 -1
  25. package/dist/postgres/getMigrationTemplate.js.map +1 -1
  26. package/dist/postgres/init.js.map +1 -1
  27. package/dist/postgres/schema/build.js.map +1 -1
  28. package/dist/postgres/schema/traverseFields.js.map +1 -1
  29. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  30. package/dist/queries/parseParams.js +1 -0
  31. package/dist/queries/parseParams.js.map +1 -1
  32. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  33. package/dist/queryDrafts.js.map +1 -1
  34. package/dist/transactions/beginTransaction.js.map +1 -1
  35. package/dist/transform/read/relationship.js.map +1 -1
  36. package/dist/transform/read/traverseFields.js.map +1 -1
  37. package/dist/transform/write/array.js.map +1 -1
  38. package/dist/transform/write/blocks.js.map +1 -1
  39. package/dist/transform/write/relationships.js.map +1 -1
  40. package/dist/transform/write/traverseFields.js.map +1 -1
  41. package/dist/updateGlobalVersion.js.map +1 -1
  42. package/dist/updateVersion.js.map +1 -1
  43. package/dist/upsertRow/index.js +2 -0
  44. package/dist/upsertRow/index.js.map +1 -1
  45. package/dist/upsertRow/insertArrays.js.map +1 -1
  46. package/dist/utilities/appendPrefixToKeys.js.map +1 -1
  47. package/dist/utilities/buildIndexName.js.map +1 -1
  48. package/dist/utilities/parseError.js.map +1 -1
  49. package/dist/utilities/validateExistingBlockIsIdentical.js.map +1 -1
  50. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/createJSONQuery/index.ts"],"sourcesContent":["import type { CreateJSONQueryArgs } from '../../types.js'\n\nconst operatorMap: Record<string, string> = {\n contains: '~',\n equals: '==',\n in: 'in',\n like: 'like_regex',\n not_equals: '!=',\n not_in: 'in',\n}\n\nconst sanitizeValue = (value: unknown, operator?: string) => {\n if (typeof value === 'string') {\n // ignore casing with like\n return `\"${operator === 'like' ? '(?i)' : ''}${value}\"`\n }\n\n return value as string\n}\n\nexport const createJSONQuery = ({ column, operator, pathSegments, value }: CreateJSONQueryArgs) => {\n const columnName = typeof column === 'object' ? column.name : column\n const jsonPaths = pathSegments\n .slice(1)\n .map((key) => {\n return `${key}[*]`\n })\n .join('.')\n\n let sql = ''\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(value)) {\n value.forEach((item, i) => {\n sql = `${sql}${createJSONQuery({ column, operator: operator === 'in' ? 'equals' : 'not_equals', pathSegments, value: item })}${i === value.length - 1 ? '' : ` ${operator === 'in' ? 'OR' : 'AND'} `}`\n })\n } else if (operator === 'exists') {\n sql = `${value === false ? 'NOT ' : ''}jsonb_path_exists(${columnName}, '$.${jsonPaths}')`\n } else {\n sql = `jsonb_path_exists(${columnName}, '$.${jsonPaths} ? (@ ${operatorMap[operator]} ${sanitizeValue(value, operator)})')`\n }\n\n return sql\n}\n"],"names":["operatorMap","contains","equals","in","like","not_equals","not_in","sanitizeValue","value","operator","createJSONQuery","column","pathSegments","columnName","name","jsonPaths","slice","map","key","join","sql","includes","Array","isArray","forEach","item","i","length"],"mappings":"AAEA,MAAMA,cAAsC;IAC1CC,UAAU;IACVC,QAAQ;IACRC,IAAI;IACJC,MAAM;IACNC,YAAY;IACZC,QAAQ;AACV;AAEA,MAAMC,gBAAgB,CAACC,OAAgBC;IACrC,IAAI,OAAOD,UAAU,UAAU;QAC7B,0BAA0B;QAC1B,OAAO,CAAC,CAAC,EAAEC,aAAa,SAAS,SAAS,GAAG,EAAED,MAAM,CAAC,CAAC;IACzD;IAEA,OAAOA;AACT;AAEA,OAAO,MAAME,kBAAkB,CAAC,EAAEC,MAAM,EAAEF,QAAQ,EAAEG,YAAY,EAAEJ,KAAK,EAAuB;IAC5F,MAAMK,aAAa,OAAOF,WAAW,WAAWA,OAAOG,IAAI,GAAGH;IAC9D,MAAMI,YAAYH,aACfI,KAAK,CAAC,GACNC,GAAG,CAAC,CAACC;QACJ,OAAO,CAAC,EAAEA,IAAI,GAAG,CAAC;IACpB,GACCC,IAAI,CAAC;IAER,IAAIC,MAAM;IAEV,IAAI;QAAC;QAAM;KAAS,CAACC,QAAQ,CAACZ,aAAaa,MAAMC,OAAO,CAACf,QAAQ;QAC/DA,MAAMgB,OAAO,CAAC,CAACC,MAAMC;YACnBN,MAAM,CAAC,EAAEA,IAAI,EAAEV,gBAAgB;gBAAEC;gBAAQF,UAAUA,aAAa,OAAO,WAAW;gBAAcG;gBAAcJ,OAAOiB;YAAK,GAAG,EAAEC,MAAMlB,MAAMmB,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAElB,aAAa,OAAO,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACxM;IACF,OAAO,IAAIA,aAAa,UAAU;QAChCW,MAAM,CAAC,EAAEZ,UAAU,QAAQ,SAAS,GAAG,kBAAkB,EAAEK,WAAW,KAAK,EAAEE,UAAU,EAAE,CAAC;IAC5F,OAAO;QACLK,MAAM,CAAC,kBAAkB,EAAEP,WAAW,KAAK,EAAEE,UAAU,MAAM,EAAEf,WAAW,CAACS,SAAS,CAAC,CAAC,EAAEF,cAAcC,OAAOC,UAAU,GAAG,CAAC;IAC7H;IAEA,OAAOW;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/postgres/createJSONQuery/index.ts"],"sourcesContent":["import type { CreateJSONQueryArgs } from '../../types.js'\n\nconst operatorMap: Record<string, string> = {\n contains: '~',\n equals: '==',\n in: 'in',\n like: 'like_regex',\n not_equals: '!=',\n not_in: 'in',\n}\n\nconst sanitizeValue = (value: unknown, operator?: string) => {\n if (typeof value === 'string') {\n // ignore casing with like\n return `\"${operator === 'like' ? '(?i)' : ''}${value}\"`\n }\n\n return value as string\n}\n\nexport const createJSONQuery = ({ column, operator, pathSegments, value }: CreateJSONQueryArgs) => {\n const columnName = typeof column === 'object' ? column.name : column\n const jsonPaths = pathSegments\n .slice(1)\n .map((key) => {\n return `${key}[*]`\n })\n .join('.')\n\n let sql = ''\n\n if (['in', 'not_in'].includes(operator) && Array.isArray(value)) {\n value.forEach((item, i) => {\n sql = `${sql}${createJSONQuery({ column, operator: operator === 'in' ? 'equals' : 'not_equals', pathSegments, value: item })}${i === value.length - 1 ? '' : ` ${operator === 'in' ? 'OR' : 'AND'} `}`\n })\n } else if (operator === 'exists') {\n sql = `${value === false ? 'NOT ' : ''}jsonb_path_exists(${columnName}, '$.${jsonPaths}')`\n } else {\n sql = `jsonb_path_exists(${columnName}, '$.${jsonPaths} ? (@ ${operatorMap[operator]} ${sanitizeValue(value, operator)})')`\n }\n\n return sql\n}\n"],"names":["operatorMap","contains","equals","in","like","not_equals","not_in","sanitizeValue","value","operator","createJSONQuery","column","pathSegments","columnName","name","jsonPaths","slice","map","key","join","sql","includes","Array","isArray","forEach","item","i","length"],"mappings":"AAEA,MAAMA,cAAsC;IAC1CC,UAAU;IACVC,QAAQ;IACRC,IAAI;IACJC,MAAM;IACNC,YAAY;IACZC,QAAQ;AACV;AAEA,MAAMC,gBAAgB,CAACC,OAAgBC;IACrC,IAAI,OAAOD,UAAU,UAAU;QAC7B,0BAA0B;QAC1B,OAAO,CAAC,CAAC,EAAEC,aAAa,SAAS,SAAS,KAAKD,MAAM,CAAC,CAAC;IACzD;IAEA,OAAOA;AACT;AAEA,OAAO,MAAME,kBAAkB,CAAC,EAAEC,MAAM,EAAEF,QAAQ,EAAEG,YAAY,EAAEJ,KAAK,EAAuB;IAC5F,MAAMK,aAAa,OAAOF,WAAW,WAAWA,OAAOG,IAAI,GAAGH;IAC9D,MAAMI,YAAYH,aACfI,KAAK,CAAC,GACNC,GAAG,CAAC,CAACC;QACJ,OAAO,GAAGA,IAAI,GAAG,CAAC;IACpB,GACCC,IAAI,CAAC;IAER,IAAIC,MAAM;IAEV,IAAI;QAAC;QAAM;KAAS,CAACC,QAAQ,CAACZ,aAAaa,MAAMC,OAAO,CAACf,QAAQ;QAC/DA,MAAMgB,OAAO,CAAC,CAACC,MAAMC;YACnBN,MAAM,GAAGA,MAAMV,gBAAgB;gBAAEC;gBAAQF,UAAUA,aAAa,OAAO,WAAW;gBAAcG;gBAAcJ,OAAOiB;YAAK,KAAKC,MAAMlB,MAAMmB,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAElB,aAAa,OAAO,OAAO,MAAM,CAAC,CAAC,EAAE;QACxM;IACF,OAAO,IAAIA,aAAa,UAAU;QAChCW,MAAM,GAAGZ,UAAU,QAAQ,SAAS,GAAG,kBAAkB,EAAEK,WAAW,KAAK,EAAEE,UAAU,EAAE,CAAC;IAC5F,OAAO;QACLK,MAAM,CAAC,kBAAkB,EAAEP,WAAW,KAAK,EAAEE,UAAU,MAAM,EAAEf,WAAW,CAACS,SAAS,CAAC,CAAC,EAAEF,cAAcC,OAAOC,UAAU,GAAG,CAAC;IAC7H;IAEA,OAAOW;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/createMigration.ts"],"sourcesContent":["import type { CreateMigration } from 'payload'\n\nimport fs from 'fs'\nimport { createRequire } from 'module'\nimport { getPredefinedMigration, writeMigrationIndex } from 'payload'\nimport prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { defaultDrizzleSnapshot } from './defaultSnapshot.js'\nimport { getMigrationTemplate } from './getMigrationTemplate.js'\n\nconst require = createRequire(import.meta.url)\n\nexport const createMigration: CreateMigration = async function createMigration(\n this: BasePostgresAdapter,\n { dirname, file, forceAcceptWarning, migrationName, payload, skipEmpty },\n) {\n const dir = payload.db.migrationDir\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir)\n }\n const { generateDrizzleJson, generateMigration, upPgSnapshot } = require('drizzle-kit/api')\n const drizzleJsonAfter = generateDrizzleJson(this.schema)\n const [yyymmdd, hhmmss] = new Date().toISOString().split('T')\n const formattedDate = yyymmdd.replace(/\\D/g, '')\n const formattedTime = hhmmss.split('.')[0].replace(/\\D/g, '')\n let imports: string = ''\n let downSQL: string\n let upSQL: string\n ;({ downSQL, imports, upSQL } = await getPredefinedMigration({\n dirname,\n file,\n migrationName,\n payload,\n }))\n\n const timestamp = `${formattedDate}_${formattedTime}`\n\n const name = migrationName || file?.split('/').slice(2).join('/')\n const fileName = `${timestamp}${name ? `_${name.replace(/\\W/g, '_')}` : ''}`\n\n const filePath = `${dir}/${fileName}`\n\n let drizzleJsonBefore = defaultDrizzleSnapshot\n\n if (this.schemaName) {\n drizzleJsonBefore.schemas = {\n [this.schemaName]: this.schemaName,\n }\n }\n\n if (!upSQL) {\n // Get latest migration snapshot\n const latestSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .reverse()?.[0]\n\n if (latestSnapshot) {\n drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'))\n\n if (drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upPgSnapshot(drizzleJsonBefore)\n }\n }\n\n const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore)\n const sqlExecute = 'await payload.db.drizzle.execute(sql`'\n\n if (sqlStatementsUp?.length) {\n upSQL = `${sqlExecute}\\n ${sqlStatementsUp?.join('\\n')}\\`)`\n }\n if (sqlStatementsDown?.length) {\n downSQL = `${sqlExecute}\\n ${sqlStatementsDown?.join('\\n')}\\`)`\n }\n\n if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {\n if (skipEmpty) {\n process.exit(0)\n }\n\n const { confirm: shouldCreateBlankMigration } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message: 'No schema changes detected. Would you like to create a blank migration file?',\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n if (!shouldCreateBlankMigration) {\n process.exit(0)\n }\n }\n\n // write schema\n fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n }\n\n // write migration\n fs.writeFileSync(\n `${filePath}.ts`,\n getMigrationTemplate({\n downSQL: downSQL || ` // Migration code`,\n imports,\n packageName: payload.db.packageName,\n upSQL: upSQL || ` // Migration code`,\n }),\n )\n\n writeMigrationIndex({ migrationsDir: payload.db.migrationDir })\n\n payload.logger.info({ msg: `Migration created at ${filePath}.ts` })\n}\n"],"names":["fs","createRequire","getPredefinedMigration","writeMigrationIndex","prompts","defaultDrizzleSnapshot","getMigrationTemplate","require","url","createMigration","dirname","file","forceAcceptWarning","migrationName","payload","skipEmpty","dir","db","migrationDir","existsSync","mkdirSync","generateDrizzleJson","generateMigration","upPgSnapshot","drizzleJsonAfter","schema","yyymmdd","hhmmss","Date","toISOString","split","formattedDate","replace","formattedTime","imports","downSQL","upSQL","timestamp","name","slice","join","fileName","filePath","drizzleJsonBefore","schemaName","schemas","latestSnapshot","readdirSync","filter","endsWith","sort","reverse","JSON","parse","readFileSync","version","sqlStatementsUp","sqlStatementsDown","sqlExecute","length","process","exit","confirm","shouldCreateBlankMigration","type","initial","message","onCancel","writeFileSync","stringify","packageName","migrationsDir","logger","info","msg"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/postgres/createMigration.ts"],"sourcesContent":["import type { CreateMigration } from 'payload'\n\nimport fs from 'fs'\nimport { createRequire } from 'module'\nimport { getPredefinedMigration, writeMigrationIndex } from 'payload'\nimport prompts from 'prompts'\n\nimport type { BasePostgresAdapter } from './types.js'\n\nimport { defaultDrizzleSnapshot } from './defaultSnapshot.js'\nimport { getMigrationTemplate } from './getMigrationTemplate.js'\n\nconst require = createRequire(import.meta.url)\n\nexport const createMigration: CreateMigration = async function createMigration(\n this: BasePostgresAdapter,\n { dirname, file, forceAcceptWarning, migrationName, payload, skipEmpty },\n) {\n const dir = payload.db.migrationDir\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir)\n }\n const { generateDrizzleJson, generateMigration, upPgSnapshot } = require('drizzle-kit/api')\n const drizzleJsonAfter = generateDrizzleJson(this.schema)\n const [yyymmdd, hhmmss] = new Date().toISOString().split('T')\n const formattedDate = yyymmdd.replace(/\\D/g, '')\n const formattedTime = hhmmss.split('.')[0].replace(/\\D/g, '')\n let imports: string = ''\n let downSQL: string\n let upSQL: string\n ;({ downSQL, imports, upSQL } = await getPredefinedMigration({\n dirname,\n file,\n migrationName,\n payload,\n }))\n\n const timestamp = `${formattedDate}_${formattedTime}`\n\n const name = migrationName || file?.split('/').slice(2).join('/')\n const fileName = `${timestamp}${name ? `_${name.replace(/\\W/g, '_')}` : ''}`\n\n const filePath = `${dir}/${fileName}`\n\n let drizzleJsonBefore = defaultDrizzleSnapshot\n\n if (this.schemaName) {\n drizzleJsonBefore.schemas = {\n [this.schemaName]: this.schemaName,\n }\n }\n\n if (!upSQL) {\n // Get latest migration snapshot\n const latestSnapshot = fs\n .readdirSync(dir)\n .filter((file) => file.endsWith('.json'))\n .sort()\n .reverse()?.[0]\n\n if (latestSnapshot) {\n drizzleJsonBefore = JSON.parse(fs.readFileSync(`${dir}/${latestSnapshot}`, 'utf8'))\n\n if (drizzleJsonBefore.version < drizzleJsonAfter.version) {\n drizzleJsonBefore = upPgSnapshot(drizzleJsonBefore)\n }\n }\n\n const sqlStatementsUp = await generateMigration(drizzleJsonBefore, drizzleJsonAfter)\n const sqlStatementsDown = await generateMigration(drizzleJsonAfter, drizzleJsonBefore)\n const sqlExecute = 'await payload.db.drizzle.execute(sql`'\n\n if (sqlStatementsUp?.length) {\n upSQL = `${sqlExecute}\\n ${sqlStatementsUp?.join('\\n')}\\`)`\n }\n if (sqlStatementsDown?.length) {\n downSQL = `${sqlExecute}\\n ${sqlStatementsDown?.join('\\n')}\\`)`\n }\n\n if (!upSQL?.length && !downSQL?.length && !forceAcceptWarning) {\n if (skipEmpty) {\n process.exit(0)\n }\n\n const { confirm: shouldCreateBlankMigration } = await prompts(\n {\n name: 'confirm',\n type: 'confirm',\n initial: false,\n message: 'No schema changes detected. Would you like to create a blank migration file?',\n },\n {\n onCancel: () => {\n process.exit(0)\n },\n },\n )\n\n if (!shouldCreateBlankMigration) {\n process.exit(0)\n }\n }\n\n // write schema\n fs.writeFileSync(`${filePath}.json`, JSON.stringify(drizzleJsonAfter, null, 2))\n }\n\n // write migration\n fs.writeFileSync(\n `${filePath}.ts`,\n getMigrationTemplate({\n downSQL: downSQL || ` // Migration code`,\n imports,\n packageName: payload.db.packageName,\n upSQL: upSQL || ` // Migration code`,\n }),\n )\n\n writeMigrationIndex({ migrationsDir: payload.db.migrationDir })\n\n payload.logger.info({ msg: `Migration created at ${filePath}.ts` })\n}\n"],"names":["fs","createRequire","getPredefinedMigration","writeMigrationIndex","prompts","defaultDrizzleSnapshot","getMigrationTemplate","require","url","createMigration","dirname","file","forceAcceptWarning","migrationName","payload","skipEmpty","dir","db","migrationDir","existsSync","mkdirSync","generateDrizzleJson","generateMigration","upPgSnapshot","drizzleJsonAfter","schema","yyymmdd","hhmmss","Date","toISOString","split","formattedDate","replace","formattedTime","imports","downSQL","upSQL","timestamp","name","slice","join","fileName","filePath","drizzleJsonBefore","schemaName","schemas","latestSnapshot","readdirSync","filter","endsWith","sort","reverse","JSON","parse","readFileSync","version","sqlStatementsUp","sqlStatementsDown","sqlExecute","length","process","exit","confirm","shouldCreateBlankMigration","type","initial","message","onCancel","writeFileSync","stringify","packageName","migrationsDir","logger","info","msg"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/getMigrationTemplate.ts"],"sourcesContent":["import type { MigrationTemplateArgs } from 'payload'\n\nexport const indent = (text: string) =>\n text\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n')\n\nexport const getMigrationTemplate = ({\n downSQL,\n imports,\n packageName,\n upSQL,\n}: MigrationTemplateArgs): string => `import { MigrateUpArgs, MigrateDownArgs, sql } from '${packageName}'\n${imports ? `${imports}\\n` : ''}\nexport async function up({ payload, req }: MigrateUpArgs): Promise<void> {\n${indent(upSQL)}\n}\n\nexport async function down({ payload, req }: MigrateDownArgs): Promise<void> {\n${indent(downSQL)}\n}\n`\n"],"names":["indent","text","split","map","line","join","getMigrationTemplate","downSQL","imports","packageName","upSQL"],"mappings":"AAEA,OAAO,MAAMA,SAAS,CAACC,OACrBA,KACGC,KAAK,CAAC,MACNC,GAAG,CAAC,CAACC,OAAS,CAAC,EAAE,EAAEA,KAAK,CAAC,EACzBC,IAAI,CAAC,MAAK;AAEf,OAAO,MAAMC,uBAAuB,CAAC,EACnCC,OAAO,EACPC,OAAO,EACPC,WAAW,EACXC,KAAK,EACiB,GAAa,CAAC,qDAAqD,EAAED,YAAY;AACzG,EAAED,UAAU,CAAC,EAAEA,QAAQ,EAAE,CAAC,GAAG,GAAG;;AAEhC,EAAER,OAAOU,OAAO;;;;AAIhB,EAAEV,OAAOO,SAAS;;AAElB,CAAC,CAAA"}
1
+ {"version":3,"sources":["../../src/postgres/getMigrationTemplate.ts"],"sourcesContent":["import type { MigrationTemplateArgs } from 'payload'\n\nexport const indent = (text: string) =>\n text\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n')\n\nexport const getMigrationTemplate = ({\n downSQL,\n imports,\n packageName,\n upSQL,\n}: MigrationTemplateArgs): string => `import { MigrateUpArgs, MigrateDownArgs, sql } from '${packageName}'\n${imports ? `${imports}\\n` : ''}\nexport async function up({ payload, req }: MigrateUpArgs): Promise<void> {\n${indent(upSQL)}\n}\n\nexport async function down({ payload, req }: MigrateDownArgs): Promise<void> {\n${indent(downSQL)}\n}\n`\n"],"names":["indent","text","split","map","line","join","getMigrationTemplate","downSQL","imports","packageName","upSQL"],"mappings":"AAEA,OAAO,MAAMA,SAAS,CAACC,OACrBA,KACGC,KAAK,CAAC,MACNC,GAAG,CAAC,CAACC,OAAS,CAAC,EAAE,EAAEA,MAAM,EACzBC,IAAI,CAAC,MAAK;AAEf,OAAO,MAAMC,uBAAuB,CAAC,EACnCC,OAAO,EACPC,OAAO,EACPC,WAAW,EACXC,KAAK,EACiB,GAAa,CAAC,qDAAqD,EAAED,YAAY;AACzG,EAAED,UAAU,GAAGA,QAAQ,EAAE,CAAC,GAAG,GAAG;;AAEhC,EAAER,OAAOU,OAAO;;;;AAIhB,EAAEV,OAAOO,SAAS;;AAElB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init, SanitizedCollectionConfig } from 'payload'\n\nimport { uniqueIndex } from 'drizzle-orm/pg-core'\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BaseExtraConfig, BasePostgresAdapter } from './types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildTable } from './schema/build.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => {\n createTableName({\n adapter: this,\n config: collection,\n })\n\n if (collection.versions) {\n createTableName({\n adapter: this,\n config: collection,\n versions: true,\n versionsCustomName: true,\n })\n }\n })\n this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => {\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n\n const baseExtraConfig: BaseExtraConfig = {}\n\n if (collection.upload.filenameCompoundIndex) {\n const indexName = `${tableName}_filename_compound_idx`\n\n baseExtraConfig.filename_compound_index = (cols) => {\n const colsConstraint = collection.upload.filenameCompoundIndex.map((f) => {\n return cols[f]\n })\n return uniqueIndex(indexName).on(colsConstraint[0], ...colsConstraint.slice(1))\n }\n }\n\n buildTable({\n adapter: this,\n baseExtraConfig,\n disableNotNull: !!collection?.versions?.drafts,\n disableUnique: false,\n fields: collection.flattenedFields,\n tableName,\n timestamps: collection.timestamps,\n versions: false,\n })\n\n if (collection.versions) {\n const versionsTableName = this.tableNameMap.get(\n `_${toSnakeCase(collection.slug)}${this.versionsSuffix}`,\n )\n const versionFields = buildVersionCollectionFields(this.payload.config, collection, true)\n\n buildTable({\n adapter: this,\n disableNotNull: !!collection.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n this.payload.config.globals.forEach((global) => {\n const tableName = createTableName({ adapter: this, config: global })\n\n buildTable({\n adapter: this,\n disableNotNull: !!global?.versions?.drafts,\n disableUnique: false,\n fields: global.flattenedFields,\n tableName,\n timestamps: false,\n versions: false,\n })\n\n if (global.versions) {\n const versionsTableName = createTableName({\n adapter: this,\n config: global,\n versions: true,\n versionsCustomName: true,\n })\n const versionFields = buildVersionGlobalFields(this.payload.config, global, true)\n\n buildTable({\n adapter: this,\n disableNotNull: !!global.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n}\n"],"names":["uniqueIndex","buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","createTableName","executeSchemaHooks","buildTable","init","type","adapter","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","collections","forEach","collection","versions","versionsCustomName","tableName","tableNameMap","get","slug","baseExtraConfig","upload","filenameCompoundIndex","indexName","filename_compound_index","cols","colsConstraint","f","on","slice","disableNotNull","drafts","disableUnique","fields","flattenedFields","timestamps","versionsTableName","versionsSuffix","versionFields","globals","global"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init, SanitizedCollectionConfig } from 'payload'\n\nimport { uniqueIndex } from 'drizzle-orm/pg-core'\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BaseExtraConfig, BasePostgresAdapter } from './types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildTable } from './schema/build.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => {\n createTableName({\n adapter: this,\n config: collection,\n })\n\n if (collection.versions) {\n createTableName({\n adapter: this,\n config: collection,\n versions: true,\n versionsCustomName: true,\n })\n }\n })\n this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => {\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n\n const baseExtraConfig: BaseExtraConfig = {}\n\n if (collection.upload.filenameCompoundIndex) {\n const indexName = `${tableName}_filename_compound_idx`\n\n baseExtraConfig.filename_compound_index = (cols) => {\n const colsConstraint = collection.upload.filenameCompoundIndex.map((f) => {\n return cols[f]\n })\n return uniqueIndex(indexName).on(colsConstraint[0], ...colsConstraint.slice(1))\n }\n }\n\n buildTable({\n adapter: this,\n baseExtraConfig,\n disableNotNull: !!collection?.versions?.drafts,\n disableUnique: false,\n fields: collection.flattenedFields,\n tableName,\n timestamps: collection.timestamps,\n versions: false,\n })\n\n if (collection.versions) {\n const versionsTableName = this.tableNameMap.get(\n `_${toSnakeCase(collection.slug)}${this.versionsSuffix}`,\n )\n const versionFields = buildVersionCollectionFields(this.payload.config, collection, true)\n\n buildTable({\n adapter: this,\n disableNotNull: !!collection.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n this.payload.config.globals.forEach((global) => {\n const tableName = createTableName({ adapter: this, config: global })\n\n buildTable({\n adapter: this,\n disableNotNull: !!global?.versions?.drafts,\n disableUnique: false,\n fields: global.flattenedFields,\n tableName,\n timestamps: false,\n versions: false,\n })\n\n if (global.versions) {\n const versionsTableName = createTableName({\n adapter: this,\n config: global,\n versions: true,\n versionsCustomName: true,\n })\n const versionFields = buildVersionGlobalFields(this.payload.config, global, true)\n\n buildTable({\n adapter: this,\n disableNotNull: !!global.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n}\n"],"names":["uniqueIndex","buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","createTableName","executeSchemaHooks","buildTable","init","type","adapter","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","collections","forEach","collection","versions","versionsCustomName","tableName","tableNameMap","get","slug","baseExtraConfig","upload","filenameCompoundIndex","indexName","filename_compound_index","cols","colsConstraint","f","on","slice","disableNotNull","drafts","disableUnique","fields","flattenedFields","timestamps","versionsTableName","versionsSuffix","versionFields","globals","global"],"mappings":"AAEA,SAASA,WAAW,QAAQ,sBAAqB;AACjD,SAASC,4BAA4B,EAAEC,wBAAwB,QAAQ,UAAS;AAChF,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,kBAAkB,QAAQ,qCAAoC;AACvE,SAASC,UAAU,QAAQ,oBAAmB;AAE9C,OAAO,MAAMC,OAAa,eAAeA;IACvC,MAAMF,mBAAmB;QAAEG,MAAM;QAAoBC,SAAS,IAAI;IAAC;IAEnE,IAAI,IAAI,CAACC,OAAO,CAACC,MAAM,CAACC,YAAY,EAAE;QACpC,IAAI,CAACC,KAAK,CAACC,aAAa,GAAG,IAAI,CAACC,QAAQ,CAACC,IAAI,CAC3C,YACA,IAAI,CAACN,OAAO,CAACC,MAAM,CAACC,YAAY,CAACK,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA;IAE/D;IAEA,IAAI,CAACT,OAAO,CAACC,MAAM,CAACS,WAAW,CAACC,OAAO,CAAC,CAACC;QACvClB,gBAAgB;YACdK,SAAS,IAAI;YACbE,QAAQW;QACV;QAEA,IAAIA,WAAWC,QAAQ,EAAE;YACvBnB,gBAAgB;gBACdK,SAAS,IAAI;gBACbE,QAAQW;gBACRC,UAAU;gBACVC,oBAAoB;YACtB;QACF;IACF;IACA,IAAI,CAACd,OAAO,CAACC,MAAM,CAACS,WAAW,CAACC,OAAO,CAAC,CAACC;QACvC,MAAMG,YAAY,IAAI,CAACC,YAAY,CAACC,GAAG,CAACxB,YAAYmB,WAAWM,IAAI;QAEnE,MAAMC,kBAAmC,CAAC;QAE1C,IAAIP,WAAWQ,MAAM,CAACC,qBAAqB,EAAE;YAC3C,MAAMC,YAAY,GAAGP,UAAU,sBAAsB,CAAC;YAEtDI,gBAAgBI,uBAAuB,GAAG,CAACC;gBACzC,MAAMC,iBAAiBb,WAAWQ,MAAM,CAACC,qBAAqB,CAACb,GAAG,CAAC,CAACkB;oBAClE,OAAOF,IAAI,CAACE,EAAE;gBAChB;gBACA,OAAOpC,YAAYgC,WAAWK,EAAE,CAACF,cAAc,CAAC,EAAE,KAAKA,eAAeG,KAAK,CAAC;YAC9E;QACF;QAEAhC,WAAW;YACTG,SAAS,IAAI;YACboB;YACAU,gBAAgB,CAAC,CAACjB,YAAYC,UAAUiB;YACxCC,eAAe;YACfC,QAAQpB,WAAWqB,eAAe;YAClClB;YACAmB,YAAYtB,WAAWsB,UAAU;YACjCrB,UAAU;QACZ;QAEA,IAAID,WAAWC,QAAQ,EAAE;YACvB,MAAMsB,oBAAoB,IAAI,CAACnB,YAAY,CAACC,GAAG,CAC7C,CAAC,CAAC,EAAExB,YAAYmB,WAAWM,IAAI,IAAI,IAAI,CAACkB,cAAc,EAAE;YAE1D,MAAMC,gBAAgB9C,6BAA6B,IAAI,CAACS,OAAO,CAACC,MAAM,EAAEW,YAAY;YAEpFhB,WAAW;gBACTG,SAAS,IAAI;gBACb8B,gBAAgB,CAAC,CAACjB,WAAWC,QAAQ,EAAEiB;gBACvCC,eAAe;gBACfC,QAAQK;gBACRtB,WAAWoB;gBACXD,YAAY;gBACZrB,UAAU;YACZ;QACF;IACF;IAEA,IAAI,CAACb,OAAO,CAACC,MAAM,CAACqC,OAAO,CAAC3B,OAAO,CAAC,CAAC4B;QACnC,MAAMxB,YAAYrB,gBAAgB;YAAEK,SAAS,IAAI;YAAEE,QAAQsC;QAAO;QAElE3C,WAAW;YACTG,SAAS,IAAI;YACb8B,gBAAgB,CAAC,CAACU,QAAQ1B,UAAUiB;YACpCC,eAAe;YACfC,QAAQO,OAAON,eAAe;YAC9BlB;YACAmB,YAAY;YACZrB,UAAU;QACZ;QAEA,IAAI0B,OAAO1B,QAAQ,EAAE;YACnB,MAAMsB,oBAAoBzC,gBAAgB;gBACxCK,SAAS,IAAI;gBACbE,QAAQsC;gBACR1B,UAAU;gBACVC,oBAAoB;YACtB;YACA,MAAMuB,gBAAgB7C,yBAAyB,IAAI,CAACQ,OAAO,CAACC,MAAM,EAAEsC,QAAQ;YAE5E3C,WAAW;gBACTG,SAAS,IAAI;gBACb8B,gBAAgB,CAAC,CAACU,OAAO1B,QAAQ,EAAEiB;gBACnCC,eAAe;gBACfC,QAAQK;gBACRtB,WAAWoB;gBACXD,YAAY;gBACZrB,UAAU;YACZ;QACF;IACF;IAEA,MAAMlB,mBAAmB;QAAEG,MAAM;QAAmBC,SAAS,IAAI;IAAC;AACpE,EAAC"}
@@ -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 { FlattenedField } 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: FlattenedField[]\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
+ {"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 { FlattenedField } 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: FlattenedField[]\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 +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 { FlattenedField } 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 { geometryColumn } from './geometryColumn.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: FlattenedField[]\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 targetTable = columns\n let targetIndexes = indexes\n\n const columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n const 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'].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 switch (field.type) {\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.flattenedFields) : field.flattenedFields,\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 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.flattenedFields) : block.flattenedFields,\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 case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n\n case 'code':\n case 'email':\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(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 'group':\n case 'tab': {\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.flattenedFields,\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 'json':\n case 'richText': {\n targetTable[fieldName] = withDefault(jsonb(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 'point': {\n targetTable[fieldName] = withDefault(geometryColumn(columnName), field)\n if (!adapter.extensions.postgis) {\n adapter.extensions.postgis = true\n }\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 '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 '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\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","geometryColumn","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","targetTable","targetIndexes","columnName","fieldName","replace","payload","config","localization","localized","type","hasMany","unique","includes","Array","isArray","relationTo","constraintValue","fieldConstraints","indexName","disableNotNullFromHere","Boolean","admin","condition","arrayTableName","prefix","versionsCustomName","baseColumns","_order","notNull","_parentID","baseExtraConfig","_orderIdx","cols","on","_parentIDFk","foreignColumns","tables","onDelete","_parentIDIdx","isLocalized","_locale","enums","enum__locales","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","flattenedFields","rootRelationships","rootUniqueRelationships","tableName","set","target","many","one","result","references","relationName","_locales","localesSuffix","key","arrayWithLocalized","blocks","block","blockTableName","_path","_parentIdFk","_pathIdx","slug","blockWithLocalized","process","env","NODE_ENV","table","tableLocales","mode","precision","withTimezone","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","extensions","postgis","enumName","pgSchema","enum","options","map","option","value","selectTableName","order","parent","orderIdx","parentFk","parentIdx","locale","localeIdx","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","required"],"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 { FlattenedField } 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 { geometryColumn } from './geometryColumn.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: FlattenedField[]\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 targetTable = columns\n let targetIndexes = indexes\n\n const columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n const 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'].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 switch (field.type) {\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.flattenedFields) : field.flattenedFields,\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 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.flattenedFields) : block.flattenedFields,\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 case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n\n case 'code':\n case 'email':\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(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 'group':\n case 'tab': {\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.flattenedFields,\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 'json':\n case 'richText': {\n targetTable[fieldName] = withDefault(jsonb(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 'point': {\n targetTable[fieldName] = withDefault(geometryColumn(columnName), field)\n if (!adapter.extensions.postgis) {\n adapter.extensions.postgis = true\n }\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 '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 '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\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","geometryColumn","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","targetTable","targetIndexes","columnName","fieldName","replace","payload","config","localization","localized","type","hasMany","unique","includes","Array","isArray","relationTo","constraintValue","fieldConstraints","indexName","disableNotNullFromHere","Boolean","admin","condition","arrayTableName","prefix","versionsCustomName","baseColumns","_order","notNull","_parentID","baseExtraConfig","_orderIdx","cols","on","_parentIDFk","foreignColumns","tables","onDelete","_parentIDIdx","isLocalized","_locale","enums","enum__locales","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","flattenedFields","rootRelationships","rootUniqueRelationships","tableName","set","target","many","one","result","references","relationName","_locales","localesSuffix","key","arrayWithLocalized","blocks","block","blockTableName","_path","_parentIdFk","_pathIdx","slug","blockWithLocalized","process","env","NODE_ENV","table","tableLocales","mode","precision","withTimezone","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","extensions","postgis","enumName","pgSchema","enum","options","map","option","value","selectTableName","order","parent","orderIdx","parentFk","parentIdx","locale","localeIdx","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","required"],"mappings":"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"}