schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
1
{"version":3,"sources":["../../src/query-builder/transformer/PlainObjectToNewEntityTransformer.ts"],"names":[],"mappings":"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","file":"PlainObjectToNewEntityTransformer.js","sourcesContent":["import {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\n\n/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nexport class PlainObjectToNewEntityTransformer {\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    transform<T>(newEntity: T, object: ObjectLiteral, metadata: EntityMetadata, getLazyRelationsPromiseValue: boolean = false): T {\n        // console.log(\"groupAndTransform entity:\", newEntity);\n        // console.log(\"groupAndTransform object:\", object);\n        this.groupAndTransform(newEntity, object, metadata, getLazyRelationsPromiseValue);\n        // console.log(\"result:\", newEntity);\n        return newEntity;\n    }\n\n    // -------------------------------------------------------------------------\n    // Private Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n     * we need to group our result and we must have some unique id (primary key in our case)\n     */\n    private groupAndTransform(entity: ObjectLiteral, object: ObjectLiteral, metadata: EntityMetadata, getLazyRelationsPromiseValue: boolean = false): void {\n\n        // console.log(\"groupAndTransform entity:\", entity);\n        // console.log(\"groupAndTransform object:\", object);\n\n        // copy regular column properties from the given object\n        metadata.nonVirtualColumns.forEach(column => {\n            const objectColumnValue = column.getEntityValue(object);\n            if (objectColumnValue !== undefined)\n                column.setEntityValue(entity, objectColumnValue);\n        });\n\n        // // copy relation properties from the given object\n        if (metadata.relations.length) {\n            metadata.relations.forEach(relation => {\n\n                let entityRelatedValue = relation.getEntityValue(entity);\n                const objectRelatedValue = relation.getEntityValue(object, getLazyRelationsPromiseValue);\n                if (objectRelatedValue === undefined)\n                    return;\n\n                if (relation.isOneToMany || relation.isManyToMany) {\n                    if (!(objectRelatedValue instanceof Array))\n                        return;\n\n                    if (!entityRelatedValue) {\n                        entityRelatedValue = [];\n                        relation.setEntityValue(entity, entityRelatedValue);\n                    }\n\n                    objectRelatedValue.forEach(objectRelatedValueItem => {\n\n                        // check if we have this item from the merging object in the original entity we merge into\n                        let objectRelatedValueEntity = (entityRelatedValue as any[]).find(entityRelatedValueItem => {\n                            return relation.inverseEntityMetadata.compareEntities(objectRelatedValueItem, entityRelatedValueItem);\n                        });\n\n                        // if such item already exist then merge new data into it, if its not we create a new entity and merge it into the array\n                        if (!objectRelatedValueEntity) {\n                            objectRelatedValueEntity = relation.inverseEntityMetadata.create();\n                            entityRelatedValue.push(objectRelatedValueEntity);\n                        }\n\n                        this.groupAndTransform(objectRelatedValueEntity, objectRelatedValueItem, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n                    });\n\n                } else {\n\n                    // if related object isn't an object (direct relation id for example)\n                    // we just set it to the entity relation, we don't need anything more from it\n                    // however we do it only if original entity does not have this relation set to object\n                    // to prevent full overriding of objects\n                    if (!(objectRelatedValue instanceof Object)) {\n                        if (!(entityRelatedValue instanceof Object))\n                            relation.setEntityValue(entity, objectRelatedValue);\n                        return;\n                    }\n\n                    if (!entityRelatedValue) {\n                        entityRelatedValue = relation.inverseEntityMetadata.create();\n                        relation.setEntityValue(entity, entityRelatedValue);\n                    }\n\n                    this.groupAndTransform(entityRelatedValue, objectRelatedValue, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n                }\n            });\n        }\n    }\n\n}"],"sourceRoot":"../.."}