@payloadcms/db-postgres 3.0.0-alpha.54 → 3.0.0-alpha.56

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 (82) hide show
  1. package/dist/create.d.ts.map +1 -1
  2. package/dist/create.js +5 -2
  3. package/dist/create.js.map +1 -1
  4. package/dist/createGlobal.d.ts.map +1 -1
  5. package/dist/createGlobal.js +5 -2
  6. package/dist/createGlobal.js.map +1 -1
  7. package/dist/createGlobalVersion.d.ts.map +1 -1
  8. package/dist/createGlobalVersion.js +6 -3
  9. package/dist/createGlobalVersion.js.map +1 -1
  10. package/dist/createVersion.d.ts.map +1 -1
  11. package/dist/createVersion.js +12 -4
  12. package/dist/createVersion.js.map +1 -1
  13. package/dist/deleteMany.js +5 -2
  14. package/dist/deleteMany.js.map +1 -1
  15. package/dist/deleteOne.d.ts.map +1 -1
  16. package/dist/deleteOne.js +5 -2
  17. package/dist/deleteOne.js.map +1 -1
  18. package/dist/deleteVersions.d.ts.map +1 -1
  19. package/dist/deleteVersions.js +6 -2
  20. package/dist/deleteVersions.js.map +1 -1
  21. package/dist/find/traverseFields.d.ts.map +1 -1
  22. package/dist/find/traverseFields.js +24 -5
  23. package/dist/find/traverseFields.js.map +1 -1
  24. package/dist/find.d.ts.map +1 -1
  25. package/dist/find.js +9 -5
  26. package/dist/find.js.map +1 -1
  27. package/dist/findGlobal.d.ts.map +1 -1
  28. package/dist/findGlobal.js +5 -2
  29. package/dist/findGlobal.js.map +1 -1
  30. package/dist/findGlobalVersions.d.ts.map +1 -1
  31. package/dist/findGlobalVersions.js +6 -2
  32. package/dist/findGlobalVersions.js.map +1 -1
  33. package/dist/findOne.d.ts +1 -1
  34. package/dist/findOne.d.ts.map +1 -1
  35. package/dist/findOne.js +8 -4
  36. package/dist/findOne.js.map +1 -1
  37. package/dist/findVersions.d.ts.map +1 -1
  38. package/dist/findVersions.js +6 -2
  39. package/dist/findVersions.js.map +1 -1
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +4 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/init.d.ts.map +1 -1
  45. package/dist/init.js +27 -9
  46. package/dist/init.js.map +1 -1
  47. package/dist/migrate.js.map +1 -1
  48. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  49. package/dist/queries/getTableColumnFromPath.js +57 -13
  50. package/dist/queries/getTableColumnFromPath.js.map +1 -1
  51. package/dist/queryDrafts.d.ts.map +1 -1
  52. package/dist/queryDrafts.js +6 -2
  53. package/dist/queryDrafts.js.map +1 -1
  54. package/dist/schema/build.d.ts +2 -1
  55. package/dist/schema/build.d.ts.map +1 -1
  56. package/dist/schema/build.js +18 -8
  57. package/dist/schema/build.js.map +1 -1
  58. package/dist/schema/getTableName.d.ts +32 -0
  59. package/dist/schema/getTableName.d.ts.map +1 -0
  60. package/dist/schema/getTableName.js +31 -0
  61. package/dist/schema/getTableName.js.map +1 -0
  62. package/dist/schema/traverseFields.d.ts +2 -1
  63. package/dist/schema/traverseFields.d.ts.map +1 -1
  64. package/dist/schema/traverseFields.js +52 -15
  65. package/dist/schema/traverseFields.js.map +1 -1
  66. package/dist/types.d.ts +13 -0
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/types.js.map +1 -1
  69. package/dist/update.d.ts.map +1 -1
  70. package/dist/update.js +6 -3
  71. package/dist/update.js.map +1 -1
  72. package/dist/updateGlobal.d.ts.map +1 -1
  73. package/dist/updateGlobal.js +5 -2
  74. package/dist/updateGlobal.js.map +1 -1
  75. package/dist/updateGlobalVersion.d.ts.map +1 -1
  76. package/dist/updateGlobalVersion.js +6 -2
  77. package/dist/updateGlobalVersion.js.map +1 -1
  78. package/dist/updateVersion.d.ts.map +1 -1
  79. package/dist/updateVersion.js +6 -2
  80. package/dist/updateVersion.js.map +1 -1
  81. package/package.json +3 -3
  82. package/src/index.ts +6 -1
@@ -17,12 +17,13 @@ type Args = {
17
17
  rootTableName?: string;
18
18
  tableName: string;
19
19
  timestamps?: boolean;
20
+ versions: boolean;
20
21
  };
