333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/src/metadata/RelationIdMetadata.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH;IAyCI,wEAAwE;IACxE,cAAc;IACd,wEAAwE;IAExE,4BAAY,OAGX;QACG,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAChE,CAAC;IAED,wEAAwE;IACxE,iBAAiB;IACjB,wEAAwE;IAExE;;;;OAIG;IACH,qCAAQ,GAAR,UAAS,MAAqB;QAA9B,iBAaC;QAZG,IAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE3D,IAAI,aAAa,YAAY,KAAK,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,UAAA,IAAI;gBAC/C,OAAO,KAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAnC,CAAmC,CAAC,CAAC;SAE1D;aAAM;YACH,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACrF,IAAI,KAAK,KAAK,SAAS;gBACnB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;SACzC;IACL,CAAC;IAED,wEAAwE;IACxE,yBAAyB;IACzB,wEAAwE;IAExE;;;OAGG;IACH,kCAAK,GAAL;QACI,IAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;QACjK,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;QAChF,IAAI,CAAC,QAAQ;YACT,MAAM,IAAI,KAAK,CAAC,0BAAwB,YAAY,0DAAuD,CAAC,CAAC;QAEjH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAGL,yBAAC;AAAD,CAnGA,AAmGC,IAAA","file":"RelationIdMetadata.js","sourcesContent":["import {RelationIdMetadataArgs} from \"../metadata-args/RelationIdMetadataArgs\";\nimport {EntityMetadata} from \"./EntityMetadata\";\nimport {RelationMetadata} from \"./RelationMetadata\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\n\n/**\n * Contains all information about entity's relation count.\n */\nexport class RelationIdMetadata {\n\n    // ---------------------------------------------------------------------\n    // Public Properties\n    // ---------------------------------------------------------------------\n\n    /**\n     * Entity metadata where this column metadata is.\n     */\n    entityMetadata: EntityMetadata;\n\n    /**\n     * Relation from which ids will be extracted.\n     */\n    relation: RelationMetadata;\n\n    /**\n     * Relation name which need to count.\n     */\n    relationNameOrFactory: string|((object: any) => any);\n\n    /**\n     * Target class to which metadata is applied.\n     */\n    target: Function|string;\n\n    /**\n     * Target's property name to which this metadata is applied.\n     */\n    propertyName: string;\n\n    /**\n     * Alias of the joined (destination) table.\n     */\n    alias?: string;\n\n    /**\n     * Extra condition applied to \"ON\" section of join.\n     */\n    queryBuilderFactory?: (qb: SelectQueryBuilder<any>) => SelectQueryBuilder<any>;\n\n    // ---------------------------------------------------------------------\n    // Constructor\n    // ---------------------------------------------------------------------\n\n    constructor(options: {\n        entityMetadata: EntityMetadata,\n        args: RelationIdMetadataArgs\n    }) {\n        this.entityMetadata = options.entityMetadata;\n        this.target = options.args.target;\n        this.propertyName = options.args.propertyName;\n        this.relationNameOrFactory = options.args.relation;\n        this.alias = options.args.alias;\n        this.queryBuilderFactory = options.args.queryBuilderFactory;\n    }\n\n    // ---------------------------------------------------------------------\n    // Public Methods\n    // ---------------------------------------------------------------------\n\n    /**\n     * Sets relation id value from the given entity.\n     *\n     * todo: make it to work in embeds as well.\n     */\n    setValue(entity: ObjectLiteral) {\n        const inverseEntity = this.relation.getEntityValue(entity);\n\n        if (inverseEntity instanceof Array) {\n            entity[this.propertyName] = inverseEntity.map(item => {\n               return this.relation.inverseEntityMetadata.getEntityIdMixedMap(item);\n            }).filter(item => item !== null && item !== undefined);\n\n        } else {\n            const value = this.relation.inverseEntityMetadata.getEntityIdMixedMap(inverseEntity);\n            if (value !== undefined)\n                entity[this.propertyName] = value;\n        }\n    }\n\n    // ---------------------------------------------------------------------\n    // Public Builder Methods\n    // ---------------------------------------------------------------------\n\n    /**\n     * Builds some depend relation id properties.\n     * This builder method should be used only after entity metadata, its properties map and all relations are build.\n     */\n    build() {\n        const propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n        const relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n        if (!relation)\n            throw new Error(`Cannot find relation ${propertyPath}. Wrong relation specified for @RelationId decorator.`);\n\n        this.relation = relation;\n    }\n\n\n}"],"sourceRoot":".."}