@strapi/database 5.58.0 → 5.59.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.
Files changed (104) hide show
  1. package/dist/connection.d.ts.map +1 -1
  2. package/dist/connection.js +15 -2
  3. package/dist/connection.js.map +1 -1
  4. package/dist/connection.mjs +15 -2
  5. package/dist/connection.mjs.map +1 -1
  6. package/dist/dialects/sqlite/index.js +3 -3
  7. package/dist/dialects/sqlite/index.js.map +1 -1
  8. package/dist/dialects/sqlite/index.mjs +3 -3
  9. package/dist/dialects/sqlite/index.mjs.map +1 -1
  10. package/dist/entity-manager/regular-relations.js +1 -1
  11. package/dist/entity-manager/regular-relations.js.map +1 -1
  12. package/dist/entity-manager/regular-relations.mjs +1 -1
  13. package/dist/entity-manager/regular-relations.mjs.map +1 -1
  14. package/dist/index.d.ts +25 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +55 -13
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.mjs +44 -3
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/migrations/internal.d.ts.map +1 -1
  21. package/dist/migrations/internal.js +1 -0
  22. package/dist/migrations/internal.js.map +1 -1
  23. package/dist/migrations/internal.mjs +1 -0
  24. package/dist/migrations/internal.mjs.map +1 -1
  25. package/dist/migrations/runner.d.ts +2 -0
  26. package/dist/migrations/runner.d.ts.map +1 -1
  27. package/dist/migrations/runner.js +7 -2
  28. package/dist/migrations/runner.js.map +1 -1
  29. package/dist/migrations/runner.mjs +7 -2
  30. package/dist/migrations/runner.mjs.map +1 -1
  31. package/dist/migrations/users.d.ts.map +1 -1
  32. package/dist/migrations/users.js +1 -0
  33. package/dist/migrations/users.js.map +1 -1
  34. package/dist/migrations/users.mjs +1 -0
  35. package/dist/migrations/users.mjs.map +1 -1
  36. package/dist/pool-diagnostics/details.d.ts +58 -0
  37. package/dist/pool-diagnostics/details.d.ts.map +1 -0
  38. package/dist/pool-diagnostics/details.js +42 -0
  39. package/dist/pool-diagnostics/details.js.map +1 -0
  40. package/dist/pool-diagnostics/details.mjs +38 -0
  41. package/dist/pool-diagnostics/details.mjs.map +1 -0
  42. package/dist/pool-diagnostics/event-loop.d.ts +31 -0
  43. package/dist/pool-diagnostics/event-loop.d.ts.map +1 -0
  44. package/dist/pool-diagnostics/event-loop.js +59 -0
  45. package/dist/pool-diagnostics/event-loop.js.map +1 -0
  46. package/dist/pool-diagnostics/event-loop.mjs +54 -0
  47. package/dist/pool-diagnostics/event-loop.mjs.map +1 -0
  48. package/dist/pool-diagnostics/format.d.ts +9 -0
  49. package/dist/pool-diagnostics/format.d.ts.map +1 -0
  50. package/dist/pool-diagnostics/format.js +46 -0
  51. package/dist/pool-diagnostics/format.js.map +1 -0
  52. package/dist/pool-diagnostics/format.mjs +42 -0
  53. package/dist/pool-diagnostics/format.mjs.map +1 -0
  54. package/dist/pool-diagnostics/index.d.ts +33 -0
  55. package/dist/pool-diagnostics/index.d.ts.map +1 -0
  56. package/dist/pool-diagnostics/index.js +117 -0
  57. package/dist/pool-diagnostics/index.js.map +1 -0
  58. package/dist/pool-diagnostics/index.mjs +109 -0
  59. package/dist/pool-diagnostics/index.mjs.map +1 -0
  60. package/dist/pool-diagnostics/stack.d.ts +12 -0
  61. package/dist/pool-diagnostics/stack.d.ts.map +1 -0
  62. package/dist/pool-diagnostics/stack.js +46 -0
  63. package/dist/pool-diagnostics/stack.js.map +1 -0
  64. package/dist/pool-diagnostics/stack.mjs +44 -0
  65. package/dist/pool-diagnostics/stack.mjs.map +1 -0
  66. package/dist/query/helpers/populate/apply.d.ts.map +1 -1
  67. package/dist/query/helpers/populate/apply.js +21 -3
  68. package/dist/query/helpers/populate/apply.js.map +1 -1
  69. package/dist/query/helpers/populate/apply.mjs +21 -3
  70. package/dist/query/helpers/populate/apply.mjs.map +1 -1
  71. package/dist/query/helpers/streams/readable.d.ts +1 -1
  72. package/dist/query/helpers/streams/readable.d.ts.map +1 -1
  73. package/dist/query/helpers/streams/readable.js +2 -2
  74. package/dist/query/helpers/streams/readable.js.map +1 -1
  75. package/dist/query/helpers/streams/readable.mjs +1 -1
  76. package/dist/query/helpers/streams/readable.mjs.map +1 -1
  77. package/dist/schema/diff.d.ts.map +1 -1
  78. package/dist/schema/diff.js +3 -3
  79. package/dist/schema/diff.js.map +1 -1
  80. package/dist/schema/diff.mjs +3 -3
  81. package/dist/schema/diff.mjs.map +1 -1
  82. package/dist/schema/index.d.ts.map +1 -1
  83. package/dist/schema/index.js +20 -18
  84. package/dist/schema/index.js.map +1 -1
  85. package/dist/schema/index.mjs +20 -18
  86. package/dist/schema/index.mjs.map +1 -1
  87. package/dist/utils/knex-log.d.ts +19 -0
  88. package/dist/utils/knex-log.d.ts.map +1 -0
  89. package/dist/utils/knex-log.js +51 -0
  90. package/dist/utils/knex-log.js.map +1 -0
  91. package/dist/utils/knex-log.mjs +47 -0
  92. package/dist/utils/knex-log.mjs.map +1 -0
  93. package/dist/utils/throttle.d.ts +26 -0
  94. package/dist/utils/throttle.d.ts.map +1 -0
  95. package/dist/utils/throttle.js +34 -0
  96. package/dist/utils/throttle.js.map +1 -0
  97. package/dist/utils/throttle.mjs +32 -0
  98. package/dist/utils/throttle.mjs.map +1 -0
  99. package/dist/utils/types.d.ts.map +1 -1
  100. package/dist/utils/types.js +9 -9
  101. package/dist/utils/types.js.map +1 -1
  102. package/dist/utils/types.mjs +9 -9
  103. package/dist/utils/types.mjs.map +1 -1
  104. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash';\nimport { hasSort } from '@strapi/utils';\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\n/**\n * Join-table `order` preserves connect order when no explicit populate sort is set.\n * When `populateValue.orderBy` is present, join-table ordering must not take precedence\n * over the target attribute sort (see query-builder join vs root orderBy ordering).\n */\nconst getJoinTableOrderBy = (\n populateValue: Record<string, unknown>,\n joinTable: { orderBy?: Record<string, 'asc' | 'desc'> }\n) => {\n const explicitSort = populateValue.orderBy ?? populateValue.sort;\n\n if (hasSort(explicitSort) || !joinTable.orderBy) {\n return undefined;\n }\n\n return _.mapValues(joinTable.orderBy, (v) => populateValue.ordering || v);\n};\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 = [\n ...new Set(results.map((r) => r[joinColumnName]).filter((value) => value != null)),\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(rows, referencedColumnName);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string]?.[0]);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string]?.[0]);\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 = [\n ...new Set(results.map((r) => r[joinColumnName]).filter((value) => value != null)),\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(rows, referencedColumnName);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\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 = [\n ...new Set(results.map((r) => r[idColumn.referencedColumn]).filter((value) => value != null)),\n ];\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? 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(rows, idColumn.name);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n // Match oneToMany/manyToMany: empty morphMany collections serialize as [], not null.\n const matchingValue =\n attribute.relation === 'morphOne' ? matchingRows?.[0] : 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 = [\n ...new Set(results.map((r) => r[idColumn.referencedColumn]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\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(rows, idColumn.name);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n // Match oneToMany/manyToMany: empty morphMany collections serialize as [], not null.\n const matchingValue =\n attribute.relation === 'morphOne' ? matchingRows?.[0] : 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, isCount } = 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 = [\n ...new Set(results.map((r) => r[joinColumn.referencedColumn]).filter((value) => value != null)),\n ];\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRowsRaw = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...joinTable.on,\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const allowedTypes =\n 'on' in populateValue && populateValue.on ? new Set(Object.keys(populateValue.on)) : null;\n\n const joinRows = allowedTypes\n ? joinRowsRaw.filter((row) => allowedTypes.has(row[typeColumn.name] as string))\n : joinRowsRaw;\n\n if (isCount) {\n const joinMap = _.groupBy(joinRows, joinColumn.name);\n\n results.forEach((result) => {\n result[attributeName] = {\n count: (joinMap[result[joinColumn.referencedColumn] as string] || []).length,\n };\n });\n\n return;\n }\n\n const joinMap = _.groupBy(joinRows, joinColumn.name);\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(acc, typeValue)) {\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(rows, idColumn.referencedColumn);\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 // Spread target first so a same-named user attribute cannot override the morph type UID\n return { ...fromTargetRow(row), [typeField]: type };\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, isCount } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn, typeField = '__type' } = 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 const typeRestrictedTypes =\n on && typeof on === 'object'\n ? Object.keys(idsByType).filter((type) => type in on)\n : Object.keys(idsByType);\n const allowedTypes = new Set(typeRestrictedTypes);\n\n if (isCount) {\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n result[attributeName] = { count: id && type && allowedTypes.has(type) ? 1 : 0 };\n });\n\n return;\n }\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n if (!allowedTypes.has(type)) {\n map[type] = {};\n continue;\n }\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(rows, idColumn.referencedColumn);\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 const row = fromTargetRow(matchingRows?.[0]);\n // Spread target first so a same-named user attribute cannot override the morph type UID\n result[attributeName] = row ? { ...row, [typeField]: type } : row;\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(populate, fieldsToPick);\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(populateValue.on as Record<string, any>, (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\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","getJoinTableOrderBy","populateValue","joinTable","explicitSort","orderBy","sort","hasSort","undefined","_","mapValues","v","ordering","XtoOne","input","ctx","attribute","attributeName","results","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","Set","map","r","filter","value","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","oneToMany","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","get","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRowsRaw","allowedTypes","Object","keys","joinRows","has","joinMap","length","idsByType","acc","idValue","typeValue","push","typePopulate","Promise","all","ids","joinResults","flatMap","joinResult","id","morphToOne","typeRestrictedTypes","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","populateAttribute","Error","state"],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash';\nimport { hasSort } from '@strapi/utils';\n\nimport { fromRow } from '../transform';\nimport { transactionCtx } from '../../../transaction-context';\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\n/**\n * Runs one populate task per key.\n *\n * Inside a transaction every query is bound to the transaction's single connection, and\n * node-postgres deprecated (pg@8.19) and removes (pg@9) calling `client.query()` on a client\n * that is already executing a query. The tasks therefore run one after another there, which\n * costs nothing: the driver was already serialising them on that one connection. Outside a\n * transaction they fan out over the pool as before.\n */\nconst forEachPopulate = async (keys: string[], task: (key: string) => Promise<void>) => {\n if (transactionCtx.get()) {\n for (const key of keys) {\n await task(key);\n }\n\n return;\n }\n\n await Promise.all(keys.map(task));\n};\n\n/**\n * Join-table `order` preserves connect order when no explicit populate sort is set.\n * When `populateValue.orderBy` is present, join-table ordering must not take precedence\n * over the target attribute sort (see query-builder join vs root orderBy ordering).\n */\nconst getJoinTableOrderBy = (\n populateValue: Record<string, unknown>,\n joinTable: { orderBy?: Record<string, 'asc' | 'desc'> }\n) => {\n const explicitSort = populateValue.orderBy ?? populateValue.sort;\n\n if (hasSort(explicitSort) || !joinTable.orderBy) {\n return undefined;\n }\n\n return _.mapValues(joinTable.orderBy, (v) => populateValue.ordering || v);\n};\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 = [\n ...new Set(results.map((r) => r[joinColumnName]).filter((value) => value != null)),\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(rows, referencedColumnName);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string]?.[0]);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string]?.[0]);\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 = [\n ...new Set(results.map((r) => r[joinColumnName]).filter((value) => value != null)),\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(rows, referencedColumnName);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\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 = [\n ...new Set(results.map((r) => r[idColumn.referencedColumn]).filter((value) => value != null)),\n ];\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? 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(rows, idColumn.name);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n // Match oneToMany/manyToMany: empty morphMany collections serialize as [], not null.\n const matchingValue =\n attribute.relation === 'morphOne' ? matchingRows?.[0] : 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 = [\n ...new Set(results.map((r) => r[idColumn.referencedColumn]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\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(rows, idColumn.name);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n // Match oneToMany/manyToMany: empty morphMany collections serialize as [], not null.\n const matchingValue =\n attribute.relation === 'morphOne' ? matchingRows?.[0] : 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, isCount } = 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 = [\n ...new Set(results.map((r) => r[joinColumn.referencedColumn]).filter((value) => value != null)),\n ];\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRowsRaw = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...joinTable.on,\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const allowedTypes =\n 'on' in populateValue && populateValue.on ? new Set(Object.keys(populateValue.on)) : null;\n\n const joinRows = allowedTypes\n ? joinRowsRaw.filter((row) => allowedTypes.has(row[typeColumn.name] as string))\n : joinRowsRaw;\n\n if (isCount) {\n const joinMap = _.groupBy(joinRows, joinColumn.name);\n\n results.forEach((result) => {\n result[attributeName] = {\n count: (joinMap[result[joinColumn.referencedColumn] as string] || []).length,\n };\n });\n\n return;\n }\n\n const joinMap = _.groupBy(joinRows, joinColumn.name);\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(acc, typeValue)) {\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 forEachPopulate(Object.keys(idsByType), 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(rows, idColumn.referencedColumn);\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 // Spread target first so a same-named user attribute cannot override the morph type UID\n return { ...fromTargetRow(row), [typeField]: type };\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, isCount } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn, typeField = '__type' } = 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 const typeRestrictedTypes =\n on && typeof on === 'object'\n ? Object.keys(idsByType).filter((type) => type in on)\n : Object.keys(idsByType);\n const allowedTypes = new Set(typeRestrictedTypes);\n\n if (isCount) {\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n result[attributeName] = { count: id && type && allowedTypes.has(type) ? 1 : 0 };\n });\n\n return;\n }\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n if (!allowedTypes.has(type)) {\n map[type] = {};\n continue;\n }\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(rows, idColumn.referencedColumn);\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 const row = fromTargetRow(matchingRows?.[0]);\n // Spread target first so a same-named user attribute cannot override the morph type UID\n result[attributeName] = row ? { ...row, [typeField]: type } : row;\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(populate, fieldsToPick);\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(populateValue.on as Record<string, any>, (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\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 forEachPopulate(Object.keys(populate), populateAttribute);\n};\n\nexport default applyPopulate;\n"],"names":["joinColPrefix","forEachPopulate","keys","task","transactionCtx","get","key","Promise","all","map","getJoinTableOrderBy","populateValue","joinTable","explicitSort","orderBy","sort","hasSort","undefined","_","mapValues","v","ordering","XtoOne","input","ctx","attribute","attributeName","results","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","Set","r","filter","value","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","oneToMany","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRowsRaw","allowedTypes","Object","joinRows","has","joinMap","length","idsByType","acc","idValue","typeValue","push","typePopulate","ids","joinResults","flatMap","joinResult","id","morphToOne","typeRestrictedTypes","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","populateAttribute","Error","state"],"mappings":"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"}
@@ -1,11 +1,29 @@
1
1
  import _ from 'lodash';
2
2
  import { hasSort } from '@strapi/utils';
3
3
  import { fromRow } from '../transform.mjs';
4
+ import { transactionCtx } from '../../../transaction-context.mjs';
4
5
 
5
6
  // We must select the join column id, however whatever it is named will overwrite an attribute of the same name
6
7
  // Therefore, we will prefix with something unlikely to conflict with a user attribute
7
8
  // TODO: ...and completely restrict the strapi_ prefix for an attribute name in the future
8
9
  const joinColPrefix = '__strapi';
10
+ /**
11
+ * Runs one populate task per key.
12
+ *
13
+ * Inside a transaction every query is bound to the transaction's single connection, and
14
+ * node-postgres deprecated (pg@8.19) and removes (pg@9) calling `client.query()` on a client
15
+ * that is already executing a query. The tasks therefore run one after another there, which
16
+ * costs nothing: the driver was already serialising them on that one connection. Outside a
17
+ * transaction they fan out over the pool as before.
18
+ */ const forEachPopulate = async (keys, task)=>{
19
+ if (transactionCtx.get()) {
20
+ for (const key of keys){
21
+ await task(key);
22
+ }
23
+ return;
24
+ }
25
+ await Promise.all(keys.map(task));
26
+ };
9
27
  /**
10
28
  * Join-table `order` preserves connect order when no explicit populate sort is set.
11
29
  * When `populateValue.orderBy` is present, join-table ordering must not take precedence
@@ -422,7 +440,7 @@ const morphToMany = async (input, ctx)=>{
422
440
  }, {});
423
441
  const map = {};
424
442
  const { on, ...typePopulate } = populateValue;
425
- await Promise.all(Object.keys(idsByType).map(async (type)=>{
443
+ await forEachPopulate(Object.keys(idsByType), async (type)=>{
426
444
  const ids = idsByType[type];
427
445
  // type was removed but still in morph relation
428
446
  if (!db.metadata.get(type)) {
@@ -436,7 +454,7 @@ const morphToMany = async (input, ctx)=>{
436
454
  mapResults: false
437
455
  });
438
456
  map[type] = _.groupBy(rows, idColumn.referencedColumn);
439
- }));
457
+ });
440
458
  results.forEach((result)=>{
441
459
  const joinResults = joinMap[result[joinColumn.referencedColumn]] || [];
442
460
  const matchingRows = joinResults.flatMap((joinResult)=>{
@@ -652,7 +670,7 @@ const applyPopulate = async (results, populate, ctx)=>{
652
670
  }
653
671
  }
654
672
  };
655
- await Promise.all(Object.keys(populate).map(populateAttribute));
673
+ await forEachPopulate(Object.keys(populate), populateAttribute);
656
674
  };
657
675
 
658
676
  export { applyPopulate as default };
@@ -1 +1 @@
1
- {"version":3,"file":"apply.mjs","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash';\nimport { hasSort } from '@strapi/utils';\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\n/**\n * Join-table `order` preserves connect order when no explicit populate sort is set.\n * When `populateValue.orderBy` is present, join-table ordering must not take precedence\n * over the target attribute sort (see query-builder join vs root orderBy ordering).\n */\nconst getJoinTableOrderBy = (\n populateValue: Record<string, unknown>,\n joinTable: { orderBy?: Record<string, 'asc' | 'desc'> }\n) => {\n const explicitSort = populateValue.orderBy ?? populateValue.sort;\n\n if (hasSort(explicitSort) || !joinTable.orderBy) {\n return undefined;\n }\n\n return _.mapValues(joinTable.orderBy, (v) => populateValue.ordering || v);\n};\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 = [\n ...new Set(results.map((r) => r[joinColumnName]).filter((value) => value != null)),\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(rows, referencedColumnName);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string]?.[0]);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string]?.[0]);\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 = [\n ...new Set(results.map((r) => r[joinColumnName]).filter((value) => value != null)),\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(rows, referencedColumnName);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\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 = [\n ...new Set(results.map((r) => r[idColumn.referencedColumn]).filter((value) => value != null)),\n ];\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? 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(rows, idColumn.name);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n // Match oneToMany/manyToMany: empty morphMany collections serialize as [], not null.\n const matchingValue =\n attribute.relation === 'morphOne' ? matchingRows?.[0] : 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 = [\n ...new Set(results.map((r) => r[idColumn.referencedColumn]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\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(rows, idColumn.name);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n // Match oneToMany/manyToMany: empty morphMany collections serialize as [], not null.\n const matchingValue =\n attribute.relation === 'morphOne' ? matchingRows?.[0] : 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, isCount } = 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 = [\n ...new Set(results.map((r) => r[joinColumn.referencedColumn]).filter((value) => value != null)),\n ];\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRowsRaw = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...joinTable.on,\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const allowedTypes =\n 'on' in populateValue && populateValue.on ? new Set(Object.keys(populateValue.on)) : null;\n\n const joinRows = allowedTypes\n ? joinRowsRaw.filter((row) => allowedTypes.has(row[typeColumn.name] as string))\n : joinRowsRaw;\n\n if (isCount) {\n const joinMap = _.groupBy(joinRows, joinColumn.name);\n\n results.forEach((result) => {\n result[attributeName] = {\n count: (joinMap[result[joinColumn.referencedColumn] as string] || []).length,\n };\n });\n\n return;\n }\n\n const joinMap = _.groupBy(joinRows, joinColumn.name);\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(acc, typeValue)) {\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(rows, idColumn.referencedColumn);\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 // Spread target first so a same-named user attribute cannot override the morph type UID\n return { ...fromTargetRow(row), [typeField]: type };\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, isCount } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn, typeField = '__type' } = 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 const typeRestrictedTypes =\n on && typeof on === 'object'\n ? Object.keys(idsByType).filter((type) => type in on)\n : Object.keys(idsByType);\n const allowedTypes = new Set(typeRestrictedTypes);\n\n if (isCount) {\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n result[attributeName] = { count: id && type && allowedTypes.has(type) ? 1 : 0 };\n });\n\n return;\n }\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n if (!allowedTypes.has(type)) {\n map[type] = {};\n continue;\n }\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(rows, idColumn.referencedColumn);\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 const row = fromTargetRow(matchingRows?.[0]);\n // Spread target first so a same-named user attribute cannot override the morph type UID\n result[attributeName] = row ? { ...row, [typeField]: type } : row;\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(populate, fieldsToPick);\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(populateValue.on as Record<string, any>, (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\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","getJoinTableOrderBy","populateValue","joinTable","explicitSort","orderBy","sort","hasSort","undefined","_","mapValues","v","ordering","XtoOne","input","ctx","attribute","attributeName","results","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","Set","map","r","filter","value","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","oneToMany","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","get","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRowsRaw","allowedTypes","Object","keys","joinRows","has","joinMap","length","idsByType","acc","idValue","typeValue","push","typePopulate","Promise","all","ids","joinResults","flatMap","joinResult","id","morphToOne","typeRestrictedTypes","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","populateAttribute","Error","state"],"mappings":"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"}
1
+ {"version":3,"file":"apply.mjs","sources":["../../../../src/query/helpers/populate/apply.ts"],"sourcesContent":["import _ from 'lodash';\nimport { hasSort } from '@strapi/utils';\n\nimport { fromRow } from '../transform';\nimport { transactionCtx } from '../../../transaction-context';\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\n/**\n * Runs one populate task per key.\n *\n * Inside a transaction every query is bound to the transaction's single connection, and\n * node-postgres deprecated (pg@8.19) and removes (pg@9) calling `client.query()` on a client\n * that is already executing a query. The tasks therefore run one after another there, which\n * costs nothing: the driver was already serialising them on that one connection. Outside a\n * transaction they fan out over the pool as before.\n */\nconst forEachPopulate = async (keys: string[], task: (key: string) => Promise<void>) => {\n if (transactionCtx.get()) {\n for (const key of keys) {\n await task(key);\n }\n\n return;\n }\n\n await Promise.all(keys.map(task));\n};\n\n/**\n * Join-table `order` preserves connect order when no explicit populate sort is set.\n * When `populateValue.orderBy` is present, join-table ordering must not take precedence\n * over the target attribute sort (see query-builder join vs root orderBy ordering).\n */\nconst getJoinTableOrderBy = (\n populateValue: Record<string, unknown>,\n joinTable: { orderBy?: Record<string, 'asc' | 'desc'> }\n) => {\n const explicitSort = populateValue.orderBy ?? populateValue.sort;\n\n if (hasSort(explicitSort) || !joinTable.orderBy) {\n return undefined;\n }\n\n return _.mapValues(joinTable.orderBy, (v) => populateValue.ordering || v);\n};\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 = [\n ...new Set(results.map((r) => r[joinColumnName]).filter((value) => value != null)),\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(rows, referencedColumnName);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string]?.[0]);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string]?.[0]);\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 = [\n ...new Set(results.map((r) => r[joinColumnName]).filter((value) => value != null)),\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(rows, referencedColumnName);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\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 = [\n ...new Set(results.map((r) => r[referencedColumnName]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy(rows, joinColRenameAs);\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 = [\n ...new Set(results.map((r) => r[idColumn.referencedColumn]).filter((value) => value != null)),\n ];\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? 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(rows, idColumn.name);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n // Match oneToMany/manyToMany: empty morphMany collections serialize as [], not null.\n const matchingValue =\n attribute.relation === 'morphOne' ? matchingRows?.[0] : 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 = [\n ...new Set(results.map((r) => r[idColumn.referencedColumn]).filter((value) => value != null)),\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: getJoinTableOrderBy(populateValue, joinTable),\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(rows, idColumn.name);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n // Match oneToMany/manyToMany: empty morphMany collections serialize as [], not null.\n const matchingValue =\n attribute.relation === 'morphOne' ? matchingRows?.[0] : 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, isCount } = 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 = [\n ...new Set(results.map((r) => r[joinColumn.referencedColumn]).filter((value) => value != null)),\n ];\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRowsRaw = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...joinTable.on,\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const allowedTypes =\n 'on' in populateValue && populateValue.on ? new Set(Object.keys(populateValue.on)) : null;\n\n const joinRows = allowedTypes\n ? joinRowsRaw.filter((row) => allowedTypes.has(row[typeColumn.name] as string))\n : joinRowsRaw;\n\n if (isCount) {\n const joinMap = _.groupBy(joinRows, joinColumn.name);\n\n results.forEach((result) => {\n result[attributeName] = {\n count: (joinMap[result[joinColumn.referencedColumn] as string] || []).length,\n };\n });\n\n return;\n }\n\n const joinMap = _.groupBy(joinRows, joinColumn.name);\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(acc, typeValue)) {\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 forEachPopulate(Object.keys(idsByType), 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(rows, idColumn.referencedColumn);\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 // Spread target first so a same-named user attribute cannot override the morph type UID\n return { ...fromTargetRow(row), [typeField]: type };\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, isCount } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn, typeField = '__type' } = 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 const typeRestrictedTypes =\n on && typeof on === 'object'\n ? Object.keys(idsByType).filter((type) => type in on)\n : Object.keys(idsByType);\n const allowedTypes = new Set(typeRestrictedTypes);\n\n if (isCount) {\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n result[attributeName] = { count: id && type && allowedTypes.has(type) ? 1 : 0 };\n });\n\n return;\n }\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n if (!allowedTypes.has(type)) {\n map[type] = {};\n continue;\n }\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(rows, idColumn.referencedColumn);\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 const row = fromTargetRow(matchingRows?.[0]);\n // Spread target first so a same-named user attribute cannot override the morph type UID\n result[attributeName] = row ? { ...row, [typeField]: type } : row;\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(populate, fieldsToPick);\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(populateValue.on as Record<string, any>, (value) => {\n if (_.isPlainObject(value)) {\n value.filters = filters;\n }\n\n return value;\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 forEachPopulate(Object.keys(populate), populateAttribute);\n};\n\nexport default applyPopulate;\n"],"names":["joinColPrefix","forEachPopulate","keys","task","transactionCtx","get","key","Promise","all","map","getJoinTableOrderBy","populateValue","joinTable","explicitSort","orderBy","sort","hasSort","undefined","_","mapValues","v","ordering","XtoOne","input","ctx","attribute","attributeName","results","targetMeta","isCount","db","qb","fromTargetRow","rowOrRows","fromRow","joinColumn","name","joinColumnName","referencedColumn","referencedColumnName","referencedValues","Set","r","filter","value","isEmpty","forEach","result","rows","entityManager","createQueryBuilder","uid","init","addSelect","alias","where","execute","mapResults","groupBy","getAlias","joinColAlias","joinColRenameAs","joinColSelect","count","join","referencedTable","inverseJoinColumn","rootColumn","rootTable","on","select","raw","reduce","row","Number","oneToMany","manyToMany","populateQb","morphX","target","morphBy","targetAttribute","metadata","attributes","type","relation","idColumn","typeColumn","morphColumn","matchingRows","matchingValue","field","morphToMany","typeField","joinRowsRaw","allowedTypes","Object","joinRows","has","joinMap","length","idsByType","acc","idValue","typeValue","push","typePopulate","ids","joinResults","flatMap","joinResult","id","morphToOne","typeRestrictedTypes","pickPopulateParams","populate","fieldsToPick","pick","getPopulateValue","filters","isPlainObject","applyPopulate","meta","populateAttribute","Error","state"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Readable } from 'stream';
1
+ import { Readable } from 'node:stream';
2
2
  import type { Knex } from 'knex';
3
3
  import type { QueryBuilder } from '../../query-builder';
4
4
  import type { Database } from '../../..';
@@ -1 +1 @@
1
- {"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../../../../src/query/helpers/streams/readable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,QAAA,MAAM,mBAAmB,eAAgC,CAAC;AAE1D,UAAU,0BAA0B;IAClC,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,cAAM,mBAAoB,SAAQ,QAAQ;IACxC,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;IAE1B,GAAG,EAAE,YAAY,CAAC;IAElB,GAAG,EAAE,QAAQ,CAAC;IAEd,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,IAAI,CAAC;IAEZ,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW,EAAE,OAAO,CAAC;IAErB,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;gBAEnB,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAiB,EAAE,SAAe,EAAE,EAAE,0BAA0B;IAoC3F,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI;IAU9C;;;;;;OAMG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM;CAoGzB;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../../../../src/query/helpers/streams/readable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,QAAA,MAAM,mBAAmB,eAAgC,CAAC;AAE1D,UAAU,0BAA0B;IAClC,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,cAAM,mBAAoB,SAAQ,QAAQ;IACxC,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;IAE1B,GAAG,EAAE,YAAY,CAAC;IAElB,GAAG,EAAE,QAAQ,CAAC;IAEd,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,IAAI,CAAC;IAEZ,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW,EAAE,OAAO,CAAC;IAErB,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;gBAEnB,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAiB,EAAE,SAAe,EAAE,EAAE,0BAA0B;IAoC3F,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI;IAU9C;;;;;;OAMG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM;CAoGzB;AAED,eAAe,mBAAmB,CAAC"}