21
22
  type Result = {
22
23
  hasManyNumberField: 'index' | boolean;
23
24
  hasManyTextField: 'index' | boolean;
24
25
  relationsToBuild: Map<string, string>;
25
26
  };
26
- export declare const buildTable: ({ adapter, baseColumns, baseExtraConfig, buildNumbers, buildRelationships, buildTexts, disableNotNull, disableUnique, fields, rootRelationsToBuild, rootRelationships, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps, }: Args) => Result;
27
+ export declare const buildTable: ({ adapter, baseColumns, baseExtraConfig, buildNumbers, buildRelationships, buildTexts, disableNotNull, disableUnique, fields, rootRelationsToBuild, rootRelationships, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps, versions, }: Args) => Result;
27
28
  export {};
28
29
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schema/build.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAEf,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAO1C,OAAO,KAAK,EAAE,cAAc,EAAwB,eAAe,EAAE,MAAM,aAAa,CAAA;AAMxF,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,GAAG,uBAAuB,CAAC,CAAA;IAClG,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;IACnC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,UAAU,8PAgBpB,IAAI,KAAG,MA+TT,CAAA"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schema/build.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAEf,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAM1C,OAAO,KAAK,EAAE,cAAc,EAAwB,eAAe,EAAE,MAAM,aAAa,CAAA;AAOxF,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,GAAG,uBAAuB,CAAC,CAAA;IAClG,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;IACnC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,UAAU,wQAiBpB,IAAI,KAAG,MAyUT,CAAA"}
@@ -1,11 +1,11 @@
1
1
  /* eslint-disable no-param-reassign */ import { relations } from 'drizzle-orm';
2
2
  import { index, integer, numeric, serial, timestamp, unique, varchar } from 'drizzle-orm/pg-core';
3
3
  import { fieldAffectsData } from 'payload/types';
4
- import toSnakeCase from 'to-snake-case';
4
+ import { getTableName } from './getTableName.js';
5
5
  import { parentIDColumnMap } from './parentIDColumnMap.js';
6
6
  import { setColumnID } from './setColumnID.js';
7
7
  import { traverseFields } from './traverseFields.js';
8
- export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumbers, buildRelationships, buildTexts, disableNotNull, disableUnique = false, fields, rootRelationsToBuild, rootRelationships, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps })=>{
8
+ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildNumbers, buildRelationships, buildTexts, disableNotNull, disableUnique = false, fields, rootRelationsToBuild, rootRelationships, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps, versions })=>{
9
9
  const rootTableName = incomingRootTableName || tableName;
10
10
  const columns = baseColumns;
11
11
  const indexes = {};
@@ -48,7 +48,8 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
48
48
  relationships,
49
49
  rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,
50
50
  rootTableIDColType: rootTableIDColType || idColType,
51
- rootTableName
51
+ rootTableName,
52
+ versions
52
53
  }));
53
54
  if (timestamps) {
54
55
  columns.createdAt = timestamp('created_at', {
@@ -74,7 +75,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
74
75
  });
75
76
  adapter.tables[tableName] = table;
76
77
  if (hasLocalizedField) {
77
- const localeTableName = `${tableName}_locales`;
78
+ const localeTableName = `${tableName}${adapter.localesSuffix}`;
78
79
  localesColumns.id = serial('id').primaryKey();
79
80
  localesColumns._locale = adapter.enums.enum__locales('_locale').notNull();
80
81
  localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').references(()=>table.id, {
@@ -193,16 +194,21 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
193
194
  relationshipColumns.locale = adapter.enums.enum__locales('locale');
194
195
  }
195
196
  relationships.forEach((relationTo)=>{
196
- const formattedRelationTo = toSnakeCase(relationTo);
197
+ const relationshipConfig = adapter.payload.collections[relationTo].config;
198
+ const formattedRelationTo = getTableName({
199
+ adapter,
200
+ config: relationshipConfig,
201
+ throwValidationError: true
202
+ });
197
203
  let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer';
198
- const relatedCollectionCustomID = adapter.payload.collections[relationTo].config.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
204
+ const relatedCollectionCustomID = relationshipConfig.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
199
205
  if (relatedCollectionCustomID?.type === 'number') colType = 'numeric';
200
206
  if (relatedCollectionCustomID?.type === 'text') colType = 'varchar';
201
207
  relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](`${formattedRelationTo}_id`).references(()=>adapter.tables[formattedRelationTo].id, {
202
208
  onDelete: 'cascade'
203
209
  });
204
210
  });
