@strapi/database 5.38.1 → 5.40.0

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":"apply.d.ts","sourceRoot":"","sources":["../../../../src/query/helpers/populate/apply.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AASzC,KAAK,OAAO,GAAG;IACb,EAAE,EAAE,QAAQ,CAAC;IACb,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAoBF,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAkpBnC,QAAA,MAAM,aAAa,YAAmB,GAAG,EAAE,YAAY,OAAO,MAAM,EAAE,GAAG,CAAC,OAAO,OAAO,+BA6DvF,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../../src/query/helpers/populate/apply.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AASzC,KAAK,OAAO,GAAG;IACb,EAAE,EAAE,QAAQ,CAAC;IACb,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAoBF,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAopBnC,QAAA,MAAM,aAAa,YAAmB,GAAG,EAAE,YAAY,OAAO,MAAM,EAAE,GAAG,CAAC,OAAO,OAAO,+BA+DvF,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -388,12 +388,12 @@ const morphToMany = async (input, ctx)=>{
388
388
  }, {});
389
389
  const map = {};
390
390
  const { on, ...typePopulate } = populateValue;
391
- for (const type of Object.keys(idsByType)){
391
+ await Promise.all(Object.keys(idsByType).map(async (type)=>{
392
392
  const ids = idsByType[type];
393
393
  // type was removed but still in morph relation
394
394
  if (!db.metadata.get(type)) {
395
395
  map[type] = {};
396
- continue;
396
+ return;
397
397
  }
398
398
  const qb = db.entityManager.createQueryBuilder(type);
399
399
  const rows = await qb.init(on?.[type] ?? typePopulate).addSelect(`${qb.alias}.${idColumn.referencedColumn}`).where({
@@ -402,7 +402,7 @@ const morphToMany = async (input, ctx)=>{
402
402
  mapResults: false
403
403
  });
404
404
  map[type] = _.groupBy(idColumn.referencedColumn)(rows);
405
- }
405
+ }));
406
406
  results.forEach((result)=>{
407
407
  const joinResults = joinMap[result[joinColumn.referencedColumn]] || [];
408
408
  const matchingRows = joinResults.flatMap((joinResult)=>{
@@ -506,7 +506,7 @@ const applyPopulate = async (results, populate, ctx)=>{
506
506
  if (_.isEmpty(results)) {
507
507
  return results;
508
508
  }
509
- for (const attributeName of Object.keys(populate)){
509
+ const populateAttribute = async (attributeName)=>{
510
510
  const attribute = meta.attributes[attributeName];
511
511
  if (attribute.type !== 'relation') {
512
512
  throw new Error(`Invalid populate attribute ${attributeName}`);
@@ -591,7 +591,8 @@ const applyPopulate = async (results, populate, ctx)=>{
591
591
  break;
592
592
  }
593
593
  }
594
- }
594
+ };
595
+ await Promise.all(Object.keys(populate).map(populateAttribute));
595
596
  };
596
597
 
597
598
  module.exports = applyPopulate;
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport { fromRow } from '../transform';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\nimport type { Meta } from '../../../metadata';\nimport { ID, RelationalAttribute, Relation } from '../../../types';\n\n// We must select the join column id, however whatever it is named will overwrite an attribute of the same name\n// Therefore, we will prefix with something unlikely to conflict with a user attribute\n// TODO: ...and completely restrict the strapi_ prefix for an attribute name in the future\nconst joinColPrefix = '__strapi' as const;\n\ntype Context = {\n db: Database;\n qb: QueryBuilder;\n uid: string;\n};\n\ntype Input<TRelationAttribute extends RelationalAttribute = RelationalAttribute> = {\n attribute: TRelationAttribute;\n attributeName: string;\n results: Row[];\n populateValue: {\n on?: Record<string, Record<string, unknown>>;\n } & Record<string, unknown>;\n\n isCount: boolean;\n};\n\ntype InputWithTarget<TRelationAttribute extends RelationalAttribute = RelationalAttribute> =\n Input<TRelationAttribute> & {\n targetMeta: Meta;\n };\n\ntype MorphIdMap = Record<string, Record<ID, Row[]>>;\n\ntype Row = Record<string, unknown>;\n\n/**\n * Populate oneToOne and manyToOne relation\n * @param {*} input\n * @param {*} ctx\n * @returns\n */\nconst XtoOne = async (\n input: InputWithTarget<Relation.OneToOne | Relation.ManyToOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const { name: joinColumnName, referencedColumn: referencedColumnName } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({ [referencedColumnName]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row[]>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[joinColumnName] as string]));\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: joinTable.orderBy,\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[referencedColumnName] as string]));\n });\n }\n};\n\nconst oneToMany = async (input: InputWithTarget<Relation.OneToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const {\n name: joinColumnName,\n referencedColumn: referencedColumnName,\n on,\n } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({\n [referencedColumnName]: referencedValues,\n ...(on && typeof on === 'function' ? on({ populateValue, results }) : {}),\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string] || []);\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColSelect, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColRenameAs]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((r) => {\n r[attributeName] = fromTargetRow(map[r[referencedColumnName] as string] || []);\n });\n }\n};\n\nconst manyToMany = async (input: InputWithTarget<Relation.ManyToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { joinTable } = attribute;\n\n const populateQb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = populateQb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, populateQb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string] || []);\n });\n};\n\nconst morphX = async (\n input: InputWithTarget<Relation.MorphMany | Relation.MorphOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta } = input;\n const { db, uid } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(target)\n .init(populateValue)\n // .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.name]: referencedValues, [typeColumn.name]: uid })\n .execute<Row>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n } else if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? null : [];\n });\n\n return;\n }\n\n // find with join table\n const qb = db.entityManager.createQueryBuilder(target);\n\n const alias = qb.getAlias();\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinColumn.name,\n rootColumn: joinColumn.referencedColumn,\n rootTable: qb.alias,\n on: {\n ...(joinTable.on || {}),\n field: attributeName,\n },\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect([`${alias}.${idColumn.name}`, `${alias}.${typeColumn.name}`])\n .where({\n [`${alias}.${idColumn.name}`]: referencedValues,\n [`${alias}.${typeColumn.name}`]: uid,\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n }\n};\n\nconst morphToMany = async (input: Input<Relation.MorphToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n // find with join table\n const { joinTable } = attribute;\n\n const { joinColumn, morphColumn } = joinTable;\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n // fetch join table to create the ids map then do the same as morphToOne without the first\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRows = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...(joinTable.on || {}),\n // If the populateValue contains an \"on\" property,\n // only populate the types defined in it\n ...('on' in populateValue\n ? { [morphColumn.typeColumn.name]: Object.keys(populateValue.on ?? {}) }\n : {}),\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const joinMap = _.groupBy(joinColumn.name, joinRows);\n\n const idsByType = joinRows.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!_.has(typeValue, acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n\n continue;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const joinResults = joinMap[result[joinColumn.referencedColumn] as string] || [];\n\n const matchingRows = joinResults.flatMap((joinResult) => {\n const id = joinResult[idColumn.name] as ID;\n const type = joinResult[typeColumn.name] as string;\n\n const targetMeta = db.metadata.get(type);\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n return (map[type][id] || []).map((row) => {\n return {\n [typeField]: type,\n ...fromTargetRow(row),\n };\n });\n });\n\n result[attributeName] = matchingRows;\n });\n};\n\nconst morphToOne = async (input: Input<Relation.MorphToOne>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn } = morphColumn;\n\n // make a map for each type what ids to return\n // make a nested map per id\n\n const idsByType = results.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!(typeValue in acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n if (!type || !id) {\n result[attributeName] = null;\n return;\n }\n\n const matchingRows = map[type][id];\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) =>\n fromRow(db.metadata.get(type), rowOrRows);\n\n result[attributeName] = fromTargetRow(_.first(matchingRows));\n });\n};\n\n// TODO: Omit limit & offset to avoid needing a query per result to avoid making too many queries\nconst pickPopulateParams = (populate: Record<string, unknown>) => {\n const fieldsToPick = [\n 'select',\n 'count',\n 'where',\n 'populate',\n 'orderBy',\n 'filters',\n 'ordering',\n 'on',\n ];\n\n if (populate.count !== true) {\n fieldsToPick.push('limit', 'offset');\n }\n\n return _.pick(fieldsToPick, populate);\n};\n\nconst getPopulateValue = (populate: Record<string, any>, filters: Record<string, any>) => {\n const populateValue = {\n filters,\n ...pickPopulateParams(populate),\n };\n\n if ('on' in populateValue) {\n populateValue.on = _.mapValues(\n (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\n },\n populateValue.on as Record<string, any>\n );\n }\n\n return populateValue;\n};\n\nconst applyPopulate = async (results: Row[], populate: Record<string, any>, ctx: Context) => {\n const { db, uid, qb } = ctx;\n const meta = db.metadata.get(uid);\n\n if (_.isEmpty(results)) {\n return results;\n }\n\n for (const attributeName of Object.keys(populate)) {\n const attribute = meta.attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n throw new Error(`Invalid populate attribute ${attributeName}`);\n }\n\n const populateValue = getPopulateValue(populate[attributeName], qb.state.filters);\n\n const isCount = 'count' in populateValue && populateValue.count === true;\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'manyToOne': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await XtoOne(input, ctx);\n break;\n }\n case 'oneToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await oneToMany(input, ctx);\n break;\n }\n case 'manyToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await manyToMany(input, ctx);\n break;\n }\n case 'morphOne':\n case 'morphMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await morphX(input, ctx);\n break;\n }\n case 'morphToMany': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToMany(input, ctx);\n break;\n }\n case 'morphToOne': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToOne(input, ctx);\n break;\n }\n default: {\n break;\n }\n }\n }\n};\n\nexport default applyPopulate;\n"],"names":["joinColPrefix","XtoOne","input","ctx","attribute","attributeName","results","populateValue","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","_","uniq","map","r","filter","value","isNil","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","first","joinTable","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","orderBy","oneToMany","mapValues","v","ordering","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","get","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRows","Object","keys","joinMap","idsByType","acc","idValue","typeValue","has","push","typePopulate","ids","joinResults","flatMap","joinResult","id","morphToOne","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","Error","state"],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport { fromRow } from '../transform';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\nimport type { Meta } from '../../../metadata';\nimport { ID, RelationalAttribute, Relation } from '../../../types';\n\n// We must select the join column id, however whatever it is named will overwrite an attribute of the same name\n// Therefore, we will prefix with something unlikely to conflict with a user attribute\n// TODO: ...and completely restrict the strapi_ prefix for an attribute name in the future\nconst joinColPrefix = '__strapi' as const;\n\ntype Context = {\n db: Database;\n qb: QueryBuilder;\n uid: string;\n};\n\ntype Input<TRelationAttribute extends RelationalAttribute = RelationalAttribute> = {\n attribute: TRelationAttribute;\n attributeName: string;\n results: Row[];\n populateValue: {\n on?: Record<string, Record<string, unknown>>;\n } & Record<string, unknown>;\n\n isCount: boolean;\n};\n\ntype InputWithTarget<TRelationAttribute extends RelationalAttribute = RelationalAttribute> =\n Input<TRelationAttribute> & {\n targetMeta: Meta;\n };\n\ntype MorphIdMap = Record<string, Record<ID, Row[]>>;\n\ntype Row = Record<string, unknown>;\n\n/**\n * Populate oneToOne and manyToOne relation\n * @param {*} input\n * @param {*} ctx\n * @returns\n */\nconst XtoOne = async (\n input: InputWithTarget<Relation.OneToOne | Relation.ManyToOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const { name: joinColumnName, referencedColumn: referencedColumnName } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({ [referencedColumnName]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row[]>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[joinColumnName] as string]));\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: joinTable.orderBy,\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[referencedColumnName] as string]));\n });\n }\n};\n\nconst oneToMany = async (input: InputWithTarget<Relation.OneToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const {\n name: joinColumnName,\n referencedColumn: referencedColumnName,\n on,\n } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({\n [referencedColumnName]: referencedValues,\n ...(on && typeof on === 'function' ? on({ populateValue, results }) : {}),\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string] || []);\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColSelect, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColRenameAs]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((r) => {\n r[attributeName] = fromTargetRow(map[r[referencedColumnName] as string] || []);\n });\n }\n};\n\nconst manyToMany = async (input: InputWithTarget<Relation.ManyToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { joinTable } = attribute;\n\n const populateQb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = populateQb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, populateQb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string] || []);\n });\n};\n\nconst morphX = async (\n input: InputWithTarget<Relation.MorphMany | Relation.MorphOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta } = input;\n const { db, uid } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(target)\n .init(populateValue)\n // .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.name]: referencedValues, [typeColumn.name]: uid })\n .execute<Row>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n } else if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? null : [];\n });\n\n return;\n }\n\n // find with join table\n const qb = db.entityManager.createQueryBuilder(target);\n\n const alias = qb.getAlias();\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinColumn.name,\n rootColumn: joinColumn.referencedColumn,\n rootTable: qb.alias,\n on: {\n ...(joinTable.on || {}),\n field: attributeName,\n },\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect([`${alias}.${idColumn.name}`, `${alias}.${typeColumn.name}`])\n .where({\n [`${alias}.${idColumn.name}`]: referencedValues,\n [`${alias}.${typeColumn.name}`]: uid,\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n }\n};\n\nconst morphToMany = async (input: Input<Relation.MorphToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n // find with join table\n const { joinTable } = attribute;\n\n const { joinColumn, morphColumn } = joinTable;\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n // fetch join table to create the ids map then do the same as morphToOne without the first\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRows = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...(joinTable.on || {}),\n // If the populateValue contains an \"on\" property,\n // only populate the types defined in it\n ...('on' in populateValue\n ? { [morphColumn.typeColumn.name]: Object.keys(populateValue.on ?? {}) }\n : {}),\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const joinMap = _.groupBy(joinColumn.name, joinRows);\n\n const idsByType = joinRows.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!_.has(typeValue, acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n await Promise.all(\n Object.keys(idsByType).map(async (type) => {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n })\n );\n\n results.forEach((result) => {\n const joinResults = joinMap[result[joinColumn.referencedColumn] as string] || [];\n\n const matchingRows = joinResults.flatMap((joinResult) => {\n const id = joinResult[idColumn.name] as ID;\n const type = joinResult[typeColumn.name] as string;\n\n const targetMeta = db.metadata.get(type);\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n return (map[type][id] || []).map((row) => {\n return {\n [typeField]: type,\n ...fromTargetRow(row),\n };\n });\n });\n\n result[attributeName] = matchingRows;\n });\n};\n\nconst morphToOne = async (input: Input<Relation.MorphToOne>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn } = morphColumn;\n\n // make a map for each type what ids to return\n // make a nested map per id\n\n const idsByType = results.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!(typeValue in acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n if (!type || !id) {\n result[attributeName] = null;\n return;\n }\n\n const matchingRows = map[type][id];\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) =>\n fromRow(db.metadata.get(type), rowOrRows);\n\n result[attributeName] = fromTargetRow(_.first(matchingRows));\n });\n};\n\n// TODO: Omit limit & offset to avoid needing a query per result to avoid making too many queries\nconst pickPopulateParams = (populate: Record<string, unknown>) => {\n const fieldsToPick = [\n 'select',\n 'count',\n 'where',\n 'populate',\n 'orderBy',\n 'filters',\n 'ordering',\n 'on',\n ];\n\n if (populate.count !== true) {\n fieldsToPick.push('limit', 'offset');\n }\n\n return _.pick(fieldsToPick, populate);\n};\n\nconst getPopulateValue = (populate: Record<string, any>, filters: Record<string, any>) => {\n const populateValue = {\n filters,\n ...pickPopulateParams(populate),\n };\n\n if ('on' in populateValue) {\n populateValue.on = _.mapValues(\n (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\n },\n populateValue.on as Record<string, any>\n );\n }\n\n return populateValue;\n};\n\nconst applyPopulate = async (results: Row[], populate: Record<string, any>, ctx: Context) => {\n const { db, uid, qb } = ctx;\n const meta = db.metadata.get(uid);\n\n if (_.isEmpty(results)) {\n return results;\n }\n\n const populateAttribute = async (attributeName: string) => {\n const attribute = meta.attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n throw new Error(`Invalid populate attribute ${attributeName}`);\n }\n\n const populateValue = getPopulateValue(populate[attributeName], qb.state.filters);\n\n const isCount = 'count' in populateValue && populateValue.count === true;\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'manyToOne': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await XtoOne(input, ctx);\n break;\n }\n case 'oneToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await oneToMany(input, ctx);\n break;\n }\n case 'manyToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await manyToMany(input, ctx);\n break;\n }\n case 'morphOne':\n case 'morphMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await morphX(input, ctx);\n break;\n }\n case 'morphToMany': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToMany(input, ctx);\n break;\n }\n case 'morphToOne': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToOne(input, ctx);\n break;\n }\n default: {\n break;\n }\n }\n };\n\n await Promise.all(Object.keys(populate).map(populateAttribute));\n};\n\nexport default applyPopulate;\n"],"names":["joinColPrefix","XtoOne","input","ctx","attribute","attributeName","results","populateValue","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","_","uniq","map","r","filter","value","isNil","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","first","joinTable","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","orderBy","oneToMany","mapValues","v","ordering","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","get","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRows","Object","keys","joinMap","idsByType","acc","idValue","typeValue","has","push","typePopulate","Promise","all","ids","joinResults","flatMap","joinResult","id","morphToOne","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","populateAttribute","Error","state"],"mappings":"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"}
@@ -386,12 +386,12 @@ const morphToMany = async (input, ctx)=>{
386
386
  }, {});
387
387
  const map = {};
388
388
  const { on, ...typePopulate } = populateValue;
389
- for (const type of Object.keys(idsByType)){
389
+ await Promise.all(Object.keys(idsByType).map(async (type)=>{
390
390
  const ids = idsByType[type];
391
391
  // type was removed but still in morph relation
392
392
  if (!db.metadata.get(type)) {
393
393
  map[type] = {};
394
- continue;
394
+ return;
395
395
  }
396
396
  const qb = db.entityManager.createQueryBuilder(type);
397
397
  const rows = await qb.init(on?.[type] ?? typePopulate).addSelect(`${qb.alias}.${idColumn.referencedColumn}`).where({
@@ -400,7 +400,7 @@ const morphToMany = async (input, ctx)=>{
400
400
  mapResults: false
401
401
  });
402
402
  map[type] = _.groupBy(idColumn.referencedColumn)(rows);
403
- }
403
+ }));
404
404
  results.forEach((result)=>{
405
405
  const joinResults = joinMap[result[joinColumn.referencedColumn]] || [];
406
406
  const matchingRows = joinResults.flatMap((joinResult)=>{
@@ -504,7 +504,7 @@ const applyPopulate = async (results, populate, ctx)=>{
504
504
  if (_.isEmpty(results)) {
505
505
  return results;
506
506
  }
507
- for (const attributeName of Object.keys(populate)){
507
+ const populateAttribute = async (attributeName)=>{
508
508
  const attribute = meta.attributes[attributeName];
509
509
  if (attribute.type !== 'relation') {
510
510
  throw new Error(`Invalid populate attribute ${attributeName}`);
@@ -589,7 +589,8 @@ const applyPopulate = async (results, populate, ctx)=>{
589
589
  break;
590
590
  }
591
591
  }
592
- }
592
+ };
593
+ await Promise.all(Object.keys(populate).map(populateAttribute));
593
594
  };
594
595
 
595
596
  export { applyPopulate as default };
@@ -1 +1 @@
1
- {"version":3,"file":"apply.mjs","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport { fromRow } from '../transform';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\nimport type { Meta } from '../../../metadata';\nimport { ID, RelationalAttribute, Relation } from '../../../types';\n\n// We must select the join column id, however whatever it is named will overwrite an attribute of the same name\n// Therefore, we will prefix with something unlikely to conflict with a user attribute\n// TODO: ...and completely restrict the strapi_ prefix for an attribute name in the future\nconst joinColPrefix = '__strapi' as const;\n\ntype Context = {\n db: Database;\n qb: QueryBuilder;\n uid: string;\n};\n\ntype Input<TRelationAttribute extends RelationalAttribute = RelationalAttribute> = {\n attribute: TRelationAttribute;\n attributeName: string;\n results: Row[];\n populateValue: {\n on?: Record<string, Record<string, unknown>>;\n } & Record<string, unknown>;\n\n isCount: boolean;\n};\n\ntype InputWithTarget<TRelationAttribute extends RelationalAttribute = RelationalAttribute> =\n Input<TRelationAttribute> & {\n targetMeta: Meta;\n };\n\ntype MorphIdMap = Record<string, Record<ID, Row[]>>;\n\ntype Row = Record<string, unknown>;\n\n/**\n * Populate oneToOne and manyToOne relation\n * @param {*} input\n * @param {*} ctx\n * @returns\n */\nconst XtoOne = async (\n input: InputWithTarget<Relation.OneToOne | Relation.ManyToOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const { name: joinColumnName, referencedColumn: referencedColumnName } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({ [referencedColumnName]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row[]>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[joinColumnName] as string]));\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: joinTable.orderBy,\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[referencedColumnName] as string]));\n });\n }\n};\n\nconst oneToMany = async (input: InputWithTarget<Relation.OneToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const {\n name: joinColumnName,\n referencedColumn: referencedColumnName,\n on,\n } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({\n [referencedColumnName]: referencedValues,\n ...(on && typeof on === 'function' ? on({ populateValue, results }) : {}),\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string] || []);\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColSelect, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColRenameAs]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((r) => {\n r[attributeName] = fromTargetRow(map[r[referencedColumnName] as string] || []);\n });\n }\n};\n\nconst manyToMany = async (input: InputWithTarget<Relation.ManyToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { joinTable } = attribute;\n\n const populateQb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = populateQb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, populateQb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string] || []);\n });\n};\n\nconst morphX = async (\n input: InputWithTarget<Relation.MorphMany | Relation.MorphOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta } = input;\n const { db, uid } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(target)\n .init(populateValue)\n // .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.name]: referencedValues, [typeColumn.name]: uid })\n .execute<Row>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n } else if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? null : [];\n });\n\n return;\n }\n\n // find with join table\n const qb = db.entityManager.createQueryBuilder(target);\n\n const alias = qb.getAlias();\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinColumn.name,\n rootColumn: joinColumn.referencedColumn,\n rootTable: qb.alias,\n on: {\n ...(joinTable.on || {}),\n field: attributeName,\n },\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect([`${alias}.${idColumn.name}`, `${alias}.${typeColumn.name}`])\n .where({\n [`${alias}.${idColumn.name}`]: referencedValues,\n [`${alias}.${typeColumn.name}`]: uid,\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n }\n};\n\nconst morphToMany = async (input: Input<Relation.MorphToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n // find with join table\n const { joinTable } = attribute;\n\n const { joinColumn, morphColumn } = joinTable;\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n // fetch join table to create the ids map then do the same as morphToOne without the first\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRows = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...(joinTable.on || {}),\n // If the populateValue contains an \"on\" property,\n // only populate the types defined in it\n ...('on' in populateValue\n ? { [morphColumn.typeColumn.name]: Object.keys(populateValue.on ?? {}) }\n : {}),\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const joinMap = _.groupBy(joinColumn.name, joinRows);\n\n const idsByType = joinRows.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!_.has(typeValue, acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n\n continue;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const joinResults = joinMap[result[joinColumn.referencedColumn] as string] || [];\n\n const matchingRows = joinResults.flatMap((joinResult) => {\n const id = joinResult[idColumn.name] as ID;\n const type = joinResult[typeColumn.name] as string;\n\n const targetMeta = db.metadata.get(type);\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n return (map[type][id] || []).map((row) => {\n return {\n [typeField]: type,\n ...fromTargetRow(row),\n };\n });\n });\n\n result[attributeName] = matchingRows;\n });\n};\n\nconst morphToOne = async (input: Input<Relation.MorphToOne>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn } = morphColumn;\n\n // make a map for each type what ids to return\n // make a nested map per id\n\n const idsByType = results.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!(typeValue in acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n if (!type || !id) {\n result[attributeName] = null;\n return;\n }\n\n const matchingRows = map[type][id];\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) =>\n fromRow(db.metadata.get(type), rowOrRows);\n\n result[attributeName] = fromTargetRow(_.first(matchingRows));\n });\n};\n\n// TODO: Omit limit & offset to avoid needing a query per result to avoid making too many queries\nconst pickPopulateParams = (populate: Record<string, unknown>) => {\n const fieldsToPick = [\n 'select',\n 'count',\n 'where',\n 'populate',\n 'orderBy',\n 'filters',\n 'ordering',\n 'on',\n ];\n\n if (populate.count !== true) {\n fieldsToPick.push('limit', 'offset');\n }\n\n return _.pick(fieldsToPick, populate);\n};\n\nconst getPopulateValue = (populate: Record<string, any>, filters: Record<string, any>) => {\n const populateValue = {\n filters,\n ...pickPopulateParams(populate),\n };\n\n if ('on' in populateValue) {\n populateValue.on = _.mapValues(\n (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\n },\n populateValue.on as Record<string, any>\n );\n }\n\n return populateValue;\n};\n\nconst applyPopulate = async (results: Row[], populate: Record<string, any>, ctx: Context) => {\n const { db, uid, qb } = ctx;\n const meta = db.metadata.get(uid);\n\n if (_.isEmpty(results)) {\n return results;\n }\n\n for (const attributeName of Object.keys(populate)) {\n const attribute = meta.attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n throw new Error(`Invalid populate attribute ${attributeName}`);\n }\n\n const populateValue = getPopulateValue(populate[attributeName], qb.state.filters);\n\n const isCount = 'count' in populateValue && populateValue.count === true;\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'manyToOne': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await XtoOne(input, ctx);\n break;\n }\n case 'oneToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await oneToMany(input, ctx);\n break;\n }\n case 'manyToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await manyToMany(input, ctx);\n break;\n }\n case 'morphOne':\n case 'morphMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await morphX(input, ctx);\n break;\n }\n case 'morphToMany': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToMany(input, ctx);\n break;\n }\n case 'morphToOne': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToOne(input, ctx);\n break;\n }\n default: {\n break;\n }\n }\n }\n};\n\nexport default applyPopulate;\n"],"names":["joinColPrefix","XtoOne","input","ctx","attribute","attributeName","results","populateValue","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","_","uniq","map","r","filter","value","isNil","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","first","joinTable","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","orderBy","oneToMany","mapValues","v","ordering","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","get","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRows","Object","keys","joinMap","idsByType","acc","idValue","typeValue","has","push","typePopulate","ids","joinResults","flatMap","joinResult","id","morphToOne","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","Error","state"],"mappings":"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"}
1
+ {"version":3,"file":"apply.mjs","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport { fromRow } from '../transform';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\nimport type { Meta } from '../../../metadata';\nimport { ID, RelationalAttribute, Relation } from '../../../types';\n\n// We must select the join column id, however whatever it is named will overwrite an attribute of the same name\n// Therefore, we will prefix with something unlikely to conflict with a user attribute\n// TODO: ...and completely restrict the strapi_ prefix for an attribute name in the future\nconst joinColPrefix = '__strapi' as const;\n\ntype Context = {\n db: Database;\n qb: QueryBuilder;\n uid: string;\n};\n\ntype Input<TRelationAttribute extends RelationalAttribute = RelationalAttribute> = {\n attribute: TRelationAttribute;\n attributeName: string;\n results: Row[];\n populateValue: {\n on?: Record<string, Record<string, unknown>>;\n } & Record<string, unknown>;\n\n isCount: boolean;\n};\n\ntype InputWithTarget<TRelationAttribute extends RelationalAttribute = RelationalAttribute> =\n Input<TRelationAttribute> & {\n targetMeta: Meta;\n };\n\ntype MorphIdMap = Record<string, Record<ID, Row[]>>;\n\ntype Row = Record<string, unknown>;\n\n/**\n * Populate oneToOne and manyToOne relation\n * @param {*} input\n * @param {*} ctx\n * @returns\n */\nconst XtoOne = async (\n input: InputWithTarget<Relation.OneToOne | Relation.ManyToOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const { name: joinColumnName, referencedColumn: referencedColumnName } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({ [referencedColumnName]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row[]>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[joinColumnName] as string]));\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: joinTable.orderBy,\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[referencedColumnName] as string]));\n });\n }\n};\n\nconst oneToMany = async (input: InputWithTarget<Relation.OneToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const {\n name: joinColumnName,\n referencedColumn: referencedColumnName,\n on,\n } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({\n [referencedColumnName]: referencedValues,\n ...(on && typeof on === 'function' ? on({ populateValue, results }) : {}),\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string] || []);\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColSelect, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColRenameAs]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((r) => {\n r[attributeName] = fromTargetRow(map[r[referencedColumnName] as string] || []);\n });\n }\n};\n\nconst manyToMany = async (input: InputWithTarget<Relation.ManyToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { joinTable } = attribute;\n\n const populateQb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = populateQb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, populateQb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string] || []);\n });\n};\n\nconst morphX = async (\n input: InputWithTarget<Relation.MorphMany | Relation.MorphOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta } = input;\n const { db, uid } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(target)\n .init(populateValue)\n // .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.name]: referencedValues, [typeColumn.name]: uid })\n .execute<Row>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n } else if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? null : [];\n });\n\n return;\n }\n\n // find with join table\n const qb = db.entityManager.createQueryBuilder(target);\n\n const alias = qb.getAlias();\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinColumn.name,\n rootColumn: joinColumn.referencedColumn,\n rootTable: qb.alias,\n on: {\n ...(joinTable.on || {}),\n field: attributeName,\n },\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect([`${alias}.${idColumn.name}`, `${alias}.${typeColumn.name}`])\n .where({\n [`${alias}.${idColumn.name}`]: referencedValues,\n [`${alias}.${typeColumn.name}`]: uid,\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n }\n};\n\nconst morphToMany = async (input: Input<Relation.MorphToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n // find with join table\n const { joinTable } = attribute;\n\n const { joinColumn, morphColumn } = joinTable;\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n // fetch join table to create the ids map then do the same as morphToOne without the first\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRows = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...(joinTable.on || {}),\n // If the populateValue contains an \"on\" property,\n // only populate the types defined in it\n ...('on' in populateValue\n ? { [morphColumn.typeColumn.name]: Object.keys(populateValue.on ?? {}) }\n : {}),\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const joinMap = _.groupBy(joinColumn.name, joinRows);\n\n const idsByType = joinRows.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!_.has(typeValue, acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n await Promise.all(\n Object.keys(idsByType).map(async (type) => {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n })\n );\n\n results.forEach((result) => {\n const joinResults = joinMap[result[joinColumn.referencedColumn] as string] || [];\n\n const matchingRows = joinResults.flatMap((joinResult) => {\n const id = joinResult[idColumn.name] as ID;\n const type = joinResult[typeColumn.name] as string;\n\n const targetMeta = db.metadata.get(type);\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n return (map[type][id] || []).map((row) => {\n return {\n [typeField]: type,\n ...fromTargetRow(row),\n };\n });\n });\n\n result[attributeName] = matchingRows;\n });\n};\n\nconst morphToOne = async (input: Input<Relation.MorphToOne>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn } = morphColumn;\n\n // make a map for each type what ids to return\n // make a nested map per id\n\n const idsByType = results.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!(typeValue in acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n if (!type || !id) {\n result[attributeName] = null;\n return;\n }\n\n const matchingRows = map[type][id];\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) =>\n fromRow(db.metadata.get(type), rowOrRows);\n\n result[attributeName] = fromTargetRow(_.first(matchingRows));\n });\n};\n\n// TODO: Omit limit & offset to avoid needing a query per result to avoid making too many queries\nconst pickPopulateParams = (populate: Record<string, unknown>) => {\n const fieldsToPick = [\n 'select',\n 'count',\n 'where',\n 'populate',\n 'orderBy',\n 'filters',\n 'ordering',\n 'on',\n ];\n\n if (populate.count !== true) {\n fieldsToPick.push('limit', 'offset');\n }\n\n return _.pick(fieldsToPick, populate);\n};\n\nconst getPopulateValue = (populate: Record<string, any>, filters: Record<string, any>) => {\n const populateValue = {\n filters,\n ...pickPopulateParams(populate),\n };\n\n if ('on' in populateValue) {\n populateValue.on = _.mapValues(\n (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\n },\n populateValue.on as Record<string, any>\n );\n }\n\n return populateValue;\n};\n\nconst applyPopulate = async (results: Row[], populate: Record<string, any>, ctx: Context) => {\n const { db, uid, qb } = ctx;\n const meta = db.metadata.get(uid);\n\n if (_.isEmpty(results)) {\n return results;\n }\n\n const populateAttribute = async (attributeName: string) => {\n const attribute = meta.attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n throw new Error(`Invalid populate attribute ${attributeName}`);\n }\n\n const populateValue = getPopulateValue(populate[attributeName], qb.state.filters);\n\n const isCount = 'count' in populateValue && populateValue.count === true;\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'manyToOne': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await XtoOne(input, ctx);\n break;\n }\n case 'oneToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await oneToMany(input, ctx);\n break;\n }\n case 'manyToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await manyToMany(input, ctx);\n break;\n }\n case 'morphOne':\n case 'morphMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await morphX(input, ctx);\n break;\n }\n case 'morphToMany': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToMany(input, ctx);\n break;\n }\n case 'morphToOne': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToOne(input, ctx);\n break;\n }\n default: {\n break;\n }\n }\n };\n\n await Promise.all(Object.keys(populate).map(populateAttribute));\n};\n\nexport default applyPopulate;\n"],"names":["joinColPrefix","XtoOne","input","ctx","attribute","attributeName","results","populateValue","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","_","uniq","map","r","filter","value","isNil","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","first","joinTable","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","orderBy","oneToMany","mapValues","v","ordering","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","get","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRows","Object","keys","joinMap","idsByType","acc","idValue","typeValue","has","push","typePopulate","Promise","all","ids","joinResults","flatMap","joinResult","id","morphToOne","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","populateAttribute","Error","state"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/database",
3
- "version": "5.38.1",
3
+ "version": "5.40.0",
4
4
  "description": "Strapi's database layer",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "repository": {
10
10
  "type": "git",
11
- "url": "git://github.com/strapi/strapi.git",
11
+ "url": "https://github.com/strapi/strapi.git",
12
12
  "directory": "packages/core/database"
13
13
  },
14
14
  "license": "SEE LICENSE IN LICENSE",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@paralleldrive/cuid2": "2.2.2",
46
- "@strapi/utils": "5.38.1",
46
+ "@strapi/utils": "5.40.0",
47
47
  "ajv": "8.18.0",
48
48
  "date-fns": "2.30.0",
49
49
  "debug": "4.3.4",
@@ -55,8 +55,8 @@
55
55
  },
56
56
  "devDependencies": {
57
57
  "@types/fs-extra": "11.0.4",
58
- "eslint-config-custom": "5.38.1",
59
- "tsconfig": "5.38.1"
58
+ "eslint-config-custom": "5.40.0",
59
+ "tsconfig": "5.40.0"
60
60
  },
61
61
  "engines": {
62
62
  "node": ">=20.0.0 <=24.x.x",