333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/src/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAEhE;IAEI,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,qDAAsB,aAAiC;QAAjC,kBAAa,GAAb,aAAa,CAAoB;IACvD,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E,+DAAS,GAAT;QAEI,cAAc;QACd,2BAA2B;QAC3B,wDAAwD;QACxD,8BAA8B;QAC9B,yDAAyD;QACzD,iCAAiC;QACjC,oFAAoF;QARxF,iBA8BC;QApBG,0HAA0H;QAC1H,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC9B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,aAAa;gBACtE,IAAM,SAAS,GAAG,KAAI,CAAC,mBAAmB,CAAC,KAAI,CAAC,aAAa,CAAC,SAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBAC9F,KAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QAED,yHAAyH;QACzH,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,IAAI;YAE1C,8FAA8F;YAC9F,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU;gBAC1C,OAAO;YAEX,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,aAAa;gBAC9C,IAAM,SAAS,GAAG,KAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBAC3E,KAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,4EAA4E;IAC5E,kBAAkB;IAClB,4EAA4E;IAEpE,yEAAmB,GAA3B,UAA4B,eAAuB,EAAE,aAAoC;QACrF,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,aAAa,EAAE;YAClD,YAAY,EAAE,eAAe,GAAG,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY;YACzE,aAAa,EAAE,eAAe,GAAG,GAAG,GAAG,aAAa,CAAC,YAAY;YACjE,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;SACzD,CAAC,CAAC;IACP,CAAC;IAEL,kDAAC;AAAD,CA1DA,AA0DC,IAAA","file":"RelationCountMetadataToAttributeTransformer.js","sourcesContent":["import {QueryExpressionMap} from \"../QueryExpressionMap\";\nimport {RelationCountMetadata} from \"../../metadata/RelationCountMetadata\";\nimport {RelationCountAttribute} from \"./RelationCountAttribute\";\n\nexport class RelationCountMetadataToAttributeTransformer {\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(protected expressionMap: QueryExpressionMap) {\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    transform() {\n\n        // by example:\n        // post has relation count:\n        // @RelationCount(post => post.categories) categoryCount\n        // category has relation count\n        // @RelationCount(category => category.images) imageCount\n        // we load post and join category\n        // we expect post.categoryCount and post.category.imageCount to have relation counts\n\n        // first create relation count attributes for all relation count metadatas of the main selected object (post from example)\n        if (this.expressionMap.mainAlias) {\n            this.expressionMap.mainAlias.metadata.relationCounts.forEach(relationCount => {\n                const attribute = this.metadataToAttribute(this.expressionMap.mainAlias!.name, relationCount);\n                this.expressionMap.relationCountAttributes.push(attribute);\n            });\n        }\n\n        // second create relation count attributes for all relation count metadatas of all joined objects (category from example)\n        this.expressionMap.joinAttributes.forEach(join => {\n\n            // ensure this join has a metadata, because relation count can only work for real orm entities\n            if (!join.metadata || join.metadata.isJunction)\n                return;\n\n            join.metadata.relationCounts.forEach(relationCount => {\n                const attribute = this.metadataToAttribute(join.alias.name, relationCount);\n                this.expressionMap.relationCountAttributes.push(attribute);\n            });\n        });\n    }\n\n    // -------------------------------------------------------------------------\n    // Private Methods\n    // -------------------------------------------------------------------------\n\n    private metadataToAttribute(parentAliasName: string, relationCount: RelationCountMetadata): RelationCountAttribute {\n        return new RelationCountAttribute(this.expressionMap, {\n            relationName: parentAliasName + \".\" + relationCount.relation.propertyName, // category.images\n            mapToProperty: parentAliasName + \".\" + relationCount.propertyName, // category.imageIds\n            alias: relationCount.alias,\n            queryBuilderFactory: relationCount.queryBuilderFactory\n        });\n    }\n\n}"],"sourceRoot":"../.."}