205
- const relationshipsTableName = `${tableName}_rels`;
211
+ const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`;
206
212
  relationshipsTable = adapter.pgSchema.table(relationshipsTableName, relationshipColumns, (cols)=>{
207
213
  const result = {
208
214
  order: index(`${relationshipsTableName}_order_idx`).on(cols.order),
@@ -228,7 +234,11 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
228
234
  })
229
235
  };
230
236
  relationships.forEach((relationTo)=>{
231
- const relatedTableName = toSnakeCase(relationTo);
237
+ const relatedTableName = getTableName({
238
+ adapter,
239
+ config: adapter.payload.collections[relationTo].config,
240
+ throwValidationError: true
241
+ });
232
242
  const idColumnName = `${relationTo}ID`;
233
243
  result[idColumnName] = one(adapter.tables[relatedTableName], {
234
244
  fields: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema/build.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Relation } from 'drizzle-orm'\nimport type {\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n UniqueConstraintBuilder,\n} from 'drizzle-orm/pg-core'\nimport type { Field } from 'payload/types'\n\nimport { relations } from 'drizzle-orm'\nimport { index, integer, numeric, serial, timestamp, unique, varchar } from 'drizzle-orm/pg-core'\nimport { fieldAffectsData } from 'payload/types'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { GenericColumns, GenericTable, IDType, PostgresAdapter } from '../types.js'\n\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: PostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n baseExtraConfig?: Record<string, (cols: GenericColumns) => IndexBuilder | UniqueConstraintBuilder>\n buildNumbers?: boolean\n buildRelationships?: boolean\n buildTexts?: boolean\n disableNotNull: boolean\n disableUnique: boolean\n fields: Field[]\n rootRelationsToBuild?: Map<string, string>\n rootRelationships?: Set<string>\n rootTableIDColType?: string\n rootTableName?: string\n tableName: string\n timestamps?: boolean\n}\n\ntype Result = {\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: Map<string, string>\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n buildNumbers,\n buildRelationships,\n buildTexts,\n disableNotNull,\n disableUnique = false,\n fields,\n rootRelationsToBuild,\n rootRelationships,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n tableName,\n timestamps,\n}: Args): Result => {\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasLocalizedManyNumberField = false\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 let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: Map<string, string> = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n ;({\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n buildNumbers,\n buildRelationships,\n buildTexts,\n columns,\n disableNotNull,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationsToBuild,\n relationships,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\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 return Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField) {\n const localeTableName = `${tableName}_locales`\n localesColumns.id = serial('id').primaryKey()\n localesColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id')\n .references(() => table.id, { onDelete: 'cascade' })\n .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 },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n const localesTableRelations = relations(localesTable, ({ one }) => ({\n _parentID: one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${localeTableName}`] = localesTableRelations\n }\n\n if (hasManyTextField && buildTexts) {\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')\n .references(() => table.id, { onDelete: 'cascade' })\n .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 indexes: Record<string, IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n }\n\n if (hasManyTextField === 'index') {\n indexes.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n indexes.localeParent = index(`${textsTableName}_locale_parent`).on(cols.locale, cols.parent)\n }\n\n return indexes\n })\n\n adapter.tables[textsTableName] = textsTable\n\n const textsTableRelations = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${textsTableName}`] = textsTableRelations\n }\n\n if (hasManyNumberField && buildNumbers) {\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')\n .references(() => table.id, { onDelete: 'cascade' })\n .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 indexes: Record<string, IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n }\n\n if (hasManyNumberField === 'index') {\n indexes.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n indexes.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return indexes\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n const numbersTableRelations = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${numbersTableName}`] = numbersTableRelations\n }\n\n if (buildRelationships) {\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')\n .references(() => table.id, { onDelete: 'cascade' })\n .notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n relationships.forEach((relationTo) => {\n const formattedRelationTo = toSnakeCase(relationTo)\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = adapter.payload.collections[\n relationTo\n ].config.fields.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (relatedCollectionCustomID?.type === 'number') colType = 'numeric'\n if (relatedCollectionCustomID?.type === 'text') colType = 'varchar'\n\n relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](\n `${formattedRelationTo}_id`,\n ).references(() => adapter.tables[formattedRelationTo].id, { onDelete: 'cascade' })\n })\n\n const relationshipsTableName = `${tableName}_rels`\n\n relationshipsTable = adapter.pgSchema.table(\n relationshipsTableName,\n relationshipColumns,\n (cols) => {\n const result: Record<string, unknown> = {\n order: index(`${relationshipsTableName}_order_idx`).on(cols.order),\n parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),\n pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),\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 const relationshipsTableRelations = relations(relationshipsTable, ({ 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 = toSnakeCase(relationTo)\n const idColumnName = `${relationTo}ID`\n result[idColumnName] = one(adapter.tables[relatedTableName], {\n fields: [relationshipsTable[idColumnName]],\n references: [adapter.tables[relatedTableName].id],\n })\n })\n\n return result\n })\n\n adapter.relations[`relations_${relationshipsTableName}`] = relationshipsTableRelations\n }\n }\n\n const tableRelations = relations(table, ({ many }) => {\n const result: Record<string, Relation<string>> = {}\n\n relationsToBuild.forEach((val, key) => {\n result[key] = many(adapter.tables[val])\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable)\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable)\n }\n if (hasManyNumberField) {\n result._numbers = many(numbersTable)\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n adapter.relations[`relations_${tableName}`] = tableRelations\n\n return { hasManyNumberField, hasManyTextField, relationsToBuild }\n}\n"],"names":["relations","index","integer","numeric","serial","timestamp","unique","varchar","fieldAffectsData","toSnakeCase","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","buildNumbers","buildRelationships","buildTexts","disableNotNull","disableUnique","fields","rootRelationsToBuild","rootRelationships","rootTableIDColType","rootTableName","incomingRootTableName","tableName","timestamps","columns","indexes","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasManyNumberField","hasLocalizedManyTextField","hasLocalizedManyNumberField","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","relationshipsTable","relationsToBuild","Map","idColType","newTableName","parentTableName","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","key","func","acc","colName","tables","localeTableName","id","primaryKey","_locale","enums","enum__locales","_parentID","references","onDelete","_localeParent","on","localesTableRelations","one","textsTableName","order","parent","path","text","locale","orderParentIdx","text_idx","localeParent","textsTableRelations","numbersTableName","number","numberIdx","numbersTableRelations","size","relationshipColumns","forEach","relationTo","formattedRelationTo","colType","idType","relatedCollectionCustomID","payload","collections","find","field","name","type","relationshipsTableName","result","parentIdx","pathIdx","localeIdx","relationshipsTableRelations","relationName","relatedTableName","idColumnName","tableRelations","many","val","_locales","_texts","_numbers","_rels"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/schema/build.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Relation } from 'drizzle-orm'\nimport type {\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n UniqueConstraintBuilder,\n} from 'drizzle-orm/pg-core'\nimport type { Field } from 'payload/types'\n\nimport { relations } from 'drizzle-orm'\nimport { index, integer, numeric, serial, timestamp, unique, varchar } from 'drizzle-orm/pg-core'\nimport { fieldAffectsData } from 'payload/types'\n\nimport type { GenericColumns, GenericTable, IDType, PostgresAdapter } from '../types.js'\n\nimport { getTableName } from './getTableName.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: PostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n baseExtraConfig?: Record<string, (cols: GenericColumns) => IndexBuilder | UniqueConstraintBuilder>\n buildNumbers?: boolean\n buildRelationships?: boolean\n buildTexts?: boolean\n disableNotNull: boolean\n disableUnique: boolean\n fields: Field[]\n rootRelationsToBuild?: Map<string, string>\n rootRelationships?: Set<string>\n rootTableIDColType?: string\n rootTableName?: string\n tableName: string\n timestamps?: boolean\n versions: boolean\n}\n\ntype Result = {\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: Map<string, string>\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n buildNumbers,\n buildRelationships,\n buildTexts,\n disableNotNull,\n disableUnique = false,\n fields,\n rootRelationsToBuild,\n rootRelationships,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n tableName,\n timestamps,\n versions,\n}: Args): Result => {\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasLocalizedManyNumberField = false\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 let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: Map<string, string> = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n ;({\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n buildNumbers,\n buildRelationships,\n buildTexts,\n columns,\n disableNotNull,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationsToBuild,\n relationships,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n versions,\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 return Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField) {\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')\n .references(() => table.id, { onDelete: 'cascade' })\n .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 },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n const localesTableRelations = relations(localesTable, ({ one }) => ({\n _parentID: one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${localeTableName}`] = localesTableRelations\n }\n\n if (hasManyTextField && buildTexts) {\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')\n .references(() => table.id, { onDelete: 'cascade' })\n .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 indexes: Record<string, IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n }\n\n if (hasManyTextField === 'index') {\n indexes.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n indexes.localeParent = index(`${textsTableName}_locale_parent`).on(cols.locale, cols.parent)\n }\n\n return indexes\n })\n\n adapter.tables[textsTableName] = textsTable\n\n const textsTableRelations = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${textsTableName}`] = textsTableRelations\n }\n\n if (hasManyNumberField && buildNumbers) {\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')\n .references(() => table.id, { onDelete: 'cascade' })\n .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 indexes: Record<string, IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n }\n\n if (hasManyNumberField === 'index') {\n indexes.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n indexes.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return indexes\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n const numbersTableRelations = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${numbersTableName}`] = numbersTableRelations\n }\n\n if (buildRelationships) {\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')\n .references(() => table.id, { onDelete: 'cascade' })\n .notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = getTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\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') colType = 'numeric'\n if (relatedCollectionCustomID?.type === 'text') colType = 'varchar'\n\n relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](\n `${formattedRelationTo}_id`,\n ).references(() => adapter.tables[formattedRelationTo].id, { onDelete: 'cascade' })\n })\n\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n relationshipsTable = adapter.pgSchema.table(\n relationshipsTableName,\n relationshipColumns,\n (cols) => {\n const result: Record<string, unknown> = {\n order: index(`${relationshipsTableName}_order_idx`).on(cols.order),\n parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),\n pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),\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 const relationshipsTableRelations = relations(relationshipsTable, ({ 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 = getTableName({\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 })\n })\n\n return result\n })\n\n adapter.relations[`relations_${relationshipsTableName}`] = relationshipsTableRelations\n }\n }\n\n const tableRelations = relations(table, ({ many }) => {\n const result: Record<string, Relation<string>> = {}\n\n relationsToBuild.forEach((val, key) => {\n result[key] = many(adapter.tables[val])\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable)\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable)\n }\n if (hasManyNumberField) {\n result._numbers = many(numbersTable)\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n adapter.relations[`relations_${tableName}`] = tableRelations\n\n return { hasManyNumberField, hasManyTextField, relationsToBuild }\n}\n"],"names":["relations","index","integer","numeric","serial","timestamp","unique","varchar","fieldAffectsData","getTableName","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","buildNumbers","buildRelationships","buildTexts","disableNotNull","disableUnique","fields","rootRelationsToBuild","rootRelationships","rootTableIDColType","rootTableName","incomingRootTableName","tableName","timestamps","versions","columns","indexes","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasManyNumberField","hasLocalizedManyTextField","hasLocalizedManyNumberField","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","relationshipsTable","relationsToBuild","Map","idColType","newTableName","parentTableName","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","key","func","acc","colName","tables","localeTableName","localesSuffix","id","primaryKey","_locale","enums","enum__locales","_parentID","references","onDelete","_localeParent","on","localesTableRelations","one","textsTableName","order","parent","path","text","locale","orderParentIdx","text_idx","localeParent","textsTableRelations","numbersTableName","number","numberIdx","numbersTableRelations","size","relationshipColumns","forEach","relationTo","relationshipConfig","payload","collections","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomID","find","field","name","type","relationshipsTableName","relationshipsSuffix","result","parentIdx","pathIdx","localeIdx","relationshipsTableRelations","relationName","relatedTableName","idColumnName","tableRelations","many","val","_locales","_texts","_numbers","_rels"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { DBIdentifierName } from 'payload/database';
2
+ import type { PostgresAdapter } from '../types.js';
3
+ type Args = {
4
+ adapter: PostgresAdapter;
5
+ /** The collection, global or field config **/
6
+ config: {
7
+ dbName?: DBIdentifierName;
8
+ enumName?: DBIdentifierName;
9
+ name?: string;
10
+ slug?: string;
11
+ };
12
+ /** Localized tables need to be given the locales suffix */
13
+ locales?: boolean;
14
+ /** For nested tables passed for the user custom dbName functions to handle their own iterations */
15
+ parentTableName?: string;
16
+ /** For sub tables (array for example) this needs to include the parentTableName */
17
+ prefix?: string;
18
+ /** Adds the relationships suffix */
19
+ relationships?: boolean;
20
+ /** For tables based on fields that could have both enumName and dbName (ie: select with hasMany), default: 'dbName' */
21
+ target?: 'dbName' | 'enumName';
22
+ throwValidationError?: boolean;
23
+ /** Adds the versions suffix, should only be used on the base collection to duplicate suffixing */
24
+ versions?: boolean;
25
+ };
26
+ /**
27
+ * Used to name database enums and tables
28
+ * Returns the table or enum name for a given entity
29
+ */
30
+ export declare const getTableName: ({ adapter, config: { name, slug }, config, locales, parentTableName, prefix, relationships, target, throwValidationError, versions, }: Args) => string;
31
+ export {};
32
+ //# sourceMappingURL=getTableName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTableName.d.ts","sourceRoot":"","sources":["../../src/schema/getTableName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAKxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,8CAA8C;IAC9C,MAAM,EAAE;QACN,MAAM,CAAC,EAAE,gBAAgB,CAAA;QACzB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,uHAAuH;IACvH,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,0IAWtB,IAAI,KAAG,MA4BT,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { APIError } from 'payload/errors';
2
+ import toSnakeCase from 'to-snake-case';
3
+ /**
4
+ * Used to name database enums and tables
5
+ * Returns the table or enum name for a given entity
6
+ */ export const getTableName = ({ adapter, config: { name, slug }, config, locales = false, parentTableName, prefix = '', relationships = false, target = 'dbName', throwValidationError = false, versions = false })=>{
7
+ let result;
8
+ let custom = config[target];
9
+ if (!custom && target === 'enumName') {
10
+ custom = config['dbName'];
11
+ }
12
+ if (custom) {
13
+ result = typeof custom === 'function' ? custom({
14
+ tableName: parentTableName
15
+ }) : custom;
16
+ } else {
17
+ result = `${prefix}${toSnakeCase(name ?? slug)}`;
18
+ }
19
+ if (locales) result = `${result}${adapter.localesSuffix}`;
20
+ if (versions) result = `_${result}${adapter.versionsSuffix}`;
21
+ if (relationships) result = `${result}${adapter.relationshipsSuffix}`;
22
+ if (!throwValidationError) {
23
+ return result;
24
+ }
25
+ if (result.length > 63) {
26
+ throw new APIError(`Exceeded max identifier length for table or enum name of 63 characters. Invalid name: ${result}`);
27
+ }
28
+ return result;
29
+ };
30
+
31
+ //# sourceMappingURL=getTableName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/schema/getTableName.ts"],"sourcesContent":["import type { DBIdentifierName } from 'payload/database'\n\nimport { APIError } from 'payload/errors'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { PostgresAdapter } from '../types.js'\n\ntype Args = {\n adapter: PostgresAdapter\n /** The collection, global or field config **/\n config: {\n dbName?: DBIdentifierName\n enumName?: DBIdentifierName\n name?: string\n slug?: string\n }\n /** Localized tables need to be given the locales suffix */\n locales?: boolean\n /** For nested tables passed for the user custom dbName functions to handle their own iterations */\n parentTableName?: string\n /** For sub tables (array for example) this needs to include the parentTableName */\n prefix?: string\n /** Adds the relationships suffix */\n relationships?: boolean\n /** For tables based on fields that could have both enumName and dbName (ie: select with hasMany), default: 'dbName' */\n target?: 'dbName' | 'enumName'\n throwValidationError?: boolean\n /** Adds the versions suffix, should only be used on the base collection to duplicate suffixing */\n versions?: boolean\n}\n\n/**\n * Used to name database enums and tables\n * Returns the table or enum name for a given entity\n */\nexport const getTableName = ({\n adapter,\n config: { name, slug },\n config,\n locales = false,\n parentTableName,\n prefix = '',\n relationships = false,\n target = 'dbName',\n throwValidationError = false,\n versions = false,\n}: Args): string => {\n let result: string\n let custom = config[target]\n\n if (!custom && target === 'enumName') {\n custom = config['dbName']\n }\n\n if (custom) {\n result = typeof custom === 'function' ? custom({ tableName: parentTableName }) : custom\n } else {\n result = `${prefix}${toSnakeCase(name ?? slug)}`\n }\n\n if (locales) result = `${result}${adapter.localesSuffix}`\n if (versions) result = `_${result}${adapter.versionsSuffix}`\n if (relationships) result = `${result}${adapter.relationshipsSuffix}`\n\n if (!throwValidationError) {\n return result\n }\n\n if (result.length > 63) {\n throw new APIError(\n `Exceeded max identifier length for table or enum name of 63 characters. Invalid name: ${result}`,\n )\n }\n return result\n}\n"],"names":["APIError","toSnakeCase","getTableName","adapter","config","name","slug","locales","parentTableName","prefix","relationships","target","throwValidationError","versions","result","custom","tableName","localesSuffix","versionsSuffix","relationshipsSuffix","length"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,iBAAgB;AACzC,OAAOC,iBAAiB,gBAAe;AA4BvC;;;CAGC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,OAAO,EACPC,QAAQ,EAAEC,IAAI,EAAEC,IAAI,EAAE,EACtBF,MAAM,EACNG,UAAU,KAAK,EACfC,eAAe,EACfC,SAAS,EAAE,EACXC,gBAAgB,KAAK,EACrBC,SAAS,QAAQ,EACjBC,uBAAuB,KAAK,EAC5BC,WAAW,KAAK,EACX;IACL,IAAIC;IACJ,IAAIC,SAASX,MAAM,CAACO,OAAO;IAE3B,IAAI,CAACI,UAAUJ,WAAW,YAAY;QACpCI,SAASX,MAAM,CAAC,SAAS;IAC3B;IAEA,IAAIW,QAAQ;QACVD,SAAS,OAAOC,WAAW,aAAaA,OAAO;YAAEC,WAAWR;QAAgB,KAAKO;IACnF,OAAO;QACLD,SAAS,CAAC,EAAEL,OAAO,EAAER,YAAYI,QAAQC,MAAM,CAAC;IAClD;IAEA,IAAIC,SAASO,SAAS,CAAC,EAAEA,OAAO,EAAEX,QAAQc,aAAa,CAAC,CAAC;IACzD,IAAIJ,UAAUC,SAAS,CAAC,CAAC,EAAEA,OAAO,EAAEX,QAAQe,cAAc,CAAC,CAAC;IAC5D,IAAIR,eAAeI,SAAS,CAAC,EAAEA,OAAO,EAAEX,QAAQgB,mBAAmB,CAAC,CAAC;IAErE,IAAI,CAACP,sBAAsB;QACzB,OAAOE;IACT;IAEA,IAAIA,OAAOM,MAAM,GAAG,IAAI;QACtB,MAAM,IAAIpB,SACR,CAAC,sFAAsF,EAAEc,OAAO,CAAC;IAErG;IACA,OAAOA;AACT,EAAC"}
@@ -23,6 +23,7 @@ type Args = {
23
23
  rootRelationsToBuild?: Map<string, string>;
24
24
  rootTableIDColType: string;
25
25
  rootTableName: string;
26
+ versions: boolean;
26
27
  };
27
28
  type Result = {
28
29
  hasLocalizedField: boolean;
@@ -32,6 +33,6 @@ type Result = {
32
33
  hasManyNumberField: 'index' | boolean;
33
34
  hasManyTextField: 'index' | boolean;
34
35
  };
35
- export declare const traverseFields: ({ adapter, buildNumbers, buildRelationships, buildTexts, columnPrefix, columns, disableNotNull, disableUnique, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, }: Args) => Result;
36
+ export declare const traverseFields: ({ adapter, buildNumbers, buildRelationships, buildTexts, columnPrefix, columns, disableNotNull, disableUnique, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, versions, }: Args) => Result;
36
37
  export {};
37
38
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA2B,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAqBtD,OAAO,KAAK,EAAE,cAAc,EAAU,eAAe,EAAE,MAAM,aAAa,CAAA;AAS1E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,4TAsBxB,IAAI,KAAG,MA6kBT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA2B,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAqBtD,OAAO,KAAK,EAAE,cAAc,EAAU,eAAe,EAAE,MAAM,aAAa,CAAA;AAU1E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,sUAuBxB,IAAI,KAAG,MAknBT,CAAA"}
@@ -6,10 +6,12 @@ import toSnakeCase from 'to-snake-case';
6
6
  import { hasLocalesTable } from '../utilities/hasLocalesTable.js';
7
7
  import { buildTable } from './build.js';
8
8
  import { createIndex } from './createIndex.js';
9
+ import { getTableName } from './getTableName.js';
9
10
  import { idToUUID } from './idToUUID.js';
10
11
  import { parentIDColumnMap } from './parentIDColumnMap.js';
11
12
  import { validateExistingBlockIsIdentical } from './validateExistingBlockIsIdentical.js';
12
- export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName })=>{
13
+ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, versions })=>{
14
+ const throwValidationError = true;
13
15
  let hasLocalizedField = false;
14
16
  let hasLocalizedRelationshipField = false;
15
17
  let hasManyTextField = false;
@@ -128,7 +130,15 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
128
130
  case 'radio':
129
131
  case 'select':
130
132
  {
131
- const enumName = `enum_${newTableName}_${toSnakeCase(field.name)}`;
133
+ const enumName = getTableName({
134
+ adapter,
135
+ config: field,
136
+ parentTableName: newTableName,
137
+ prefix: `enum_${newTableName}_`,
138
+ target: 'enumName',
139
+ throwValidationError,
140
+ versions
141
+ });
132
142
  adapter.enums[enumName] = pgEnum(enumName, field.options.map((option)=>{
133
143
  if (optionIsObject(option)) {
134
144
  return option.value;
@@ -136,7 +146,14 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
136
146
  return option;
137
147
  }));
138
148
  if (field.type === 'select' && field.hasMany) {
139
- const selectTableName = `${newTableName}_${toSnakeCase(field.name)}`;
149
+ const selectTableName = getTableName({
150
+ adapter,
151
+ config: field,
152
+ parentTableName: newTableName,
153
+ prefix: `${newTableName}_`,
154
+ throwValidationError,
155
+ versions
156
+ });
140
157
  const baseColumns = {
141
158
  order: integer('order').notNull(),
142
159
  parent: parentIDColumnMap[parentIDColType]('parent_id').references(()=>adapter.tables[parentTableName].id, {
@@ -162,7 +179,8 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
162
179
  disableNotNull,
163
180
  disableUnique,
164
181
  fields: [],
165
- tableName: selectTableName
182
+ tableName: selectTableName,
183
+ versions
166
184
  });
167
185
  relationsToBuild.set(fieldName, selectTableName);
168
186
  const selectTableRelations = relations(adapter.tables[selectTableName], ({ one })=>{
@@ -192,7 +210,13 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
192
210
  case 'array':
193
211
  {
194
212
  const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
195
- const arrayTableName = `${newTableName}_${toSnakeCase(field.name)}`;
213
+ const arrayTableName = getTableName({
214
+ adapter,
215
+ config: field,
216
+ parentTableName: newTableName,
217
+ prefix: `${newTableName}_`,
218
+ throwValidationError
219
+ });
196
220
  const baseColumns = {
197
221
  _order: integer('_order').notNull(),
198
222
  _parentID: parentIDColumnMap[parentIDColType]('_parent_id').references(()=>adapter.tables[parentTableName].id, {
@@ -218,7 +242,8 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
218
242
  rootRelationships: relationships,
219
243
  rootTableIDColType,
220
244
  rootTableName,
221
- tableName: arrayTableName
245
+ tableName: arrayTableName,
246
+ versions
222
247
  });
223
248
  if (subHasManyTextField) {
224
249
  if (!hasManyTextField || subHasManyTextField === 'index') hasManyTextField = subHasManyTextField;
@@ -239,7 +264,7 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
239
264
  })
240
265
  };
241
266
  if (hasLocalesTable(field.fields)) {
242
- result._locales = many(adapter.tables[`${arrayTableName}_locales`]);
267
+ result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`]);
243
268
  }
