@payloadcms/drizzle 3.0.0-beta.111 → 3.0.0-beta.113

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.
@@ -1 +1 @@
1
- {"version":3,"file":"buildFindManyArgs.d.ts","sourceRoot":"","sources":["../../src/find/buildFindManyArgs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIxE,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;KACjD,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAC1C,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAIzC,eAAO,MAAM,iBAAiB,qEAQ3B,kBAAkB,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAgE7C,CAAA"}
1
+ {"version":3,"file":"buildFindManyArgs.d.ts","sourceRoot":"","sources":["../../src/find/buildFindManyArgs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIxE,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;KACjD,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAC1C,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAIzC,eAAO,MAAM,iBAAiB,qEAQ3B,kBAAkB,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAkE7C,CAAA"}
@@ -3,6 +3,7 @@ import { traverseFields } from './traverseFields.js';
3
3
  // a collection field structure
4
4
  export const buildFindManyArgs = ({ adapter, depth, fields, joinQuery, joins = [], locale, tableName })=>{
5
5
  const result = {
6
+ extras: {},
6
7
  with: {}
7
8
  };
8
9
  const _locales = {
@@ -10,6 +11,7 @@ export const buildFindManyArgs = ({ adapter, depth, fields, joinQuery, joins = [
10
11
  id: false,
11
12
  _parentID: false
12
13
  },
14
+ extras: {},
13
15
  with: {}
14
16
  };
15
17
  if (adapter.tables[`${tableName}_texts`]) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/find/buildFindManyArgs.ts"],"sourcesContent":["import type { DBQueryConfig } from 'drizzle-orm'\nimport type { Field, JoinQuery } from 'payload'\n\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\n\nimport { traverseFields } from './traverseFields.js'\n\ntype BuildFindQueryArgs = {\n adapter: DrizzleAdapter\n depth: number\n fields: Field[]\n joinQuery?: JoinQuery\n /**\n * The joins array will be mutated by pushing any joins needed for the where queries of join field joins\n */\n joins?: BuildQueryJoinAliases\n locale?: string\n tableName: string\n}\n\nexport type Result = {\n with?: {\n _locales?: DBQueryConfig<'many', true, any, any>\n } & DBQueryConfig<'many', true, any, any>\n} & DBQueryConfig<'many', true, any, any>\n\n// Generate the Drizzle query for findMany based on\n// a collection field structure\nexport const buildFindManyArgs = ({\n adapter,\n depth,\n fields,\n joinQuery,\n joins = [],\n locale,\n tableName,\n}: BuildFindQueryArgs): Record<string, unknown> => {\n const result: Result = {\n with: {},\n }\n\n const _locales: Result = {\n columns: {\n id: false,\n _parentID: false,\n },\n with: {},\n }\n\n if (adapter.tables[`${tableName}_texts`]) {\n result.with._texts = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}_numbers`]) {\n result.with._numbers = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.relationshipsSuffix}`]) {\n result.with._rels = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`]) {\n result.with._locales = _locales\n }\n\n traverseFields({\n _locales,\n adapter,\n currentArgs: result,\n currentTableName: tableName,\n depth,\n fields,\n joinQuery,\n joins,\n locale,\n path: '',\n tablePath: '',\n topLevelArgs: result,\n topLevelTableName: tableName,\n })\n\n return result\n}\n"],"names":["traverseFields","buildFindManyArgs","adapter","depth","fields","joinQuery","joins","locale","tableName","result","with","_locales","columns","id","_parentID","tables","_texts","parent","orderBy","order","asc","ASC","_numbers","relationshipsSuffix","_rels","localesSuffix","currentArgs","currentTableName","path","tablePath","topLevelArgs","topLevelTableName"],"mappings":"AAKA,SAASA,cAAc,QAAQ,sBAAqB;AAqBpD,mDAAmD;AACnD,+BAA+B;AAC/B,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,OAAO,EACPC,KAAK,EACLC,MAAM,EACNC,SAAS,EACTC,QAAQ,EAAE,EACVC,MAAM,EACNC,SAAS,EACU;IACnB,MAAMC,SAAiB;QACrBC,MAAM,CAAC;IACT;IAEA,MAAMC,WAAmB;QACvBC,SAAS;YACPC,IAAI;YACJC,WAAW;QACb;QACAJ,MAAM,CAAC;IACT;IAEA,IAAIR,QAAQa,MAAM,CAAC,CAAC,EAAEP,UAAU,MAAM,CAAC,CAAC,EAAE;QACxCC,OAAOC,IAAI,CAACM,MAAM,GAAG;YACnBJ,SAAS;gBACPC,IAAI;gBACJI,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IAAIjB,QAAQa,MAAM,CAAC,CAAC,EAAEP,UAAU,QAAQ,CAAC,CAAC,EAAE;QAC1CC,OAAOC,IAAI,CAACY,QAAQ,GAAG;YACrBV,SAAS;gBACPC,IAAI;gBACJI,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IAAIjB,QAAQa,MAAM,CAAC,CAAC,EAAEP,UAAU,EAAEN,QAAQqB,mBAAmB,CAAC,CAAC,CAAC,EAAE;QAChEd,OAAOC,IAAI,CAACc,KAAK,GAAG;YAClBZ,SAAS;gBACPC,IAAI;gBACJI,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IAAIjB,QAAQa,MAAM,CAAC,CAAC,EAAEP,UAAU,EAAEN,QAAQuB,aAAa,CAAC,CAAC,CAAC,EAAE;QAC1DhB,OAAOC,IAAI,CAACC,QAAQ,GAAGA;IACzB;IAEAX,eAAe;QACbW;QACAT;QACAwB,aAAajB;QACbkB,kBAAkBnB;QAClBL;QACAC;QACAC;QACAC;QACAC;QACAqB,MAAM;QACNC,WAAW;QACXC,cAAcrB;QACdsB,mBAAmBvB;IACrB;IAEA,OAAOC;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/find/buildFindManyArgs.ts"],"sourcesContent":["import type { DBQueryConfig } from 'drizzle-orm'\nimport type { Field, JoinQuery } from 'payload'\n\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\n\nimport { traverseFields } from './traverseFields.js'\n\ntype BuildFindQueryArgs = {\n adapter: DrizzleAdapter\n depth: number\n fields: Field[]\n joinQuery?: JoinQuery\n /**\n * The joins array will be mutated by pushing any joins needed for the where queries of join field joins\n */\n joins?: BuildQueryJoinAliases\n locale?: string\n tableName: string\n}\n\nexport type Result = {\n with?: {\n _locales?: DBQueryConfig<'many', true, any, any>\n } & DBQueryConfig<'many', true, any, any>\n} & DBQueryConfig<'many', true, any, any>\n\n// Generate the Drizzle query for findMany based on\n// a collection field structure\nexport const buildFindManyArgs = ({\n adapter,\n depth,\n fields,\n joinQuery,\n joins = [],\n locale,\n tableName,\n}: BuildFindQueryArgs): Record<string, unknown> => {\n const result: Result = {\n extras: {},\n with: {},\n }\n\n const _locales: Result = {\n columns: {\n id: false,\n _parentID: false,\n },\n extras: {},\n with: {},\n }\n\n if (adapter.tables[`${tableName}_texts`]) {\n result.with._texts = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}_numbers`]) {\n result.with._numbers = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.relationshipsSuffix}`]) {\n result.with._rels = {\n columns: {\n id: false,\n parent: false,\n },\n orderBy: ({ order }, { asc: ASC }) => [ASC(order)],\n }\n }\n\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`]) {\n result.with._locales = _locales\n }\n\n traverseFields({\n _locales,\n adapter,\n currentArgs: result,\n currentTableName: tableName,\n depth,\n fields,\n joinQuery,\n joins,\n locale,\n path: '',\n tablePath: '',\n topLevelArgs: result,\n topLevelTableName: tableName,\n })\n\n return result\n}\n"],"names":["traverseFields","buildFindManyArgs","adapter","depth","fields","joinQuery","joins","locale","tableName","result","extras","with","_locales","columns","id","_parentID","tables","_texts","parent","orderBy","order","asc","ASC","_numbers","relationshipsSuffix","_rels","localesSuffix","currentArgs","currentTableName","path","tablePath","topLevelArgs","topLevelTableName"],"mappings":"AAKA,SAASA,cAAc,QAAQ,sBAAqB;AAqBpD,mDAAmD;AACnD,+BAA+B;AAC/B,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,OAAO,EACPC,KAAK,EACLC,MAAM,EACNC,SAAS,EACTC,QAAQ,EAAE,EACVC,MAAM,EACNC,SAAS,EACU;IACnB,MAAMC,SAAiB;QACrBC,QAAQ,CAAC;QACTC,MAAM,CAAC;IACT;IAEA,MAAMC,WAAmB;QACvBC,SAAS;YACPC,IAAI;YACJC,WAAW;QACb;QACAL,QAAQ,CAAC;QACTC,MAAM,CAAC;IACT;IAEA,IAAIT,QAAQc,MAAM,CAAC,CAAC,EAAER,UAAU,MAAM,CAAC,CAAC,EAAE;QACxCC,OAAOE,IAAI,CAACM,MAAM,GAAG;YACnBJ,SAAS;gBACPC,IAAI;gBACJI,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IAAIlB,QAAQc,MAAM,CAAC,CAAC,EAAER,UAAU,QAAQ,CAAC,CAAC,EAAE;QAC1CC,OAAOE,IAAI,CAACY,QAAQ,GAAG;YACrBV,SAAS;gBACPC,IAAI;gBACJI,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IAAIlB,QAAQc,MAAM,CAAC,CAAC,EAAER,UAAU,EAAEN,QAAQsB,mBAAmB,CAAC,CAAC,CAAC,EAAE;QAChEf,OAAOE,IAAI,CAACc,KAAK,GAAG;YAClBZ,SAAS;gBACPC,IAAI;gBACJI,QAAQ;YACV;YACAC,SAAS,CAAC,EAAEC,KAAK,EAAE,EAAE,EAAEC,KAAKC,GAAG,EAAE,GAAK;oBAACA,IAAIF;iBAAO;QACpD;IACF;IAEA,IAAIlB,QAAQc,MAAM,CAAC,CAAC,EAAER,UAAU,EAAEN,QAAQwB,aAAa,CAAC,CAAC,CAAC,EAAE;QAC1DjB,OAAOE,IAAI,CAACC,QAAQ,GAAGA;IACzB;IAEAZ,eAAe;QACbY;QACAV;QACAyB,aAAalB;QACbmB,kBAAkBpB;QAClBL;QACAC;QACAC;QACAC;QACAC;QACAsB,MAAM;QACNC,WAAW;QACXC,cAActB;QACduB,mBAAmBxB;IACrB;IAEA,OAAOC;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAK/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAKpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,cAAc,qJAcxB,iBAAiB,4BA+PnB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/find/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAM/C,OAAO,KAAK,EAAE,qBAAqB,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAKpD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,cAAc,qJAcxB,iBAAiB,4BA8UnB,CAAA"}
@@ -1,7 +1,8 @@
1
+ import { and, eq, sql } from 'drizzle-orm';
1
2
  import { fieldAffectsData, fieldIsVirtual, tabHasName } from 'payload/shared';
2
3
  import toSnakeCase from 'to-snake-case';
3
- import { buildOrderBy } from '../queries/buildOrderBy.js';
4
4
  import buildQuery from '../queries/buildQuery.js';
5
+ import { chainMethods } from './chainMethods.js';
5
6
  export const traverseFields = ({ _locales, adapter, currentArgs, currentTableName, depth, fields, joinQuery = {}, joins, locale, path, tablePath, topLevelArgs, topLevelTableName })=>{
6
7
  fields.forEach((field)=>{
7
8
  if (fieldIsVirtual(field)) {
@@ -177,22 +178,75 @@ export const traverseFields = ({ _locales, adapter, currentArgs, currentTableNam
177
178
  limit += 1;
178
179
  }
179
180
  const fields = adapter.payload.collections[field.collection].config.fields;
180
- const joinTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${field.localized && adapter.payload.config.localization ? adapter.localesSuffix : ''}`;
181
+ const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection));
182
+ let joinTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${field.localized && adapter.payload.config.localization ? adapter.localesSuffix : ''}`;
183
+ if (field.hasMany) {
184
+ const db = adapter.drizzle;
185
+ if (field.localized) {
186
+ joinTableName = adapter.tableNameMap.get(toSnakeCase(field.collection));
187
+ }
188
+ const joinTable = `${joinTableName}${adapter.relationshipsSuffix}`;
189
+ const joins = [
190
+ {
191
+ type: 'innerJoin',
192
+ condition: and(eq(adapter.tables[joinTable].parent, adapter.tables[joinTableName].id), eq(sql.raw(`"${joinTable}"."${topLevelTableName}_id"`), adapter.tables[currentTableName].id), eq(adapter.tables[joinTable].path, field.on)),
193
+ table: adapter.tables[joinTable]
194
+ }
195
+ ];
196
+ const { orderBy, where: subQueryWhere } = buildQuery({
197
+ adapter,
198
+ fields,
199
+ joins,
200
+ locale,
201
+ sort,
202
+ tableName: joinCollectionTableName,
203
+ where: {}
204
+ });
205
+ const chainedMethods = [];
206
+ joins.forEach(({ type, condition, table })=>{
207
+ chainedMethods.push({
208
+ args: [
209
+ table,
210
+ condition
211
+ ],
212
+ method: type ?? 'leftJoin'
213
+ });
214
+ });
215
+ const subQuery = chainMethods({
216
+ methods: chainedMethods,
217
+ query: db.select({
218
+ id: adapter.tables[joinTableName].id,
219
+ ...field.localized && {
220
+ locale: adapter.tables[joinTable].locale
221
+ }
222
+ }).from(adapter.tables[joinTableName]).where(subQueryWhere).orderBy(orderBy.order(orderBy.column)).limit(limit)
223
+ });
224
+ const columnName = `${path.replaceAll('.', '_')}${field.name}`;
225
+ const jsonObjectSelect = field.localized ? sql.raw(`'_parentID', "id", '_locale', "locale"`) : sql.raw(`'id', "id"`);
226
+ if (adapter.name === 'sqlite') {
227
+ currentArgs.extras[columnName] = sql`
228
+ COALESCE((
229
+ SELECT json_group_array(json_object(${jsonObjectSelect}))
230
+ FROM (
231
+ ${subQuery}
232
+ ) AS ${sql.raw(`${columnName}_sub`)}
233
+ ), '[]')
234
+ `.as(columnName);
235
+ } else {
236
+ currentArgs.extras[columnName] = sql`
237
+ COALESCE((
238
+ SELECT json_agg(json_build_object(${jsonObjectSelect}))
239
+ FROM (
240
+ ${subQuery}
241
+ ) AS ${sql.raw(`${columnName}_sub`)}
242
+ ), '[]'::json)
243
+ `.as(columnName);
244
+ }
245
+ break;
246
+ }
181
247
  const selectFields = {};
182
- const orderBy = buildOrderBy({
183
- adapter,
184
- fields,
185
- joins: [],
186
- locale,
187
- selectFields,
188
- sort,
189
- tableName: joinTableName
190
- });
191
248
  const withJoin = {
192
- columns: selectFields,
193
- orderBy: ()=>[
194
- orderBy.order(orderBy.column)
195
- ]
249
+ columns: selectFields
196
250
  };
197
251
  if (limit) {
198
252
  withJoin.limit = limit;
@@ -202,19 +256,21 @@ export const traverseFields = ({ _locales, adapter, currentArgs, currentTableNam
202
256
  withJoin.columns._parentID = true;
203
257
  } else {
204
258
  withJoin.columns.id = true;
259
+ withJoin.columns.parent = true;
205
260
  }
206
- if (where) {
207
- const { where: joinWhere } = buildQuery({
208
- adapter,
209
- fields,
210
- joins,
211
- locale,
212
- sort,
213
- tableName: joinTableName,
214
- where
215
- });
261
+ const { orderBy, where: joinWhere } = buildQuery({
262
+ adapter,
263
+ fields,
264
+ joins,
265
+ locale,
266
+ sort,
267
+ tableName: joinTableName,
268
+ where
269
+ });
270
+ if (joinWhere) {
216
271
  withJoin.where = ()=>joinWhere;
217
272
  }
273
+ withJoin.orderBy = orderBy.order(orderBy.column);
218
274
  currentArgs.with[`${path.replaceAll('.', '_')}${field.name}`] = withJoin;
219
275
  break;
220
276
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/find/traverseFields.ts"],"sourcesContent":["import type { DBQueryConfig } from 'drizzle-orm'\nimport type { Field, JoinQuery } from 'payload'\n\nimport { fieldAffectsData, fieldIsVirtual, tabHasName } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BuildQueryJoinAliases, DrizzleAdapter } from '../types.js'\nimport type { Result } from './buildFindManyArgs.js'\n\nimport { buildOrderBy } from '../queries/buildOrderBy.js'\nimport buildQuery from '../queries/buildQuery.js'\n\ntype TraverseFieldArgs = {\n _locales: Result\n adapter: DrizzleAdapter\n currentArgs: Result\n currentTableName: string\n depth?: number\n fields: Field[]\n joinQuery: JoinQuery\n joins?: BuildQueryJoinAliases\n locale?: string\n path: string\n tablePath: string\n topLevelArgs: Record<string, unknown>\n topLevelTableName: string\n}\n\nexport const traverseFields = ({\n _locales,\n adapter,\n currentArgs,\n currentTableName,\n depth,\n fields,\n joinQuery = {},\n joins,\n locale,\n path,\n tablePath,\n topLevelArgs,\n topLevelTableName,\n}: TraverseFieldArgs) => {\n fields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n // handle simple relationship\n if (\n depth > 0 &&\n (field.type === 'upload' || field.type === 'relationship') &&\n !field.hasMany &&\n typeof field.relationTo === 'string'\n ) {\n if (field.localized) {\n _locales.with[`${path}${field.name}`] = true\n } else {\n currentArgs.with[`${path}${field.name}`] = true\n }\n }\n\n if (field.type === 'collapsible' || field.type === 'row') {\n traverseFields({\n _locales,\n adapter,\n currentArgs,\n currentTableName,\n depth,\n fields: field.fields,\n joinQuery,\n joins,\n path,\n tablePath,\n topLevelArgs,\n topLevelTableName,\n })\n\n return\n }\n\n if (field.type === 'tabs') {\n field.tabs.forEach((tab) => {\n const tabPath = tabHasName(tab) ? `${path}${tab.name}_` : path\n const tabTablePath = tabHasName(tab) ? `${tablePath}${toSnakeCase(tab.name)}_` : tablePath\n\n traverseFields({\n _locales,\n adapter,\n currentArgs,\n currentTableName,\n depth,\n fields: tab.fields,\n joinQuery,\n joins,\n path: tabPath,\n tablePath: tabTablePath,\n topLevelArgs,\n topLevelTableName,\n })\n })\n\n return\n }\n\n if (fieldAffectsData(field)) {\n switch (field.type) {\n case 'array': {\n const withArray: Result = {\n columns: {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const arrayTableName = adapter.tableNameMap.get(\n `${currentTableName}_${tablePath}${toSnakeCase(field.name)}`,\n )\n\n const arrayTableNameWithLocales = `${arrayTableName}${adapter.localesSuffix}`\n\n if (adapter.tables[arrayTableNameWithLocales]) {\n withArray.with._locales = {\n columns: {\n id: false,\n _parentID: false,\n },\n with: {},\n }\n }\n currentArgs.with[`${path}${field.name}`] = withArray\n\n traverseFields({\n _locales: withArray.with._locales,\n adapter,\n currentArgs: withArray,\n currentTableName: arrayTableName,\n depth,\n fields: field.fields,\n joinQuery,\n path: '',\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n })\n\n break\n }\n\n case 'select': {\n if (field.hasMany) {\n const withSelect: Result = {\n columns: {\n id: false,\n order: false,\n parent: false,\n },\n orderBy: ({ order }, { asc }) => [asc(order)],\n }\n\n currentArgs.with[`${path}${field.name}`] = withSelect\n }\n\n break\n }\n\n case 'blocks':\n field.blocks.forEach((block) => {\n const blockKey = `_blocks_${block.slug}`\n\n if (!topLevelArgs[blockKey]) {\n const withBlock: Result = {\n columns: {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const tableName = adapter.tableNameMap.get(\n `${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`,\n )\n\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`]) {\n withBlock.with._locales = {\n with: {},\n }\n }\n topLevelArgs.with[blockKey] = withBlock\n\n traverseFields({\n _locales: withBlock.with._locales,\n adapter,\n currentArgs: withBlock,\n currentTableName: tableName,\n depth,\n fields: block.fields,\n joinQuery,\n path: '',\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n })\n }\n })\n\n break\n\n case 'group': {\n traverseFields({\n _locales,\n adapter,\n currentArgs,\n currentTableName,\n depth,\n fields: field.fields,\n joinQuery,\n joins,\n path: `${path}${field.name}_`,\n tablePath: `${tablePath}${toSnakeCase(field.name)}_`,\n topLevelArgs,\n topLevelTableName,\n })\n\n break\n }\n\n case 'join': {\n // when `joinsQuery` is false, do not join\n if (joinQuery === false) {\n break\n }\n const {\n limit: limitArg = 10,\n sort,\n where,\n } = joinQuery[`${path.replaceAll('_', '.')}${field.name}`] || {}\n let limit = limitArg\n if (limit !== 0) {\n // get an additional document and slice it later to determine if there is a next page\n limit += 1\n }\n const fields = adapter.payload.collections[field.collection].config.fields\n const joinTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${\n field.localized && adapter.payload.config.localization ? adapter.localesSuffix : ''\n }`\n const selectFields = {}\n\n const orderBy = buildOrderBy({\n adapter,\n fields,\n joins: [],\n locale,\n selectFields,\n sort,\n tableName: joinTableName,\n })\n const withJoin: DBQueryConfig<'many', true, any, any> = {\n columns: selectFields,\n orderBy: () => [orderBy.order(orderBy.column)],\n }\n if (limit) {\n withJoin.limit = limit\n }\n\n if (field.localized) {\n withJoin.columns._locale = true\n withJoin.columns._parentID = true\n } else {\n withJoin.columns.id = true\n }\n\n if (where) {\n const { where: joinWhere } = buildQuery({\n adapter,\n fields,\n joins,\n locale,\n sort,\n tableName: joinTableName,\n where,\n })\n withJoin.where = () => joinWhere\n }\n currentArgs.with[`${path.replaceAll('.', '_')}${field.name}`] = withJoin\n break\n }\n\n default: {\n break\n }\n }\n }\n })\n\n return topLevelArgs\n}\n"],"names":["fieldAffectsData","fieldIsVirtual","tabHasName","toSnakeCase","buildOrderBy","buildQuery","traverseFields","_locales","adapter","currentArgs","currentTableName","depth","fields","joinQuery","joins","locale","path","tablePath","topLevelArgs","topLevelTableName","forEach","field","type","hasMany","relationTo","localized","with","name","tabs","tab","tabPath","tabTablePath","withArray","columns","_parentID","orderBy","_order","asc","arrayTableName","tableNameMap","get","arrayTableNameWithLocales","localesSuffix","tables","id","withSelect","order","parent","blocks","block","blockKey","slug","withBlock","tableName","limit","limitArg","sort","where","replaceAll","payload","collections","collection","config","joinTableName","localization","selectFields","withJoin","column","_locale","joinWhere"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/find/traverseFields.ts"],"sourcesContent":["import type { DBQueryConfig } from 'drizzle-orm'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type { Field, JoinQuery } from 'payload'\n\nimport { and, eq, sql } from 'drizzle-orm'\nimport { fieldAffectsData, fieldIsVirtual, tabHasName } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BuildQueryJoinAliases, ChainedMethods, DrizzleAdapter } from '../types.js'\nimport type { Result } from './buildFindManyArgs.js'\n\nimport buildQuery from '../queries/buildQuery.js'\nimport { chainMethods } from './chainMethods.js'\n\ntype TraverseFieldArgs = {\n _locales: Result\n adapter: DrizzleAdapter\n currentArgs: Result\n currentTableName: string\n depth?: number\n fields: Field[]\n joinQuery: JoinQuery\n joins?: BuildQueryJoinAliases\n locale?: string\n path: string\n tablePath: string\n topLevelArgs: Record<string, unknown>\n topLevelTableName: string\n}\n\nexport const traverseFields = ({\n _locales,\n adapter,\n currentArgs,\n currentTableName,\n depth,\n fields,\n joinQuery = {},\n joins,\n locale,\n path,\n tablePath,\n topLevelArgs,\n topLevelTableName,\n}: TraverseFieldArgs) => {\n fields.forEach((field) => {\n if (fieldIsVirtual(field)) {\n return\n }\n\n // handle simple relationship\n if (\n depth > 0 &&\n (field.type === 'upload' || field.type === 'relationship') &&\n !field.hasMany &&\n typeof field.relationTo === 'string'\n ) {\n if (field.localized) {\n _locales.with[`${path}${field.name}`] = true\n } else {\n currentArgs.with[`${path}${field.name}`] = true\n }\n }\n\n if (field.type === 'collapsible' || field.type === 'row') {\n traverseFields({\n _locales,\n adapter,\n currentArgs,\n currentTableName,\n depth,\n fields: field.fields,\n joinQuery,\n joins,\n path,\n tablePath,\n topLevelArgs,\n topLevelTableName,\n })\n\n return\n }\n\n if (field.type === 'tabs') {\n field.tabs.forEach((tab) => {\n const tabPath = tabHasName(tab) ? `${path}${tab.name}_` : path\n const tabTablePath = tabHasName(tab) ? `${tablePath}${toSnakeCase(tab.name)}_` : tablePath\n\n traverseFields({\n _locales,\n adapter,\n currentArgs,\n currentTableName,\n depth,\n fields: tab.fields,\n joinQuery,\n joins,\n path: tabPath,\n tablePath: tabTablePath,\n topLevelArgs,\n topLevelTableName,\n })\n })\n\n return\n }\n\n if (fieldAffectsData(field)) {\n switch (field.type) {\n case 'array': {\n const withArray: Result = {\n columns: {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const arrayTableName = adapter.tableNameMap.get(\n `${currentTableName}_${tablePath}${toSnakeCase(field.name)}`,\n )\n\n const arrayTableNameWithLocales = `${arrayTableName}${adapter.localesSuffix}`\n\n if (adapter.tables[arrayTableNameWithLocales]) {\n withArray.with._locales = {\n columns: {\n id: false,\n _parentID: false,\n },\n with: {},\n }\n }\n currentArgs.with[`${path}${field.name}`] = withArray\n\n traverseFields({\n _locales: withArray.with._locales,\n adapter,\n currentArgs: withArray,\n currentTableName: arrayTableName,\n depth,\n fields: field.fields,\n joinQuery,\n path: '',\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n })\n\n break\n }\n\n case 'select': {\n if (field.hasMany) {\n const withSelect: Result = {\n columns: {\n id: false,\n order: false,\n parent: false,\n },\n orderBy: ({ order }, { asc }) => [asc(order)],\n }\n\n currentArgs.with[`${path}${field.name}`] = withSelect\n }\n\n break\n }\n\n case 'blocks':\n field.blocks.forEach((block) => {\n const blockKey = `_blocks_${block.slug}`\n\n if (!topLevelArgs[blockKey]) {\n const withBlock: Result = {\n columns: {\n _parentID: false,\n },\n orderBy: ({ _order }, { asc }) => [asc(_order)],\n with: {},\n }\n\n const tableName = adapter.tableNameMap.get(\n `${topLevelTableName}_blocks_${toSnakeCase(block.slug)}`,\n )\n\n if (adapter.tables[`${tableName}${adapter.localesSuffix}`]) {\n withBlock.with._locales = {\n with: {},\n }\n }\n topLevelArgs.with[blockKey] = withBlock\n\n traverseFields({\n _locales: withBlock.with._locales,\n adapter,\n currentArgs: withBlock,\n currentTableName: tableName,\n depth,\n fields: block.fields,\n joinQuery,\n path: '',\n tablePath: '',\n topLevelArgs,\n topLevelTableName,\n })\n }\n })\n\n break\n\n case 'group': {\n traverseFields({\n _locales,\n adapter,\n currentArgs,\n currentTableName,\n depth,\n fields: field.fields,\n joinQuery,\n joins,\n path: `${path}${field.name}_`,\n tablePath: `${tablePath}${toSnakeCase(field.name)}_`,\n topLevelArgs,\n topLevelTableName,\n })\n\n break\n }\n\n case 'join': {\n // when `joinsQuery` is false, do not join\n if (joinQuery === false) {\n break\n }\n const {\n limit: limitArg = 10,\n sort,\n where,\n } = joinQuery[`${path.replaceAll('_', '.')}${field.name}`] || {}\n let limit = limitArg\n if (limit !== 0) {\n // get an additional document and slice it later to determine if there is a next page\n limit += 1\n }\n\n const fields = adapter.payload.collections[field.collection].config.fields\n const joinCollectionTableName = adapter.tableNameMap.get(toSnakeCase(field.collection))\n let joinTableName = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${\n field.localized && adapter.payload.config.localization ? adapter.localesSuffix : ''\n }`\n\n if (field.hasMany) {\n const db = adapter.drizzle as LibSQLDatabase\n if (field.localized) {\n joinTableName = adapter.tableNameMap.get(toSnakeCase(field.collection))\n }\n const joinTable = `${joinTableName}${adapter.relationshipsSuffix}`\n\n const joins: BuildQueryJoinAliases = [\n {\n type: 'innerJoin',\n condition: and(\n eq(adapter.tables[joinTable].parent, adapter.tables[joinTableName].id),\n eq(\n sql.raw(`\"${joinTable}\".\"${topLevelTableName}_id\"`),\n adapter.tables[currentTableName].id,\n ),\n eq(adapter.tables[joinTable].path, field.on),\n ),\n table: adapter.tables[joinTable],\n },\n ]\n\n const { orderBy, where: subQueryWhere } = buildQuery({\n adapter,\n fields,\n joins,\n locale,\n sort,\n tableName: joinCollectionTableName,\n where: {},\n })\n\n const chainedMethods: ChainedMethods = []\n\n joins.forEach(({ type, condition, table }) => {\n chainedMethods.push({\n args: [table, condition],\n method: type ?? 'leftJoin',\n })\n })\n\n const subQuery = chainMethods({\n methods: chainedMethods,\n query: db\n .select({\n id: adapter.tables[joinTableName].id,\n ...(field.localized && {\n locale: adapter.tables[joinTable].locale,\n }),\n })\n .from(adapter.tables[joinTableName])\n .where(subQueryWhere)\n .orderBy(orderBy.order(orderBy.column))\n .limit(limit),\n })\n\n const columnName = `${path.replaceAll('.', '_')}${field.name}`\n\n const jsonObjectSelect = field.localized\n ? sql.raw(`'_parentID', \"id\", '_locale', \"locale\"`)\n : sql.raw(`'id', \"id\"`)\n\n if (adapter.name === 'sqlite') {\n currentArgs.extras[columnName] = sql`\n COALESCE((\n SELECT json_group_array(json_object(${jsonObjectSelect}))\n FROM (\n ${subQuery}\n ) AS ${sql.raw(`${columnName}_sub`)}\n ), '[]')\n `.as(columnName)\n } else {\n currentArgs.extras[columnName] = sql`\n COALESCE((\n SELECT json_agg(json_build_object(${jsonObjectSelect}))\n FROM (\n ${subQuery}\n ) AS ${sql.raw(`${columnName}_sub`)}\n ), '[]'::json)\n `.as(columnName)\n }\n\n break\n }\n\n const selectFields = {}\n\n const withJoin: DBQueryConfig<'many', true, any, any> = {\n columns: selectFields,\n }\n if (limit) {\n withJoin.limit = limit\n }\n\n if (field.localized) {\n withJoin.columns._locale = true\n withJoin.columns._parentID = true\n } else {\n withJoin.columns.id = true\n withJoin.columns.parent = true\n }\n const { orderBy, where: joinWhere } = buildQuery({\n adapter,\n fields,\n joins,\n locale,\n sort,\n tableName: joinTableName,\n where,\n })\n if (joinWhere) {\n withJoin.where = () => joinWhere\n }\n withJoin.orderBy = orderBy.order(orderBy.column)\n currentArgs.with[`${path.replaceAll('.', '_')}${field.name}`] = withJoin\n break\n }\n\n default: {\n break\n }\n }\n }\n })\n\n return topLevelArgs\n}\n"],"names":["and","eq","sql","fieldAffectsData","fieldIsVirtual","tabHasName","toSnakeCase","buildQuery","chainMethods","traverseFields","_locales","adapter","currentArgs","currentTableName","depth","fields","joinQuery","joins","locale","path","tablePath","topLevelArgs","topLevelTableName","forEach","field","type","hasMany","relationTo","localized","with","name","tabs","tab","tabPath","tabTablePath","withArray","columns","_parentID","orderBy","_order","asc","arrayTableName","tableNameMap","get","arrayTableNameWithLocales","localesSuffix","tables","id","withSelect","order","parent","blocks","block","blockKey","slug","withBlock","tableName","limit","limitArg","sort","where","replaceAll","payload","collections","collection","config","joinCollectionTableName","joinTableName","localization","db","drizzle","joinTable","relationshipsSuffix","condition","raw","on","table","subQueryWhere","chainedMethods","push","args","method","subQuery","methods","query","select","from","column","columnName","jsonObjectSelect","extras","as","selectFields","withJoin","_locale","joinWhere"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/postgres/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA6B,MAAM,SAAS,CAAA;AAY9D,eAAO,MAAM,IAAI,EAAE,IAyGlB,CAAA"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/postgres/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA6B,MAAM,SAAS,CAAA;AAY9D,eAAO,MAAM,IAAI,EAAE,IA0GlB,CAAA"}
@@ -44,6 +44,7 @@ export const init = async function init() {
44
44
  disableNotNull: !!collection?.versions?.drafts,
45
45
  disableUnique: false,
46
46
  fields: collection.fields,
47
+ joins: collection.joins,
47
48
  tableName,
48
49
  timestamps: collection.timestamps,
49
50
  versions: false
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init, SanitizedCollectionConfig } from 'payload'\n\nimport { uniqueIndex } from 'drizzle-orm/pg-core'\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BaseExtraConfig, BasePostgresAdapter } from './types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildTable } from './schema/build.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => {\n createTableName({\n adapter: this,\n config: collection,\n })\n\n if (collection.versions) {\n createTableName({\n adapter: this,\n config: collection,\n versions: true,\n versionsCustomName: true,\n })\n }\n })\n this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => {\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n\n const baseExtraConfig: BaseExtraConfig = {}\n\n if (collection.upload.filenameCompoundIndex) {\n const indexName = `${tableName}_filename_compound_idx`\n\n baseExtraConfig.filename_compound_index = (cols) => {\n const colsConstraint = collection.upload.filenameCompoundIndex.map((f) => {\n return cols[f]\n })\n return uniqueIndex(indexName).on(colsConstraint[0], ...colsConstraint.slice(1))\n }\n }\n\n buildTable({\n adapter: this,\n baseExtraConfig,\n disableNotNull: !!collection?.versions?.drafts,\n disableUnique: false,\n fields: collection.fields,\n tableName,\n timestamps: collection.timestamps,\n versions: false,\n })\n\n if (collection.versions) {\n const versionsTableName = this.tableNameMap.get(\n `_${toSnakeCase(collection.slug)}${this.versionsSuffix}`,\n )\n const versionFields = buildVersionCollectionFields(this.payload.config, collection)\n\n buildTable({\n adapter: this,\n disableNotNull: !!collection.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n this.payload.config.globals.forEach((global) => {\n const tableName = createTableName({ adapter: this, config: global })\n\n buildTable({\n adapter: this,\n disableNotNull: !!global?.versions?.drafts,\n disableUnique: false,\n fields: global.fields,\n tableName,\n timestamps: false,\n versions: false,\n })\n\n if (global.versions) {\n const versionsTableName = createTableName({\n adapter: this,\n config: global,\n versions: true,\n versionsCustomName: true,\n })\n const versionFields = buildVersionGlobalFields(this.payload.config, global)\n\n buildTable({\n adapter: this,\n disableNotNull: !!global.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n}\n"],"names":["uniqueIndex","buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","createTableName","executeSchemaHooks","buildTable","init","type","adapter","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","collections","forEach","collection","versions","versionsCustomName","tableName","tableNameMap","get","slug","baseExtraConfig","upload","filenameCompoundIndex","indexName","filename_compound_index","cols","colsConstraint","f","on","slice","disableNotNull","drafts","disableUnique","fields","timestamps","versionsTableName","versionsSuffix","versionFields","globals","global"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/postgres/init.ts"],"sourcesContent":["import type { Init, SanitizedCollectionConfig } from 'payload'\n\nimport { uniqueIndex } from 'drizzle-orm/pg-core'\nimport { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { BaseExtraConfig, BasePostgresAdapter } from './types.js'\n\nimport { createTableName } from '../createTableName.js'\nimport { executeSchemaHooks } from '../utilities/executeSchemaHooks.js'\nimport { buildTable } from './schema/build.js'\n\nexport const init: Init = async function init(this: BasePostgresAdapter) {\n await executeSchemaHooks({ type: 'beforeSchemaInit', adapter: this })\n\n if (this.payload.config.localization) {\n this.enums.enum__locales = this.pgSchema.enum(\n '_locales',\n this.payload.config.localization.locales.map(({ code }) => code) as [string, ...string[]],\n )\n }\n\n this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => {\n createTableName({\n adapter: this,\n config: collection,\n })\n\n if (collection.versions) {\n createTableName({\n adapter: this,\n config: collection,\n versions: true,\n versionsCustomName: true,\n })\n }\n })\n this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => {\n const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))\n\n const baseExtraConfig: BaseExtraConfig = {}\n\n if (collection.upload.filenameCompoundIndex) {\n const indexName = `${tableName}_filename_compound_idx`\n\n baseExtraConfig.filename_compound_index = (cols) => {\n const colsConstraint = collection.upload.filenameCompoundIndex.map((f) => {\n return cols[f]\n })\n return uniqueIndex(indexName).on(colsConstraint[0], ...colsConstraint.slice(1))\n }\n }\n\n buildTable({\n adapter: this,\n baseExtraConfig,\n disableNotNull: !!collection?.versions?.drafts,\n disableUnique: false,\n fields: collection.fields,\n joins: collection.joins,\n tableName,\n timestamps: collection.timestamps,\n versions: false,\n })\n\n if (collection.versions) {\n const versionsTableName = this.tableNameMap.get(\n `_${toSnakeCase(collection.slug)}${this.versionsSuffix}`,\n )\n const versionFields = buildVersionCollectionFields(this.payload.config, collection)\n\n buildTable({\n adapter: this,\n disableNotNull: !!collection.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n this.payload.config.globals.forEach((global) => {\n const tableName = createTableName({ adapter: this, config: global })\n\n buildTable({\n adapter: this,\n disableNotNull: !!global?.versions?.drafts,\n disableUnique: false,\n fields: global.fields,\n tableName,\n timestamps: false,\n versions: false,\n })\n\n if (global.versions) {\n const versionsTableName = createTableName({\n adapter: this,\n config: global,\n versions: true,\n versionsCustomName: true,\n })\n const versionFields = buildVersionGlobalFields(this.payload.config, global)\n\n buildTable({\n adapter: this,\n disableNotNull: !!global.versions?.drafts,\n disableUnique: true,\n fields: versionFields,\n tableName: versionsTableName,\n timestamps: true,\n versions: true,\n })\n }\n })\n\n await executeSchemaHooks({ type: 'afterSchemaInit', adapter: this })\n}\n"],"names":["uniqueIndex","buildVersionCollectionFields","buildVersionGlobalFields","toSnakeCase","createTableName","executeSchemaHooks","buildTable","init","type","adapter","payload","config","localization","enums","enum__locales","pgSchema","enum","locales","map","code","collections","forEach","collection","versions","versionsCustomName","tableName","tableNameMap","get","slug","baseExtraConfig","upload","filenameCompoundIndex","indexName","filename_compound_index","cols","colsConstraint","f","on","slice","disableNotNull","drafts","disableUnique","fields","joins","timestamps","versionsTableName","versionsSuffix","versionFields","globals","global"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { PgColumnBuilder } from 'drizzle-orm/pg-core';
2
- import type { Field } from 'payload';
2
+ import type { Field, SanitizedJoins } from 'payload';
3
3
  import type { BaseExtraConfig, BasePostgresAdapter, RelationMap } from '../types.js';
4
4
  type Args = {
5
5
  adapter: BasePostgresAdapter;
@@ -14,6 +14,7 @@ type Args = {
14
14
  disableNotNull: boolean;
15
15
  disableUnique: boolean;
16
16
  fields: Field[];
17
+ joins?: SanitizedJoins;
17
18
  rootRelationships?: Set<string>;
18
19
  rootRelationsToBuild?: RelationMap;
19
20
  rootTableIDColType?: string;
@@ -35,6 +36,6 @@ type Result = {
35
36
  hasManyTextField: 'index' | boolean;
36
37
  relationsToBuild: RelationMap;
37
38
  };
38
- export declare const buildTable: ({ adapter, baseColumns, baseExtraConfig, disableNotNull, disableUnique, fields, rootRelationships, rootRelationsToBuild, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
39
+ export declare const buildTable: ({ adapter, baseColumns, baseExtraConfig, disableNotNull, disableUnique, fields, joins, rootRelationships, rootRelationsToBuild, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
39
40
  export {};
40
41
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAepC,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EAInB,WAAW,EACZ,MAAM,aAAa,CAAA;AAOpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,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;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,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;IACnC,gBAAgB,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,UAAU,uPAepB,IAAI,KAAG,MAiZT,CAAA"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAepD,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EAInB,WAAW,EACZ,MAAM,aAAa,CAAA;AAOpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,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;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,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;IACnC,gBAAgB,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,UAAU,8PAgBpB,IAAI,KAAG,MAkZT,CAAA"}
@@ -5,7 +5,7 @@ import { createTableName } from '../../createTableName.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 = {}, disableNotNull, disableUnique = false, fields, rootRelationships, rootRelationsToBuild, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps, versions, withinLocalizedArrayOrBlock })=>{
8
+ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, disableNotNull, disableUnique = false, fields, joins, rootRelationships, rootRelationsToBuild, rootTableIDColType, rootTableName: incomingRootTableName, tableName, timestamps, versions, withinLocalizedArrayOrBlock })=>{
9
9
  const isRoot = !incomingRootTableName;
10
10
  const rootTableName = incomingRootTableName || tableName;
11
11
  const columns = baseColumns;
@@ -32,6 +32,7 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, di
32
32
  disableUnique,
33
33
  fields,
34
34
  indexes,
35
+ joins,
35
36
  localesColumns,
36
37
  localesIndexes,
37
38
  newTableName: tableName,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/build.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport type { Field } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n foreignKey,\n index,\n integer,\n numeric,\n serial,\n timestamp,\n unique,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n GenericTable,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseExtraConfig?: BaseExtraConfig\n buildNumbers?: boolean\n buildRelationships?: boolean\n disableNotNull: boolean\n disableUnique: boolean\n fields: Field[]\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: string\n rootTableName?: string\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n disableNotNull,\n disableUnique = false,\n fields,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n const localesColumns: Record<string, PgColumnBuilder> = {}\n const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n let localesTable: GenericTable | PgTableWithColumns<any>\n let textsTable: GenericTable | PgTableWithColumns<any>\n let numbersTable: GenericTable | PgTableWithColumns<any>\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n columns,\n disableNotNull,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = timestamp('created_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n columns.updatedAt = timestamp('updated_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n }\n\n const table = adapter.pgSchema.table(tableName, columns, (cols) => {\n const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func]) => {\n config[key] = func(cols)\n return config\n }, {})\n\n const result = Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n\n return result\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n localesColumns.id = serial('id').primaryKey()\n localesColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').notNull()\n\n localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols) => {\n return Object.entries(localesIndexes).reduce(\n (acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n },\n {\n _localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(\n cols._locale,\n cols._parentID,\n ),\n _parentIdFk: foreignKey({\n name: `${localeTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n adapter.relations[`relations_${localeTableName}`] = relations(localesTable, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n result._parentID = one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n // name the relationship by what the many() relationName is\n relationName: '_locales',\n })\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [localesTable[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], {\n relationName: key,\n })\n }\n })\n\n return result\n })\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n text: varchar('text'),\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n textsTable = adapter.pgSchema.table(textsTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${textsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyTextField === 'index') {\n config.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n config.localeParent = index(`${textsTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[textsTableName] = textsTable\n\n adapter.relations[`relations_${textsTableName}`] = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n relationName: '_texts',\n }),\n }))\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n number: numeric('number'),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${numbersTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyNumberField === 'index') {\n config.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n config.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n adapter.relations[`relations_${numbersTableName}`] = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n relationName: '_numbers',\n }),\n }))\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order'),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n const relationExtraConfig: BaseExtraConfig = {}\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n 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 adapter.relations[`relations_${relationshipsTableName}`] = relations(\n relationshipsTable,\n ({ one }) => {\n const result: Record<string, Relation<string>> = {\n parent: one(table, {\n fields: [relationshipsTable.parent],\n references: [table.id],\n relationName: '_rels',\n }),\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n result[idColumnName] = one(adapter.tables[relatedTableName], {\n fields: [relationshipsTable[idColumnName]],\n references: [adapter.tables[relatedTableName].id],\n relationName: relationTo,\n })\n })\n\n return result\n },\n )\n }\n }\n\n adapter.relations[`relations_${tableName}`] = relations(table, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [table[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: relationName || key })\n }\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable, { relationName: '_locales' })\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable, { relationName: '_texts' })\n }\n\n if (hasManyNumberField) {\n result._numbers = many(numbersTable, { relationName: '_numbers' })\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["relations","foreignKey","index","integer","numeric","serial","timestamp","unique","varchar","toSnakeCase","createTableName","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","disableNotNull","disableUnique","fields","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","func","result","acc","colName","tables","size","localeTableName","localesSuffix","id","primaryKey","_locale","enums","enum__locales","_parentID","_localeParent","on","_parentIdFk","name","foreignColumns","onDelete","many","one","references","textsTableName","order","parent","path","text","locale","orderParentIdx","parentFk","text_idx","localeParent","numbersTableName","number","numberIdx","relationshipColumns","relationExtraConfig","relationshipsTableName","relationshipsSuffix","relationTo","relationshipConfig","payload","collections","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","parentIdx","pathIdx","localeIdx","relatedTableName","idColumnName","_locales","_texts","_numbers","_rels"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/postgres/schema/build.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type {\n ForeignKeyBuilder,\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport type { Field, SanitizedJoins } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n foreignKey,\n index,\n integer,\n numeric,\n serial,\n timestamp,\n unique,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n GenericTable,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n /**\n * After table is created, run these functions to add extra config to the table\n * ie. indexes, multiple columns, etc\n */\n baseExtraConfig?: BaseExtraConfig\n buildNumbers?: boolean\n buildRelationships?: boolean\n disableNotNull: boolean\n disableUnique: boolean\n fields: Field[]\n joins?: SanitizedJoins\n rootRelationships?: Set<string>\n rootRelationsToBuild?: RelationMap\n rootTableIDColType?: string\n rootTableName?: string\n tableName: string\n timestamps?: boolean\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: RelationMap\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n disableNotNull,\n disableUnique = false,\n fields,\n joins,\n rootRelationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n tableName,\n timestamps,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const isRoot = !incomingRootTableName\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n const localesColumns: Record<string, PgColumnBuilder> = {}\n const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n let localesTable: GenericTable | PgTableWithColumns<any>\n let textsTable: GenericTable | PgTableWithColumns<any>\n let numbersTable: GenericTable | PgTableWithColumns<any>\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: RelationMap = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n const {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n columns,\n disableNotNull,\n disableUnique,\n fields,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n // split the relationsToBuild by localized and non-localized\n const localizedRelations = new Map()\n const nonLocalizedRelations = new Map()\n\n relationsToBuild.forEach(({ type, localized, relationName, target }, key) => {\n const map = localized ? localizedRelations : nonLocalizedRelations\n map.set(key, { type, relationName, target })\n })\n\n if (timestamps) {\n columns.createdAt = timestamp('created_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n columns.updatedAt = timestamp('updated_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n }\n\n const table = adapter.pgSchema.table(tableName, columns, (cols) => {\n const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func]) => {\n config[key] = func(cols)\n return config\n }, {})\n\n const result = Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n\n return result\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField || localizedRelations.size) {\n const localeTableName = `${tableName}${adapter.localesSuffix}`\n localesColumns.id = serial('id').primaryKey()\n localesColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').notNull()\n\n localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols) => {\n return Object.entries(localesIndexes).reduce(\n (acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n },\n {\n _localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(\n cols._locale,\n cols._parentID,\n ),\n _parentIdFk: foreignKey({\n name: `${localeTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n adapter.relations[`relations_${localeTableName}`] = relations(localesTable, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n result._parentID = one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n // name the relationship by what the many() relationName is\n relationName: '_locales',\n })\n\n localizedRelations.forEach(({ type, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [localesTable[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], {\n relationName: key,\n })\n }\n })\n\n return result\n })\n }\n\n if (isRoot) {\n if (hasManyTextField) {\n const textsTableName = `${rootTableName}_texts`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n text: varchar('text'),\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n textsTable = adapter.pgSchema.table(textsTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${textsTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyTextField === 'index') {\n config.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n config.localeParent = index(`${textsTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[textsTableName] = textsTable\n\n adapter.relations[`relations_${textsTableName}`] = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n relationName: '_texts',\n }),\n }))\n }\n\n if (hasManyNumberField) {\n const numbersTableName = `${rootTableName}_numbers`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n number: numeric('number'),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols) => {\n const config: Record<string, ForeignKeyBuilder | IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n parentFk: foreignKey({\n name: `${numbersTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [table.id],\n }).onDelete('cascade'),\n }\n\n if (hasManyNumberField === 'index') {\n config.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n config.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return config\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n adapter.relations[`relations_${numbersTableName}`] = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n relationName: '_numbers',\n }),\n }))\n }\n\n if (relationships.size) {\n const relationshipColumns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order'),\n parent: parentIDColumnMap[idColType]('parent_id').notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n const relationExtraConfig: BaseExtraConfig = {}\n const relationshipsTableName = `${tableName}${adapter.relationshipsSuffix}`\n\n relationships.forEach((relationTo) => {\n const relationshipConfig = adapter.payload.collections[relationTo].config\n const formattedRelationTo = createTableName({\n adapter,\n config: relationshipConfig,\n throwValidationError: true,\n })\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomIDType =\n adapter.payload.collections[relationshipConfig.slug]?.customIDType\n\n if (relatedCollectionCustomIDType === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomIDType === 'text') {\n colType = 'varchar'\n }\n\n 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 adapter.relations[`relations_${relationshipsTableName}`] = relations(\n relationshipsTable,\n ({ one }) => {\n const result: Record<string, Relation<string>> = {\n parent: one(table, {\n fields: [relationshipsTable.parent],\n references: [table.id],\n relationName: '_rels',\n }),\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = createTableName({\n adapter,\n config: adapter.payload.collections[relationTo].config,\n throwValidationError: true,\n })\n const idColumnName = `${relationTo}ID`\n result[idColumnName] = one(adapter.tables[relatedTableName], {\n fields: [relationshipsTable[idColumnName]],\n references: [adapter.tables[relatedTableName].id],\n relationName: relationTo,\n })\n })\n\n return result\n },\n )\n }\n }\n\n adapter.relations[`relations_${tableName}`] = relations(table, ({ many, one }) => {\n const result: Record<string, Relation<string>> = {}\n\n nonLocalizedRelations.forEach(({ type, relationName, target }, key) => {\n if (type === 'one') {\n result[key] = one(adapter.tables[target], {\n fields: [table[key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: relationName || key })\n }\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable, { relationName: '_locales' })\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable, { relationName: '_texts' })\n }\n\n if (hasManyNumberField) {\n result._numbers = many(numbersTable, { relationName: '_numbers' })\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n return {\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n relationsToBuild,\n }\n}\n"],"names":["relations","foreignKey","index","integer","numeric","serial","timestamp","unique","varchar","toSnakeCase","createTableName","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","disableNotNull","disableUnique","fields","joins","rootRelationships","rootRelationsToBuild","rootTableIDColType","rootTableName","incomingRootTableName","tableName","timestamps","versions","withinLocalizedArrayOrBlock","isRoot","columns","indexes","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","relationshipsTable","relationsToBuild","Map","idColType","hasLocalizedField","hasLocalizedManyNumberField","hasLocalizedManyTextField","hasLocalizedRelationshipField","hasManyNumberField","hasManyTextField","newTableName","parentTableName","localizedRelations","nonLocalizedRelations","forEach","type","localized","relationName","target","key","map","set","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","func","result","acc","colName","tables","size","localeTableName","localesSuffix","id","primaryKey","_locale","enums","enum__locales","_parentID","_localeParent","on","_parentIdFk","name","foreignColumns","onDelete","many","one","references","textsTableName","order","parent","path","text","locale","orderParentIdx","parentFk","text_idx","localeParent","numbersTableName","number","numberIdx","relationshipColumns","relationExtraConfig","relationshipsTableName","relationshipsSuffix","relationTo","relationshipConfig","payload","collections","formattedRelationTo","throwValidationError","colType","idType","relatedCollectionCustomIDType","slug","customIDType","parentIdx","pathIdx","localeIdx","relatedTableName","idColumnName","_locales","_texts","_numbers","_rels"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core';
2
- import type { Field, TabAsField } from 'payload';
2
+ import type { Field, SanitizedJoins, TabAsField } from 'payload';
3
3
  import type { BasePostgresAdapter, GenericColumns, RelationMap } from '../types.js';
4
4
  type Args = {
5
5
  adapter: BasePostgresAdapter;
@@ -11,6 +11,7 @@ type Args = {
11
11
  fields: (Field | TabAsField)[];
12
12
  forceLocalized?: boolean;
13
13
  indexes: Record<string, (cols: GenericColumns) => IndexBuilder>;
14
+ joins?: SanitizedJoins;
14
15
  localesColumns: Record<string, PgColumnBuilder>;
15
16
  localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>;
16
17
  newTableName: string;
@@ -35,6 +36,6 @@ type Result = {
35
36
  hasManyNumberField: 'index' | boolean;
36
37
  hasManyTextField: 'index' | boolean;
37
38
  };
38
- export declare const traverseFields: ({ adapter, columnPrefix, columns, disableNotNull, disableUnique, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
39
+ export declare const traverseFields: ({ adapter, columnPrefix, columns, disableNotNull, disableUnique, fieldPrefix, fields, forceLocalized, indexes, joins, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, versions, withinLocalizedArrayOrBlock, }: Args) => Result;
39
40
  export {};
40
41
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAqBhD,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACZ,MAAM,aAAa,CAAA;AAWpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,qTAqBxB,IAAI,KAAG,MAm1BT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/postgres/schema/traverseFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAqBhE,OAAO,KAAK,EAEV,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACZ,MAAM,aAAa,CAAA;AAWpB,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,mBAAmB,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gBAAgB,EAAE,WAAW,CAAA;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,yBAAyB,EAAE,OAAO,CAAA;IAClC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;IACrC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,4TAsBxB,IAAI,KAAG,MAg2BT,CAAA"}
@@ -11,7 +11,7 @@ import { createIndex } from './createIndex.js';
11
11
  import { idToUUID } from './idToUUID.js';
12
12
  import { parentIDColumnMap } from './parentIDColumnMap.js';
13
13
  import { withDefault } from './withDefault.js';
14
- export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, versions, withinLocalizedArrayOrBlock })=>{
14
+ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, joins, localesColumns, localesIndexes, newTableName, parentTableName, relationships, relationsToBuild, rootRelationsToBuild, rootTableIDColType, rootTableName, versions, withinLocalizedArrayOrBlock })=>{
15
15
  const throwValidationError = true;
16
16
  let hasLocalizedField = false;
17
17
  let hasLocalizedRelationshipField = false;
@@ -489,6 +489,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
489
489
  fields: field.fields,
490
490
  forceLocalized,
491
491
  indexes,
492
+ joins,
492
493
  localesColumns,
493
494
  localesIndexes,
494
495
  newTableName,
@@ -532,6 +533,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
532
533
  fields: field.fields,
533
534
  forceLocalized: field.localized,
534
535
  indexes,
536
+ joins,
535
537
  localesColumns,
536
538
  localesIndexes,
537
539
  newTableName: `${parentTableName}_${columnName}`,
@@ -580,6 +582,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
580
582
  })),
581
583
  forceLocalized,
582
584
  indexes,
585
+ joins,
583
586
  localesColumns,
584
587
  localesIndexes,
585
588
  newTableName,
@@ -626,6 +629,7 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
626
629
  fields: field.fields,
627
630
  forceLocalized,
628
631
  indexes,
632
+ joins,
629
633
  localesColumns,
630
634
  localesIndexes,
631
635
  newTableName,
@@ -700,9 +704,16 @@ export const traverseFields = ({ adapter, columnPrefix, columns, disableNotNull,
700
704
  case 'join':
701
705
  {
702
706
  // fieldName could be 'posts' or 'group_posts'
703
- // using on as the key for the relation
707
+ // using `on` as the key for the relation
704
708
  const localized = adapter.payload.config.localization && field.localized;
705
- const target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}`;
709
+ const fieldSchemaPath = `${fieldPrefix || ''}${field.name}`;
710
+ let target;
711
+ const joinConfig = joins[field.collection].find(({ schemaPath })=>fieldSchemaPath === schemaPath);
712
+ if (joinConfig.targetField.hasMany) {
713
+ target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`;
714
+ } else {
715
+ target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}`;
716
+ }
706
717
  relationsToBuild.set(fieldName, {
707
718
  type: 'many',
708
719
  // joins are not localized on the parent table
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/postgres/schema/traverseFields.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core'\nimport type { Field, TabAsField } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n boolean,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n PgNumericBuilder,\n PgUUIDBuilder,\n PgVarcharBuilder,\n text,\n timestamp,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport { InvalidConfiguration } from 'payload'\nimport { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { hasLocalesTable } from '../../utilities/hasLocalesTable.js'\nimport { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { buildTable } from './build.js'\nimport { createIndex } from './createIndex.js'\nimport { idToUUID } from './idToUUID.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n columnPrefix?: string\n columns: Record<string, PgColumnBuilder>\n disableNotNull: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: (Field | TabAsField)[]\n forceLocalized?: boolean\n indexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n localesColumns: Record<string, PgColumnBuilder>\n localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n newTableName: string\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: string\n rootTableName: string\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n if (columns.id instanceof PgUUIDBuilder) {\n parentIDColType = 'uuid'\n }\n if (columns.id instanceof PgNumericBuilder) {\n parentIDColType = 'numeric'\n }\n if (columns.id instanceof PgVarcharBuilder) {\n parentIDColType = 'varchar'\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let columnName: string\n let fieldName: string\n\n let targetTable = columns\n let targetIndexes = indexes\n\n if (fieldAffectsData(field)) {\n columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (field.localized || forceLocalized) &&\n field.type !== 'array' &&\n field.type !== 'blocks' &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index) &&\n !['array', 'blocks', 'group', 'point', 'relationship', 'upload'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true)\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n targetIndexes[`${newTableName}_${field.name}Idx`] = createIndex({\n name: field.localized ? [fieldName, '_locale'] : fieldName,\n columnName,\n tableName: newTableName,\n unique,\n })\n }\n }\n\n switch (field.type) {\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n }\n break\n }\n case 'email':\n case 'code':\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(numeric(columnName), field)\n }\n break\n }\n\n case 'richText':\n case 'json': {\n targetTable[fieldName] = withDefault(jsonb(columnName), field)\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n timestamp(columnName, {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n }),\n field,\n )\n break\n }\n\n case 'point': {\n break\n }\n\n case 'radio':\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n adapter.enums[enumName] = adapter.pgSchema.enum(\n enumName,\n field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n }) as [string, ...string[]],\n )\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const baseColumns: Record<string, PgColumnBuilder> = {\n order: integer('order').notNull(),\n parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),\n value: adapter.enums[enumName]('value'),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n orderIdx: (cols) => index(`${selectTableName}_order_idx`).on(cols.order),\n parentFk: (cols) =>\n foreignKey({\n name: `${selectTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n parentIdx: (cols) => index(`${selectTableName}_parent_idx`).on(cols.parent),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = adapter.enums.enum__locales('locale').notNull()\n baseExtraConfig.localeIdx = (cols) =>\n index(`${selectTableName}_locale_idx`).on(cols.locale)\n }\n\n if (field.index) {\n baseExtraConfig.value = (cols) => index(`${selectTableName}_value_idx`).on(cols.value)\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull,\n disableUnique,\n fields: [],\n rootTableName,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.relations[`relations_${selectTableName}`] = relations(\n adapter.tables[selectTableName],\n ({ one }) => ({\n parent: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[selectTableName].parent],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }),\n )\n } else {\n targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field)\n }\n break\n }\n\n case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${arrayTableName}_order_idx`).on(cols._order),\n _parentIDFk: (cols) =>\n foreignKey({\n name: `${arrayTableName}_parent_id_fk`,\n columns: [cols['_parentID']],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${arrayTableName}_parent_id_idx`).on(cols._parentID),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${arrayTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fields: disableUnique ? idToUUID(field.fields) : field.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n adapter.relations[`relations_${arrayTableName}`] = relations(\n adapter.tables[arrayTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[arrayTableName]._parentID],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }\n\n if (hasLocalesTable(field.fields)) {\n result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`], {\n relationName: '_locales',\n })\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[arrayWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n\n break\n }\n\n case 'blocks': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n field.blocks.forEach((block) => {\n const blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n if (!adapter.tables[blockTableName]) {\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),\n _path: text('_path').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${blockTableName}_order_idx`).on(cols._order),\n _parentIdFk: (cols) =>\n foreignKey({\n name: `${blockTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [adapter.tables[rootTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${blockTableName}_parent_id_idx`).on(cols._parentID),\n _pathIdx: (cols) => index(`${blockTableName}_path_idx`).on(cols._path),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${blockTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fields: disableUnique ? idToUUID(block.fields) : block.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n adapter.relations[`relations_${blockTableName}`] = relations(\n adapter.tables[blockTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[rootTableName], {\n fields: [adapter.tables[blockTableName]._parentID],\n references: [adapter.tables[rootTableName].id],\n relationName: `_blocks_${block.slug}`,\n }),\n }\n\n if (hasLocalesTable(block.fields)) {\n result._locales = many(\n adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n { relationName: '_locales' },\n )\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[blockWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n } else if (process.env.NODE_ENV !== 'production' && !versions) {\n validateExistingBlockIsIdentical({\n block,\n localized: field.localized,\n rootTableName,\n table: adapter.tables[blockTableName],\n tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n })\n }\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(`_blocks_${block.slug}`, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n\n case 'tab':\n case 'group': {\n if (!('name' in field)) {\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.fields,\n forceLocalized: field.localized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'tabs': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: tabHasLocalizedField,\n hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,\n hasLocalizedManyTextField: tabHasLocalizedManyTextField,\n hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,\n hasManyNumberField: tabHasManyNumberField,\n hasManyTextField: tabHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (tabHasLocalizedField) {\n hasLocalizedField = true\n }\n if (tabHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (tabHasManyTextField) {\n hasManyTextField = true\n }\n if (tabHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (tabHasManyNumberField) {\n hasManyNumberField = true\n }\n if (tabHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'row':\n case 'collapsible': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n const {\n hasLocalizedField: rowHasLocalizedField,\n hasLocalizedManyNumberField: rowHasLocalizedManyNumberField,\n hasLocalizedManyTextField: rowHasLocalizedManyTextField,\n hasLocalizedRelationshipField: rowHasLocalizedRelationshipField,\n hasManyNumberField: rowHasManyNumberField,\n hasManyTextField: rowHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (rowHasLocalizedField) {\n hasLocalizedField = true\n }\n if (rowHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (rowHasManyTextField) {\n hasManyTextField = true\n }\n if (rowHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (rowHasManyNumberField) {\n hasManyNumberField = true\n }\n if (rowHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => relationships.add(relation))\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(\n () => adapter.tables[tableName].id,\n { onDelete: 'set null' },\n )\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (field.localized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull()\n }\n break\n }\n\n if (\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n case 'join': {\n // fieldName could be 'posts' or 'group_posts'\n // using on as the key for the relation\n const localized = adapter.payload.config.localization && field.localized\n const target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}`\n relationsToBuild.set(fieldName, {\n type: 'many',\n // joins are not localized on the parent table\n localized: false,\n relationName: field.on.replaceAll('.', '_'),\n target,\n })\n break\n }\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull()\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["relations","boolean","foreignKey","index","integer","jsonb","numeric","PgNumericBuilder","PgUUIDBuilder","PgVarcharBuilder","text","timestamp","varchar","InvalidConfiguration","fieldAffectsData","fieldIsVirtual","optionIsObject","toSnakeCase","createTableName","hasLocalesTable","validateExistingBlockIsIdentical","buildTable","createIndex","idToUUID","parentIDColumnMap","withDefault","traverseFields","adapter","columnPrefix","columns","disableNotNull","disableUnique","fieldPrefix","fields","forceLocalized","indexes","localesColumns","localesIndexes","newTableName","parentTableName","relationships","relationsToBuild","rootRelationsToBuild","rootTableIDColType","rootTableName","versions","withinLocalizedArrayOrBlock","throwValidationError","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","id","forEach","field","name","columnName","fieldName","targetTable","targetIndexes","replace","payload","config","localization","localized","type","hasMany","unique","includes","constraintValue","fieldConstraints","tableName","isLocalized","Boolean","mode","precision","withTimezone","enumName","prefix","target","enums","pgSchema","enum","options","map","option","value","selectTableName","versionsCustomName","baseColumns","order","notNull","parent","baseExtraConfig","orderIdx","cols","on","parentFk","foreignColumns","tables","onDelete","parentIdx","locale","enum__locales","localeIdx","set","one","references","relationName","disableNotNullFromHere","admin","condition","arrayTableName","_order","_parentID","_orderIdx","_parentIDFk","_parentIDIdx","_locale","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","rootRelationships","many","result","_locales","localesSuffix","key","arrayWithLocalized","blocks","block","blockTableName","_path","_parentIdFk","_pathIdx","slug","blockWithLocalized","process","env","NODE_ENV","table","tableLocales","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","tabHasLocalizedField","tabHasLocalizedManyNumberField","tabHasLocalizedManyTextField","tabHasLocalizedRelationshipField","tabHasManyNumberField","tabHasManyTextField","tabs","tab","rowHasLocalizedField","rowHasLocalizedManyNumberField","rowHasLocalizedManyTextField","rowHasLocalizedRelationshipField","rowHasManyNumberField","rowHasManyTextField","Array","isArray","relationTo","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","required","collection","replaceAll"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/postgres/schema/traverseFields.ts"],"sourcesContent":["import type { Relation } from 'drizzle-orm'\nimport type { IndexBuilder, PgColumnBuilder } from 'drizzle-orm/pg-core'\nimport type { Field, SanitizedJoins, TabAsField } from 'payload'\n\nimport { relations } from 'drizzle-orm'\nimport {\n boolean,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n PgNumericBuilder,\n PgUUIDBuilder,\n PgVarcharBuilder,\n text,\n timestamp,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport { InvalidConfiguration } from 'payload'\nimport { fieldAffectsData, fieldIsVirtual, optionIsObject } from 'payload/shared'\nimport toSnakeCase from 'to-snake-case'\n\nimport type {\n BaseExtraConfig,\n BasePostgresAdapter,\n GenericColumns,\n IDType,\n RelationMap,\n} from '../types.js'\n\nimport { createTableName } from '../../createTableName.js'\nimport { hasLocalesTable } from '../../utilities/hasLocalesTable.js'\nimport { validateExistingBlockIsIdentical } from '../../utilities/validateExistingBlockIsIdentical.js'\nimport { buildTable } from './build.js'\nimport { createIndex } from './createIndex.js'\nimport { idToUUID } from './idToUUID.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { withDefault } from './withDefault.js'\n\ntype Args = {\n adapter: BasePostgresAdapter\n columnPrefix?: string\n columns: Record<string, PgColumnBuilder>\n disableNotNull: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: (Field | TabAsField)[]\n forceLocalized?: boolean\n indexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n joins?: SanitizedJoins\n localesColumns: Record<string, PgColumnBuilder>\n localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n newTableName: string\n parentTableName: string\n relationships: Set<string>\n relationsToBuild: RelationMap\n rootRelationsToBuild?: RelationMap\n rootTableIDColType: string\n rootTableName: string\n versions: boolean\n /**\n * Tracks whether or not this table is built\n * from the result of a localized array or block field at some point\n */\n withinLocalizedArrayOrBlock?: boolean\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n}: Args): Result => {\n const throwValidationError = true\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n if (columns.id instanceof PgUUIDBuilder) {\n parentIDColType = 'uuid'\n }\n if (columns.id instanceof PgNumericBuilder) {\n parentIDColType = 'numeric'\n }\n if (columns.id instanceof PgVarcharBuilder) {\n parentIDColType = 'varchar'\n }\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') {\n return\n }\n if (fieldIsVirtual(field)) {\n return\n }\n\n let columnName: string\n let fieldName: string\n\n let targetTable = columns\n let targetIndexes = indexes\n\n if (fieldAffectsData(field)) {\n columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (\n adapter.payload.config.localization &&\n (field.localized || forceLocalized) &&\n field.type !== 'array' &&\n field.type !== 'blocks' &&\n (('hasMany' in field && field.hasMany !== true) || !('hasMany' in field))\n ) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index) &&\n !['array', 'blocks', 'group', 'point', 'relationship', 'upload'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true)\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n targetIndexes[`${newTableName}_${field.name}Idx`] = createIndex({\n name: field.localized ? [fieldName, '_locale'] : fieldName,\n columnName,\n tableName: newTableName,\n unique,\n })\n }\n }\n\n switch (field.type) {\n case 'text': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n }\n break\n }\n case 'email':\n case 'code':\n case 'textarea': {\n targetTable[fieldName] = withDefault(varchar(columnName), field)\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = withDefault(numeric(columnName), field)\n }\n break\n }\n\n case 'richText':\n case 'json': {\n targetTable[fieldName] = withDefault(jsonb(columnName), field)\n break\n }\n\n case 'date': {\n targetTable[fieldName] = withDefault(\n timestamp(columnName, {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n }),\n field,\n )\n break\n }\n\n case 'point': {\n break\n }\n\n case 'radio':\n case 'select': {\n const enumName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `enum_${newTableName}_`,\n target: 'enumName',\n throwValidationError,\n })\n\n adapter.enums[enumName] = adapter.pgSchema.enum(\n enumName,\n field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n }) as [string, ...string[]],\n )\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n const baseColumns: Record<string, PgColumnBuilder> = {\n order: integer('order').notNull(),\n parent: parentIDColumnMap[parentIDColType]('parent_id').notNull(),\n value: adapter.enums[enumName]('value'),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n orderIdx: (cols) => index(`${selectTableName}_order_idx`).on(cols.order),\n parentFk: (cols) =>\n foreignKey({\n name: `${selectTableName}_parent_fk`,\n columns: [cols.parent],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n parentIdx: (cols) => index(`${selectTableName}_parent_idx`).on(cols.parent),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns.locale = adapter.enums.enum__locales('locale').notNull()\n baseExtraConfig.localeIdx = (cols) =>\n index(`${selectTableName}_locale_idx`).on(cols.locale)\n }\n\n if (field.index) {\n baseExtraConfig.value = (cols) => index(`${selectTableName}_value_idx`).on(cols.value)\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull,\n disableUnique,\n fields: [],\n rootTableName,\n tableName: selectTableName,\n versions,\n })\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // selects have their own localized table, independent of the base table.\n localized: false,\n target: selectTableName,\n })\n\n adapter.relations[`relations_${selectTableName}`] = relations(\n adapter.tables[selectTableName],\n ({ one }) => ({\n parent: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[selectTableName].parent],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }),\n )\n } else {\n targetTable[fieldName] = withDefault(adapter.enums[enumName](columnName), field)\n }\n break\n }\n\n case 'checkbox': {\n targetTable[fieldName] = withDefault(boolean(columnName), field)\n break\n }\n\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = createTableName({\n adapter,\n config: field,\n parentTableName: newTableName,\n prefix: `${newTableName}_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[parentIDColType]('_parent_id').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${arrayTableName}_order_idx`).on(cols._order),\n _parentIDFk: (cols) =>\n foreignKey({\n name: `${arrayTableName}_parent_id_fk`,\n columns: [cols['_parentID']],\n foreignColumns: [adapter.tables[parentTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${arrayTableName}_parent_id_idx`).on(cols._parentID),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${arrayTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fields: disableUnique ? idToUUID(field.fields) : field.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n tableName: arrayTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n relationsToBuild.set(fieldName, {\n type: 'many',\n // arrays have their own localized table, independent of the base table.\n localized: false,\n target: arrayTableName,\n })\n\n adapter.relations[`relations_${arrayTableName}`] = relations(\n adapter.tables[arrayTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[arrayTableName]._parentID],\n references: [adapter.tables[parentTableName].id],\n relationName: fieldName,\n }),\n }\n\n if (hasLocalesTable(field.fields)) {\n result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`], {\n relationName: '_locales',\n })\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const arrayWithLocalized = localized\n ? `${arrayTableName}${adapter.localesSuffix}`\n : arrayTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[arrayWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n\n break\n }\n\n case 'blocks': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n field.blocks.forEach((block) => {\n const blockTableName = createTableName({\n adapter,\n config: block,\n parentTableName: rootTableName,\n prefix: `${rootTableName}_blocks_`,\n throwValidationError,\n versionsCustomName: versions,\n })\n if (!adapter.tables[blockTableName]) {\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id').notNull(),\n _path: text('_path').notNull(),\n }\n\n const baseExtraConfig: BaseExtraConfig = {\n _orderIdx: (cols) => index(`${blockTableName}_order_idx`).on(cols._order),\n _parentIdFk: (cols) =>\n foreignKey({\n name: `${blockTableName}_parent_id_fk`,\n columns: [cols._parentID],\n foreignColumns: [adapter.tables[rootTableName].id],\n }).onDelete('cascade'),\n _parentIDIdx: (cols) => index(`${blockTableName}_parent_id_idx`).on(cols._parentID),\n _pathIdx: (cols) => index(`${blockTableName}_path_idx`).on(cols._path),\n }\n\n const isLocalized =\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock ||\n forceLocalized\n\n if (isLocalized) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${blockTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasLocalizedManyNumberField: subHasLocalizedManyNumberField,\n hasLocalizedManyTextField: subHasLocalizedManyTextField,\n hasLocalizedRelationshipField: subHasLocalizedRelationshipField,\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fields: disableUnique ? idToUUID(block.fields) : block.fields,\n rootRelationships: relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n tableName: blockTableName,\n versions,\n withinLocalizedArrayOrBlock: isLocalized,\n })\n\n if (subHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = subHasLocalizedManyNumberField\n }\n\n if (subHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = subHasLocalizedRelationshipField\n }\n\n if (subHasLocalizedManyTextField) {\n hasLocalizedManyTextField = subHasLocalizedManyTextField\n }\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index') {\n hasManyTextField = subHasManyTextField\n }\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index') {\n hasManyNumberField = subHasManyNumberField\n }\n }\n\n adapter.relations[`relations_${blockTableName}`] = relations(\n adapter.tables[blockTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[rootTableName], {\n fields: [adapter.tables[blockTableName]._parentID],\n references: [adapter.tables[rootTableName].id],\n relationName: `_blocks_${block.slug}`,\n }),\n }\n\n if (hasLocalesTable(block.fields)) {\n result._locales = many(\n adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n { relationName: '_locales' },\n )\n }\n\n subRelationsToBuild.forEach(({ type, localized, target }, key) => {\n if (type === 'one') {\n const blockWithLocalized = localized\n ? `${blockTableName}${adapter.localesSuffix}`\n : blockTableName\n result[key] = one(adapter.tables[target], {\n fields: [adapter.tables[blockWithLocalized][key]],\n references: [adapter.tables[target].id],\n relationName: key,\n })\n }\n if (type === 'many') {\n result[key] = many(adapter.tables[target], { relationName: key })\n }\n })\n\n return result\n },\n )\n } else if (process.env.NODE_ENV !== 'production' && !versions) {\n validateExistingBlockIsIdentical({\n block,\n localized: field.localized,\n rootTableName,\n table: adapter.tables[blockTableName],\n tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`],\n })\n }\n // blocks relationships are defined from the collection or globals table down to the block, bypassing any subBlocks\n rootRelationsToBuild.set(`_blocks_${block.slug}`, {\n type: 'many',\n // blocks are not localized on the parent table\n localized: false,\n target: blockTableName,\n })\n })\n\n break\n }\n\n case 'tab':\n case 'group': {\n if (!('name' in field)) {\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.fields,\n forceLocalized: field.localized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock: withinLocalizedArrayOrBlock || field.localized,\n })\n\n if (groupHasLocalizedField) {\n hasLocalizedField = true\n }\n if (groupHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (groupHasManyTextField) {\n hasManyTextField = true\n }\n if (groupHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (groupHasManyNumberField) {\n hasManyNumberField = true\n }\n if (groupHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'tabs': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: tabHasLocalizedField,\n hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,\n hasLocalizedManyTextField: tabHasLocalizedManyTextField,\n hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,\n hasManyNumberField: tabHasManyNumberField,\n hasManyTextField: tabHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n forceLocalized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (tabHasLocalizedField) {\n hasLocalizedField = true\n }\n if (tabHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (tabHasManyTextField) {\n hasManyTextField = true\n }\n if (tabHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (tabHasManyNumberField) {\n hasManyNumberField = true\n }\n if (tabHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'row':\n case 'collapsible': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n const {\n hasLocalizedField: rowHasLocalizedField,\n hasLocalizedManyNumberField: rowHasLocalizedManyNumberField,\n hasLocalizedManyTextField: rowHasLocalizedManyTextField,\n hasLocalizedRelationshipField: rowHasLocalizedRelationshipField,\n hasManyNumberField: rowHasManyNumberField,\n hasManyTextField: rowHasManyTextField,\n } = traverseFields({\n adapter,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n joins,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationships,\n relationsToBuild,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n versions,\n withinLocalizedArrayOrBlock,\n })\n\n if (rowHasLocalizedField) {\n hasLocalizedField = true\n }\n if (rowHasLocalizedRelationshipField) {\n hasLocalizedRelationshipField = true\n }\n if (rowHasManyTextField) {\n hasManyTextField = true\n }\n if (rowHasLocalizedManyTextField) {\n hasLocalizedManyTextField = true\n }\n if (rowHasManyNumberField) {\n hasManyNumberField = true\n }\n if (rowHasLocalizedManyNumberField) {\n hasLocalizedManyNumberField = true\n }\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => relationships.add(relation))\n } else if (field.hasMany) {\n relationships.add(field.relationTo)\n } else {\n // simple relationships get a column on the targetTable with a foreign key to the relationTo table\n const relationshipConfig = adapter.payload.collections[field.relationTo].config\n\n const tableName = adapter.tableNameMap.get(toSnakeCase(field.relationTo))\n\n // get the id type of the related collection\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = relationshipConfig.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (relatedCollectionCustomID?.type === 'number') {\n colType = 'numeric'\n }\n if (relatedCollectionCustomID?.type === 'text') {\n colType = 'varchar'\n }\n\n // make the foreign key column for relationship using the correct id column type\n targetTable[fieldName] = parentIDColumnMap[colType](`${columnName}_id`).references(\n () => adapter.tables[tableName].id,\n { onDelete: 'set null' },\n )\n\n // add relationship to table\n relationsToBuild.set(fieldName, {\n type: 'one',\n localized: adapter.payload.config.localization && (field.localized || forceLocalized),\n target: tableName,\n })\n\n // add notNull when not required\n if (!disableNotNull && field.required && !field.admin?.condition) {\n targetTable[fieldName].notNull()\n }\n break\n }\n\n if (\n Boolean(field.localized && adapter.payload.config.localization) ||\n withinLocalizedArrayOrBlock\n ) {\n hasLocalizedRelationshipField = true\n }\n\n break\n\n case 'join': {\n // fieldName could be 'posts' or 'group_posts'\n // using `on` as the key for the relation\n const localized = adapter.payload.config.localization && field.localized\n const fieldSchemaPath = `${fieldPrefix || ''}${field.name}`\n let target: string\n const joinConfig = joins[field.collection].find(\n ({ schemaPath }) => fieldSchemaPath === schemaPath,\n )\n if (joinConfig.targetField.hasMany) {\n target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${adapter.relationshipsSuffix}`\n } else {\n target = `${adapter.tableNameMap.get(toSnakeCase(field.collection))}${localized ? adapter.localesSuffix : ''}`\n }\n relationsToBuild.set(fieldName, {\n type: 'many',\n // joins are not localized on the parent table\n localized: false,\n relationName: field.on.replaceAll('.', '_'),\n target,\n })\n break\n }\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull()\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["relations","boolean","foreignKey","index","integer","jsonb","numeric","PgNumericBuilder","PgUUIDBuilder","PgVarcharBuilder","text","timestamp","varchar","InvalidConfiguration","fieldAffectsData","fieldIsVirtual","optionIsObject","toSnakeCase","createTableName","hasLocalesTable","validateExistingBlockIsIdentical","buildTable","createIndex","idToUUID","parentIDColumnMap","withDefault","traverseFields","adapter","columnPrefix","columns","disableNotNull","disableUnique","fieldPrefix","fields","forceLocalized","indexes","joins","localesColumns","localesIndexes","newTableName","parentTableName","relationships","relationsToBuild","rootRelationsToBuild","rootTableIDColType","rootTableName","versions","withinLocalizedArrayOrBlock","throwValidationError","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","id","forEach","field","name","columnName","fieldName","targetTable","targetIndexes","replace","payload","config","localization","localized","type","hasMany","unique","includes","constraintValue","fieldConstraints","tableName","isLocalized","Boolean","mode","precision","withTimezone","enumName","prefix","target","enums","pgSchema","enum","options","map","option","value","selectTableName","versionsCustomName","baseColumns","order","notNull","parent","baseExtraConfig","orderIdx","cols","on","parentFk","foreignColumns","tables","onDelete","parentIdx","locale","enum__locales","localeIdx","set","one","references","relationName","disableNotNullFromHere","admin","condition","arrayTableName","_order","_parentID","_orderIdx","_parentIDFk","_parentIDIdx","_locale","_localeIdx","subHasLocalizedManyNumberField","subHasLocalizedManyTextField","subHasLocalizedRelationshipField","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","rootRelationships","many","result","_locales","localesSuffix","key","arrayWithLocalized","blocks","block","blockTableName","_path","_parentIdFk","_pathIdx","slug","blockWithLocalized","process","env","NODE_ENV","table","tableLocales","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","tabHasLocalizedField","tabHasLocalizedManyNumberField","tabHasLocalizedManyTextField","tabHasLocalizedRelationshipField","tabHasManyNumberField","tabHasManyTextField","tabs","tab","rowHasLocalizedField","rowHasLocalizedManyNumberField","rowHasLocalizedManyTextField","rowHasLocalizedRelationshipField","rowHasManyNumberField","rowHasManyTextField","Array","isArray","relationTo","relation","add","relationshipConfig","collections","tableNameMap","get","colType","idType","relatedCollectionCustomID","find","required","fieldSchemaPath","joinConfig","collection","schemaPath","targetField","relationshipsSuffix","replaceAll"],"mappings":"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"}
@@ -5,6 +5,7 @@ import type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js';
5
5
  export type BuildQueryJoinAliases = {
6
6
  condition: SQL;
7
7
  table: GenericTable | PgTableWithColumns<any>;
8
+ type?: 'innerJoin' | 'leftJoin' | 'rightJoin';
8
9
  }[];
9
10
  type BuildQueryArgs = {
10
11
  adapter: DrizzleAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"buildQuery.d.ts","sourceRoot":"","sources":["../../src/queries/buildQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,GAAG,CAAA;IACd,KAAK,EAAE,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;CAC9C,EAAE,CAAA;AAEH,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,qBAAqB,CAAA;IAC5B,OAAO,EAAE;QACP,MAAM,EAAE,aAAa,CAAA;QACrB,KAAK,EAAE,OAAO,GAAG,GAAG,OAAO,IAAI,CAAA;KAChC,CAAA;IACD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AACD,QAAA,MAAM,UAAU,+EAQb,cAAc,KAAG,gBAmCnB,CAAA;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"buildQuery.d.ts","sourceRoot":"","sources":["../../src/queries/buildQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,GAAG,CAAA;IACd,KAAK,EAAE,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,CAAA;CAC9C,EAAE,CAAA;AAEH,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,cAAc,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,qBAAqB,CAAA;IAC5B,OAAO,EAAE;QACP,MAAM,EAAE,aAAa,CAAA;QACrB,KAAK,EAAE,OAAO,GAAG,GAAG,OAAO,IAAI,CAAA;KAChC,CAAA;IACD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3C,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AACD,QAAA,MAAM,UAAU,+EAQb,cAAc,KAAG,gBAmCnB,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queries/buildQuery.ts"],"sourcesContent":["import type { asc, desc, SQL } from 'drizzle-orm'\nimport type { PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport type { Field, Where } from 'payload'\n\nimport type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js'\n\nimport { buildOrderBy } from './buildOrderBy.js'\nimport { parseParams } from './parseParams.js'\n\nexport type BuildQueryJoinAliases = {\n condition: SQL\n table: GenericTable | PgTableWithColumns<any>\n}[]\n\ntype BuildQueryArgs = {\n adapter: DrizzleAdapter\n fields: Field[]\n joins?: BuildQueryJoinAliases\n locale?: string\n sort?: string\n tableName: string\n where: Where\n}\n\nexport type BuildQueryResult = {\n joins: BuildQueryJoinAliases\n orderBy: {\n column: GenericColumn\n order: typeof asc | typeof desc\n }\n selectFields: Record<string, GenericColumn>\n where: SQL\n}\nconst buildQuery = function buildQuery({\n adapter,\n fields,\n joins = [],\n locale,\n sort,\n tableName,\n where: incomingWhere,\n}: BuildQueryArgs): BuildQueryResult {\n const selectFields: Record<string, GenericColumn> = {\n id: adapter.tables[tableName].id,\n }\n\n const orderBy = buildOrderBy({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n sort,\n tableName,\n })\n\n let where: SQL\n\n if (incomingWhere && Object.keys(incomingWhere).length > 0) {\n where = parseParams({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n tableName,\n where: incomingWhere,\n })\n }\n\n return {\n joins,\n orderBy,\n selectFields,\n where,\n }\n}\n\nexport default buildQuery\n"],"names":["buildOrderBy","parseParams","buildQuery","adapter","fields","joins","locale","sort","tableName","where","incomingWhere","selectFields","id","tables","orderBy","Object","keys","length"],"mappings":"AAMA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,WAAW,QAAQ,mBAAkB;AA0B9C,MAAMC,aAAa,SAASA,WAAW,EACrCC,OAAO,EACPC,MAAM,EACNC,QAAQ,EAAE,EACVC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,OAAOC,aAAa,EACL;IACf,MAAMC,eAA8C;QAClDC,IAAIT,QAAQU,MAAM,CAACL,UAAU,CAACI,EAAE;IAClC;IAEA,MAAME,UAAUd,aAAa;QAC3BG;QACAC;QACAC;QACAC;QACAK;QACAJ;QACAC;IACF;IAEA,IAAIC;IAEJ,IAAIC,iBAAiBK,OAAOC,IAAI,CAACN,eAAeO,MAAM,GAAG,GAAG;QAC1DR,QAAQR,YAAY;YAClBE;YACAC;YACAC;YACAC;YACAK;YACAH;YACAC,OAAOC;QACT;IACF;IAEA,OAAO;QACLL;QACAS;QACAH;QACAF;IACF;AACF;AAEA,eAAeP,WAAU"}
1
+ {"version":3,"sources":["../../src/queries/buildQuery.ts"],"sourcesContent":["import type { asc, desc, SQL } from 'drizzle-orm'\nimport type { PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport type { Field, Where } from 'payload'\n\nimport type { DrizzleAdapter, GenericColumn, GenericTable } from '../types.js'\n\nimport { buildOrderBy } from './buildOrderBy.js'\nimport { parseParams } from './parseParams.js'\n\nexport type BuildQueryJoinAliases = {\n condition: SQL\n table: GenericTable | PgTableWithColumns<any>\n type?: 'innerJoin' | 'leftJoin' | 'rightJoin'\n}[]\n\ntype BuildQueryArgs = {\n adapter: DrizzleAdapter\n fields: Field[]\n joins?: BuildQueryJoinAliases\n locale?: string\n sort?: string\n tableName: string\n where: Where\n}\n\nexport type BuildQueryResult = {\n joins: BuildQueryJoinAliases\n orderBy: {\n column: GenericColumn\n order: typeof asc | typeof desc\n }\n selectFields: Record<string, GenericColumn>\n where: SQL\n}\nconst buildQuery = function buildQuery({\n adapter,\n fields,\n joins = [],\n locale,\n sort,\n tableName,\n where: incomingWhere,\n}: BuildQueryArgs): BuildQueryResult {\n const selectFields: Record<string, GenericColumn> = {\n id: adapter.tables[tableName].id,\n }\n\n const orderBy = buildOrderBy({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n sort,\n tableName,\n })\n\n let where: SQL\n\n if (incomingWhere && Object.keys(incomingWhere).length > 0) {\n where = parseParams({\n adapter,\n fields,\n joins,\n locale,\n selectFields,\n tableName,\n where: incomingWhere,\n })\n }\n\n return {\n joins,\n orderBy,\n selectFields,\n where,\n }\n}\n\nexport default buildQuery\n"],"names":["buildOrderBy","parseParams","buildQuery","adapter","fields","joins","locale","sort","tableName","where","incomingWhere","selectFields","id","tables","orderBy","Object","keys","length"],"mappings":"AAMA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,WAAW,QAAQ,mBAAkB;AA2B9C,MAAMC,aAAa,SAASA,WAAW,EACrCC,OAAO,EACPC,MAAM,EACNC,QAAQ,EAAE,EACVC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,OAAOC,aAAa,EACL;IACf,MAAMC,eAA8C;QAClDC,IAAIT,QAAQU,MAAM,CAACL,UAAU,CAACI,EAAE;IAClC;IAEA,MAAME,UAAUd,aAAa;QAC3BG;QACAC;QACAC;QACAC;QACAK;QACAJ;QACAC;IACF;IAEA,IAAIC;IAEJ,IAAIC,iBAAiBK,OAAOC,IAAI,CAACN,eAAeO,MAAM,GAAG,GAAG;QAC1DR,QAAQR,YAAY;YAClBE;YACAC;YACAC;YACAC;YACAK;YACAH;YACAC,OAAOC;QACT;IACF;IAEA,OAAO;QACLL;QACAS;QACAH;QACAF;IACF;AACF;AAEA,eAAeP,WAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/transform/read/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AAMnE,KAAK,kBAAkB,GAAG;IACxB;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAA;IACjB;;OAEG;IACH,MAAM,EAAE,eAAe,CAAA;IACvB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAClD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IACxD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAChD;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AAID,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,0JAe7D,kBAAkB,KAAG,CAolBvB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../src/transform/read/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AAMnE,KAAK,kBAAkB,GAAG;IACxB;;OAEG;IACH,OAAO,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAA;IACjB;;OAEG;IACH,MAAM,EAAE,eAAe,CAAA;IACvB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAClD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IACxD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAChD;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC,CAAA;AAID,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,0JAe7D,kBAAkB,KAAG,CA2lBvB,CAAA"}
@@ -51,7 +51,7 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
51
51
  return result;
52
52
  }
53
53
  const fieldName = `${fieldPrefix || ''}${field.name}`;
54
- const fieldData = table[fieldName];
54
+ let fieldData = table[fieldName];
55
55
  const localizedFieldData = {};
56
56
  const valuesToTransform = [];
57
57
  if (fieldPrefix) {
@@ -290,6 +290,10 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
290
290
  }
291
291
  if (field.type === 'join') {
292
292
  const { limit = 10 } = joinQuery?.[`${fieldPrefix.replaceAll('_', '.')}${field.name}`] || {};
293
+ // raw hasMany results from SQLite
294
+ if (typeof fieldData === 'string') {
295
+ fieldData = JSON.parse(fieldData);
296
+ }
293
297
  let fieldResult;
294
298
  if (Array.isArray(fieldData)) {
295
299
  if (field.localized) {
@@ -312,7 +316,9 @@ export const traverseFields = ({ adapter, blocks, config, dataRef, deletions, fi
312
316
  } else {
313
317
  const hasNextPage = limit !== 0 && fieldData.length > limit;
314
318
  fieldResult = {
315
- docs: hasNextPage ? fieldData.slice(0, limit) : fieldData,
319
+ docs: (hasNextPage ? fieldData.slice(0, limit) : fieldData).map(({ id })=>({
320
+ id
321
+ })),
316
322
  hasNextPage
317
323
  };
318
324
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/transform/read/traverseFields.ts"],"sourcesContent":["import type { Field, JoinQuery, SanitizedConfig, TabAsField } from 'payload'\n\nimport { fieldAffectsData, fieldIsVirtual } from 'payload/shared'\n\nimport type { DrizzleAdapter } from '../../types.js'\nimport type { BlocksMap } from '../../utilities/createBlocksMap.js'\n\nimport { transformHasManyNumber } from './hasManyNumber.js'\nimport { transformHasManyText } from './hasManyText.js'\nimport { transformRelationship } from './relationship.js'\n\ntype TraverseFieldsArgs = {\n /**\n * The DB adapter\n */\n adapter: DrizzleAdapter\n /**\n * Pre-formatted blocks map\n */\n blocks: BlocksMap\n /**\n * The full Payload config\n */\n config: SanitizedConfig\n /**\n * The data reference to be mutated within this recursive function\n */\n dataRef: Record<string, unknown>\n /**\n * Data that needs to be removed from the result after all fields have populated\n */\n deletions: (() => void)[]\n /**\n * Column prefix can be built up by group and named tab fields\n */\n fieldPrefix: string\n /**\n * An array of Payload fields to traverse\n */\n fields: (Field | TabAsField)[]\n /**\n *\n */\n joinQuery?: JoinQuery\n /**\n * All hasMany number fields, as returned by Drizzle, keyed on an object by field path\n */\n numbers: Record<string, Record<string, unknown>[]>\n /**\n * The current field path (in dot notation), used to merge in relationships\n */\n path: string\n /**\n * All related documents, as returned by Drizzle, keyed on an object by field path\n */\n relationships: Record<string, Record<string, unknown>[]>\n /**\n * Data structure representing the nearest table from db\n */\n table: Record<string, unknown>\n /**\n * All hasMany text fields, as returned by Drizzle, keyed on an object by field path\n */\n texts: Record<string, Record<string, unknown>[]>\n /**\n * Set to a locale if this group of fields is within a localized array or block.\n */\n withinArrayOrBlockLocale?: string\n}\n\n// Traverse fields recursively, transforming data\n// for each field type into required Payload shape\nexport const traverseFields = <T extends Record<string, unknown>>({\n adapter,\n blocks,\n config,\n dataRef,\n deletions,\n fieldPrefix,\n fields,\n joinQuery,\n numbers,\n path,\n relationships,\n table,\n texts,\n withinArrayOrBlockLocale,\n}: TraverseFieldsArgs): T => {\n const sanitizedPath = path ? `${path}.` : path\n\n const formatted = fields.reduce((result, field) => {\n if (field.type === 'tabs') {\n traverseFields({\n adapter,\n blocks,\n config,\n dataRef,\n deletions,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n joinQuery,\n numbers,\n path,\n relationships,\n table,\n texts,\n withinArrayOrBlockLocale,\n })\n }\n\n if (\n field.type === 'collapsible' ||\n field.type === 'row' ||\n (field.type === 'tab' && !('name' in field))\n ) {\n traverseFields({\n adapter,\n blocks,\n config,\n dataRef,\n deletions,\n fieldPrefix,\n fields: field.fields,\n joinQuery,\n numbers,\n path,\n relationships,\n table,\n texts,\n withinArrayOrBlockLocale,\n })\n }\n\n if (fieldAffectsData(field)) {\n if (fieldIsVirtual(field)) {\n return result\n }\n\n const fieldName = `${fieldPrefix || ''}${field.name}`\n const fieldData = table[fieldName]\n const localizedFieldData = {}\n const valuesToTransform: {\n ref: Record<string, unknown>\n table: Record<string, unknown>\n }[] = []\n\n if (fieldPrefix) {\n deletions.push(() => delete table[fieldName])\n }\n\n if (field.type === 'array') {\n if (Array.isArray(fieldData)) {\n if (field.localized) {\n result[field.name] = fieldData.reduce((arrayResult, row) => {\n if (typeof row._locale === 'string') {\n if (!arrayResult[row._locale]) {\n arrayResult[row._locale] = []\n }\n const locale = row._locale\n const data = {}\n delete row._locale\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n const rowResult = traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: data,\n deletions,\n fieldPrefix: '',\n fields: field.fields,\n numbers,\n path: `${sanitizedPath}${field.name}.${row._order - 1}`,\n relationships,\n table: row,\n texts,\n withinArrayOrBlockLocale: locale,\n })\n\n if ('_order' in rowResult) {\n delete rowResult._order\n }\n\n arrayResult[locale].push(rowResult)\n }\n\n return arrayResult\n }, {})\n } else {\n result[field.name] = fieldData.reduce((acc, row, i) => {\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n if ('_order' in row) {\n delete row._order\n }\n\n if (\n !withinArrayOrBlockLocale ||\n (withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale)\n ) {\n if (row._locale) {\n delete row._locale\n }\n\n acc.push(\n traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: field.fields,\n numbers,\n path: `${sanitizedPath}${field.name}.${i}`,\n relationships,\n table: row,\n texts,\n withinArrayOrBlockLocale,\n }),\n )\n }\n\n return acc\n }, [])\n }\n }\n\n return result\n }\n\n if (field.type === 'blocks') {\n const blockFieldPath = `${sanitizedPath}${field.name}`\n const blocksByPath = blocks[blockFieldPath]\n\n if (Array.isArray(blocksByPath)) {\n if (field.localized) {\n result[field.name] = {}\n\n blocksByPath.forEach((row) => {\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n if (typeof row._locale === 'string') {\n if (!result[field.name][row._locale]) {\n result[field.name][row._locale] = []\n }\n result[field.name][row._locale].push(row)\n delete row._locale\n }\n })\n\n Object.entries(result[field.name]).forEach(([locale, localizedBlocks]) => {\n result[field.name][locale] = localizedBlocks.map((row) => {\n const block = field.blocks.find(({ slug }) => slug === row.blockType)\n\n if (block) {\n const blockResult = traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: block.fields,\n numbers,\n path: `${blockFieldPath}.${row._order - 1}`,\n relationships,\n table: row,\n texts,\n withinArrayOrBlockLocale: locale,\n })\n\n delete blockResult._order\n return blockResult\n }\n\n return {}\n })\n })\n } else {\n // Add locale-specific index to have a proper blockFieldPath for current locale\n // because blocks can be in the same array for different locales!\n if (withinArrayOrBlockLocale && config.localization) {\n for (const locale of config.localization.localeCodes) {\n let localeIndex = 0\n\n for (let i = 0; i < blocksByPath.length; i++) {\n const row = blocksByPath[i]\n if (row._locale === locale) {\n row._index = localeIndex\n localeIndex++\n }\n }\n }\n }\n\n result[field.name] = blocksByPath.reduce((acc, row, i) => {\n delete row._order\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n const block = field.blocks.find(({ slug }) => slug === row.blockType)\n\n if (block) {\n if (\n !withinArrayOrBlockLocale ||\n (withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale)\n ) {\n if (row._locale) {\n delete row._locale\n }\n if (typeof row._index === 'number') {\n i = row._index\n delete row._index\n }\n\n acc.push(\n traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: block.fields,\n numbers,\n path: `${blockFieldPath}.${i}`,\n relationships,\n table: row,\n texts,\n withinArrayOrBlockLocale,\n }),\n )\n\n return acc\n }\n } else {\n acc.push({})\n }\n\n return acc\n }, [])\n }\n }\n\n return result\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (typeof field.relationTo === 'string' && !('hasMany' in field && field.hasMany)) {\n if (\n field.localized &&\n config.localization &&\n config.localization.locales &&\n Array.isArray(table?._locales)\n ) {\n table._locales.forEach((localeRow) => {\n result[field.name] = { [localeRow._locale]: localeRow[fieldName] }\n })\n } else {\n valuesToTransform.push({ ref: result, table })\n }\n } else {\n const relationPathMatch = relationships[`${sanitizedPath}${field.name}`]\n\n if (!relationPathMatch) {\n if ('hasMany' in field && field.hasMany) {\n if (field.localized && config.localization && config.localization.locales) {\n result[field.name] = {\n [config.localization.defaultLocale]: [],\n }\n } else {\n result[field.name] = []\n }\n }\n\n return result\n }\n\n if (field.localized) {\n result[field.name] = {}\n const relationsByLocale: Record<string, Record<string, unknown>[]> = {}\n\n relationPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!relationsByLocale[row.locale]) {\n relationsByLocale[row.locale] = []\n }\n relationsByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(relationsByLocale).forEach(([locale, relations]) => {\n transformRelationship({\n field,\n locale,\n ref: result,\n relations,\n })\n })\n } else {\n transformRelationship({\n field,\n ref: result,\n relations: relationPathMatch,\n withinArrayOrBlockLocale,\n })\n }\n return result\n }\n }\n\n if (field.type === 'join') {\n const { limit = 10 } = joinQuery?.[`${fieldPrefix.replaceAll('_', '.')}${field.name}`] || {}\n\n let fieldResult:\n | { docs: unknown[]; hasNextPage: boolean }\n | Record<string, { docs: unknown[]; hasNextPage: boolean }>\n if (Array.isArray(fieldData)) {\n if (field.localized) {\n fieldResult = fieldData.reduce((joinResult, row) => {\n if (typeof row._locale === 'string') {\n if (!joinResult[row._locale]) {\n joinResult[row._locale] = {\n docs: [],\n hasNextPage: false,\n }\n }\n joinResult[row._locale].docs.push(row._parentID)\n }\n\n return joinResult\n }, {})\n Object.keys(fieldResult).forEach((locale) => {\n fieldResult[locale].hasNextPage = fieldResult[locale].docs.length > limit\n fieldResult[locale].docs = fieldResult[locale].docs.slice(0, limit)\n })\n } else {\n const hasNextPage = limit !== 0 && fieldData.length > limit\n fieldResult = {\n docs: hasNextPage ? fieldData.slice(0, limit) : fieldData,\n hasNextPage,\n }\n }\n }\n\n result[field.name] = fieldResult\n return result\n }\n\n if (field.type === 'text' && field?.hasMany) {\n const textPathMatch = texts[`${sanitizedPath}${field.name}`]\n if (!textPathMatch) {\n return result\n }\n\n if (field.localized) {\n result[field.name] = {}\n const textsByLocale: Record<string, Record<string, unknown>[]> = {}\n\n textPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!textsByLocale[row.locale]) {\n textsByLocale[row.locale] = []\n }\n textsByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(textsByLocale).forEach(([locale, texts]) => {\n transformHasManyText({\n field,\n locale,\n ref: result,\n textRows: texts,\n })\n })\n } else {\n transformHasManyText({\n field,\n ref: result,\n textRows: textPathMatch,\n withinArrayOrBlockLocale,\n })\n }\n\n return result\n }\n\n if (field.type === 'number' && field.hasMany) {\n const numberPathMatch = numbers[`${sanitizedPath}${field.name}`]\n if (!numberPathMatch) {\n return result\n }\n\n if (field.localized) {\n result[field.name] = {}\n const numbersByLocale: Record<string, Record<string, unknown>[]> = {}\n\n numberPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!numbersByLocale[row.locale]) {\n numbersByLocale[row.locale] = []\n }\n numbersByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(numbersByLocale).forEach(([locale, numbers]) => {\n transformHasManyNumber({\n field,\n locale,\n numberRows: numbers,\n ref: result,\n })\n })\n } else {\n transformHasManyNumber({\n field,\n numberRows: numberPathMatch,\n ref: result,\n withinArrayOrBlockLocale,\n })\n }\n\n return result\n }\n\n if (field.type === 'select' && field.hasMany) {\n if (Array.isArray(fieldData)) {\n if (field.localized) {\n result[field.name] = fieldData.reduce((selectResult, row) => {\n if (typeof row.locale === 'string') {\n if (!selectResult[row.locale]) {\n selectResult[row.locale] = []\n }\n selectResult[row.locale].push(row.value)\n }\n\n return selectResult\n }, {})\n } else {\n let selectData = fieldData\n if (withinArrayOrBlockLocale) {\n selectData = selectData.filter(({ locale }) => locale === withinArrayOrBlockLocale)\n }\n result[field.name] = selectData.map(({ value }) => value)\n }\n }\n return result\n }\n\n if (field.localized && Array.isArray(table._locales)) {\n if (!table._locales.length && adapter.payload.config.localization) {\n adapter.payload.config.localization.localeCodes.forEach((_locale) =>\n (table._locales as unknown[]).push({ _locale }),\n )\n }\n\n table._locales.forEach((localeRow) => {\n valuesToTransform.push({\n ref: localizedFieldData,\n table: {\n ...table,\n ...localeRow,\n },\n })\n })\n } else {\n valuesToTransform.push({ ref: result, table })\n }\n\n valuesToTransform.forEach(({ ref, table }) => {\n const fieldData = table[`${fieldPrefix || ''}${field.name}`]\n const locale = table?._locale\n let val = fieldData\n\n switch (field.type) {\n case 'tab':\n case 'group': {\n const groupFieldPrefix = `${fieldPrefix || ''}${field.name}_`\n const groupData = {}\n const locale = table._locale as string\n const refKey = field.localized && locale ? locale : field.name\n\n if (field.localized && locale) {\n delete table._locale\n }\n ref[refKey] = traverseFields<Record<string, unknown>>({\n adapter,\n blocks,\n config,\n dataRef: groupData as Record<string, unknown>,\n deletions,\n fieldPrefix: groupFieldPrefix,\n fields: field.fields,\n numbers,\n path: `${sanitizedPath}${field.name}`,\n relationships,\n table,\n texts,\n withinArrayOrBlockLocale: locale || withinArrayOrBlockLocale,\n })\n\n if ('_order' in ref) {\n delete ref._order\n }\n\n return\n }\n\n case 'text': {\n if (typeof fieldData === 'string') {\n val = String(fieldData)\n }\n\n break\n }\n\n case 'number': {\n if (typeof fieldData === 'string') {\n val = Number.parseFloat(fieldData)\n }\n\n break\n }\n\n case 'date': {\n if (typeof fieldData === 'string') {\n val = new Date(fieldData).toISOString()\n }\n\n break\n }\n\n case 'relationship':\n case 'upload': {\n if (\n val &&\n typeof field.relationTo === 'string' &&\n adapter.payload.collections[field.relationTo].customIDType === 'number'\n ) {\n val = Number(val)\n }\n\n break\n }\n\n default: {\n break\n }\n }\n if (typeof locale === 'string') {\n ref[locale] = val\n } else {\n result[field.name] = val\n }\n })\n\n if (Object.keys(localizedFieldData).length > 0) {\n result[field.name] = localizedFieldData\n }\n\n return result\n }\n\n return result\n }, dataRef)\n\n if (Array.isArray(table._locales)) {\n deletions.push(() => delete table._locales)\n }\n\n return formatted as T\n}\n"],"names":["fieldAffectsData","fieldIsVirtual","transformHasManyNumber","transformHasManyText","transformRelationship","traverseFields","adapter","blocks","config","dataRef","deletions","fieldPrefix","fields","joinQuery","numbers","path","relationships","table","texts","withinArrayOrBlockLocale","sanitizedPath","formatted","reduce","result","field","type","tabs","map","tab","fieldName","name","fieldData","localizedFieldData","valuesToTransform","push","Array","isArray","localized","arrayResult","row","_locale","locale","data","_uuid","id","rowResult","_order","acc","i","blockFieldPath","blocksByPath","forEach","Object","entries","localizedBlocks","block","find","slug","blockType","blockResult","localization","localeCodes","localeIndex","length","_index","relationTo","hasMany","locales","_locales","localeRow","ref","relationPathMatch","defaultLocale","relationsByLocale","relations","limit","replaceAll","fieldResult","joinResult","docs","hasNextPage","_parentID","keys","slice","textPathMatch","textsByLocale","textRows","numberPathMatch","numbersByLocale","numberRows","selectResult","value","selectData","filter","payload","val","groupFieldPrefix","groupData","refKey","String","Number","parseFloat","Date","toISOString","collections","customIDType"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/transform/read/traverseFields.ts"],"sourcesContent":["import type { Field, JoinQuery, SanitizedConfig, TabAsField } from 'payload'\n\nimport { fieldAffectsData, fieldIsVirtual } from 'payload/shared'\n\nimport type { DrizzleAdapter } from '../../types.js'\nimport type { BlocksMap } from '../../utilities/createBlocksMap.js'\n\nimport { transformHasManyNumber } from './hasManyNumber.js'\nimport { transformHasManyText } from './hasManyText.js'\nimport { transformRelationship } from './relationship.js'\n\ntype TraverseFieldsArgs = {\n /**\n * The DB adapter\n */\n adapter: DrizzleAdapter\n /**\n * Pre-formatted blocks map\n */\n blocks: BlocksMap\n /**\n * The full Payload config\n */\n config: SanitizedConfig\n /**\n * The data reference to be mutated within this recursive function\n */\n dataRef: Record<string, unknown>\n /**\n * Data that needs to be removed from the result after all fields have populated\n */\n deletions: (() => void)[]\n /**\n * Column prefix can be built up by group and named tab fields\n */\n fieldPrefix: string\n /**\n * An array of Payload fields to traverse\n */\n fields: (Field | TabAsField)[]\n /**\n *\n */\n joinQuery?: JoinQuery\n /**\n * All hasMany number fields, as returned by Drizzle, keyed on an object by field path\n */\n numbers: Record<string, Record<string, unknown>[]>\n /**\n * The current field path (in dot notation), used to merge in relationships\n */\n path: string\n /**\n * All related documents, as returned by Drizzle, keyed on an object by field path\n */\n relationships: Record<string, Record<string, unknown>[]>\n /**\n * Data structure representing the nearest table from db\n */\n table: Record<string, unknown>\n /**\n * All hasMany text fields, as returned by Drizzle, keyed on an object by field path\n */\n texts: Record<string, Record<string, unknown>[]>\n /**\n * Set to a locale if this group of fields is within a localized array or block.\n */\n withinArrayOrBlockLocale?: string\n}\n\n// Traverse fields recursively, transforming data\n// for each field type into required Payload shape\nexport const traverseFields = <T extends Record<string, unknown>>({\n adapter,\n blocks,\n config,\n dataRef,\n deletions,\n fieldPrefix,\n fields,\n joinQuery,\n numbers,\n path,\n relationships,\n table,\n texts,\n withinArrayOrBlockLocale,\n}: TraverseFieldsArgs): T => {\n const sanitizedPath = path ? `${path}.` : path\n\n const formatted = fields.reduce((result, field) => {\n if (field.type === 'tabs') {\n traverseFields({\n adapter,\n blocks,\n config,\n dataRef,\n deletions,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n joinQuery,\n numbers,\n path,\n relationships,\n table,\n texts,\n withinArrayOrBlockLocale,\n })\n }\n\n if (\n field.type === 'collapsible' ||\n field.type === 'row' ||\n (field.type === 'tab' && !('name' in field))\n ) {\n traverseFields({\n adapter,\n blocks,\n config,\n dataRef,\n deletions,\n fieldPrefix,\n fields: field.fields,\n joinQuery,\n numbers,\n path,\n relationships,\n table,\n texts,\n withinArrayOrBlockLocale,\n })\n }\n\n if (fieldAffectsData(field)) {\n if (fieldIsVirtual(field)) {\n return result\n }\n\n const fieldName = `${fieldPrefix || ''}${field.name}`\n let fieldData = table[fieldName]\n const localizedFieldData = {}\n const valuesToTransform: {\n ref: Record<string, unknown>\n table: Record<string, unknown>\n }[] = []\n\n if (fieldPrefix) {\n deletions.push(() => delete table[fieldName])\n }\n\n if (field.type === 'array') {\n if (Array.isArray(fieldData)) {\n if (field.localized) {\n result[field.name] = fieldData.reduce((arrayResult, row) => {\n if (typeof row._locale === 'string') {\n if (!arrayResult[row._locale]) {\n arrayResult[row._locale] = []\n }\n const locale = row._locale\n const data = {}\n delete row._locale\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n const rowResult = traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: data,\n deletions,\n fieldPrefix: '',\n fields: field.fields,\n numbers,\n path: `${sanitizedPath}${field.name}.${row._order - 1}`,\n relationships,\n table: row,\n texts,\n withinArrayOrBlockLocale: locale,\n })\n\n if ('_order' in rowResult) {\n delete rowResult._order\n }\n\n arrayResult[locale].push(rowResult)\n }\n\n return arrayResult\n }, {})\n } else {\n result[field.name] = fieldData.reduce((acc, row, i) => {\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n\n if ('_order' in row) {\n delete row._order\n }\n\n if (\n !withinArrayOrBlockLocale ||\n (withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale)\n ) {\n if (row._locale) {\n delete row._locale\n }\n\n acc.push(\n traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: field.fields,\n numbers,\n path: `${sanitizedPath}${field.name}.${i}`,\n relationships,\n table: row,\n texts,\n withinArrayOrBlockLocale,\n }),\n )\n }\n\n return acc\n }, [])\n }\n }\n\n return result\n }\n\n if (field.type === 'blocks') {\n const blockFieldPath = `${sanitizedPath}${field.name}`\n const blocksByPath = blocks[blockFieldPath]\n\n if (Array.isArray(blocksByPath)) {\n if (field.localized) {\n result[field.name] = {}\n\n blocksByPath.forEach((row) => {\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n if (typeof row._locale === 'string') {\n if (!result[field.name][row._locale]) {\n result[field.name][row._locale] = []\n }\n result[field.name][row._locale].push(row)\n delete row._locale\n }\n })\n\n Object.entries(result[field.name]).forEach(([locale, localizedBlocks]) => {\n result[field.name][locale] = localizedBlocks.map((row) => {\n const block = field.blocks.find(({ slug }) => slug === row.blockType)\n\n if (block) {\n const blockResult = traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: block.fields,\n numbers,\n path: `${blockFieldPath}.${row._order - 1}`,\n relationships,\n table: row,\n texts,\n withinArrayOrBlockLocale: locale,\n })\n\n delete blockResult._order\n return blockResult\n }\n\n return {}\n })\n })\n } else {\n // Add locale-specific index to have a proper blockFieldPath for current locale\n // because blocks can be in the same array for different locales!\n if (withinArrayOrBlockLocale && config.localization) {\n for (const locale of config.localization.localeCodes) {\n let localeIndex = 0\n\n for (let i = 0; i < blocksByPath.length; i++) {\n const row = blocksByPath[i]\n if (row._locale === locale) {\n row._index = localeIndex\n localeIndex++\n }\n }\n }\n }\n\n result[field.name] = blocksByPath.reduce((acc, row, i) => {\n delete row._order\n if (row._uuid) {\n row.id = row._uuid\n delete row._uuid\n }\n const block = field.blocks.find(({ slug }) => slug === row.blockType)\n\n if (block) {\n if (\n !withinArrayOrBlockLocale ||\n (withinArrayOrBlockLocale && withinArrayOrBlockLocale === row._locale)\n ) {\n if (row._locale) {\n delete row._locale\n }\n if (typeof row._index === 'number') {\n i = row._index\n delete row._index\n }\n\n acc.push(\n traverseFields<T>({\n adapter,\n blocks,\n config,\n dataRef: row,\n deletions,\n fieldPrefix: '',\n fields: block.fields,\n numbers,\n path: `${blockFieldPath}.${i}`,\n relationships,\n table: row,\n texts,\n withinArrayOrBlockLocale,\n }),\n )\n\n return acc\n }\n } else {\n acc.push({})\n }\n\n return acc\n }, [])\n }\n }\n\n return result\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (typeof field.relationTo === 'string' && !('hasMany' in field && field.hasMany)) {\n if (\n field.localized &&\n config.localization &&\n config.localization.locales &&\n Array.isArray(table?._locales)\n ) {\n table._locales.forEach((localeRow) => {\n result[field.name] = { [localeRow._locale]: localeRow[fieldName] }\n })\n } else {\n valuesToTransform.push({ ref: result, table })\n }\n } else {\n const relationPathMatch = relationships[`${sanitizedPath}${field.name}`]\n\n if (!relationPathMatch) {\n if ('hasMany' in field && field.hasMany) {\n if (field.localized && config.localization && config.localization.locales) {\n result[field.name] = {\n [config.localization.defaultLocale]: [],\n }\n } else {\n result[field.name] = []\n }\n }\n\n return result\n }\n\n if (field.localized) {\n result[field.name] = {}\n const relationsByLocale: Record<string, Record<string, unknown>[]> = {}\n\n relationPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!relationsByLocale[row.locale]) {\n relationsByLocale[row.locale] = []\n }\n relationsByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(relationsByLocale).forEach(([locale, relations]) => {\n transformRelationship({\n field,\n locale,\n ref: result,\n relations,\n })\n })\n } else {\n transformRelationship({\n field,\n ref: result,\n relations: relationPathMatch,\n withinArrayOrBlockLocale,\n })\n }\n return result\n }\n }\n\n if (field.type === 'join') {\n const { limit = 10 } = joinQuery?.[`${fieldPrefix.replaceAll('_', '.')}${field.name}`] || {}\n\n // raw hasMany results from SQLite\n if (typeof fieldData === 'string') {\n fieldData = JSON.parse(fieldData)\n }\n\n let fieldResult:\n | { docs: unknown[]; hasNextPage: boolean }\n | Record<string, { docs: unknown[]; hasNextPage: boolean }>\n if (Array.isArray(fieldData)) {\n if (field.localized) {\n fieldResult = fieldData.reduce((joinResult, row) => {\n if (typeof row._locale === 'string') {\n if (!joinResult[row._locale]) {\n joinResult[row._locale] = {\n docs: [],\n hasNextPage: false,\n }\n }\n joinResult[row._locale].docs.push(row._parentID)\n }\n\n return joinResult\n }, {})\n Object.keys(fieldResult).forEach((locale) => {\n fieldResult[locale].hasNextPage = fieldResult[locale].docs.length > limit\n fieldResult[locale].docs = fieldResult[locale].docs.slice(0, limit)\n })\n } else {\n const hasNextPage = limit !== 0 && fieldData.length > limit\n fieldResult = {\n docs: (hasNextPage ? fieldData.slice(0, limit) : fieldData).map(({ id }) => ({\n id,\n })),\n hasNextPage,\n }\n }\n }\n\n result[field.name] = fieldResult\n return result\n }\n\n if (field.type === 'text' && field?.hasMany) {\n const textPathMatch = texts[`${sanitizedPath}${field.name}`]\n if (!textPathMatch) {\n return result\n }\n\n if (field.localized) {\n result[field.name] = {}\n const textsByLocale: Record<string, Record<string, unknown>[]> = {}\n\n textPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!textsByLocale[row.locale]) {\n textsByLocale[row.locale] = []\n }\n textsByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(textsByLocale).forEach(([locale, texts]) => {\n transformHasManyText({\n field,\n locale,\n ref: result,\n textRows: texts,\n })\n })\n } else {\n transformHasManyText({\n field,\n ref: result,\n textRows: textPathMatch,\n withinArrayOrBlockLocale,\n })\n }\n\n return result\n }\n\n if (field.type === 'number' && field.hasMany) {\n const numberPathMatch = numbers[`${sanitizedPath}${field.name}`]\n if (!numberPathMatch) {\n return result\n }\n\n if (field.localized) {\n result[field.name] = {}\n const numbersByLocale: Record<string, Record<string, unknown>[]> = {}\n\n numberPathMatch.forEach((row) => {\n if (typeof row.locale === 'string') {\n if (!numbersByLocale[row.locale]) {\n numbersByLocale[row.locale] = []\n }\n numbersByLocale[row.locale].push(row)\n }\n })\n\n Object.entries(numbersByLocale).forEach(([locale, numbers]) => {\n transformHasManyNumber({\n field,\n locale,\n numberRows: numbers,\n ref: result,\n })\n })\n } else {\n transformHasManyNumber({\n field,\n numberRows: numberPathMatch,\n ref: result,\n withinArrayOrBlockLocale,\n })\n }\n\n return result\n }\n\n if (field.type === 'select' && field.hasMany) {\n if (Array.isArray(fieldData)) {\n if (field.localized) {\n result[field.name] = fieldData.reduce((selectResult, row) => {\n if (typeof row.locale === 'string') {\n if (!selectResult[row.locale]) {\n selectResult[row.locale] = []\n }\n selectResult[row.locale].push(row.value)\n }\n\n return selectResult\n }, {})\n } else {\n let selectData = fieldData\n if (withinArrayOrBlockLocale) {\n selectData = selectData.filter(({ locale }) => locale === withinArrayOrBlockLocale)\n }\n result[field.name] = selectData.map(({ value }) => value)\n }\n }\n return result\n }\n\n if (field.localized && Array.isArray(table._locales)) {\n if (!table._locales.length && adapter.payload.config.localization) {\n adapter.payload.config.localization.localeCodes.forEach((_locale) =>\n (table._locales as unknown[]).push({ _locale }),\n )\n }\n\n table._locales.forEach((localeRow) => {\n valuesToTransform.push({\n ref: localizedFieldData,\n table: {\n ...table,\n ...localeRow,\n },\n })\n })\n } else {\n valuesToTransform.push({ ref: result, table })\n }\n\n valuesToTransform.forEach(({ ref, table }) => {\n const fieldData = table[`${fieldPrefix || ''}${field.name}`]\n const locale = table?._locale\n let val = fieldData\n\n switch (field.type) {\n case 'tab':\n case 'group': {\n const groupFieldPrefix = `${fieldPrefix || ''}${field.name}_`\n const groupData = {}\n const locale = table._locale as string\n const refKey = field.localized && locale ? locale : field.name\n\n if (field.localized && locale) {\n delete table._locale\n }\n ref[refKey] = traverseFields<Record<string, unknown>>({\n adapter,\n blocks,\n config,\n dataRef: groupData as Record<string, unknown>,\n deletions,\n fieldPrefix: groupFieldPrefix,\n fields: field.fields,\n numbers,\n path: `${sanitizedPath}${field.name}`,\n relationships,\n table,\n texts,\n withinArrayOrBlockLocale: locale || withinArrayOrBlockLocale,\n })\n\n if ('_order' in ref) {\n delete ref._order\n }\n\n return\n }\n\n case 'text': {\n if (typeof fieldData === 'string') {\n val = String(fieldData)\n }\n\n break\n }\n\n case 'number': {\n if (typeof fieldData === 'string') {\n val = Number.parseFloat(fieldData)\n }\n\n break\n }\n\n case 'date': {\n if (typeof fieldData === 'string') {\n val = new Date(fieldData).toISOString()\n }\n\n break\n }\n\n case 'relationship':\n case 'upload': {\n if (\n val &&\n typeof field.relationTo === 'string' &&\n adapter.payload.collections[field.relationTo].customIDType === 'number'\n ) {\n val = Number(val)\n }\n\n break\n }\n\n default: {\n break\n }\n }\n if (typeof locale === 'string') {\n ref[locale] = val\n } else {\n result[field.name] = val\n }\n })\n\n if (Object.keys(localizedFieldData).length > 0) {\n result[field.name] = localizedFieldData\n }\n\n return result\n }\n\n return result\n }, dataRef)\n\n if (Array.isArray(table._locales)) {\n deletions.push(() => delete table._locales)\n }\n\n return formatted as T\n}\n"],"names":["fieldAffectsData","fieldIsVirtual","transformHasManyNumber","transformHasManyText","transformRelationship","traverseFields","adapter","blocks","config","dataRef","deletions","fieldPrefix","fields","joinQuery","numbers","path","relationships","table","texts","withinArrayOrBlockLocale","sanitizedPath","formatted","reduce","result","field","type","tabs","map","tab","fieldName","name","fieldData","localizedFieldData","valuesToTransform","push","Array","isArray","localized","arrayResult","row","_locale","locale","data","_uuid","id","rowResult","_order","acc","i","blockFieldPath","blocksByPath","forEach","Object","entries","localizedBlocks","block","find","slug","blockType","blockResult","localization","localeCodes","localeIndex","length","_index","relationTo","hasMany","locales","_locales","localeRow","ref","relationPathMatch","defaultLocale","relationsByLocale","relations","limit","replaceAll","JSON","parse","fieldResult","joinResult","docs","hasNextPage","_parentID","keys","slice","textPathMatch","textsByLocale","textRows","numberPathMatch","numbersByLocale","numberRows","selectResult","value","selectData","filter","payload","val","groupFieldPrefix","groupData","refKey","String","Number","parseFloat","Date","toISOString","collections","customIDType"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/drizzle",
3
- "version": "3.0.0-beta.111",
3
+ "version": "3.0.0-beta.113",
4
4
  "description": "A library of shared functions used by different payload database adapters",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -45,11 +45,11 @@
45
45
  "@libsql/client": "^0.6.2",
46
46
  "@types/pg": "8.10.2",
47
47
  "@types/to-snake-case": "1.0.0",
48
- "@payloadcms/eslint-config": "3.0.0-beta.97",
49
- "payload": "3.0.0-beta.111"
48
+ "@payloadcms/eslint-config": "3.0.0-beta.112",
49
+ "payload": "3.0.0-beta.113"
50
50
  },
51
51
  "peerDependencies": {
52
- "payload": "3.0.0-beta.111"
52
+ "payload": "3.0.0-beta.113"
53
53
  },
54
54
  "scripts": {
55
55
  "build": "pnpm build:swc && pnpm build:types",