333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var CustomRepositoryDoesNotHaveEntityError_1 = require("../error/CustomRepositoryDoesNotHaveEntityError");
var index_1 = require("../index");
var CustomRepositoryNotFoundError_1 = require("../error/CustomRepositoryNotFoundError");
/**
 * Provides abstract class for custom repositories that do not inherit from original orm Repository.
 * Contains all most-necessary methods to simplify code in the custom repository.
 * All methods are protected thus not exposed and it allows to create encapsulated custom repository.
 *
 * @experimental
 */
var AbstractRepository = /** @class */ (function () {
    function AbstractRepository() {
    }
    Object.defineProperty(AbstractRepository.prototype, "repository", {
        // -------------------------------------------------------------------------
        // Protected Accessors
        // -------------------------------------------------------------------------
        /**
         * Gets the original ORM repository for the entity that is managed by this repository.
         * If current repository does not manage any entity, then exception will be thrown.
         */
        get: function () {
            var target = this.getCustomRepositoryTarget(this);
            if (!target)
                throw new CustomRepositoryDoesNotHaveEntityError_1.CustomRepositoryDoesNotHaveEntityError(this.constructor);
            return this.manager.getRepository(target);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(AbstractRepository.prototype, "treeRepository", {
        /**
         * Gets the original ORM tree repository for the entity that is managed by this repository.
         * If current repository does not manage any entity, then exception will be thrown.
         */
        get: function () {
            var target = this.getCustomRepositoryTarget(this);
            if (!target)
                throw new CustomRepositoryDoesNotHaveEntityError_1.CustomRepositoryDoesNotHaveEntityError(this.constructor);
            return this.manager.getTreeRepository(target);
        },
        enumerable: true,
        configurable: true
    });
    // -------------------------------------------------------------------------
    // Protected Methods
    // -------------------------------------------------------------------------
    /**
     * Creates a new query builder for the repository's entity that can be used to build a sql query.
     * If current repository does not manage any entity, then exception will be thrown.
     */
    AbstractRepository.prototype.createQueryBuilder = function (alias) {
        var target = this.getCustomRepositoryTarget(this.constructor);
        if (!target)
            throw new CustomRepositoryDoesNotHaveEntityError_1.CustomRepositoryDoesNotHaveEntityError(this.constructor);
        return this.manager.getRepository(target).createQueryBuilder(alias);
    };
    /**
     * Creates a new query builder for the given entity that can be used to build a sql query.
     */
    AbstractRepository.prototype.createQueryBuilderFor = function (entity, alias) {
        return this.getRepositoryFor(entity).createQueryBuilder(alias);
    };
    /**
     * Gets the original ORM repository for the given entity class.
     */
    AbstractRepository.prototype.getRepositoryFor = function (entity) {
        return this.manager.getRepository(entity);
    };
    /**
     * Gets the original ORM tree repository for the given entity class.
     */
    AbstractRepository.prototype.getTreeRepositoryFor = function (entity) {
        return this.manager.getTreeRepository(entity);
    };
    // -------------------------------------------------------------------------
    // Private Methods
    // -------------------------------------------------------------------------
    /**
     * Gets custom repository's managed entity.
     * If given custom repository does not manage any entity then undefined will be returned.
     */
    AbstractRepository.prototype.getCustomRepositoryTarget = function (customRepository) {
        var entityRepositoryMetadataArgs = index_1.getMetadataArgsStorage().entityRepositories.find(function (repository) {
            return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);
        });
        if (!entityRepositoryMetadataArgs)
            throw new CustomRepositoryNotFoundError_1.CustomRepositoryNotFoundError(customRepository);
        return entityRepositoryMetadataArgs.entity;
    };
    return AbstractRepository;
}());
exports.AbstractRepository = AbstractRepository;
 
//# sourceMappingURL=AbstractRepository.js.map