244
269
  subRelationsToBuild.forEach((val, key)=>{
245
270
  result[key] = many(adapter.tables[val]);
@@ -253,7 +278,13 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
253
278
  {
254
279
  const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
255
280
  field.blocks.forEach((block)=>{
256
- const blockTableName = `${rootTableName}_blocks_${toSnakeCase(block.slug)}`;
281
+ const blockTableName = getTableName({
282
+ adapter,
283
+ config: block,
284
+ parentTableName: rootTableName,
285
+ prefix: `${rootTableName}_blocks_`,
286
+ throwValidationError
287
+ });
257
288
  if (!adapter.tables[blockTableName]) {
258
289
  const baseColumns = {
259
290
  _order: integer('_order').notNull(),
@@ -282,7 +313,8 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
282
313
  rootRelationships: relationships,
283
314
  rootTableIDColType,
284
315
  rootTableName,
285
- tableName: blockTableName
316
+ tableName: blockTableName,
317
+ versions
286
318
  });
287
319
  if (subHasManyTextField) {
288
320
  if (!hasManyTextField || subHasManyTextField === 'index') hasManyTextField = subHasManyTextField;
@@ -302,7 +334,7 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
302
334
  })
303
335
  };
304
336
  if (hasLocalesTable(block.fields)) {
305
- result._locales = many(adapter.tables[`${blockTableName}_locales`]);
337
+ result._locales = many(adapter.tables[`${blockTableName}${adapter.localesSuffix}`]);
306
338
  }
307
339
  subRelationsToBuild.forEach((val, key)=>{
308
340
  result[key] = many(adapter.tables[val]);
@@ -310,7 +342,7 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
310
342
  return result;
311
343
  });
312
344
  adapter.relations[`relations_${blockTableName}`] = blockTableRelations;
313
- } else if (process.env.NODE_ENV !== 'production') {
345
+ } else if (process.env.NODE_ENV !== 'production' && !versions) {
314
346
  validateExistingBlockIsIdentical({
315
347
  block,
316
348
  localized: field.localized,
@@ -318,6 +350,7 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
318
350
  table: adapter.tables[blockTableName]
319
351
  });
320
352
  }
353
+ adapter.blockTableNames[`${rootTableName}.${toSnakeCase(block.slug)}`] = blockTableName;
321
354
  rootRelationsToBuild.set(`_blocks_${block.slug}`, blockTableName);
322
355
  });
