@payloadcms/db-postgres 3.0.0-beta.7 → 3.0.0-canary.92e4997
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/count.d.ts +3 -0
- package/dist/count.d.ts.map +1 -0
- package/dist/count.js +50 -0
- package/dist/count.js.map +1 -0
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +3 -5
- package/dist/create.js.map +1 -1
- package/dist/createGlobal.d.ts.map +1 -1
- package/dist/createGlobal.js +3 -5
- package/dist/createGlobal.js.map +1 -1
- package/dist/createGlobalVersion.d.ts +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +2 -6
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +9 -13
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteMany.d.ts.map +1 -1
- package/dist/deleteMany.js +2 -5
- package/dist/deleteMany.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +2 -5
- package/dist/deleteOne.js.map +1 -1
- package/dist/deleteVersions.d.ts.map +1 -1
- package/dist/deleteVersions.js +2 -6
- package/dist/deleteVersions.js.map +1 -1
- package/dist/destroy.d.ts.map +1 -1
- package/dist/destroy.js +7 -7
- package/dist/destroy.js.map +1 -1
- package/dist/find/buildFindManyArgs.js +2 -2
- package/dist/find/buildFindManyArgs.js.map +1 -1
- package/dist/find/findMany.d.ts.map +1 -1
- package/dist/find/findMany.js +1 -1
- package/dist/find/findMany.js.map +1 -1
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +4 -20
- package/dist/find/traverseFields.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +2 -5
- package/dist/find.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +2 -5
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +2 -6
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +2 -5
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +2 -6
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +9 -7
- package/dist/init.js.map +1 -1
- package/dist/migrate.js.map +1 -1
- package/dist/migrateDown.js.map +1 -1
- package/dist/migrateFresh.js.map +1 -1
- package/dist/migrateRefresh.js.map +1 -1
- package/dist/migrateReset.js.map +1 -1
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +95 -62
- package/dist/queries/getTableColumnFromPath.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +2 -6
- package/dist/queryDrafts.js.map +1 -1
- package/dist/schema/build.d.ts +3 -2
- package/dist/schema/build.d.ts.map +1 -1
- package/dist/schema/build.js +77 -42
- package/dist/schema/build.js.map +1 -1
- package/dist/schema/{getTableName.d.ts → createTableName.d.ts} +5 -7
- package/dist/schema/createTableName.d.ts.map +1 -0
- package/dist/schema/createTableName.js +31 -0
- package/dist/schema/createTableName.js.map +1 -0
- package/dist/schema/traverseFields.d.ts.map +1 -1
- package/dist/schema/traverseFields.js +45 -24
- package/dist/schema/traverseFields.js.map +1 -1
- package/dist/schema/validateExistingBlockIsIdentical.d.ts +2 -1
- package/dist/schema/validateExistingBlockIsIdentical.d.ts.map +1 -1
- package/dist/schema/validateExistingBlockIsIdentical.js +13 -7
- package/dist/schema/validateExistingBlockIsIdentical.js.map +1 -1
- package/dist/transform/write/array.d.ts.map +1 -1
- package/dist/transform/write/array.js.map +1 -1
- package/dist/transform/write/blocks.js +1 -1
- package/dist/transform/write/blocks.js.map +1 -1
- package/dist/transform/write/traverseFields.js +2 -2
- package/dist/transform/write/traverseFields.js.map +1 -1
- package/dist/types.d.ts +4 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +2 -5
- package/dist/update.js.map +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +2 -5
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +2 -6
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +2 -6
- package/dist/updateVersion.js.map +1 -1
- package/dist/upsertRow/index.d.ts.map +1 -1
- package/dist/upsertRow/index.js +6 -5
- package/dist/upsertRow/index.js.map +1 -1
- package/dist/upsertRow/insertArrays.d.ts.map +1 -1
- package/dist/upsertRow/insertArrays.js +3 -3
- package/dist/upsertRow/insertArrays.js.map +1 -1
- package/dist/upsertRow/types.d.ts +2 -2
- package/dist/upsertRow/types.d.ts.map +1 -1
- package/dist/upsertRow/types.js.map +1 -1
- package/package.json +21 -25
- package/dist/schema/getTableName.d.ts.map +0 -1
- package/dist/schema/getTableName.js +0 -31
- package/dist/schema/getTableName.js.map +0 -1
- package/src/index.ts +0 -156
package/dist/schema/build.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
/* eslint-disable no-param-reassign */ import { relations } from 'drizzle-orm';
|
2
|
-
import { index, integer, numeric, serial, timestamp, unique, varchar } from 'drizzle-orm/pg-core';
|
3
|
-
import
|
2
|
+
import { foreignKey, index, integer, numeric, serial, timestamp, unique, varchar } from 'drizzle-orm/pg-core';
|
3
|
+
import toSnakeCase from 'to-snake-case';
|
4
|
+
import { createTableName } from './createTableName.js';
|
4
5
|
import { parentIDColumnMap } from './parentIDColumnMap.js';
|
5
6
|
import { setColumnID } from './setColumnID.js';
|
6
7
|
import { traverseFields } from './traverseFields.js';
|
@@ -8,12 +9,6 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
8
9
|
const rootTableName = incomingRootTableName || tableName;
|
9
10
|
const columns = baseColumns;
|
10
11
|
const indexes = {};
|
11
|
-
let hasLocalizedField = false;
|
12
|
-
let hasLocalizedRelationshipField = false;
|
13
|
-
let hasManyTextField = false;
|
14
|
-
let hasManyNumberField = false;
|
15
|
-
let hasLocalizedManyTextField = false;
|
16
|
-
let hasLocalizedManyNumberField = false;
|
17
12
|
const localesColumns = {};
|
18
13
|
const localesIndexes = {};
|
19
14
|
let localesTable;
|
@@ -29,7 +24,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
29
24
|
columns,
|
30
25
|
fields
|
31
26
|
});
|
32
|
-
|
27
|
+
const { hasLocalizedField, hasLocalizedManyNumberField, hasLocalizedManyTextField, hasLocalizedRelationshipField, hasManyNumberField, hasManyTextField } = traverseFields({
|
33
28
|
adapter,
|
34
29
|
buildNumbers,
|
35
30
|
buildRelationships,
|
@@ -49,7 +44,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
49
44
|
rootTableIDColType: rootTableIDColType || idColType,
|
50
45
|
rootTableName,
|
51
46
|
versions
|
52
|
-
})
|
47
|
+
});
|
53
48
|
if (timestamps) {
|
54
49
|
columns.createdAt = timestamp('created_at', {
|
55
50
|
mode: 'string',
|
@@ -67,25 +62,33 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
67
62
|
config[key] = func(cols);
|
68
63
|
return config;
|
69
64
|
}, {});
|
70
|
-
|
65
|
+
const result = Object.entries(indexes).reduce((acc, [colName, func])=>{
|
71
66
|
acc[colName] = func(cols);
|
72
67
|
return acc;
|
73
68
|
}, extraConfig);
|
69
|
+
return result;
|
74
70
|
});
|
75
71
|
adapter.tables[tableName] = table;
|
76
72
|
if (hasLocalizedField) {
|
77
73
|
const localeTableName = `${tableName}${adapter.localesSuffix}`;
|
78
74
|
localesColumns.id = serial('id').primaryKey();
|
79
75
|
localesColumns._locale = adapter.enums.enum__locales('_locale').notNull();
|
80
|
-
localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').
|
81
|
-
onDelete: 'cascade'
|
82
|
-
}).notNull();
|
76
|
+
localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').notNull();
|
83
77
|
localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols)=>{
|
84
78
|
return Object.entries(localesIndexes).reduce((acc, [colName, func])=>{
|
85
79
|
acc[colName] = func(cols);
|
86
80
|
return acc;
|
87
81
|
}, {
|
88
|
-
_localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(cols._locale, cols._parentID)
|
82
|
+
_localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(cols._locale, cols._parentID),
|
83
|
+
_parentIdFk: foreignKey({
|
84
|
+
name: `${localeTableName}_parent_id_fk`,
|
85
|
+
columns: [
|
86
|
+
cols._parentID
|
87
|
+
],
|
88
|
+
foreignColumns: [
|
89
|
+
table.id
|
90
|
+
]
|
91
|
+
}).onDelete('cascade')
|
89
92
|
});
|
90
93
|
});
|
91
94
|
adapter.tables[localeTableName] = localesTable;
|
@@ -106,9 +109,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
106
109
|
const columns = {
|
107
110
|
id: serial('id').primaryKey(),
|
108
111
|
order: integer('order').notNull(),
|
109
|
-
parent: parentIDColumnMap[idColType]('parent_id').
|
110
|
-
onDelete: 'cascade'
|
111
|
-
}).notNull(),
|
112
|
+
parent: parentIDColumnMap[idColType]('parent_id').notNull(),
|
112
113
|
path: varchar('path').notNull(),
|
113
114
|
text: varchar('text')
|
114
115
|
};
|
@@ -116,16 +117,25 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
116
117
|
columns.locale = adapter.enums.enum__locales('locale');
|
117
118
|
}
|
118
119
|
textsTable = adapter.pgSchema.table(textsTableName, columns, (cols)=>{
|
119
|
-
const
|
120
|
-
orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent)
|
120
|
+
const config = {
|
121
|
+
orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),
|
122
|
+
parentFk: foreignKey({
|
123
|
+
name: `${textsTableName}_parent_fk`,
|
124
|
+
columns: [
|
125
|
+
cols.parent
|
126
|
+
],
|
127
|
+
foreignColumns: [
|
128
|
+
table.id
|
129
|
+
]
|
130
|
+
}).onDelete('cascade')
|
121
131
|
};
|
122
132
|
if (hasManyTextField === 'index') {
|
123
|
-
|
133
|
+
config.text_idx = index(`${textsTableName}_text_idx`).on(cols.text);
|
124
134
|
}
|
125
135
|
if (hasLocalizedManyTextField) {
|
126
|
-
|
136
|
+
config.localeParent = index(`${textsTableName}_locale_parent`).on(cols.locale, cols.parent);
|
127
137
|
}
|
128
|
-
return
|
138
|
+
return config;
|
129
139
|
});
|
130
140
|
adapter.tables[textsTableName] = textsTable;
|
131
141
|
const textsTableRelations = relations(textsTable, ({ one })=>({
|
@@ -146,25 +156,32 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
146
156
|
id: serial('id').primaryKey(),
|
147
157
|
number: numeric('number'),
|
148
158
|
order: integer('order').notNull(),
|
149
|
-
parent: parentIDColumnMap[idColType]('parent_id').
|
150
|
-
onDelete: 'cascade'
|
151
|
-
}).notNull(),
|
159
|
+
parent: parentIDColumnMap[idColType]('parent_id').notNull(),
|
152
160
|
path: varchar('path').notNull()
|
153
161
|
};
|
154
162
|
if (hasLocalizedManyNumberField) {
|
155
163
|
columns.locale = adapter.enums.enum__locales('locale');
|
156
164
|
}
|
157
165
|
numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols)=>{
|
158
|
-
const
|
159
|
-
orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent)
|
166
|
+
const config = {
|
167
|
+
orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),
|
168
|
+
parentFk: foreignKey({
|
169
|
+
name: `${numbersTableName}_parent_fk`,
|
170
|
+
columns: [
|
171
|
+
cols.parent
|
172
|
+
],
|
173
|
+
foreignColumns: [
|
174
|
+
table.id
|
175
|
+
]
|
176
|
+
}).onDelete('cascade')
|
160
177
|
};
|
161
178
|
if (hasManyNumberField === 'index') {
|
162
|
-
|
179
|
+
config.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number);
|
163
180
|
}
|
164
181
|
if (hasLocalizedManyNumberField) {
|
165
|
-
|
182
|
+
config.localeParent = index(`${numbersTableName}_locale_parent`).on(cols.locale, cols.parent);
|
166
183
|
}
|
167
|
-
return
|
184
|
+
return config;
|
168
185
|
});
|
169
186
|
adapter.tables[numbersTableName] = numbersTable;
|
170
187
|
const numbersTableRelations = relations(numbersTable, ({ one })=>({
|
@@ -184,17 +201,17 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
184
201
|
const relationshipColumns = {
|
185
202
|
id: serial('id').primaryKey(),
|
186
203
|
order: integer('order'),
|
187
|
-
parent: parentIDColumnMap[idColType]('parent_id').
|
188
|
-
onDelete: 'cascade'
|
189
|
-
}).notNull(),
|
204
|
+
parent: parentIDColumnMap[idColType]('parent_id').notNull(),
|
190
205
|
path: varchar('path').notNull()
|
191
206
|
};
|
192
207
|
if (hasLocalizedRelationshipField) {
|
193
208
|
relationshipColumns.locale = adapter.enums.enum__locales('locale');
|
194
209
|
}
|
210
|
+
const relationExtraConfig = {};
|
211
|
+
const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`;
|
195
212
|
relationships.forEach((relationTo)=>{
|
196
213
|
const relationshipConfig = adapter.payload.collections[relationTo].config;
|
197
|
-
const formattedRelationTo =
|
214
|
+
const formattedRelationTo = createTableName({
|
198
215
|
adapter,
|
199
216
|
config: relationshipConfig,
|
200
217
|
throwValidationError: true
|
@@ -203,17 +220,35 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
203
220
|
const relatedCollectionCustomIDType = adapter.payload.collections[relationshipConfig.slug]?.customIDType;
|
204
221
|
if (relatedCollectionCustomIDType === 'number') colType = 'numeric';
|
205
222
|
if (relatedCollectionCustomIDType === 'text') colType = 'varchar';
|
206
|
-
relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](`${formattedRelationTo}_id`)
|
207
|
-
|
208
|
-
|
223
|
+
relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](`${formattedRelationTo}_id`);
|
224
|
+
relationExtraConfig[`${relationTo}IdFk`] = (cols)=>foreignKey({
|
225
|
+
name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`,
|
226
|
+
columns: [
|
227
|
+
cols[`${relationTo}ID`]
|
228
|
+
],
|
229
|
+
foreignColumns: [
|
230
|
+
adapter.tables[formattedRelationTo].id
|
231
|
+
]
|
232
|
+
}).onDelete('cascade');
|
209
233
|
});
|
210
|
-
const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`;
|
211
234
|
relationshipsTable = adapter.pgSchema.table(relationshipsTableName, relationshipColumns, (cols)=>{
|
212
|
-
const result = {
|
235
|
+
const result = Object.entries(relationExtraConfig).reduce((config, [key, func])=>{
|
236
|
+
config[key] = func(cols);
|
237
|
+
return config;
|
238
|
+
}, {
|
213
239
|
order: index(`${relationshipsTableName}_order_idx`).on(cols.order),
|
240
|
+
parentFk: foreignKey({
|
241
|
+
name: `${relationshipsTableName}_parent_fk`,
|
242
|
+
columns: [
|
243
|
+
cols.parent
|
244
|
+
],
|
245
|
+
foreignColumns: [
|
246
|
+
table.id
|
247
|
+
]
|
248
|
+
}).onDelete('cascade'),
|
214
249
|
parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),
|
215
250
|
pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path)
|
216
|
-
};
|
251
|
+
});
|
217
252
|
if (hasLocalizedRelationshipField) {
|
218
253
|
result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale);
|
219
254
|
}
|
@@ -233,7 +268,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
233
268
|
})
|
234
269
|
};
|
235
270
|
relationships.forEach((relationTo)=>{
|
236
|
-
const relatedTableName =
|
271
|
+
const relatedTableName = createTableName({
|
237
272
|
adapter,
|
238
273
|
config: adapter.payload.collections[relationTo].config,
|
239
274
|
throwValidationError: true
|
package/dist/schema/build.js.map
CHANGED
@@ -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'\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\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') colType = 'numeric'\n if (relatedCollectionCustomIDType === '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","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","relatedCollectionCustomIDType","slug","customIDType","relationshipsTableName","relationshipsSuffix","result","parentIdx","pathIdx","localeIdx","relationshipsTableRelations","relationName","relatedTableName","idColumnName","tableRelations","many","val","_locales","_texts","_numbers","_rels"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","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 ForeignKeyBuilder,\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 {\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 { GenericColumns, GenericTable, IDType, PostgresAdapter } from '../types.js'\n\nimport { createTableName } from './createTableName.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\nexport type BaseExtraConfig = Record<\n string,\n (cols: GenericColumns) => ForeignKeyBuilder | IndexBuilder | UniqueConstraintBuilder\n>\n\ntype Args = {\n adapter: PostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n baseExtraConfig?: BaseExtraConfig\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 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 const {\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 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) {\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 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').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(cols.locale, cols.parent)\n }\n\n return config\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').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 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').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\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\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') colType = 'numeric'\n if (relatedCollectionCustomIDType === 'text') colType = 'varchar'\n\n relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](\n `${formattedRelationTo}_id`,\n )\n\n relationExtraConfig[`${relationTo}IdFk`] = (cols) =>\n foreignKey({\n name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`,\n columns: [cols[`${relationTo}ID`]],\n foreignColumns: [adapter.tables[formattedRelationTo].id],\n }).onDelete('cascade')\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 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 = 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 })\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","foreignKey","index","integer","numeric","serial","timestamp","unique","varchar","toSnakeCase","createTableName","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","buildNumbers","buildRelationships","buildTexts","disableNotNull","disableUnique","fields","rootRelationsToBuild","rootRelationships","rootTableIDColType","rootTableName","incomingRootTableName","tableName","timestamps","versions","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","key","func","result","acc","colName","tables","localeTableName","localesSuffix","id","primaryKey","_locale","enums","enum__locales","_parentID","_localeParent","on","_parentIdFk","name","foreignColumns","onDelete","localesTableRelations","one","references","textsTableName","order","parent","path","text","locale","orderParentIdx","parentFk","text_idx","localeParent","textsTableRelations","numbersTableName","number","numberIdx","numbersTableRelations","size","relationshipColumns","relationExtraConfig","relationshipsTableName","relationshipsSuffix","forEach","relationTo","relationshipConfig","payload","collections","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","parentIdx","pathIdx","localeIdx","relationshipsTableRelations","relationName","relatedTableName","idColumnName","tableRelations","many","val","_locales","_texts","_numbers","_rels"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,oCAAoC,GAWpC,SAASA,SAAS,QAAQ,cAAa;AACvC,SACEC,UAAU,EACVC,KAAK,EACLC,OAAO,EACPC,OAAO,EACPC,MAAM,EACNC,SAAS,EACTC,MAAM,EACNC,OAAO,QACF,sBAAqB;AAC5B,OAAOC,iBAAiB,gBAAe;AAIvC,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,iBAAiB,QAAQ,yBAAwB;AAC1D,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,cAAc,QAAQ,sBAAqB;AAgCpD,OAAO,MAAMC,aAAa,CAAC,EACzBC,OAAO,EACPC,cAAc,CAAC,CAAC,EAChBC,kBAAkB,CAAC,CAAC,EACpBC,YAAY,EACZC,kBAAkB,EAClBC,UAAU,EACVC,cAAc,EACdC,gBAAgB,KAAK,EACrBC,MAAM,EACNC,oBAAoB,EACpBC,iBAAiB,EACjBC,kBAAkB,EAClBC,eAAeC,qBAAqB,EACpCC,SAAS,EACTC,UAAU,EACVC,QAAQ,EACH;IACL,MAAMJ,gBAAgBC,yBAAyBC;IAC/C,MAAMG,UAA2ChB;IACjD,MAAMiB,UAAkE,CAAC;IAEzE,MAAMC,iBAAkD,CAAC;IACzD,MAAMC,iBAAyE,CAAC;IAChF,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJ,uCAAuC;IACvC,MAAMC,gBAA6Bd,qBAAqB,IAAIe;IAE5D,IAAIC;IAEJ,oBAAoB;IACpB,MAAMC,mBAAwC,IAAIC;IAElD,MAAMC,YAAoBhC,YAAY;QAAEG;QAASiB;QAAST;IAAO;IAEjE,MAAM,EACJsB,iBAAiB,EACjBC,2BAA2B,EAC3BC,yBAAyB,EACzBC,6BAA6B,EAC7BC,kBAAkB,EAClBC,gBAAgB,EACjB,GAAGrC,eAAe;QACjBE;QACAG;QACAC;QACAC;QACAY;QACAX;QACAC;QACAC;QACAU;QACAC;QACAC;QACAgB,cAActB;QACduB,iBAAiBvB;QACjBa;QACAH;QACAf,sBAAsBA,wBAAwBkB;QAC9ChB,oBAAoBA,sBAAsBkB;QAC1CjB;QACAI;IACF;IAEA,IAAID,YAAY;QACdE,QAAQqB,SAAS,GAAG/C,UAAU,cAAc;YAC1CgD,MAAM;YACNC,WAAW;YACXC,cAAc;QAChB,GACGC,UAAU,GACVC,OAAO;QACV1B,QAAQ2B,SAAS,GAAGrD,UAAU,cAAc;YAC1CgD,MAAM;YACNC,WAAW;YACXC,cAAc;QAChB,GACGC,UAAU,GACVC,OAAO;IACZ;IAEA,MAAME,QAAQ7C,QAAQ8C,QAAQ,CAACD,KAAK,CAAC/B,WAAWG,SAAS,CAAC8B;QACxD,MAAMC,cAAcC,OAAOC,OAAO,CAAChD,iBAAiBiD,MAAM,CAAC,CAACC,QAAQ,CAACC,KAAKC,KAAK;YAC7EF,MAAM,CAACC,IAAI,GAAGC,KAAKP;YACnB,OAAOK;QACT,GAAG,CAAC;QAEJ,MAAMG,SAASN,OAAOC,OAAO,CAAChC,SAASiC,MAAM,CAAC,CAACK,KAAK,CAACC,SAASH,KAAK;YACjEE,GAAG,CAACC,QAAQ,GAAGH,KAAKP;YACpB,OAAOS;QACT,GAAGR;QAEH,OAAOO;IACT;IAEAvD,QAAQ0D,MAAM,CAAC5C,UAAU,GAAG+B;IAE5B,IAAIf,mBAAmB;QACrB,MAAM6B,kBAAkB,CAAC,EAAE7C,UAAU,EAAEd,QAAQ4D,aAAa,CAAC,CAAC;QAC9DzC,eAAe0C,EAAE,GAAGvE,OAAO,MAAMwE,UAAU;QAC3C3C,eAAe4C,OAAO,GAAG/D,QAAQgE,KAAK,CAACC,aAAa,CAAC,WAAWtB,OAAO;QACvExB,eAAe+C,SAAS,GAAGtE,iBAAiB,CAACiC,UAAU,CAAC,cAAcc,OAAO;QAE7EtB,eAAerB,QAAQ8C,QAAQ,CAACD,KAAK,CAACc,iBAAiBxC,gBAAgB,CAAC4B;YACtE,OAAOE,OAAOC,OAAO,CAAC9B,gBAAgB+B,MAAM,CAC1C,CAACK,KAAK,CAACC,SAASH,KAAK;gBACnBE,GAAG,CAACC,QAAQ,GAAGH,KAAKP;gBACpB,OAAOS;YACT,GACA;gBACEW,eAAe3E,OAAO,CAAC,EAAEmE,gBAAgB,wBAAwB,CAAC,EAAES,EAAE,CACpErB,KAAKgB,OAAO,EACZhB,KAAKmB,SAAS;gBAEhBG,aAAanF,WAAW;oBACtBoF,MAAM,CAAC,EAAEX,gBAAgB,aAAa,CAAC;oBACvC1C,SAAS;wBAAC8B,KAAKmB,SAAS;qBAAC;oBACzBK,gBAAgB;wBAAC1B,MAAMgB,EAAE;qBAAC;gBAC5B,GAAGW,QAAQ,CAAC;YACd;QAEJ;QAEAxE,QAAQ0D,MAAM,CAACC,gBAAgB,GAAGtC;QAElC,MAAMoD,wBAAwBxF,UAAUoC,cAAc,CAAC,EAAEqD,GAAG,EAAE,GAAM,CAAA;gBAClER,WAAWQ,IAAI7B,OAAO;oBACpBrC,QAAQ;wBAACa,aAAa6C,SAAS;qBAAC;oBAChCS,YAAY;wBAAC9B,MAAMgB,EAAE;qBAAC;gBACxB;YACF,CAAA;QAEA7D,QAAQf,SAAS,CAAC,CAAC,UAAU,EAAE0E,gBAAgB,CAAC,CAAC,GAAGc;IACtD;IAEA,IAAItC,oBAAoB9B,YAAY;QAClC,MAAMuE,iBAAiB,CAAC,EAAEhE,cAAc,MAAM,CAAC;QAC/C,MAAMK,UAA2C;YAC/C4C,IAAIvE,OAAO,MAAMwE,UAAU;YAC3Be,OAAOzF,QAAQ,SAASuD,OAAO;YAC/BmC,QAAQlF,iBAAiB,CAACiC,UAAU,CAAC,aAAac,OAAO;YACzDoC,MAAMtF,QAAQ,QAAQkD,OAAO;YAC7BqC,MAAMvF,QAAQ;QAChB;QAEA,IAAIuC,2BAA2B;YAC7Bf,QAAQgE,MAAM,GAAGjF,QAAQgE,KAAK,CAACC,aAAa,CAAC;QAC/C;QAEA3C,aAAatB,QAAQ8C,QAAQ,CAACD,KAAK,CAAC+B,gBAAgB3D,SAAS,CAAC8B;YAC5D,MAAMK,SAA2D;gBAC/D8B,gBAAgB/F,MAAM,CAAC,EAAEyF,eAAe,iBAAiB,CAAC,EAAER,EAAE,CAACrB,KAAK8B,KAAK,EAAE9B,KAAK+B,MAAM;gBACtFK,UAAUjG,WAAW;oBACnBoF,MAAM,CAAC,EAAEM,eAAe,UAAU,CAAC;oBACnC3D,SAAS;wBAAC8B,KAAK+B,MAAM;qBAAC;oBACtBP,gBAAgB;wBAAC1B,MAAMgB,EAAE;qBAAC;gBAC5B,GAAGW,QAAQ,CAAC;YACd;YAEA,IAAIrC,qBAAqB,SAAS;gBAChCiB,OAAOgC,QAAQ,GAAGjG,MAAM,CAAC,EAAEyF,eAAe,SAAS,CAAC,EAAER,EAAE,CAACrB,KAAKiC,IAAI;YACpE;YAEA,IAAIhD,2BAA2B;gBAC7BoB,OAAOiC,YAAY,GAAGlG,MAAM,CAAC,EAAEyF,eAAe,cAAc,CAAC,EAAER,EAAE,CAACrB,KAAKkC,MAAM,EAAElC,KAAK+B,MAAM;YAC5F;YAEA,OAAO1B;QACT;QAEApD,QAAQ0D,MAAM,CAACkB,eAAe,GAAGtD;QAEjC,MAAMgE,sBAAsBrG,UAAUqC,YAAY,CAAC,EAAEoD,GAAG,EAAE,GAAM,CAAA;gBAC9DI,QAAQJ,IAAI7B,OAAO;oBACjBrC,QAAQ;wBAACc,WAAWwD,MAAM;qBAAC;oBAC3BH,YAAY;wBAAC9B,MAAMgB,EAAE;qBAAC;gBACxB;YACF,CAAA;QAEA7D,QAAQf,SAAS,CAAC,CAAC,UAAU,EAAE2F,eAAe,CAAC,CAAC,GAAGU;IACrD;IAEA,IAAIpD,sBAAsB/B,cAAc;QACtC,MAAMoF,mBAAmB,CAAC,EAAE3E,cAAc,QAAQ,CAAC;QACnD,MAAMK,UAA2C;YAC/C4C,IAAIvE,OAAO,MAAMwE,UAAU;YAC3B0B,QAAQnG,QAAQ;YAChBwF,OAAOzF,QAAQ,SAASuD,OAAO;YAC/BmC,QAAQlF,iBAAiB,CAACiC,UAAU,CAAC,aAAac,OAAO;YACzDoC,MAAMtF,QAAQ,QAAQkD,OAAO;QAC/B;QAEA,IAAIZ,6BAA6B;YAC/Bd,QAAQgE,MAAM,GAAGjF,QAAQgE,KAAK,CAACC,aAAa,CAAC;QAC/C;QAEA1C,eAAevB,QAAQ8C,QAAQ,CAACD,KAAK,CAAC0C,kBAAkBtE,SAAS,CAAC8B;YAChE,MAAMK,SAA2D;gBAC/D8B,gBAAgB/F,MAAM,CAAC,EAAEoG,iBAAiB,iBAAiB,CAAC,EAAEnB,EAAE,CAACrB,KAAK8B,KAAK,EAAE9B,KAAK+B,MAAM;gBACxFK,UAAUjG,WAAW;oBACnBoF,MAAM,CAAC,EAAEiB,iBAAiB,UAAU,CAAC;oBACrCtE,SAAS;wBAAC8B,KAAK+B,MAAM;qBAAC;oBACtBP,gBAAgB;wBAAC1B,MAAMgB,EAAE;qBAAC;gBAC5B,GAAGW,QAAQ,CAAC;YACd;YAEA,IAAItC,uBAAuB,SAAS;gBAClCkB,OAAOqC,SAAS,GAAGtG,MAAM,CAAC,EAAEoG,iBAAiB,WAAW,CAAC,EAAEnB,EAAE,CAACrB,KAAKyC,MAAM;YAC3E;YAEA,IAAIzD,6BAA6B;gBAC/BqB,OAAOiC,YAAY,GAAGlG,MAAM,CAAC,EAAEoG,iBAAiB,cAAc,CAAC,EAAEnB,EAAE,CACjErB,KAAKkC,MAAM,EACXlC,KAAK+B,MAAM;YAEf;YAEA,OAAO1B;QACT;QAEApD,QAAQ0D,MAAM,CAAC6B,iBAAiB,GAAGhE;QAEnC,MAAMmE,wBAAwBzG,UAAUsC,cAAc,CAAC,EAAEmD,GAAG,EAAE,GAAM,CAAA;gBAClEI,QAAQJ,IAAI7B,OAAO;oBACjBrC,QAAQ;wBAACe,aAAauD,MAAM;qBAAC;oBAC7BH,YAAY;wBAAC9B,MAAMgB,EAAE;qBAAC;gBACxB;YACF,CAAA;QAEA7D,QAAQf,SAAS,CAAC,CAAC,UAAU,EAAEsG,iBAAiB,CAAC,CAAC,GAAGG;IACvD;IAEA,IAAItF,oBAAoB;QACtB,IAAIoB,cAAcmE,IAAI,EAAE;YACtB,MAAMC,sBAAuD;gBAC3D/B,IAAIvE,OAAO,MAAMwE,UAAU;gBAC3Be,OAAOzF,QAAQ;gBACf0F,QAAQlF,iBAAiB,CAACiC,UAAU,CAAC,aAAac,OAAO;gBACzDoC,MAAMtF,QAAQ,QAAQkD,OAAO;YAC/B;YAEA,IAAIV,+BAA+B;gBACjC2D,oBAAoBX,MAAM,GAAGjF,QAAQgE,KAAK,CAACC,aAAa,CAAC;YAC3D;YAEA,MAAM4B,sBAAuC,CAAC;YAE9C,MAAMC,yBAAyB,CAAC,EAAEhF,UAAU,EAAEd,QAAQ+F,mBAAmB,CAAC,CAAC;YAE3EvE,cAAcwE,OAAO,CAAC,CAACC;gBACrB,MAAMC,qBAAqBlG,QAAQmG,OAAO,CAACC,WAAW,CAACH,WAAW,CAAC7C,MAAM;gBACzE,MAAMiD,sBAAsB1G,gBAAgB;oBAC1CK;oBACAoD,QAAQ8C;oBACRI,sBAAsB;gBACxB;gBACA,IAAIC,UAAUvG,QAAQwG,MAAM,KAAK,SAAS,SAAS;gBAEnD,MAAMC,gCACJzG,QAAQmG,OAAO,CAACC,WAAW,CAACF,mBAAmBQ,IAAI,CAAC,EAAEC;gBAExD,IAAIF,kCAAkC,UAAUF,UAAU;gBAC1D,IAAIE,kCAAkC,QAAQF,UAAU;gBAExDX,mBAAmB,CAAC,CAAC,EAAEK,WAAW,EAAE,CAAC,CAAC,GAAGrG,iBAAiB,CAAC2G,QAAQ,CACjE,CAAC,EAAEF,oBAAoB,GAAG,CAAC;gBAG7BR,mBAAmB,CAAC,CAAC,EAAEI,WAAW,IAAI,CAAC,CAAC,GAAG,CAAClD,OAC1C7D,WAAW;wBACToF,MAAM,CAAC,EAAEwB,uBAAuB,CAAC,EAAEpG,YAAYuG,YAAY,GAAG,CAAC;wBAC/DhF,SAAS;4BAAC8B,IAAI,CAAC,CAAC,EAAEkD,WAAW,EAAE,CAAC,CAAC;yBAAC;wBAClC1B,gBAAgB;4BAACvE,QAAQ0D,MAAM,CAAC2C,oBAAoB,CAACxC,EAAE;yBAAC;oBAC1D,GAAGW,QAAQ,CAAC;YAChB;YAEA9C,qBAAqB1B,QAAQ8C,QAAQ,CAACD,KAAK,CACzCiD,wBACAF,qBACA,CAAC7C;gBACC,MAAMQ,SAA2DN,OAAOC,OAAO,CAC7E2C,qBACA1C,MAAM,CACN,CAACC,QAAQ,CAACC,KAAKC,KAAK;oBAClBF,MAAM,CAACC,IAAI,GAAGC,KAAKP;oBACnB,OAAOK;gBACT,GACA;oBACEyB,OAAO1F,MAAM,CAAC,EAAE2G,uBAAuB,UAAU,CAAC,EAAE1B,EAAE,CAACrB,KAAK8B,KAAK;oBACjEM,UAAUjG,WAAW;wBACnBoF,MAAM,CAAC,EAAEwB,uBAAuB,UAAU,CAAC;wBAC3C7E,SAAS;4BAAC8B,KAAK+B,MAAM;yBAAC;wBACtBP,gBAAgB;4BAAC1B,MAAMgB,EAAE;yBAAC;oBAC5B,GAAGW,QAAQ,CAAC;oBACZoC,WAAWzH,MAAM,CAAC,EAAE2G,uBAAuB,WAAW,CAAC,EAAE1B,EAAE,CAACrB,KAAK+B,MAAM;oBACvE+B,SAAS1H,MAAM,CAAC,EAAE2G,uBAAuB,SAAS,CAAC,EAAE1B,EAAE,CAACrB,KAAKgC,IAAI;gBACnE;gBAGF,IAAI9C,+BAA+B;oBACjCsB,OAAOuD,SAAS,GAAG3H,MAAM,CAAC,EAAE2G,uBAAuB,WAAW,CAAC,EAAE1B,EAAE,CAACrB,KAAKkC,MAAM;gBACjF;gBAEA,OAAO1B;YACT;YAGFvD,QAAQ0D,MAAM,CAACoC,uBAAuB,GAAGpE;YAEzC,MAAMqF,8BAA8B9H,UAAUyC,oBAAoB,CAAC,EAAEgD,GAAG,EAAE;gBACxE,MAAMnB,SAA2C;oBAC/CuB,QAAQJ,IAAI7B,OAAO;wBACjBrC,QAAQ;4BAACkB,mBAAmBoD,MAAM;yBAAC;wBACnCH,YAAY;4BAAC9B,MAAMgB,EAAE;yBAAC;wBACtBmD,cAAc;oBAChB;gBACF;gBAEAxF,cAAcwE,OAAO,CAAC,CAACC;oBACrB,MAAMgB,mBAAmBtH,gBAAgB;wBACvCK;wBACAoD,QAAQpD,QAAQmG,OAAO,CAACC,WAAW,CAACH,WAAW,CAAC7C,MAAM;wBACtDkD,sBAAsB;oBACxB;oBACA,MAAMY,eAAe,CAAC,EAAEjB,WAAW,EAAE,CAAC;oBACtC1C,MAAM,CAAC2D,aAAa,GAAGxC,IAAI1E,QAAQ0D,MAAM,CAACuD,iBAAiB,EAAE;wBAC3DzG,QAAQ;4BAACkB,kBAAkB,CAACwF,aAAa;yBAAC;wBAC1CvC,YAAY;4BAAC3E,QAAQ0D,MAAM,CAACuD,iBAAiB,CAACpD,EAAE;yBAAC;oBACnD;gBACF;gBAEA,OAAON;YACT;YAEAvD,QAAQf,SAAS,CAAC,CAAC,UAAU,EAAE6G,uBAAuB,CAAC,CAAC,GAAGiB;QAC7D;IACF;IAEA,MAAMI,iBAAiBlI,UAAU4D,OAAO,CAAC,EAAEuE,IAAI,EAAE;QAC/C,MAAM7D,SAA2C,CAAC;QAElD5B,iBAAiBqE,OAAO,CAAC,CAACqB,KAAKhE;YAC7BE,MAAM,CAACF,IAAI,GAAG+D,KAAKpH,QAAQ0D,MAAM,CAAC2D,IAAI;QACxC;QAEA,IAAIvF,mBAAmB;YACrByB,OAAO+D,QAAQ,GAAGF,KAAK/F;QACzB;QAEA,IAAIc,kBAAkB;YACpBoB,OAAOgE,MAAM,GAAGH,KAAK9F;QACvB;QACA,IAAIY,oBAAoB;YACtBqB,OAAOiE,QAAQ,GAAGJ,KAAK7F;QACzB;QAEA,IAAIC,cAAcmE,IAAI,IAAIjE,oBAAoB;YAC5C6B,OAAOkE,KAAK,GAAGL,KAAK1F,oBAAoB;gBACtCsF,cAAc;YAChB;QACF;QAEA,OAAOzD;IACT;IAEAvD,QAAQf,SAAS,CAAC,CAAC,UAAU,EAAE6B,UAAU,CAAC,CAAC,GAAGqG;IAE9C,OAAO;QAAEjF;QAAoBC;QAAkBR;IAAiB;AAClE,EAAC"}
|
@@ -9,24 +9,22 @@ type Args = {
|
|
9
9
|
name?: string;
|
10
10
|
slug?: string;
|
11
11
|
};
|
12
|
-
/** Localized tables need to be given the locales suffix */
|
13
|
-
locales?: boolean;
|
14
12
|
/** For nested tables passed for the user custom dbName functions to handle their own iterations */
|
15
13
|
parentTableName?: string;
|
16
14
|
/** For sub tables (array for example) this needs to include the parentTableName */
|
17
15
|
prefix?: string;
|
18
|
-
/** Adds the relationships suffix */
|
19
|
-
relationships?: boolean;
|
20
16
|
/** For tables based on fields that could have both enumName and dbName (ie: select with hasMany), default: 'dbName' */
|
21
17
|
target?: 'dbName' | 'enumName';
|
22
18
|
throwValidationError?: boolean;
|
23
|
-
/** Adds the versions suffix
|
19
|
+
/** Adds the versions suffix to the default table name - should only be used on the base collection to avoid duplicate suffixing */
|
24
20
|
versions?: boolean;
|
21
|
+
/** Adds the versions suffix to custom dbName only - this is used while creating blocks / selects / arrays / etc */
|
22
|
+
versionsCustomName?: boolean;
|
25
23
|
};
|
26
24
|
/**
|
27
25
|
* Used to name database enums and tables
|
28
26
|
* Returns the table or enum name for a given entity
|
29
27
|
*/
|
30
|
-
export declare const
|
28
|
+
export declare const createTableName: ({ adapter, config: { name, slug }, config, parentTableName, prefix, target, throwValidationError, versions, versionsCustomName, }: Args) => string;
|
31
29
|
export {};
|
32
|
-
//# sourceMappingURL=
|
30
|
+
//# sourceMappingURL=createTableName.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"createTableName.d.ts","sourceRoot":"","sources":["../../src/schema/createTableName.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,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uHAAuH;IACvH,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,mIAAmI;IACnI,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mHAAmH;IACnH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,sIAUzB,IAAI,KAAG,MAsCT,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 createTableName = ({ adapter, config: { name, slug }, config, parentTableName, prefix = '', target = 'dbName', throwValidationError = false, versions = false, versionsCustomName = false })=>{
|
7
|
+
let customNameDefinition = config[target];
|
8
|
+
let defaultTableName = `${prefix}${toSnakeCase(name ?? slug)}`;
|
9
|
+
if (versions) defaultTableName = `_${defaultTableName}${adapter.versionsSuffix}`;
|
10
|
+
let customTableNameResult;
|
11
|
+
if (!customNameDefinition && target === 'enumName') {
|
12
|
+
customNameDefinition = config['dbName'];
|
13
|
+
}
|
14
|
+
if (customNameDefinition) {
|
15
|
+
customTableNameResult = typeof customNameDefinition === 'function' ? customNameDefinition({
|
16
|
+
tableName: parentTableName
|
17
|
+
}) : customNameDefinition;
|
18
|
+
if (versionsCustomName) customTableNameResult = `_${customTableNameResult}${adapter.versionsSuffix}`;
|
19
|
+
}
|
20
|
+
const result = customTableNameResult || defaultTableName;
|
21
|
+
adapter.tableNameMap.set(defaultTableName, result);
|
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=createTableName.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/schema/createTableName.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 /** 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 /** 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 to the default table name - should only be used on the base collection to avoid duplicate suffixing */\n versions?: boolean\n /** Adds the versions suffix to custom dbName only - this is used while creating blocks / selects / arrays / etc */\n versionsCustomName?: 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 createTableName = ({\n adapter,\n config: { name, slug },\n config,\n parentTableName,\n prefix = '',\n target = 'dbName',\n throwValidationError = false,\n versions = false,\n versionsCustomName = false,\n}: Args): string => {\n let customNameDefinition = config[target]\n\n let defaultTableName = `${prefix}${toSnakeCase(name ?? slug)}`\n\n if (versions) defaultTableName = `_${defaultTableName}${adapter.versionsSuffix}`\n\n let customTableNameResult: string\n\n if (!customNameDefinition && target === 'enumName') {\n customNameDefinition = config['dbName']\n }\n\n if (customNameDefinition) {\n customTableNameResult =\n typeof customNameDefinition === 'function'\n ? customNameDefinition({ tableName: parentTableName })\n : customNameDefinition\n\n if (versionsCustomName)\n customTableNameResult = `_${customTableNameResult}${adapter.versionsSuffix}`\n }\n\n const result = customTableNameResult || defaultTableName\n\n adapter.tableNameMap.set(defaultTableName, result)\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\n return result\n}\n"],"names":["APIError","toSnakeCase","createTableName","adapter","config","name","slug","parentTableName","prefix","target","throwValidationError","versions","versionsCustomName","customNameDefinition","defaultTableName","versionsSuffix","customTableNameResult","tableName","result","tableNameMap","set","length"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,QAAQ,QAAQ,iBAAgB;AACzC,OAAOC,iBAAiB,gBAAe;AA0BvC;;;CAGC,GACD,OAAO,MAAMC,kBAAkB,CAAC,EAC9BC,OAAO,EACPC,QAAQ,EAAEC,IAAI,EAAEC,IAAI,EAAE,EACtBF,MAAM,EACNG,eAAe,EACfC,SAAS,EAAE,EACXC,SAAS,QAAQ,EACjBC,uBAAuB,KAAK,EAC5BC,WAAW,KAAK,EAChBC,qBAAqB,KAAK,EACrB;IACL,IAAIC,uBAAuBT,MAAM,CAACK,OAAO;IAEzC,IAAIK,mBAAmB,CAAC,EAAEN,OAAO,EAAEP,YAAYI,QAAQC,MAAM,CAAC;IAE9D,IAAIK,UAAUG,mBAAmB,CAAC,CAAC,EAAEA,iBAAiB,EAAEX,QAAQY,cAAc,CAAC,CAAC;IAEhF,IAAIC;IAEJ,IAAI,CAACH,wBAAwBJ,WAAW,YAAY;QAClDI,uBAAuBT,MAAM,CAAC,SAAS;IACzC;IAEA,IAAIS,sBAAsB;QACxBG,wBACE,OAAOH,yBAAyB,aAC5BA,qBAAqB;YAAEI,WAAWV;QAAgB,KAClDM;QAEN,IAAID,oBACFI,wBAAwB,CAAC,CAAC,EAAEA,sBAAsB,EAAEb,QAAQY,cAAc,CAAC,CAAC;IAChF;IAEA,MAAMG,SAASF,yBAAyBF;IAExCX,QAAQgB,YAAY,CAACC,GAAG,CAACN,kBAAkBI;IAE3C,IAAI,CAACR,sBAAsB;QACzB,OAAOQ;IACT;IAEA,IAAIA,OAAOG,MAAM,GAAG,IAAI;QACtB,MAAM,IAAIrB,SACR,CAAC,sFAAsF,EAAEkB,OAAO,CAAC;IAErG;IAEA,OAAOA;AACT,EAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,
|
1
|
+
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAsBtD,OAAO,KAAK,EAAE,cAAc,EAAU,eAAe,EAAE,MAAM,aAAa,CAAA;AAW1E,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,MAsnBT,CAAA"}
|
@@ -1,12 +1,12 @@
|
|
1
1
|
/* eslint-disable no-param-reassign */ import { relations } from 'drizzle-orm';
|
2
|
-
import { PgNumericBuilder, PgUUIDBuilder, PgVarcharBuilder, boolean, index, integer, jsonb, numeric, pgEnum, text, timestamp, varchar } from 'drizzle-orm/pg-core';
|
2
|
+
import { PgNumericBuilder, PgUUIDBuilder, PgVarcharBuilder, boolean, foreignKey, index, integer, jsonb, numeric, pgEnum, text, timestamp, varchar } from 'drizzle-orm/pg-core';
|
3
3
|
import { InvalidConfiguration } from 'payload/errors';
|
4
4
|
import { fieldAffectsData, optionIsObject } from 'payload/types';
|
5
5
|
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 {
|
9
|
+
import { createTableName } from './createTableName.js';
|
10
10
|
import { idToUUID } from './idToUUID.js';
|
11
11
|
import { parentIDColumnMap } from './parentIDColumnMap.js';
|
12
12
|
import { validateExistingBlockIsIdentical } from './validateExistingBlockIsIdentical.js';
|
@@ -130,14 +130,13 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
|
|
130
130
|
case 'radio':
|
131
131
|
case 'select':
|
132
132
|
{
|
133
|
-
const enumName =
|
133
|
+
const enumName = createTableName({
|
134
134
|
adapter,
|
135
135
|
config: field,
|
136
136
|
parentTableName: newTableName,
|
137
137
|
prefix: `enum_${newTableName}_`,
|
138
138
|
target: 'enumName',
|
139
|
-
throwValidationError
|
140
|
-
versions
|
139
|
+
throwValidationError
|
141
140
|
});
|
142
141
|
adapter.enums[enumName] = pgEnum(enumName, field.options.map((option)=>{
|
143
142
|
if (optionIsObject(option)) {
|
@@ -146,23 +145,29 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
|
|
146
145
|
return option;
|
147
146
|
}));
|
148
147
|
if (field.type === 'select' && field.hasMany) {
|
149
|
-
const selectTableName =
|
148
|
+
const selectTableName = createTableName({
|
150
149
|
adapter,
|
151
150
|
config: field,
|
152
151
|
parentTableName: newTableName,
|
153
152
|
prefix: `${newTableName}_`,
|
154
|
-
throwValidationError
|
155
|
-
versions
|
153
|
+
throwValidationError
|
156
154
|
});
|
157
155
|
const baseColumns = {
|
158
156
|
order: integer('order').notNull(),
|
159
|
-
parent: parentIDColumnMap[parentIDColType]('parent_id').
|
160
|
-
onDelete: 'cascade'
|
161
|
-
}).notNull(),
|
157
|
+
parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),
|
162
158
|
value: adapter.enums[enumName]('value')
|
163
159
|
};
|
164
160
|
const baseExtraConfig = {
|
165
161
|
orderIdx: (cols)=>index(`${selectTableName}_order_idx`).on(cols.order),
|
162
|
+
parentFk: (cols)=>foreignKey({
|
163
|
+
name: `${selectTableName}_parent_fk`,
|
164
|
+
columns: [
|
165
|
+
cols.parent
|
166
|
+
],
|
167
|
+
foreignColumns: [
|
168
|
+
adapter.tables[parentTableName].id
|
169
|
+
]
|
170
|
+
}),
|
166
171
|
parentIdx: (cols)=>index(`${selectTableName}_parent_idx`).on(cols.parent)
|
167
172
|
};
|
168
173
|
if (field.localized) {
|
@@ -210,21 +215,29 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
|
|
210
215
|
case 'array':
|
211
216
|
{
|
212
217
|
const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
|
213
|
-
const arrayTableName =
|
218
|
+
const arrayTableName = createTableName({
|
214
219
|
adapter,
|
215
220
|
config: field,
|
216
221
|
parentTableName: newTableName,
|
217
222
|
prefix: `${newTableName}_`,
|
218
|
-
throwValidationError
|
223
|
+
throwValidationError,
|
224
|
+
versionsCustomName: versions
|
219
225
|
});
|
220
226
|
const baseColumns = {
|
221
227
|
_order: integer('_order').notNull(),
|
222
|
-
_parentID: parentIDColumnMap[parentIDColType]('_parent_id').
|
223
|
-
onDelete: 'cascade'
|
224
|
-
}).notNull()
|
228
|
+
_parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull()
|
225
229
|
};
|
226
230
|
const baseExtraConfig = {
|
227
231
|
_orderIdx: (cols)=>index(`${arrayTableName}_order_idx`).on(cols._order),
|
232
|
+
_parentIDFk: (cols)=>foreignKey({
|
233
|
+
name: `${arrayTableName}_parent_id_fk`,
|
234
|
+
columns: [
|
235
|
+
cols['_parentID']
|
236
|
+
],
|
237
|
+
foreignColumns: [
|
238
|
+
adapter.tables[parentTableName].id
|
239
|
+
]
|
240
|
+
}).onDelete('cascade'),
|
228
241
|
_parentIDIdx: (cols)=>index(`${arrayTableName}_parent_id_idx`).on(cols._parentID)
|
229
242
|
};
|
230
243
|
if (field.localized && adapter.payload.config.localization) {
|
@@ -278,24 +291,32 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
|
|
278
291
|
{
|
279
292
|
const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
|
280
293
|
field.blocks.forEach((block)=>{
|
281
|
-
const blockTableName =
|
294
|
+
const blockTableName = createTableName({
|
282
295
|
adapter,
|
283
296
|
config: block,
|
284
297
|
parentTableName: rootTableName,
|
285
298
|
prefix: `${rootTableName}_blocks_`,
|
286
|
-
throwValidationError
|
299
|
+
throwValidationError,
|
300
|
+
versionsCustomName: versions
|
287
301
|
});
|
288
302
|
if (!adapter.tables[blockTableName]) {
|
289
303
|
const baseColumns = {
|
290
304
|
_order: integer('_order').notNull(),
|
291
|
-
_parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').
|
292
|
-
onDelete: 'cascade'
|
293
|
-
}).notNull(),
|
305
|
+
_parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),
|
294
306
|
_path: text('_path').notNull()
|
295
307
|
};
|
296
308
|
const baseExtraConfig = {
|
297
309
|
_orderIdx: (cols)=>index(`${blockTableName}_order_idx`).on(cols._order),
|
298
310
|
_parentIDIdx: (cols)=>index(`${blockTableName}_parent_id_idx`).on(cols._parentID),
|
311
|
+
_parentIdFk: (cols)=>foreignKey({
|
312
|
+
name: `${blockTableName}_parent_id_fk`,
|
313
|
+
columns: [
|
314
|
+
cols._parentID
|
315
|
+
],
|
316
|
+
foreignColumns: [
|
317
|
+
adapter.tables[rootTableName].id
|
318
|
+
]
|
319
|
+
}).onDelete('cascade'),
|
299
320
|
_pathIdx: (cols)=>index(`${blockTableName}_path_idx`).on(cols._path)
|
300
321
|
};
|
301
322
|
if (field.localized && adapter.payload.config.localization) {
|
@@ -347,10 +368,10 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
|
|
347
368
|
block,
|
348
369
|
localized: field.localized,
|
349
370
|
rootTableName,
|
350
|
-
table: adapter.tables[blockTableName]
|
371
|
+
table: adapter.tables[blockTableName],
|
372
|
+
tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`]
|
351
373
|
});
|
352
374
|
}
|
353
|
-
adapter.blockTableNames[`${rootTableName}.${toSnakeCase(block.slug)}`] = blockTableName;
|
354
375
|
rootRelationsToBuild.set(`_blocks_${block.slug}`, blockTableName);
|
355
376
|
});
|
356
377
|
break;
|
@@ -481,7 +502,7 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
|
|
481
502
|
indexes,
|
482
503
|
localesColumns,
|
483
504
|
localesIndexes,
|
484
|
-
newTableName
|
505
|
+
newTableName,
|
485
506
|
parentTableName,
|
486
507
|
relationsToBuild,
|
487
508
|
relationships,
|