@strapi/database 5.30.0 → 5.30.1
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.
- package/dist/connection.js.map +1 -1
- package/dist/connection.mjs.map +1 -1
- package/dist/dialects/dialect.js.map +1 -1
- package/dist/dialects/dialect.mjs.map +1 -1
- package/dist/dialects/index.js.map +1 -1
- package/dist/dialects/index.mjs.map +1 -1
- package/dist/dialects/mysql/database-inspector.js.map +1 -1
- package/dist/dialects/mysql/database-inspector.mjs.map +1 -1
- package/dist/dialects/mysql/index.js +1 -2
- package/dist/dialects/mysql/index.js.map +1 -1
- package/dist/dialects/mysql/index.mjs +1 -2
- package/dist/dialects/mysql/index.mjs.map +1 -1
- package/dist/dialects/mysql/schema-inspector.js.map +1 -1
- package/dist/dialects/mysql/schema-inspector.mjs.map +1 -1
- package/dist/dialects/postgresql/index.js.map +1 -1
- package/dist/dialects/postgresql/index.mjs.map +1 -1
- package/dist/dialects/postgresql/schema-inspector.js.map +1 -1
- package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -1
- package/dist/dialects/sqlite/index.js.map +1 -1
- package/dist/dialects/sqlite/index.mjs.map +1 -1
- package/dist/dialects/sqlite/schema-inspector.js.map +1 -1
- package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -1
- package/dist/entity-manager/index.js.map +1 -1
- package/dist/entity-manager/index.mjs.map +1 -1
- package/dist/entity-manager/morph-relations.js.map +1 -1
- package/dist/entity-manager/morph-relations.mjs.map +1 -1
- package/dist/errors/database.js.map +1 -1
- package/dist/errors/database.mjs.map +1 -1
- package/dist/errors/invalid-date.js.map +1 -1
- package/dist/errors/invalid-date.mjs.map +1 -1
- package/dist/errors/invalid-datetime.js.map +1 -1
- package/dist/errors/invalid-datetime.mjs.map +1 -1
- package/dist/errors/invalid-relation.js.map +1 -1
- package/dist/errors/invalid-relation.mjs.map +1 -1
- package/dist/errors/invalid-time.js.map +1 -1
- package/dist/errors/invalid-time.mjs.map +1 -1
- package/dist/errors/not-null.js.map +1 -1
- package/dist/errors/not-null.mjs.map +1 -1
- package/dist/fields/field.js.map +1 -1
- package/dist/fields/field.mjs.map +1 -1
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/index.mjs.map +1 -1
- package/dist/fields/number.js.map +1 -1
- package/dist/fields/number.mjs.map +1 -1
- package/dist/fields/shared/parsers.js.map +1 -1
- package/dist/fields/shared/parsers.mjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/metadata/metadata.js.map +1 -1
- package/dist/metadata/metadata.mjs.map +1 -1
- package/dist/metadata/relations.js.map +1 -1
- package/dist/metadata/relations.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -1
- package/dist/migrations/logger.js.map +1 -1
- package/dist/migrations/logger.mjs.map +1 -1
- package/dist/query/helpers/join.js.map +1 -1
- package/dist/query/helpers/join.mjs.map +1 -1
- package/dist/query/helpers/order-by.js.map +1 -1
- package/dist/query/helpers/order-by.mjs.map +1 -1
- package/dist/query/helpers/populate/apply.js.map +1 -1
- package/dist/query/helpers/populate/apply.mjs.map +1 -1
- package/dist/query/helpers/search.js.map +1 -1
- package/dist/query/helpers/search.mjs.map +1 -1
- package/dist/query/helpers/streams/readable.js.map +1 -1
- package/dist/query/helpers/streams/readable.mjs.map +1 -1
- package/dist/query/helpers/where.js.map +1 -1
- package/dist/query/helpers/where.mjs.map +1 -1
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/query-builder.mjs.map +1 -1
- package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -1
- package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -1
- package/dist/schema/builder.js.map +1 -1
- package/dist/schema/builder.mjs.map +1 -1
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/schema.mjs.map +1 -1
- package/dist/utils/identifiers/hash.js.map +1 -1
- package/dist/utils/identifiers/hash.mjs.map +1 -1
- package/dist/utils/identifiers/index.js +2 -4
- package/dist/utils/identifiers/index.js.map +1 -1
- package/dist/utils/identifiers/index.mjs +2 -4
- package/dist/utils/identifiers/index.mjs.map +1 -1
- package/dist/utils/knex.js.map +1 -1
- package/dist/utils/knex.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/entity-manager/index.ts"],"sourcesContent":["import {\n castArray,\n compact,\n difference,\n differenceWith,\n has,\n isArray,\n isEmpty,\n isEqual,\n isInteger,\n isNil,\n isNull,\n isNumber,\n isObject,\n isPlainObject,\n isString,\n isUndefined,\n map,\n pick,\n uniqBy,\n uniqWith,\n} from 'lodash/fp';\n\nimport * as types from '../utils/types';\nimport { createField } from '../fields';\nimport { createQueryBuilder } from '../query';\nimport { createRepository } from './entity-repository';\nimport {\n deleteRelatedMorphOneRelationsAfterMorphToManyUpdate,\n encodePolymorphicRelation,\n encodePolymorphicId,\n} from './morph-relations';\nimport {\n isBidirectional,\n isAnyToOne,\n isOneToAny,\n hasOrderColumn,\n hasInverseOrderColumn,\n} from '../metadata';\nimport {\n deletePreviousOneToAnyRelations,\n deletePreviousAnyToOneRelations,\n deleteRelations,\n cleanOrderColumns,\n} from './regular-relations';\nimport { relationsOrderer } from './relations-orderer';\nimport type { Database } from '..';\nimport type { Meta } from '../metadata';\nimport type { ID } from '../types';\nimport { EntityManager, Repository, Entity } from './types';\n\nexport * from './types';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n isObject(value) && !isNil(value);\n\nconst toId = (value: unknown | { id: unknown }): ID => {\n if (isRecord(value) && 'id' in value && isValidId(value.id)) {\n return value.id;\n }\n\n if (isValidId(value)) {\n return value;\n }\n\n throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);\n};\nconst toIds = (value: unknown): ID[] => castArray(value || []).map(toId);\n\nconst isValidId = (value: unknown): value is ID => isString(value) || isInteger(value);\n\nconst isValidObjectId = (value: unknown): value is Entity =>\n isRecord(value) && 'id' in value && isValidId(value.id);\n\nconst toIdArray = (\n data: unknown\n): {\n id: ID;\n __pivot?: { [key: string]: any };\n [key: string]: any;\n}[] => {\n const array = castArray(data)\n .filter((datum) => !isNil(datum))\n .map((datum) => {\n // if it is a string or an integer return an obj with id = to datum\n if (isValidId(datum)) {\n return { id: datum, __pivot: {} };\n }\n\n // if it is an object check it has at least a valid id\n if (!isValidObjectId(datum)) {\n throw new Error(`Invalid id, expected a string or integer, got ${datum}`);\n }\n\n return datum;\n });\n\n return uniqWith(isEqual, array);\n};\n\ntype ScalarAssoc = string | number | null;\ntype Assocs =\n | ScalarAssoc\n | { id: ScalarAssoc | Array<ScalarAssoc> }\n | Array<ScalarAssoc>\n | {\n set?: Array<ScalarAssoc> | null;\n options?: { strict?: boolean };\n connect?: Array<{\n id: ScalarAssoc;\n position?: { start?: boolean; end?: boolean; before?: ID; after?: ID };\n __pivot?: any;\n __type?: any;\n }> | null;\n disconnect?: Array<ScalarAssoc> | null;\n };\n\nconst toAssocs = (data: Assocs) => {\n if (\n isArray(data) ||\n isString(data) ||\n isNumber(data) ||\n isNull(data) ||\n (isRecord(data) && 'id' in data)\n ) {\n return {\n set: isNull(data) ? data : toIdArray(data),\n };\n }\n\n if (data?.set) {\n return {\n set: isNull(data.set) ? data.set : toIdArray(data.set),\n };\n }\n\n return {\n options: {\n strict: data?.options?.strict,\n },\n connect: toIdArray(data?.connect).map((elm) => ({\n id: elm.id,\n position: elm.position ? elm.position : { end: true },\n __pivot: elm.__pivot ?? {},\n __type: elm.__type,\n })),\n disconnect: toIdArray(data?.disconnect),\n };\n};\n\nconst processData = (\n metadata: Meta,\n data: Record<string, unknown> = {},\n { withDefaults = false } = {}\n) => {\n const { attributes } = metadata;\n\n const obj: Record<string, unknown> = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (types.isScalarAttribute(attribute)) {\n const field = createField(attribute);\n\n if (isUndefined(data[attributeName])) {\n if (!isUndefined(attribute.default) && withDefaults) {\n if (typeof attribute.default === 'function') {\n obj[attributeName] = attribute.default();\n } else {\n obj[attributeName] = attribute.default;\n }\n }\n continue;\n }\n\n if (\n 'validate' in field &&\n typeof field.validate === 'function' &&\n data[attributeName] !== null\n ) {\n field.validate(data[attributeName]);\n }\n\n const val = data[attributeName] === null ? null : field.toDB(data[attributeName]);\n\n obj[attributeName] = val;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n // oneToOne & manyToOne\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const joinColumnName = attribute.joinColumn.name;\n\n // allow setting to null\n const attrValue = !isUndefined(data[attributeName])\n ? data[attributeName]\n : data[joinColumnName];\n\n if (isNull(attrValue)) {\n obj[joinColumnName] = attrValue;\n } else if (!isUndefined(attrValue)) {\n obj[joinColumnName] = toId(attrValue);\n }\n\n continue;\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn && attribute.owner) {\n const { idColumn, typeColumn, typeField = '__type' } = attribute.morphColumn;\n\n const value = data[attributeName] as Record<string, unknown>;\n\n if (value === null) {\n Object.assign(obj, {\n [idColumn.name]: null,\n [typeColumn.name]: null,\n });\n\n continue;\n }\n\n if (!isUndefined(value)) {\n if (!has('id', value) || !has(typeField, value)) {\n throw new Error(`Expects properties ${typeField} an id to make a morph association`);\n }\n\n Object.assign(obj, {\n [idColumn.name]: value.id,\n [typeColumn.name]: value[typeField],\n });\n }\n }\n }\n }\n\n return obj;\n};\nexport const createEntityManager = (db: Database): EntityManager => {\n const repoMap: Record<string, Repository> = {};\n\n return {\n async findOne(uid, params) {\n const states = await db.lifecycles.run('beforeFindOne', uid, { params });\n\n const result = await this.createQueryBuilder(uid)\n .init(params)\n .first()\n .execute<Entity | null>();\n\n await db.lifecycles.run('afterFindOne', uid, { params, result }, states);\n\n return result;\n },\n\n // should we name it findOne because people are used to it ?\n async findMany(uid, params) {\n const states = await db.lifecycles.run('beforeFindMany', uid, { params });\n\n const result = await this.createQueryBuilder(uid).init(params).execute<any[]>();\n\n await db.lifecycles.run('afterFindMany', uid, { params, result }, states);\n\n return result;\n },\n\n async count(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCount', uid, { params });\n\n const res = await this.createQueryBuilder(uid)\n .init(pick(['_q', 'where', 'filters'], params))\n .count()\n .first()\n .execute<{ count: number }>();\n\n const result = Number(res.count);\n\n await db.lifecycles.run('afterCount', uid, { params, result }, states);\n\n return result;\n },\n\n async create(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Create expects a data object');\n }\n\n const dataToInsert = processData(metadata, data, { withDefaults: true });\n\n const res = await this.createQueryBuilder(uid)\n .insert(dataToInsert)\n .execute<Array<ID | { id: ID }>>();\n\n const id = isRecord(res[0]) ? res[0].id : res[0];\n\n const trx = await strapi.db.transaction();\n try {\n await this.attachRelations(uid, id, data, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n throw e;\n }\n\n // TODO: in case there is no select or populate specified return the inserted data ?\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterCreate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async createMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isArray(data)) {\n throw new Error('CreateMany expects data to be an array');\n }\n\n const dataToInsert = data.map((datum) =>\n processData(metadata, datum, { withDefaults: true })\n );\n\n if (isEmpty(dataToInsert)) {\n throw new Error('Nothing to insert');\n }\n\n const createdEntries = await this.createQueryBuilder(uid)\n .insert(dataToInsert)\n .execute<Array<ID | { id: ID }>>();\n\n const result = {\n count: data.length,\n ids: createdEntries.map((entry) => (typeof entry === 'object' ? entry?.id : entry)),\n };\n\n await db.lifecycles.run('afterCreateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async update(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Update requires a data object');\n }\n\n if (isEmpty(where)) {\n throw new Error('Update requires a where parameter');\n }\n\n const entity = await this.createQueryBuilder(uid)\n .select('*')\n .where(where)\n .first()\n .execute<{ id: ID }>({ mapResults: false });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n const dataToUpdate = processData(metadata, data);\n\n if (!isEmpty(dataToUpdate)) {\n await this.createQueryBuilder(uid).where({ id }).update(dataToUpdate).execute();\n }\n\n const trx = await strapi.db.transaction();\n try {\n await this.updateRelations(uid, id, data, { transaction: trx.get() });\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).update(entity).execute();\n throw e;\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterUpdate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async updateMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n const dataToUpdate = processData(metadata, data);\n\n if (isEmpty(dataToUpdate)) {\n throw new Error('Update requires data');\n }\n\n const updatedRows = await this.createQueryBuilder(uid)\n .where(where)\n .update(dataToUpdate)\n .execute<number>();\n\n const result = { count: updatedRows };\n\n await db.lifecycles.run('afterUpdateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async delete(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDelete', uid, { params });\n\n const { where, select, populate } = params;\n\n if (isEmpty(where)) {\n throw new Error('Delete requires a where parameter');\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const entity = await this.findOne(uid, {\n select: select && ['id'].concat(select),\n where,\n populate,\n });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n\n const trx = await strapi.db.transaction();\n try {\n await this.deleteRelations(uid, id, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n await db.lifecycles.run('afterDelete', uid, { params, result: entity }, states);\n\n return entity;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async deleteMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDeleteMany', uid, { params });\n\n const { where } = params;\n\n const deletedRows = await this.createQueryBuilder(uid)\n .where(where)\n .delete()\n .execute<number>({ mapResults: false });\n\n const result = { count: deletedRows };\n\n await db.lifecycles.run('afterDeleteMany', uid, { params, result }, states);\n\n return result;\n },\n\n /**\n * Attach relations to a new entity\n */\n async attachRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n const isValidLink = has(attributeName, data) && !isNil(data[attributeName]);\n\n if (attribute.type !== 'relation' || !isValidLink) {\n continue;\n }\n\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n /**\n * morphOne and morphMany relations\n */\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n if (targetAttribute.type !== 'relation') {\n throw new Error(\n `Expected target attribute ${target}.${morphBy} to be a relation attribute`\n );\n }\n\n if (targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const relId = toId(cleanRelationData.set?.[0]);\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n } else if (targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const rows =\n cleanRelationData.set?.map((data, idx) => {\n return {\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n };\n }) ?? [];\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n } else if (attribute.relation === 'morphToOne') {\n /**\n * morphToOne\n */\n // handled on the entry itself\n continue;\n } else if (attribute.relation === 'morphToMany') {\n /**\n * morphToMany\n */\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n if (isEmpty(cleanRelationData.set) && isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // set happens before connect/disconnect\n const dataset = cleanRelationData.set || cleanRelationData.connect || [];\n\n const rows = dataset.map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n [],\n morphColumn.idColumn.name,\n 'order',\n true // Always make a strict connect when inserting\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: typeField }))\n )\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx + 1 }), {} as Record<ID, number>);\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[morphColumn.idColumn.name] as ID;\n const rowType = row[morphColumn.typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n // delete previous relations\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n if (\n attribute.relation === 'oneToOne' &&\n isBidirectional(attribute) &&\n relIdsToAdd.length\n ) {\n await this.createQueryBuilder(uid)\n .where({ [attribute.joinColumn.name]: relIdsToAdd, id: { $ne: id } })\n .update({ [attribute.joinColumn.name]: null })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n // oneToOne oneToMany on the non owning side\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n // TODO: check it is an id & the entity exists (will throw due to FKs otherwise so not a big pbl in SQL)\n const relIdsToAdd = toIds(cleanRelationData.set);\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n await this.createQueryBuilder(target)\n .update({ [attribute.joinColumn.referencedColumn]: id })\n // NOTE: works if it is an array or a single id\n .where({ id: relIdsToAdd })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n // need to set the column on the target\n\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n\n const relsToAdd = (cleanRelationData.set || cleanRelationData.connect) ?? [];\n const relIdsToadd = toIds(relsToAdd);\n\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd,\n db,\n transaction: trx,\n });\n }\n\n // prepare new relations to insert\n const insert = uniqBy('id', relsToAdd).map((data) => {\n return {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: data.id,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n };\n }) satisfies Record<string, any>[];\n\n // add order value\n if (cleanRelationData.set && hasOrderColumn(attribute)) {\n insert.forEach((data: Record<string, unknown>, idx) => {\n data[orderColumnName] = idx + 1;\n });\n } else if (cleanRelationData.connect && hasOrderColumn(attribute)) {\n // use position attributes to calculate order\n const orderMap = relationsOrderer(\n [],\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n true // Always make an strict connect when inserting\n )\n .connect(relsToAdd)\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx }), {} as Record<ID, number>);\n\n insert.forEach((row: Record<string, unknown>) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name] as number];\n });\n }\n\n // add inv_order value\n if (hasInverseOrderColumn(attribute)) {\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, relIdsToadd)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {} as Record<string, number>\n );\n\n insert.forEach((rel) => {\n rel[inverseOrderColumnName] = (maxMap[rel[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n if (insert.length === 0) {\n continue;\n }\n\n // insert new relations\n await this.createQueryBuilder(joinTable.name).insert(insert).transacting(trx).execute();\n }\n }\n },\n\n /**\n * Updates relations of an existing entity\n */\n // TODO: check relation exists (handled by FKs except for polymorphics)\n async updateRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation' || !has(attributeName, data)) {\n continue;\n }\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\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 // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n // update instead of deleting because the relation is directly on the entity table\n // and not in a join table\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relId = toIds(cleanRelationData.set?.[0]);\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n }\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n [joinColumn.name]: item.id,\n ...(joinTable.on || {}),\n field: attributeName,\n };\n }),\n };\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n }\n\n // connect relations\n if (hasConnect) {\n // Query database to find the order of the last relation\n const start = await this.createQueryBuilder(joinTable.name)\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n })\n .max('order')\n .first()\n .transacting(trx)\n .execute();\n\n const startOrder = (start as any)?.max || 0;\n\n const rows = (cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: startOrder + idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await this.createQueryBuilder(joinTable.name)\n .insert(rows)\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n // delete all relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n\n if (hasSet) {\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n }\n\n continue;\n }\n\n if (attribute.relation === 'morphToOne') {\n // handled on the entry itself\n continue;\n }\n\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n const rowsToDelete = [\n ...(cleanRelationData.disconnect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ...(cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n // @ts-expect-error TODO\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ];\n\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [idColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n order: this.createQueryBuilder(joinTable.name)\n .max('order')\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: item.id,\n [typeColumn.name]: item[typeField],\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n };\n }),\n };\n\n // delete previous relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rowsToDelete as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n }\n\n // connect relations\n if (hasConnect) {\n const dataset = cleanRelationData.connect || [];\n\n const rows = dataset.map((data) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n // Merge id & __type to get a single id key\n adjacentRelations.map(\n encodePolymorphicRelation({\n idColumn: idColumn.name,\n typeColumn: typeColumn.name,\n })\n ),\n idColumn.name,\n 'order',\n cleanRelationData.options?.strict\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: '__type' }))\n )\n .getOrderMap();\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[idColumn.name] as number;\n const rowType = row[typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n }\n\n if (hasSet) {\n // delete all relations for this entity\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n field: attributeName,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // handled in the row itself\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n // Since it is a join column no need to remove previous relations\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n await this.createQueryBuilder(target)\n .where({ id: relIdsToAdd })\n .update({ [attribute.joinColumn.referencedColumn]: id })\n .transacting(trx)\n .execute();\n }\n }\n\n if (attribute.joinTable) {\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n const select = [joinColumn.name, inverseJoinColumn.name];\n if (hasOrderColumn(attribute)) {\n select.push(orderColumnName);\n }\n if (hasInverseOrderColumn(attribute)) {\n select.push(inverseOrderColumnName);\n }\n\n // only delete relations\n if (isNull(cleanRelationData.set)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n } else {\n const isPartialUpdate = !has('set', cleanRelationData);\n let relIdsToaddOrMove: ID[];\n\n if (isPartialUpdate) {\n if (isAnyToOne(attribute)) {\n // TODO: V5 find a fix to connect multiple versions of a document at the same time on xToOne relations\n // cleanRelationData.connect = cleanRelationData.connect?.slice(-1);\n }\n relIdsToaddOrMove = toIds(cleanRelationData.connect);\n const relIdsToDelete = toIds(\n differenceWith(\n isEqual,\n cleanRelationData.disconnect,\n cleanRelationData.connect ?? []\n )\n );\n\n if (!isEmpty(relIdsToDelete)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete, transaction: trx });\n }\n\n if (isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // Fetch current relations to handle ordering\n let currentMovingRels: Record<string, ID>[] = [];\n\n if (hasOrderColumn(attribute) || hasInverseOrderColumn(attribute)) {\n currentMovingRels = await this.createQueryBuilder(joinTable.name)\n .select(select)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute();\n }\n\n // prepare relations to insert\n const insert = uniqBy('id', cleanRelationData.connect).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n if (hasOrderColumn(attribute)) {\n // Get all adjacent relations and the one with the highest order\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n [orderColumnName]: this.createQueryBuilder(joinTable.name)\n .max(orderColumnName)\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n const orderMap = relationsOrderer(\n adjacentRelations,\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n cleanRelationData.options?.strict\n )\n .connect(cleanRelationData.connect ?? [])\n .getOrderMap();\n\n insert.forEach((row) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name]];\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const nonExistingRelsIds: ID[] = difference(\n relIdsToaddOrMove,\n map(inverseJoinColumn.name, currentMovingRels)\n );\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n const query = this.createQueryBuilder(joinTable.name)\n .insert(insert)\n .onConflict(joinTable.pivotColumns)\n .transacting(trx);\n\n if (hasOrderColumn(attribute)) {\n query.merge([orderColumnName]);\n } else {\n query.ignore();\n }\n\n await query.execute();\n\n // remove gap between orders\n await cleanOrderColumns({ attribute, db, id, transaction: trx });\n } else {\n if (isAnyToOne(attribute)) {\n cleanRelationData.set = cleanRelationData.set?.slice(-1);\n }\n // overwrite all relations\n relIdsToaddOrMove = toIds(cleanRelationData.set);\n await deleteRelations({\n id,\n attribute,\n db,\n relIdsToDelete: 'all',\n relIdsToNotDelete: relIdsToaddOrMove,\n transaction: trx,\n });\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const insert = uniqBy('id', cleanRelationData.set).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n // add order value\n if (hasOrderColumn(attribute)) {\n insert.forEach((row, idx) => {\n row[orderColumnName] = idx + 1;\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const existingRels = await this.createQueryBuilder(joinTable.name)\n .select(inverseJoinColumn.name)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, ID>>>();\n\n const inverseRelsIds = map(inverseJoinColumn.name, existingRels);\n\n const nonExistingRelsIds = difference(relIdsToaddOrMove, inverseRelsIds);\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row: any) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n const query = this.createQueryBuilder(joinTable.name)\n .insert(insert)\n .onConflict(joinTable.pivotColumns)\n .transacting(trx);\n\n if (hasOrderColumn(attribute)) {\n query.merge([orderColumnName]);\n } else {\n query.ignore();\n }\n\n await query.execute();\n }\n\n // Delete the previous relations for oneToAny relations\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd: relIdsToaddOrMove,\n db,\n transaction: trx,\n });\n }\n\n // Delete the previous relations for anyToOne relations\n if (isAnyToOne(attribute)) {\n await deletePreviousAnyToOneRelations({\n id,\n attribute,\n relIdToadd: relIdsToaddOrMove[0],\n db,\n transaction: trx,\n });\n }\n }\n }\n }\n },\n\n /**\n * Delete relational associations of an existing entity\n * This removes associations but doesn't do cascade deletions for components for example. This will be handled on the entity service layer instead\n * NOTE: Most of the deletion should be handled by ON DELETE CASCADE for dialects that have FKs\n *\n * @param {EntityManager} em - entity manager instance\n * @param {Metadata} metadata - model metadta\n * @param {ID} id - entity ID\n */\n async deleteRelations(uid, id, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n continue;\n }\n\n /*\n if morphOne | morphMany\n if morphBy is morphToOne\n set null\n if morphBy is morphToOne\n delete links\n */\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\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 // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n /*\n if morphToOne\n nothing to do\n */\n if (attribute.relation === 'morphToOne') {\n // do nothing\n }\n\n /*\n if morphToMany\n delete links\n */\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn } = joinTable;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n continue;\n }\n\n // do not need to delete links when using foreign keys\n if (db.dialect.usesForeignKeys()) {\n return;\n }\n\n // NOTE: we do not remove existing associations with the target as it should handled by unique FKs instead\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // nothing to do => relation already added on the table\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n }\n }\n },\n\n // TODO: add lifecycle events\n async populate(uid, entity, populate) {\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate,\n });\n\n return { ...entity, ...entry };\n },\n\n // TODO: add lifecycle events\n async load(uid, entity, fields, populate) {\n const { attributes } = db.metadata.get(uid);\n\n const fieldsArr = castArray(fields);\n fieldsArr.forEach((field) => {\n const attribute = attributes[field];\n\n if (!attribute || attribute.type !== 'relation') {\n throw new Error(`Invalid load. Expected ${field} to be a relational attribute`);\n }\n });\n\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate: fieldsArr.reduce(\n (acc, field) => {\n acc[field] = populate || true;\n return acc;\n },\n {} as Record<string, unknown>\n ),\n });\n\n if (!entry) {\n return null;\n }\n\n if (Array.isArray(fields)) {\n return pick(fields, entry);\n }\n\n return entry[fields];\n },\n\n // cascading\n // aggregations\n // -> avg\n // -> min\n // -> max\n // -> grouping\n\n // formulas\n // custom queries\n\n // utilities\n // -> map result\n // -> map input\n\n // extra features\n // -> virtuals\n // -> private\n\n createQueryBuilder(uid) {\n return createQueryBuilder(uid, db);\n },\n\n getRepository(uid) {\n if (!repoMap[uid]) {\n repoMap[uid] = createRepository(uid, db);\n }\n\n return repoMap[uid];\n },\n };\n};\n"],"names":["isRecord","value","isObject","isNil","toId","isValidId","id","Error","JSON","stringify","toIds","castArray","map","isString","isInteger","isValidObjectId","toIdArray","data","array","filter","datum","__pivot","uniqWith","isEqual","toAssocs","isArray","isNumber","isNull","set","options","strict","connect","elm","position","end","__type","disconnect","processData","metadata","withDefaults","attributes","obj","attributeName","Object","keys","attribute","types","field","createField","isUndefined","default","validate","val","toDB","joinColumn","owner","joinColumnName","name","attrValue","morphColumn","idColumn","typeColumn","typeField","assign","has","createEntityManager","db","repoMap","findOne","uid","params","states","lifecycles","run","result","createQueryBuilder","init","first","execute","findMany","count","res","pick","Number","create","get","isPlainObject","dataToInsert","insert","trx","strapi","transaction","attachRelations","commit","e","rollback","where","delete","select","populate","filters","createMany","isEmpty","createdEntries","length","ids","entry","update","entity","mapResults","dataToUpdate","updateRelations","updateMany","updatedRows","concat","deleteRelations","deleteMany","deletedRows","isValidLink","type","cleanRelationData","relation","target","morphBy","targetAttribute","relId","transacting","joinTable","rows","idx","on","order","dataset","orderMap","relationsOrderer","encodePolymorphicRelation","reduce","acc","rel","forEach","row","rowId","rowType","encodedId","encodePolymorphicId","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","relIdsToAdd","isBidirectional","$ne","referencedColumn","inverseJoinColumn","orderColumnName","inverseOrderColumnName","relsToAdd","relIdsToadd","isOneToAny","deletePreviousOneToAnyRelations","uniqBy","hasOrderColumn","hasInverseOrderColumn","maxResults","getConnection","max","as","whereIn","groupBy","from","maxMap","hasSet","hasConnect","hasDisconnect","idsToDelete","$or","item","start","startOrder","rowsToDelete","adjacentRelations","$in","compact","r","after","before","getKnexQuery","getOrderMap","push","relIdsToDelete","isPartialUpdate","relIdsToaddOrMove","isAnyToOne","differenceWith","currentMovingRels","relToAdd","nonExistingRelsIds","difference","query","onConflict","pivotColumns","merge","ignore","cleanOrderColumns","slice","relIdsToNotDelete","existingRels","inverseRelsIds","deletePreviousAnyToOneRelations","relIdToadd","dialect","usesForeignKeys","load","fields","fieldsArr","Array","getRepository","createRepository"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/entity-manager/index.ts"],"sourcesContent":["import {\n castArray,\n compact,\n difference,\n differenceWith,\n has,\n isArray,\n isEmpty,\n isEqual,\n isInteger,\n isNil,\n isNull,\n isNumber,\n isObject,\n isPlainObject,\n isString,\n isUndefined,\n map,\n pick,\n uniqBy,\n uniqWith,\n} from 'lodash/fp';\n\nimport * as types from '../utils/types';\nimport { createField } from '../fields';\nimport { createQueryBuilder } from '../query';\nimport { createRepository } from './entity-repository';\nimport {\n deleteRelatedMorphOneRelationsAfterMorphToManyUpdate,\n encodePolymorphicRelation,\n encodePolymorphicId,\n} from './morph-relations';\nimport {\n isBidirectional,\n isAnyToOne,\n isOneToAny,\n hasOrderColumn,\n hasInverseOrderColumn,\n} from '../metadata';\nimport {\n deletePreviousOneToAnyRelations,\n deletePreviousAnyToOneRelations,\n deleteRelations,\n cleanOrderColumns,\n} from './regular-relations';\nimport { relationsOrderer } from './relations-orderer';\nimport type { Database } from '..';\nimport type { Meta } from '../metadata';\nimport type { ID } from '../types';\nimport { EntityManager, Repository, Entity } from './types';\n\nexport * from './types';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n isObject(value) && !isNil(value);\n\nconst toId = (value: unknown | { id: unknown }): ID => {\n if (isRecord(value) && 'id' in value && isValidId(value.id)) {\n return value.id;\n }\n\n if (isValidId(value)) {\n return value;\n }\n\n throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);\n};\nconst toIds = (value: unknown): ID[] => castArray(value || []).map(toId);\n\nconst isValidId = (value: unknown): value is ID => isString(value) || isInteger(value);\n\nconst isValidObjectId = (value: unknown): value is Entity =>\n isRecord(value) && 'id' in value && isValidId(value.id);\n\nconst toIdArray = (\n data: unknown\n): {\n id: ID;\n __pivot?: { [key: string]: any };\n [key: string]: any;\n}[] => {\n const array = castArray(data)\n .filter((datum) => !isNil(datum))\n .map((datum) => {\n // if it is a string or an integer return an obj with id = to datum\n if (isValidId(datum)) {\n return { id: datum, __pivot: {} };\n }\n\n // if it is an object check it has at least a valid id\n if (!isValidObjectId(datum)) {\n throw new Error(`Invalid id, expected a string or integer, got ${datum}`);\n }\n\n return datum;\n });\n\n return uniqWith(isEqual, array);\n};\n\ntype ScalarAssoc = string | number | null;\ntype Assocs =\n | ScalarAssoc\n | { id: ScalarAssoc | Array<ScalarAssoc> }\n | Array<ScalarAssoc>\n | {\n set?: Array<ScalarAssoc> | null;\n options?: { strict?: boolean };\n connect?: Array<{\n id: ScalarAssoc;\n position?: { start?: boolean; end?: boolean; before?: ID; after?: ID };\n __pivot?: any;\n __type?: any;\n }> | null;\n disconnect?: Array<ScalarAssoc> | null;\n };\n\nconst toAssocs = (data: Assocs) => {\n if (\n isArray(data) ||\n isString(data) ||\n isNumber(data) ||\n isNull(data) ||\n (isRecord(data) && 'id' in data)\n ) {\n return {\n set: isNull(data) ? data : toIdArray(data),\n };\n }\n\n if (data?.set) {\n return {\n set: isNull(data.set) ? data.set : toIdArray(data.set),\n };\n }\n\n return {\n options: {\n strict: data?.options?.strict,\n },\n connect: toIdArray(data?.connect).map((elm) => ({\n id: elm.id,\n position: elm.position ? elm.position : { end: true },\n __pivot: elm.__pivot ?? {},\n __type: elm.__type,\n })),\n disconnect: toIdArray(data?.disconnect),\n };\n};\n\nconst processData = (\n metadata: Meta,\n data: Record<string, unknown> = {},\n { withDefaults = false } = {}\n) => {\n const { attributes } = metadata;\n\n const obj: Record<string, unknown> = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (types.isScalarAttribute(attribute)) {\n const field = createField(attribute);\n\n if (isUndefined(data[attributeName])) {\n if (!isUndefined(attribute.default) && withDefaults) {\n if (typeof attribute.default === 'function') {\n obj[attributeName] = attribute.default();\n } else {\n obj[attributeName] = attribute.default;\n }\n }\n continue;\n }\n\n if (\n 'validate' in field &&\n typeof field.validate === 'function' &&\n data[attributeName] !== null\n ) {\n field.validate(data[attributeName]);\n }\n\n const val = data[attributeName] === null ? null : field.toDB(data[attributeName]);\n\n obj[attributeName] = val;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n // oneToOne & manyToOne\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const joinColumnName = attribute.joinColumn.name;\n\n // allow setting to null\n const attrValue = !isUndefined(data[attributeName])\n ? data[attributeName]\n : data[joinColumnName];\n\n if (isNull(attrValue)) {\n obj[joinColumnName] = attrValue;\n } else if (!isUndefined(attrValue)) {\n obj[joinColumnName] = toId(attrValue);\n }\n\n continue;\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn && attribute.owner) {\n const { idColumn, typeColumn, typeField = '__type' } = attribute.morphColumn;\n\n const value = data[attributeName] as Record<string, unknown>;\n\n if (value === null) {\n Object.assign(obj, {\n [idColumn.name]: null,\n [typeColumn.name]: null,\n });\n\n continue;\n }\n\n if (!isUndefined(value)) {\n if (!has('id', value) || !has(typeField, value)) {\n throw new Error(`Expects properties ${typeField} an id to make a morph association`);\n }\n\n Object.assign(obj, {\n [idColumn.name]: value.id,\n [typeColumn.name]: value[typeField],\n });\n }\n }\n }\n }\n\n return obj;\n};\nexport const createEntityManager = (db: Database): EntityManager => {\n const repoMap: Record<string, Repository> = {};\n\n return {\n async findOne(uid, params) {\n const states = await db.lifecycles.run('beforeFindOne', uid, { params });\n\n const result = await this.createQueryBuilder(uid)\n .init(params)\n .first()\n .execute<Entity | null>();\n\n await db.lifecycles.run('afterFindOne', uid, { params, result }, states);\n\n return result;\n },\n\n // should we name it findOne because people are used to it ?\n async findMany(uid, params) {\n const states = await db.lifecycles.run('beforeFindMany', uid, { params });\n\n const result = await this.createQueryBuilder(uid).init(params).execute<any[]>();\n\n await db.lifecycles.run('afterFindMany', uid, { params, result }, states);\n\n return result;\n },\n\n async count(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCount', uid, { params });\n\n const res = await this.createQueryBuilder(uid)\n .init(pick(['_q', 'where', 'filters'], params))\n .count()\n .first()\n .execute<{ count: number }>();\n\n const result = Number(res.count);\n\n await db.lifecycles.run('afterCount', uid, { params, result }, states);\n\n return result;\n },\n\n async create(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Create expects a data object');\n }\n\n const dataToInsert = processData(metadata, data, { withDefaults: true });\n\n const res = await this.createQueryBuilder(uid)\n .insert(dataToInsert)\n .execute<Array<ID | { id: ID }>>();\n\n const id = isRecord(res[0]) ? res[0].id : res[0];\n\n const trx = await strapi.db.transaction();\n try {\n await this.attachRelations(uid, id, data, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n throw e;\n }\n\n // TODO: in case there is no select or populate specified return the inserted data ?\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterCreate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async createMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isArray(data)) {\n throw new Error('CreateMany expects data to be an array');\n }\n\n const dataToInsert = data.map((datum) =>\n processData(metadata, datum, { withDefaults: true })\n );\n\n if (isEmpty(dataToInsert)) {\n throw new Error('Nothing to insert');\n }\n\n const createdEntries = await this.createQueryBuilder(uid)\n .insert(dataToInsert)\n .execute<Array<ID | { id: ID }>>();\n\n const result = {\n count: data.length,\n ids: createdEntries.map((entry) => (typeof entry === 'object' ? entry?.id : entry)),\n };\n\n await db.lifecycles.run('afterCreateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async update(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Update requires a data object');\n }\n\n if (isEmpty(where)) {\n throw new Error('Update requires a where parameter');\n }\n\n const entity = await this.createQueryBuilder(uid)\n .select('*')\n .where(where)\n .first()\n .execute<{ id: ID }>({ mapResults: false });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n const dataToUpdate = processData(metadata, data);\n\n if (!isEmpty(dataToUpdate)) {\n await this.createQueryBuilder(uid).where({ id }).update(dataToUpdate).execute();\n }\n\n const trx = await strapi.db.transaction();\n try {\n await this.updateRelations(uid, id, data, { transaction: trx.get() });\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).update(entity).execute();\n throw e;\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterUpdate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async updateMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n const dataToUpdate = processData(metadata, data);\n\n if (isEmpty(dataToUpdate)) {\n throw new Error('Update requires data');\n }\n\n const updatedRows = await this.createQueryBuilder(uid)\n .where(where)\n .update(dataToUpdate)\n .execute<number>();\n\n const result = { count: updatedRows };\n\n await db.lifecycles.run('afterUpdateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async delete(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDelete', uid, { params });\n\n const { where, select, populate } = params;\n\n if (isEmpty(where)) {\n throw new Error('Delete requires a where parameter');\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const entity = await this.findOne(uid, {\n select: select && ['id'].concat(select),\n where,\n populate,\n });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n\n const trx = await strapi.db.transaction();\n try {\n await this.deleteRelations(uid, id, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n await db.lifecycles.run('afterDelete', uid, { params, result: entity }, states);\n\n return entity;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async deleteMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDeleteMany', uid, { params });\n\n const { where } = params;\n\n const deletedRows = await this.createQueryBuilder(uid)\n .where(where)\n .delete()\n .execute<number>({ mapResults: false });\n\n const result = { count: deletedRows };\n\n await db.lifecycles.run('afterDeleteMany', uid, { params, result }, states);\n\n return result;\n },\n\n /**\n * Attach relations to a new entity\n */\n async attachRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n const isValidLink = has(attributeName, data) && !isNil(data[attributeName]);\n\n if (attribute.type !== 'relation' || !isValidLink) {\n continue;\n }\n\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n /**\n * morphOne and morphMany relations\n */\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n if (targetAttribute.type !== 'relation') {\n throw new Error(\n `Expected target attribute ${target}.${morphBy} to be a relation attribute`\n );\n }\n\n if (targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const relId = toId(cleanRelationData.set?.[0]);\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n } else if (targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const rows =\n cleanRelationData.set?.map((data, idx) => {\n return {\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n };\n }) ?? [];\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n } else if (attribute.relation === 'morphToOne') {\n /**\n * morphToOne\n */\n // handled on the entry itself\n continue;\n } else if (attribute.relation === 'morphToMany') {\n /**\n * morphToMany\n */\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n if (isEmpty(cleanRelationData.set) && isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // set happens before connect/disconnect\n const dataset = cleanRelationData.set || cleanRelationData.connect || [];\n\n const rows = dataset.map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n [],\n morphColumn.idColumn.name,\n 'order',\n true // Always make a strict connect when inserting\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: typeField }))\n )\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx + 1 }), {} as Record<ID, number>);\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[morphColumn.idColumn.name] as ID;\n const rowType = row[morphColumn.typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n // delete previous relations\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n if (\n attribute.relation === 'oneToOne' &&\n isBidirectional(attribute) &&\n relIdsToAdd.length\n ) {\n await this.createQueryBuilder(uid)\n .where({ [attribute.joinColumn.name]: relIdsToAdd, id: { $ne: id } })\n .update({ [attribute.joinColumn.name]: null })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n // oneToOne oneToMany on the non owning side\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n // TODO: check it is an id & the entity exists (will throw due to FKs otherwise so not a big pbl in SQL)\n const relIdsToAdd = toIds(cleanRelationData.set);\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n await this.createQueryBuilder(target)\n .update({ [attribute.joinColumn.referencedColumn]: id })\n // NOTE: works if it is an array or a single id\n .where({ id: relIdsToAdd })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n // need to set the column on the target\n\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n\n const relsToAdd = (cleanRelationData.set || cleanRelationData.connect) ?? [];\n const relIdsToadd = toIds(relsToAdd);\n\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd,\n db,\n transaction: trx,\n });\n }\n\n // prepare new relations to insert\n const insert = uniqBy('id', relsToAdd).map((data) => {\n return {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: data.id,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n };\n }) satisfies Record<string, any>[];\n\n // add order value\n if (cleanRelationData.set && hasOrderColumn(attribute)) {\n insert.forEach((data: Record<string, unknown>, idx) => {\n data[orderColumnName] = idx + 1;\n });\n } else if (cleanRelationData.connect && hasOrderColumn(attribute)) {\n // use position attributes to calculate order\n const orderMap = relationsOrderer(\n [],\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n true // Always make an strict connect when inserting\n )\n .connect(relsToAdd)\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx }), {} as Record<ID, number>);\n\n insert.forEach((row: Record<string, unknown>) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name] as number];\n });\n }\n\n // add inv_order value\n if (hasInverseOrderColumn(attribute)) {\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, relIdsToadd)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {} as Record<string, number>\n );\n\n insert.forEach((rel) => {\n rel[inverseOrderColumnName] = (maxMap[rel[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n if (insert.length === 0) {\n continue;\n }\n\n // insert new relations\n await this.createQueryBuilder(joinTable.name).insert(insert).transacting(trx).execute();\n }\n }\n },\n\n /**\n * Updates relations of an existing entity\n */\n // TODO: check relation exists (handled by FKs except for polymorphics)\n async updateRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation' || !has(attributeName, data)) {\n continue;\n }\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\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 // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n // update instead of deleting because the relation is directly on the entity table\n // and not in a join table\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relId = toIds(cleanRelationData.set?.[0]);\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n }\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n [joinColumn.name]: item.id,\n ...(joinTable.on || {}),\n field: attributeName,\n };\n }),\n };\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n }\n\n // connect relations\n if (hasConnect) {\n // Query database to find the order of the last relation\n const start = await this.createQueryBuilder(joinTable.name)\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n })\n .max('order')\n .first()\n .transacting(trx)\n .execute();\n\n const startOrder = (start as any)?.max || 0;\n\n const rows = (cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: startOrder + idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await this.createQueryBuilder(joinTable.name)\n .insert(rows)\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n // delete all relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n\n if (hasSet) {\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n }\n\n continue;\n }\n\n if (attribute.relation === 'morphToOne') {\n // handled on the entry itself\n continue;\n }\n\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n const rowsToDelete = [\n ...(cleanRelationData.disconnect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ...(cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n // @ts-expect-error TODO\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ];\n\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [idColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n order: this.createQueryBuilder(joinTable.name)\n .max('order')\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: item.id,\n [typeColumn.name]: item[typeField],\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n };\n }),\n };\n\n // delete previous relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rowsToDelete as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n }\n\n // connect relations\n if (hasConnect) {\n const dataset = cleanRelationData.connect || [];\n\n const rows = dataset.map((data) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n // Merge id & __type to get a single id key\n adjacentRelations.map(\n encodePolymorphicRelation({\n idColumn: idColumn.name,\n typeColumn: typeColumn.name,\n })\n ),\n idColumn.name,\n 'order',\n cleanRelationData.options?.strict\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: '__type' }))\n )\n .getOrderMap();\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[idColumn.name] as number;\n const rowType = row[typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n }\n\n if (hasSet) {\n // delete all relations for this entity\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n field: attributeName,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // handled in the row itself\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n // Since it is a join column no need to remove previous relations\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n await this.createQueryBuilder(target)\n .where({ id: relIdsToAdd })\n .update({ [attribute.joinColumn.referencedColumn]: id })\n .transacting(trx)\n .execute();\n }\n }\n\n if (attribute.joinTable) {\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n const select = [joinColumn.name, inverseJoinColumn.name];\n if (hasOrderColumn(attribute)) {\n select.push(orderColumnName);\n }\n if (hasInverseOrderColumn(attribute)) {\n select.push(inverseOrderColumnName);\n }\n\n // only delete relations\n if (isNull(cleanRelationData.set)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n } else {\n const isPartialUpdate = !has('set', cleanRelationData);\n let relIdsToaddOrMove: ID[];\n\n if (isPartialUpdate) {\n if (isAnyToOne(attribute)) {\n // TODO: V5 find a fix to connect multiple versions of a document at the same time on xToOne relations\n // cleanRelationData.connect = cleanRelationData.connect?.slice(-1);\n }\n relIdsToaddOrMove = toIds(cleanRelationData.connect);\n const relIdsToDelete = toIds(\n differenceWith(\n isEqual,\n cleanRelationData.disconnect,\n cleanRelationData.connect ?? []\n )\n );\n\n if (!isEmpty(relIdsToDelete)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete, transaction: trx });\n }\n\n if (isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // Fetch current relations to handle ordering\n let currentMovingRels: Record<string, ID>[] = [];\n\n if (hasOrderColumn(attribute) || hasInverseOrderColumn(attribute)) {\n currentMovingRels = await this.createQueryBuilder(joinTable.name)\n .select(select)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute();\n }\n\n // prepare relations to insert\n const insert = uniqBy('id', cleanRelationData.connect).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n if (hasOrderColumn(attribute)) {\n // Get all adjacent relations and the one with the highest order\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n [orderColumnName]: this.createQueryBuilder(joinTable.name)\n .max(orderColumnName)\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n const orderMap = relationsOrderer(\n adjacentRelations,\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n cleanRelationData.options?.strict\n )\n .connect(cleanRelationData.connect ?? [])\n .getOrderMap();\n\n insert.forEach((row) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name]];\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const nonExistingRelsIds: ID[] = difference(\n relIdsToaddOrMove,\n map(inverseJoinColumn.name, currentMovingRels)\n );\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n const query = this.createQueryBuilder(joinTable.name)\n .insert(insert)\n .onConflict(joinTable.pivotColumns)\n .transacting(trx);\n\n if (hasOrderColumn(attribute)) {\n query.merge([orderColumnName]);\n } else {\n query.ignore();\n }\n\n await query.execute();\n\n // remove gap between orders\n await cleanOrderColumns({ attribute, db, id, transaction: trx });\n } else {\n if (isAnyToOne(attribute)) {\n cleanRelationData.set = cleanRelationData.set?.slice(-1);\n }\n // overwrite all relations\n relIdsToaddOrMove = toIds(cleanRelationData.set);\n await deleteRelations({\n id,\n attribute,\n db,\n relIdsToDelete: 'all',\n relIdsToNotDelete: relIdsToaddOrMove,\n transaction: trx,\n });\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const insert = uniqBy('id', cleanRelationData.set).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n // add order value\n if (hasOrderColumn(attribute)) {\n insert.forEach((row, idx) => {\n row[orderColumnName] = idx + 1;\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const existingRels = await this.createQueryBuilder(joinTable.name)\n .select(inverseJoinColumn.name)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, ID>>>();\n\n const inverseRelsIds = map(inverseJoinColumn.name, existingRels);\n\n const nonExistingRelsIds = difference(relIdsToaddOrMove, inverseRelsIds);\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row: any) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n const query = this.createQueryBuilder(joinTable.name)\n .insert(insert)\n .onConflict(joinTable.pivotColumns)\n .transacting(trx);\n\n if (hasOrderColumn(attribute)) {\n query.merge([orderColumnName]);\n } else {\n query.ignore();\n }\n\n await query.execute();\n }\n\n // Delete the previous relations for oneToAny relations\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd: relIdsToaddOrMove,\n db,\n transaction: trx,\n });\n }\n\n // Delete the previous relations for anyToOne relations\n if (isAnyToOne(attribute)) {\n await deletePreviousAnyToOneRelations({\n id,\n attribute,\n relIdToadd: relIdsToaddOrMove[0],\n db,\n transaction: trx,\n });\n }\n }\n }\n }\n },\n\n /**\n * Delete relational associations of an existing entity\n * This removes associations but doesn't do cascade deletions for components for example. This will be handled on the entity service layer instead\n * NOTE: Most of the deletion should be handled by ON DELETE CASCADE for dialects that have FKs\n *\n * @param {EntityManager} em - entity manager instance\n * @param {Metadata} metadata - model metadta\n * @param {ID} id - entity ID\n */\n async deleteRelations(uid, id, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n continue;\n }\n\n /*\n if morphOne | morphMany\n if morphBy is morphToOne\n set null\n if morphBy is morphToOne\n delete links\n */\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\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 // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n /*\n if morphToOne\n nothing to do\n */\n if (attribute.relation === 'morphToOne') {\n // do nothing\n }\n\n /*\n if morphToMany\n delete links\n */\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn } = joinTable;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n continue;\n }\n\n // do not need to delete links when using foreign keys\n if (db.dialect.usesForeignKeys()) {\n return;\n }\n\n // NOTE: we do not remove existing associations with the target as it should handled by unique FKs instead\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // nothing to do => relation already added on the table\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n }\n }\n },\n\n // TODO: add lifecycle events\n async populate(uid, entity, populate) {\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate,\n });\n\n return { ...entity, ...entry };\n },\n\n // TODO: add lifecycle events\n async load(uid, entity, fields, populate) {\n const { attributes } = db.metadata.get(uid);\n\n const fieldsArr = castArray(fields);\n fieldsArr.forEach((field) => {\n const attribute = attributes[field];\n\n if (!attribute || attribute.type !== 'relation') {\n throw new Error(`Invalid load. Expected ${field} to be a relational attribute`);\n }\n });\n\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate: fieldsArr.reduce(\n (acc, field) => {\n acc[field] = populate || true;\n return acc;\n },\n {} as Record<string, unknown>\n ),\n });\n\n if (!entry) {\n return null;\n }\n\n if (Array.isArray(fields)) {\n return pick(fields, entry);\n }\n\n return entry[fields];\n },\n\n // cascading\n // aggregations\n // -> avg\n // -> min\n // -> max\n // -> grouping\n\n // formulas\n // custom queries\n\n // utilities\n // -> map result\n // -> map input\n\n // extra features\n // -> virtuals\n // -> private\n\n createQueryBuilder(uid) {\n return createQueryBuilder(uid, db);\n },\n\n getRepository(uid) {\n if (!repoMap[uid]) {\n repoMap[uid] = createRepository(uid, db);\n }\n\n return repoMap[uid];\n },\n };\n};\n"],"names":["isRecord","value","isObject","isNil","toId","isValidId","id","Error","JSON","stringify","toIds","castArray","map","isString","isInteger","isValidObjectId","toIdArray","data","array","filter","datum","__pivot","uniqWith","isEqual","toAssocs","isArray","isNumber","isNull","set","options","strict","connect","elm","position","end","__type","disconnect","processData","metadata","withDefaults","attributes","obj","attributeName","Object","keys","attribute","types","field","createField","isUndefined","default","validate","val","toDB","joinColumn","owner","joinColumnName","name","attrValue","morphColumn","idColumn","typeColumn","typeField","assign","has","createEntityManager","db","repoMap","findOne","uid","params","states","lifecycles","run","result","createQueryBuilder","init","first","execute","findMany","count","res","pick","Number","create","get","isPlainObject","dataToInsert","insert","trx","strapi","transaction","attachRelations","commit","e","rollback","where","delete","select","populate","filters","createMany","isEmpty","createdEntries","length","ids","entry","update","entity","mapResults","dataToUpdate","updateRelations","updateMany","updatedRows","concat","deleteRelations","deleteMany","deletedRows","isValidLink","type","cleanRelationData","relation","target","morphBy","targetAttribute","relId","transacting","joinTable","rows","idx","on","order","dataset","orderMap","relationsOrderer","encodePolymorphicRelation","reduce","acc","rel","forEach","row","rowId","rowType","encodedId","encodePolymorphicId","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","relIdsToAdd","isBidirectional","$ne","referencedColumn","inverseJoinColumn","orderColumnName","inverseOrderColumnName","relsToAdd","relIdsToadd","isOneToAny","deletePreviousOneToAnyRelations","uniqBy","hasOrderColumn","hasInverseOrderColumn","maxResults","getConnection","max","as","whereIn","groupBy","from","maxMap","hasSet","hasConnect","hasDisconnect","idsToDelete","$or","item","start","startOrder","rowsToDelete","adjacentRelations","$in","compact","r","after","before","getKnexQuery","getOrderMap","push","relIdsToDelete","isPartialUpdate","relIdsToaddOrMove","isAnyToOne","differenceWith","currentMovingRels","relToAdd","nonExistingRelsIds","difference","query","onConflict","pivotColumns","merge","ignore","cleanOrderColumns","slice","relIdsToNotDelete","existingRels","inverseRelsIds","deletePreviousAnyToOneRelations","relIdToadd","dialect","usesForeignKeys","load","fields","fieldsArr","Array","getRepository","createRepository"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morph-relations.js","sources":["../../src/entity-manager/morph-relations.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */ // allow __type\nimport { curry, groupBy, pipe, mapValues, map, isEmpty } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { createQueryBuilder } from '../query';\nimport type { Database } from '..';\nimport type { MorphJoinTable, Relation } from '../types';\n\ntype Rows = Record<string, unknown>[];\n\nconst getMorphToManyRowsLinkedToMorphOne = (\n rows: Rows,\n {\n uid,\n attributeName,\n typeColumn,\n db,\n }: {\n uid: string;\n attributeName: string;\n typeColumn: { name: string };\n db: Database;\n }\n) =>\n rows.filter((row) => {\n const relatedType = row[typeColumn.name] as string;\n const field = row.field as any;\n\n const targetAttribute = db.metadata.get(relatedType).attributes[field] as Relation.MorphOne;\n\n // ensure targeted field is the right one + check if it is a morphOne\n return (\n targetAttribute?.target === uid &&\n targetAttribute?.morphBy === attributeName &&\n targetAttribute?.relation === 'morphOne'\n );\n });\n\nexport const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate = async (\n rows: Rows,\n {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n }: {\n uid: string;\n attributeName: string;\n joinTable: MorphJoinTable;\n db: Database;\n transaction?: Knex.Transaction;\n }\n) => {\n const { morphColumn } = joinTable;\n const { idColumn, typeColumn } = morphColumn;\n\n const morphOneRows = getMorphToManyRowsLinkedToMorphOne(rows, {\n uid,\n attributeName,\n typeColumn,\n db,\n });\n\n const groupByType = groupBy(typeColumn.name);\n const groupByField = groupBy('field');\n\n const typeAndFieldIdsGrouped = pipe(groupByType, mapValues(groupByField))(morphOneRows);\n\n const orWhere: object[] = [];\n\n for (const [type, v] of Object.entries(typeAndFieldIdsGrouped)) {\n for (const [field, arr] of Object.entries(v)) {\n orWhere.push({\n [typeColumn.name]: type,\n field,\n [idColumn.name]: { $in: map(idColumn.name, arr) },\n });\n }\n }\n\n if (!isEmpty(orWhere)) {\n await createQueryBuilder(joinTable.name, db)\n .delete()\n .where({ $or: orWhere })\n .transacting(trx)\n .execute();\n }\n};\n\n/**\n * Encoding utilities for polymorphic relations.\n *\n * In some scenarios is useful to encode both the id & __type of the relation\n * to have a unique identifier for the relation. (e.g. relations reordering)\n */\n\nexport const encodePolymorphicId = (id: number | string, __type: string) => {\n return `${id}:::${__type}`;\n};\n\nexport const encodePolymorphicRelation = curry(({ idColumn, typeColumn }, relation?: any): any => {\n // Encode the id of the relation and the positional argument if it exist\n const newRelation = {\n ...relation,\n [idColumn]: encodePolymorphicId(relation[idColumn], relation[typeColumn]),\n };\n\n if (relation.position) {\n const { before, after } = relation.position;\n const __type = relation.position.__type || relation.__type;\n\n newRelation.position = { ...relation.position };\n\n if (before) newRelation.position.before = encodePolymorphicId(before, __type);\n if (after) newRelation.position.after = encodePolymorphicId(after, __type);\n }\n\n return newRelation;\n});\n"],"names":["getMorphToManyRowsLinkedToMorphOne","rows","uid","attributeName","typeColumn","db","filter","row","relatedType","name","field","targetAttribute","metadata","get","attributes","target","morphBy","relation","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","joinTable","transaction","trx","morphColumn","idColumn","morphOneRows","groupByType","groupBy","groupByField","typeAndFieldIdsGrouped","pipe","mapValues","orWhere","type","v","Object","entries","arr","push","$in","map","isEmpty","createQueryBuilder","delete","where","$or","transacting","execute","encodePolymorphicId","id","__type","encodePolymorphicRelation","curry","newRelation","position","before","after"],"mappings":";;;;;AAAA;AAUA,MAAMA,qCAAqC,CACzCC,IAAAA,EACA,EACEC,GAAG,EACHC,aAAa,EACbC,UAAU,EACVC,EAAE,EAMH,GAEDJ,IAAKK,CAAAA,MAAM,CAAC,CAACC,GAAAA,GAAAA;AACX,QAAA,MAAMC,WAAcD,GAAAA,GAAG,CAACH,UAAAA,CAAWK,IAAI,CAAC;QACxC,MAAMC,KAAAA,GAAQH,IAAIG,KAAK;QAEvB,MAAMC,eAAAA,GAAkBN,GAAGO,QAAQ,CAACC,GAAG,CAACL,WAAAA,CAAAA,CAAaM,UAAU,CAACJ,KAAM,CAAA;;AAGtE,QAAA,OACEC,iBAAiBI,MAAWb,KAAAA,GAAAA,IAC5BS,iBAAiBK,OAAYb,KAAAA,aAAAA,IAC7BQ,iBAAiBM,QAAa,KAAA,UAAA;AAElC,KAAA,CAAA;AAEWC,MAAAA,oDAAAA,GAAuD,OAClEjB,IAAAA,EACA,EACEC,GAAG,EACHC,aAAa,EACbgB,SAAS,EACTd,EAAE,EACFe,WAAAA,EAAaC,GAAG,EAOjB,GAAA;IAED,MAAM,EAAEC,WAAW,EAAE,GAAGH,SAAAA;AACxB,IAAA,MAAM,EAAEI,QAAQ,EAAEnB,UAAU,EAAE,GAAGkB,WAAAA;IAEjC,MAAME,YAAAA,GAAexB,mCAAmCC,IAAM,EAAA;AAC5DC,QAAAA,GAAAA;AACAC,QAAAA,aAAAA;AACAC,QAAAA,UAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;IAEA,MAAMoB,WAAAA,GAAcC,SAAQtB,CAAAA,UAAAA,CAAWK,IAAI,CAAA;AAC3C,IAAA,MAAMkB,eAAeD,SAAQ,CAAA,OAAA,CAAA;AAE7B,IAAA,MAAME,sBAAyBC,GAAAA,MAAAA,CAAKJ,WAAaK,EAAAA,WAAAA,CAAUH,YAAeH,CAAAA,CAAAA,CAAAA,YAAAA,CAAAA;AAE1E,IAAA,MAAMO,UAAoB,EAAE;IAE5B,KAAK,MAAM,CAACC,IAAMC,EAAAA,CAAAA,CAAE,IAAIC,MAAOC,CAAAA,OAAO,CAACP,sBAAyB,CAAA,CAAA;QAC9D,KAAK,MAAM,CAAClB,KAAO0B,EAAAA,GAAAA,CAAI,IAAIF,MAAOC,CAAAA,OAAO,CAACF,CAAI,CAAA,CAAA;AAC5CF,YAAAA,OAAAA,CAAQM,IAAI,CAAC;gBACX,CAACjC,UAAAA,CAAWK,IAAI,GAAGuB,IAAAA;AACnBtB,gBAAAA,KAAAA;gBACA,CAACa,QAAAA,CAASd,IAAI,GAAG;oBAAE6B,GAAKC,EAAAA,KAAAA,CAAIhB,QAASd,CAAAA,IAAI,EAAE2B,GAAAA;AAAK;AAClD,aAAA,CAAA;AACF;AACF;IAEA,IAAI,CAACI,UAAQT,OAAU,CAAA,EAAA;QACrB,MAAMU,YAAAA,CAAmBtB,UAAUV,IAAI,EAAEJ,IACtCqC,MAAM,EAAA,CACNC,KAAK,CAAC;YAAEC,GAAKb,EAAAA;SACbc,CAAAA,CAAAA,WAAW,CAACxB,GAAAA,CAAAA,CACZyB,OAAO,EAAA;AACZ;AACF;AAEA;;;;;AAKC,IAEM,MAAMC,mBAAsB,GAAA,CAACC,EAAqBC,EAAAA,MAAAA,GAAAA;AACvD,IAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"morph-relations.js","sources":["../../src/entity-manager/morph-relations.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */ // allow __type\nimport { curry, groupBy, pipe, mapValues, map, isEmpty } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { createQueryBuilder } from '../query';\nimport type { Database } from '..';\nimport type { MorphJoinTable, Relation } from '../types';\n\ntype Rows = Record<string, unknown>[];\n\nconst getMorphToManyRowsLinkedToMorphOne = (\n rows: Rows,\n {\n uid,\n attributeName,\n typeColumn,\n db,\n }: {\n uid: string;\n attributeName: string;\n typeColumn: { name: string };\n db: Database;\n }\n) =>\n rows.filter((row) => {\n const relatedType = row[typeColumn.name] as string;\n const field = row.field as any;\n\n const targetAttribute = db.metadata.get(relatedType).attributes[field] as Relation.MorphOne;\n\n // ensure targeted field is the right one + check if it is a morphOne\n return (\n targetAttribute?.target === uid &&\n targetAttribute?.morphBy === attributeName &&\n targetAttribute?.relation === 'morphOne'\n );\n });\n\nexport const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate = async (\n rows: Rows,\n {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n }: {\n uid: string;\n attributeName: string;\n joinTable: MorphJoinTable;\n db: Database;\n transaction?: Knex.Transaction;\n }\n) => {\n const { morphColumn } = joinTable;\n const { idColumn, typeColumn } = morphColumn;\n\n const morphOneRows = getMorphToManyRowsLinkedToMorphOne(rows, {\n uid,\n attributeName,\n typeColumn,\n db,\n });\n\n const groupByType = groupBy(typeColumn.name);\n const groupByField = groupBy('field');\n\n const typeAndFieldIdsGrouped = pipe(groupByType, mapValues(groupByField))(morphOneRows);\n\n const orWhere: object[] = [];\n\n for (const [type, v] of Object.entries(typeAndFieldIdsGrouped)) {\n for (const [field, arr] of Object.entries(v)) {\n orWhere.push({\n [typeColumn.name]: type,\n field,\n [idColumn.name]: { $in: map(idColumn.name, arr) },\n });\n }\n }\n\n if (!isEmpty(orWhere)) {\n await createQueryBuilder(joinTable.name, db)\n .delete()\n .where({ $or: orWhere })\n .transacting(trx)\n .execute();\n }\n};\n\n/**\n * Encoding utilities for polymorphic relations.\n *\n * In some scenarios is useful to encode both the id & __type of the relation\n * to have a unique identifier for the relation. (e.g. relations reordering)\n */\n\nexport const encodePolymorphicId = (id: number | string, __type: string) => {\n return `${id}:::${__type}`;\n};\n\nexport const encodePolymorphicRelation = curry(({ idColumn, typeColumn }, relation?: any): any => {\n // Encode the id of the relation and the positional argument if it exist\n const newRelation = {\n ...relation,\n [idColumn]: encodePolymorphicId(relation[idColumn], relation[typeColumn]),\n };\n\n if (relation.position) {\n const { before, after } = relation.position;\n const __type = relation.position.__type || relation.__type;\n\n newRelation.position = { ...relation.position };\n\n if (before) newRelation.position.before = encodePolymorphicId(before, __type);\n if (after) newRelation.position.after = encodePolymorphicId(after, __type);\n }\n\n return newRelation;\n});\n"],"names":["getMorphToManyRowsLinkedToMorphOne","rows","uid","attributeName","typeColumn","db","filter","row","relatedType","name","field","targetAttribute","metadata","get","attributes","target","morphBy","relation","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","joinTable","transaction","trx","morphColumn","idColumn","morphOneRows","groupByType","groupBy","groupByField","typeAndFieldIdsGrouped","pipe","mapValues","orWhere","type","v","Object","entries","arr","push","$in","map","isEmpty","createQueryBuilder","delete","where","$or","transacting","execute","encodePolymorphicId","id","__type","encodePolymorphicRelation","curry","newRelation","position","before","after"],"mappings":";;;;;AAAA;AAUA,MAAMA,qCAAqC,CACzCC,IAAAA,EACA,EACEC,GAAG,EACHC,aAAa,EACbC,UAAU,EACVC,EAAE,EAMH,GAEDJ,IAAKK,CAAAA,MAAM,CAAC,CAACC,GAAAA,GAAAA;AACX,QAAA,MAAMC,WAAcD,GAAAA,GAAG,CAACH,UAAAA,CAAWK,IAAI,CAAC;QACxC,MAAMC,KAAAA,GAAQH,IAAIG,KAAK;QAEvB,MAAMC,eAAAA,GAAkBN,GAAGO,QAAQ,CAACC,GAAG,CAACL,WAAAA,CAAAA,CAAaM,UAAU,CAACJ,KAAM,CAAA;;AAGtE,QAAA,OACEC,iBAAiBI,MAAWb,KAAAA,GAAAA,IAC5BS,iBAAiBK,OAAYb,KAAAA,aAAAA,IAC7BQ,iBAAiBM,QAAa,KAAA,UAAA;AAElC,KAAA,CAAA;AAEWC,MAAAA,oDAAAA,GAAuD,OAClEjB,IAAAA,EACA,EACEC,GAAG,EACHC,aAAa,EACbgB,SAAS,EACTd,EAAE,EACFe,WAAAA,EAAaC,GAAG,EAOjB,GAAA;IAED,MAAM,EAAEC,WAAW,EAAE,GAAGH,SAAAA;AACxB,IAAA,MAAM,EAAEI,QAAQ,EAAEnB,UAAU,EAAE,GAAGkB,WAAAA;IAEjC,MAAME,YAAAA,GAAexB,mCAAmCC,IAAM,EAAA;AAC5DC,QAAAA,GAAAA;AACAC,QAAAA,aAAAA;AACAC,QAAAA,UAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;IAEA,MAAMoB,WAAAA,GAAcC,SAAQtB,CAAAA,UAAAA,CAAWK,IAAI,CAAA;AAC3C,IAAA,MAAMkB,eAAeD,SAAQ,CAAA,OAAA,CAAA;AAE7B,IAAA,MAAME,sBAAyBC,GAAAA,MAAAA,CAAKJ,WAAaK,EAAAA,WAAAA,CAAUH,YAAeH,CAAAA,CAAAA,CAAAA,YAAAA,CAAAA;AAE1E,IAAA,MAAMO,UAAoB,EAAE;IAE5B,KAAK,MAAM,CAACC,IAAMC,EAAAA,CAAAA,CAAE,IAAIC,MAAOC,CAAAA,OAAO,CAACP,sBAAyB,CAAA,CAAA;QAC9D,KAAK,MAAM,CAAClB,KAAO0B,EAAAA,GAAAA,CAAI,IAAIF,MAAOC,CAAAA,OAAO,CAACF,CAAI,CAAA,CAAA;AAC5CF,YAAAA,OAAAA,CAAQM,IAAI,CAAC;gBACX,CAACjC,UAAAA,CAAWK,IAAI,GAAGuB,IAAAA;AACnBtB,gBAAAA,KAAAA;gBACA,CAACa,QAAAA,CAASd,IAAI,GAAG;oBAAE6B,GAAKC,EAAAA,KAAAA,CAAIhB,QAASd,CAAAA,IAAI,EAAE2B,GAAAA;AAAK;AAClD,aAAA,CAAA;AACF;AACF;IAEA,IAAI,CAACI,UAAQT,OAAU,CAAA,EAAA;QACrB,MAAMU,YAAAA,CAAmBtB,UAAUV,IAAI,EAAEJ,IACtCqC,MAAM,EAAA,CACNC,KAAK,CAAC;YAAEC,GAAKb,EAAAA;SACbc,CAAAA,CAAAA,WAAW,CAACxB,GAAAA,CAAAA,CACZyB,OAAO,EAAA;AACZ;AACF;AAEA;;;;;AAKC,IAEM,MAAMC,mBAAsB,GAAA,CAACC,EAAqBC,EAAAA,MAAAA,GAAAA;AACvD,IAAA,OAAO,CAAGD,EAAAA,EAAAA,CAAG,GAAG,EAAEC,MAAQ,CAAA,CAAA;AAC5B;AAEO,MAAMC,4BAA4BC,OAAM,CAAA,CAAC,EAAE5B,QAAQ,EAAEnB,UAAU,EAAE,EAAEa,QAAAA,GAAAA;;AAExE,IAAA,MAAMmC,WAAc,GAAA;AAClB,QAAA,GAAGnC,QAAQ;QACX,CAACM,QAAAA,GAAWwB,mBAAoB9B,CAAAA,QAAQ,CAACM,QAAS,CAAA,EAAEN,QAAQ,CAACb,UAAW,CAAA;AAC1E,KAAA;IAEA,IAAIa,QAAAA,CAASoC,QAAQ,EAAE;AACrB,QAAA,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAGtC,SAASoC,QAAQ;AAC3C,QAAA,MAAMJ,SAAShC,QAASoC,CAAAA,QAAQ,CAACJ,MAAM,IAAIhC,SAASgC,MAAM;AAE1DG,QAAAA,WAAAA,CAAYC,QAAQ,GAAG;AAAE,YAAA,GAAGpC,SAASoC;AAAS,SAAA;AAE9C,QAAA,IAAIC,QAAQF,WAAYC,CAAAA,QAAQ,CAACC,MAAM,GAAGP,oBAAoBO,MAAQL,EAAAA,MAAAA,CAAAA;AACtE,QAAA,IAAIM,OAAOH,WAAYC,CAAAA,QAAQ,CAACE,KAAK,GAAGR,oBAAoBQ,KAAON,EAAAA,MAAAA,CAAAA;AACrE;IAEA,OAAOG,WAAAA;AACT,CAAG;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morph-relations.mjs","sources":["../../src/entity-manager/morph-relations.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */ // allow __type\nimport { curry, groupBy, pipe, mapValues, map, isEmpty } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { createQueryBuilder } from '../query';\nimport type { Database } from '..';\nimport type { MorphJoinTable, Relation } from '../types';\n\ntype Rows = Record<string, unknown>[];\n\nconst getMorphToManyRowsLinkedToMorphOne = (\n rows: Rows,\n {\n uid,\n attributeName,\n typeColumn,\n db,\n }: {\n uid: string;\n attributeName: string;\n typeColumn: { name: string };\n db: Database;\n }\n) =>\n rows.filter((row) => {\n const relatedType = row[typeColumn.name] as string;\n const field = row.field as any;\n\n const targetAttribute = db.metadata.get(relatedType).attributes[field] as Relation.MorphOne;\n\n // ensure targeted field is the right one + check if it is a morphOne\n return (\n targetAttribute?.target === uid &&\n targetAttribute?.morphBy === attributeName &&\n targetAttribute?.relation === 'morphOne'\n );\n });\n\nexport const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate = async (\n rows: Rows,\n {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n }: {\n uid: string;\n attributeName: string;\n joinTable: MorphJoinTable;\n db: Database;\n transaction?: Knex.Transaction;\n }\n) => {\n const { morphColumn } = joinTable;\n const { idColumn, typeColumn } = morphColumn;\n\n const morphOneRows = getMorphToManyRowsLinkedToMorphOne(rows, {\n uid,\n attributeName,\n typeColumn,\n db,\n });\n\n const groupByType = groupBy(typeColumn.name);\n const groupByField = groupBy('field');\n\n const typeAndFieldIdsGrouped = pipe(groupByType, mapValues(groupByField))(morphOneRows);\n\n const orWhere: object[] = [];\n\n for (const [type, v] of Object.entries(typeAndFieldIdsGrouped)) {\n for (const [field, arr] of Object.entries(v)) {\n orWhere.push({\n [typeColumn.name]: type,\n field,\n [idColumn.name]: { $in: map(idColumn.name, arr) },\n });\n }\n }\n\n if (!isEmpty(orWhere)) {\n await createQueryBuilder(joinTable.name, db)\n .delete()\n .where({ $or: orWhere })\n .transacting(trx)\n .execute();\n }\n};\n\n/**\n * Encoding utilities for polymorphic relations.\n *\n * In some scenarios is useful to encode both the id & __type of the relation\n * to have a unique identifier for the relation. (e.g. relations reordering)\n */\n\nexport const encodePolymorphicId = (id: number | string, __type: string) => {\n return `${id}:::${__type}`;\n};\n\nexport const encodePolymorphicRelation = curry(({ idColumn, typeColumn }, relation?: any): any => {\n // Encode the id of the relation and the positional argument if it exist\n const newRelation = {\n ...relation,\n [idColumn]: encodePolymorphicId(relation[idColumn], relation[typeColumn]),\n };\n\n if (relation.position) {\n const { before, after } = relation.position;\n const __type = relation.position.__type || relation.__type;\n\n newRelation.position = { ...relation.position };\n\n if (before) newRelation.position.before = encodePolymorphicId(before, __type);\n if (after) newRelation.position.after = encodePolymorphicId(after, __type);\n }\n\n return newRelation;\n});\n"],"names":["getMorphToManyRowsLinkedToMorphOne","rows","uid","attributeName","typeColumn","db","filter","row","relatedType","name","field","targetAttribute","metadata","get","attributes","target","morphBy","relation","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","joinTable","transaction","trx","morphColumn","idColumn","morphOneRows","groupByType","groupBy","groupByField","typeAndFieldIdsGrouped","pipe","mapValues","orWhere","type","v","Object","entries","arr","push","$in","map","isEmpty","createQueryBuilder","delete","where","$or","transacting","execute","encodePolymorphicId","id","__type","encodePolymorphicRelation","curry","newRelation","position","before","after"],"mappings":";;;AAAA;AAUA,MAAMA,qCAAqC,CACzCC,IAAAA,EACA,EACEC,GAAG,EACHC,aAAa,EACbC,UAAU,EACVC,EAAE,EAMH,GAEDJ,IAAKK,CAAAA,MAAM,CAAC,CAACC,GAAAA,GAAAA;AACX,QAAA,MAAMC,WAAcD,GAAAA,GAAG,CAACH,UAAAA,CAAWK,IAAI,CAAC;QACxC,MAAMC,KAAAA,GAAQH,IAAIG,KAAK;QAEvB,MAAMC,eAAAA,GAAkBN,GAAGO,QAAQ,CAACC,GAAG,CAACL,WAAAA,CAAAA,CAAaM,UAAU,CAACJ,KAAM,CAAA;;AAGtE,QAAA,OACEC,iBAAiBI,MAAWb,KAAAA,GAAAA,IAC5BS,iBAAiBK,OAAYb,KAAAA,aAAAA,IAC7BQ,iBAAiBM,QAAa,KAAA,UAAA;AAElC,KAAA,CAAA;AAEWC,MAAAA,oDAAAA,GAAuD,OAClEjB,IAAAA,EACA,EACEC,GAAG,EACHC,aAAa,EACbgB,SAAS,EACTd,EAAE,EACFe,WAAAA,EAAaC,GAAG,EAOjB,GAAA;IAED,MAAM,EAAEC,WAAW,EAAE,GAAGH,SAAAA;AACxB,IAAA,MAAM,EAAEI,QAAQ,EAAEnB,UAAU,EAAE,GAAGkB,WAAAA;IAEjC,MAAME,YAAAA,GAAexB,mCAAmCC,IAAM,EAAA;AAC5DC,QAAAA,GAAAA;AACAC,QAAAA,aAAAA;AACAC,QAAAA,UAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;IAEA,MAAMoB,WAAAA,GAAcC,OAAQtB,CAAAA,UAAAA,CAAWK,IAAI,CAAA;AAC3C,IAAA,MAAMkB,eAAeD,OAAQ,CAAA,OAAA,CAAA;AAE7B,IAAA,MAAME,sBAAyBC,GAAAA,IAAAA,CAAKJ,WAAaK,EAAAA,SAAAA,CAAUH,YAAeH,CAAAA,CAAAA,CAAAA,YAAAA,CAAAA;AAE1E,IAAA,MAAMO,UAAoB,EAAE;IAE5B,KAAK,MAAM,CAACC,IAAMC,EAAAA,CAAAA,CAAE,IAAIC,MAAOC,CAAAA,OAAO,CAACP,sBAAyB,CAAA,CAAA;QAC9D,KAAK,MAAM,CAAClB,KAAO0B,EAAAA,GAAAA,CAAI,IAAIF,MAAOC,CAAAA,OAAO,CAACF,CAAI,CAAA,CAAA;AAC5CF,YAAAA,OAAAA,CAAQM,IAAI,CAAC;gBACX,CAACjC,UAAAA,CAAWK,IAAI,GAAGuB,IAAAA;AACnBtB,gBAAAA,KAAAA;gBACA,CAACa,QAAAA,CAASd,IAAI,GAAG;oBAAE6B,GAAKC,EAAAA,GAAAA,CAAIhB,QAASd,CAAAA,IAAI,EAAE2B,GAAAA;AAAK;AAClD,aAAA,CAAA;AACF;AACF;IAEA,IAAI,CAACI,QAAQT,OAAU,CAAA,EAAA;QACrB,MAAMU,kBAAAA,CAAmBtB,UAAUV,IAAI,EAAEJ,IACtCqC,MAAM,EAAA,CACNC,KAAK,CAAC;YAAEC,GAAKb,EAAAA;SACbc,CAAAA,CAAAA,WAAW,CAACxB,GAAAA,CAAAA,CACZyB,OAAO,EAAA;AACZ;AACF;AAEA;;;;;AAKC,IAEM,MAAMC,mBAAsB,GAAA,CAACC,EAAqBC,EAAAA,MAAAA,GAAAA;AACvD,IAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"morph-relations.mjs","sources":["../../src/entity-manager/morph-relations.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */ // allow __type\nimport { curry, groupBy, pipe, mapValues, map, isEmpty } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { createQueryBuilder } from '../query';\nimport type { Database } from '..';\nimport type { MorphJoinTable, Relation } from '../types';\n\ntype Rows = Record<string, unknown>[];\n\nconst getMorphToManyRowsLinkedToMorphOne = (\n rows: Rows,\n {\n uid,\n attributeName,\n typeColumn,\n db,\n }: {\n uid: string;\n attributeName: string;\n typeColumn: { name: string };\n db: Database;\n }\n) =>\n rows.filter((row) => {\n const relatedType = row[typeColumn.name] as string;\n const field = row.field as any;\n\n const targetAttribute = db.metadata.get(relatedType).attributes[field] as Relation.MorphOne;\n\n // ensure targeted field is the right one + check if it is a morphOne\n return (\n targetAttribute?.target === uid &&\n targetAttribute?.morphBy === attributeName &&\n targetAttribute?.relation === 'morphOne'\n );\n });\n\nexport const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate = async (\n rows: Rows,\n {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n }: {\n uid: string;\n attributeName: string;\n joinTable: MorphJoinTable;\n db: Database;\n transaction?: Knex.Transaction;\n }\n) => {\n const { morphColumn } = joinTable;\n const { idColumn, typeColumn } = morphColumn;\n\n const morphOneRows = getMorphToManyRowsLinkedToMorphOne(rows, {\n uid,\n attributeName,\n typeColumn,\n db,\n });\n\n const groupByType = groupBy(typeColumn.name);\n const groupByField = groupBy('field');\n\n const typeAndFieldIdsGrouped = pipe(groupByType, mapValues(groupByField))(morphOneRows);\n\n const orWhere: object[] = [];\n\n for (const [type, v] of Object.entries(typeAndFieldIdsGrouped)) {\n for (const [field, arr] of Object.entries(v)) {\n orWhere.push({\n [typeColumn.name]: type,\n field,\n [idColumn.name]: { $in: map(idColumn.name, arr) },\n });\n }\n }\n\n if (!isEmpty(orWhere)) {\n await createQueryBuilder(joinTable.name, db)\n .delete()\n .where({ $or: orWhere })\n .transacting(trx)\n .execute();\n }\n};\n\n/**\n * Encoding utilities for polymorphic relations.\n *\n * In some scenarios is useful to encode both the id & __type of the relation\n * to have a unique identifier for the relation. (e.g. relations reordering)\n */\n\nexport const encodePolymorphicId = (id: number | string, __type: string) => {\n return `${id}:::${__type}`;\n};\n\nexport const encodePolymorphicRelation = curry(({ idColumn, typeColumn }, relation?: any): any => {\n // Encode the id of the relation and the positional argument if it exist\n const newRelation = {\n ...relation,\n [idColumn]: encodePolymorphicId(relation[idColumn], relation[typeColumn]),\n };\n\n if (relation.position) {\n const { before, after } = relation.position;\n const __type = relation.position.__type || relation.__type;\n\n newRelation.position = { ...relation.position };\n\n if (before) newRelation.position.before = encodePolymorphicId(before, __type);\n if (after) newRelation.position.after = encodePolymorphicId(after, __type);\n }\n\n return newRelation;\n});\n"],"names":["getMorphToManyRowsLinkedToMorphOne","rows","uid","attributeName","typeColumn","db","filter","row","relatedType","name","field","targetAttribute","metadata","get","attributes","target","morphBy","relation","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","joinTable","transaction","trx","morphColumn","idColumn","morphOneRows","groupByType","groupBy","groupByField","typeAndFieldIdsGrouped","pipe","mapValues","orWhere","type","v","Object","entries","arr","push","$in","map","isEmpty","createQueryBuilder","delete","where","$or","transacting","execute","encodePolymorphicId","id","__type","encodePolymorphicRelation","curry","newRelation","position","before","after"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sources":["../../src/errors/database.ts"],"sourcesContent":["export default class DatabaseError extends Error {\n details: unknown;\n\n constructor(message = 'A database error occurred', details = {}) {\n super();\n this.name = 'DatabaseError';\n this.message = message;\n this.details = details;\n }\n}\n"],"names":["DatabaseError","Error","
|
|
1
|
+
{"version":3,"file":"database.js","sources":["../../src/errors/database.ts"],"sourcesContent":["export default class DatabaseError extends Error {\n details: unknown;\n\n constructor(message = 'A database error occurred', details = {}) {\n super();\n this.name = 'DatabaseError';\n this.message = message;\n this.details = details;\n }\n}\n"],"names":["DatabaseError","Error","message","details","name"],"mappings":";;AAAe,MAAMA,aAAsBC,SAAAA,KAAAA,CAAAA;AAGzC,IAAA,WAAA,CAAYC,UAAU,2BAA2B,EAAEC,OAAU,GAAA,EAAE,CAAE;QAC/D,KAAK,EAAA;QACL,IAAI,CAACC,IAAI,GAAG,eAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;QACf,IAAI,CAACC,OAAO,GAAGA,OAAAA;AACjB;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.mjs","sources":["../../src/errors/database.ts"],"sourcesContent":["export default class DatabaseError extends Error {\n details: unknown;\n\n constructor(message = 'A database error occurred', details = {}) {\n super();\n this.name = 'DatabaseError';\n this.message = message;\n this.details = details;\n }\n}\n"],"names":["DatabaseError","Error","
|
|
1
|
+
{"version":3,"file":"database.mjs","sources":["../../src/errors/database.ts"],"sourcesContent":["export default class DatabaseError extends Error {\n details: unknown;\n\n constructor(message = 'A database error occurred', details = {}) {\n super();\n this.name = 'DatabaseError';\n this.message = message;\n this.details = details;\n }\n}\n"],"names":["DatabaseError","Error","message","details","name"],"mappings":"AAAe,MAAMA,aAAsBC,SAAAA,KAAAA,CAAAA;AAGzC,IAAA,WAAA,CAAYC,UAAU,2BAA2B,EAAEC,OAAU,GAAA,EAAE,CAAE;QAC/D,KAAK,EAAA;QACL,IAAI,CAACC,IAAI,GAAG,eAAA;QACZ,IAAI,CAACF,OAAO,GAAGA,OAAAA;QACf,IAAI,CAACC,OAAO,GAAGA,OAAAA;AACjB;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invalid-date.js","sources":["../../src/errors/invalid-date.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidDateError extends DatabaseError {\n constructor(message = 'Invalid date format, expected YYYY-MM-DD') {\n super(message);\n this.name = 'InvalidDateFormat';\n }\n}\n"],"names":["InvalidDateError","DatabaseError","
|
|
1
|
+
{"version":3,"file":"invalid-date.js","sources":["../../src/errors/invalid-date.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidDateError extends DatabaseError {\n constructor(message = 'Invalid date format, expected YYYY-MM-DD') {\n super(message);\n this.name = 'InvalidDateFormat';\n }\n}\n"],"names":["InvalidDateError","DatabaseError","message","name"],"mappings":";;;;AAEe,MAAMA,gBAAyBC,SAAAA,QAAAA,CAAAA;IAC5C,WAAYC,CAAAA,OAAAA,GAAU,0CAA0C,CAAE;AAChE,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,mBAAA;AACd;AACF;;;;"}
|