323
356
  break;
@@ -347,7 +380,8 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
347
380
  relationships,
348
381
  rootRelationsToBuild,
349
382
  rootTableIDColType,
350
- rootTableName
383
+ rootTableName,
384
+ versions
351
385
  });
352
386
  if (groupHasLocalizedField) hasLocalizedField = true;
353
387
  if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
@@ -379,7 +413,8 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
379
413
  relationships,
380
414
  rootRelationsToBuild,
381
415
  rootTableIDColType,
382
- rootTableName
416
+ rootTableName,
417
+ versions
383
418
  });
384
419
  if (groupHasLocalizedField) hasLocalizedField = true;
385
420
  if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
@@ -416,7 +451,8 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
416
451
  relationships,
417
452
  rootRelationsToBuild,
418
453
  rootTableIDColType,
419
- rootTableName
454
+ rootTableName,
455
+ versions
420
456
  });
421
457
  if (tabHasLocalizedField) hasLocalizedField = true;
422
458
  if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
@@ -451,7 +487,8 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
451
487
  relationships,
452
488
  rootRelationsToBuild,
453
489
  rootTableIDColType,
454
- rootTableName
490
+ rootTableName,
491
+ versions
455
492
  });
456
493
  if (rowHasLocalizedField) hasLocalizedField = true;
457
494
  if (rowHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;