8da04c575d595355f7de78b7f9621164 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MongoRepository = void 0; const Repository_1 = require("./Repository"); const TypeORMError_1 = require("../error/TypeORMError"); /** * Repository used to manage mongodb documents of a single entity type. */ class MongoRepository extends Repository_1.Repository { // ------------------------------------------------------------------------- // Overridden Methods // ------------------------------------------------------------------------- /** * Raw SQL query execution is not supported by MongoDB. * Calling this method will return an error. */ query(query, parameters) { throw new TypeORMError_1.TypeORMError(`Queries aren't supported by MongoDB.`); } /** * Using Query Builder with MongoDB is not supported yet. * Calling this method will return an error. */ createQueryBuilder(alias, queryRunner) { throw new TypeORMError_1.TypeORMError(`Query Builder is not supported by MongoDB.`); } /** * Finds entities that match given find options or conditions. */ find(options) { return this.manager.find(this.metadata.target, options); } /** * Finds entities that match given find options or conditions. */ findBy(where) { return this.manager.findBy(this.metadata.target, where); } /** * Finds entities that match given find options or conditions. * Also counts all entities that match given conditions, * but ignores pagination settings (from and take options). */ findAndCount(options) { return this.manager.findAndCount(this.metadata.target, options); } /** * Finds entities that match given find options or conditions. * Also counts all entities that match given conditions, * but ignores pagination settings (from and take options). */ findAndCountBy(where) { return this.manager.findAndCountBy(this.metadata.target, where); } /** * Finds entities by ids. * Optionally find options can be applied. * * @deprecated use `findBy` method instead in conjunction with `In` operator, for example: * * .findBy({ * id: In([1, 2, 3]) * }) */ findByIds(ids, options) { return this.manager.findByIds(this.metadata.target, ids, options); } /** * Finds first entity that matches given find options. */ async findOne(options) { return this.manager.findOne(this.metadata.target, options); } /** * Finds first entity that matches given WHERE conditions. */ async findOneBy(where) { return this.manager.findOneBy(this.metadata.target, where); } /** * Finds entity that matches given id. * * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example: * * .findOneBy({ * id: 1 // where "id" is your primary column name * }) */ async findOneById(id) { return this.manager.findOneById(this.metadata.target, id); } /** * Finds first entity by a given find options. * If entity was not found in the database - rejects with error. */ async findOneOrFail(options) { return this.manager.findOneOrFail(this.metadata.target, options); } /** * Finds first entity that matches given where condition. * If entity was not found in the database - rejects with error. */ async findOneByOrFail(where) { return this.manager.findOneByOrFail(this.metadata.target, where); } /** * Creates a cursor for a query that can be used to iterate over results from MongoDB. */ createCursor(query) { return this.manager.createCursor(this.metadata.target, query); } /** * Creates a cursor for a query that can be used to iterate over results from MongoDB. * This returns modified version of cursor that transforms each result into Entity model. */ createEntityCursor(query) { return this.manager.createEntityCursor(this.metadata.target, query); } /** * Execute an aggregation framework pipeline against the collection. */ aggregate(pipeline, options) { return this.manager.aggregate(this.metadata.target, pipeline, options); } /** * Execute an aggregation framework pipeline against the collection. * This returns modified version of cursor that transforms each result into Entity model. */ aggregateEntity(pipeline, options) { return this.manager.aggregateEntity(this.metadata.target, pipeline, options); } /** * Perform a bulkWrite operation without a fluent API. */ bulkWrite(operations, options) { return this.manager.bulkWrite(this.metadata.target, operations, options); } /** * Count number of matching documents in the db to a query. */ count(query, options) { return this.manager.count(this.metadata.target, query || {}, options); } /** * Count number of matching documents in the db to a query. */ countDocuments(query, options) { return this.manager.countDocuments(this.metadata.target, query || {}, options); } /** * Count number of matching documents in the db to a query. */ countBy(query, options) { return this.manager.countBy(this.metadata.target, query, options); } /** * Creates an index on the db and collection. */ createCollectionIndex(fieldOrSpec, options) { return this.manager.createCollectionIndex(this.metadata.target, fieldOrSpec, options); } /** * Creates multiple indexes in the collection, this method is only supported for MongoDB 2.6 or higher. * Earlier version of MongoDB will throw a command not supported error. * Index specifications are defined at http://docs.mongodb.org/manual/reference/command/createIndexes/. */ createCollectionIndexes(indexSpecs) { return this.manager.createCollectionIndexes(this.metadata.target, indexSpecs); } /** * Delete multiple documents on MongoDB. */ deleteMany(query, options) { return this.manager.deleteMany(this.metadata.tableName, query, options); } /** * Delete a document on MongoDB. */ deleteOne(query, options) { return this.manager.deleteOne(this.metadata.tableName, query, options); } /** * The distinct command returns returns a list of distinct values for the given key across a collection. */ distinct(key, query, options) { return this.manager.distinct(this.metadata.tableName, key, query, options); } /** * Drops an index from this collection. */ dropCollectionIndex(indexName, options) { return this.manager.dropCollectionIndex(this.metadata.tableName, indexName, options); } /** * Drops all indexes from the collection. */ dropCollectionIndexes() { return this.manager.dropCollectionIndexes(this.metadata.tableName); } /** * Find a document and delete it in one atomic operation, requires a write lock for the duration of the operation. */ findOneAndDelete(query, options) { return this.manager.findOneAndDelete(this.metadata.tableName, query, options); } /** * Find a document and replace it in one atomic operation, requires a write lock for the duration of the operation. */ findOneAndReplace(query, replacement, options) { return this.manager.findOneAndReplace(this.metadata.tableName, query, replacement, options); } /** * Find a document and update it in one atomic operation, requires a write lock for the duration of the operation. */ findOneAndUpdate(query, update, options) { return this.manager.findOneAndUpdate(this.metadata.tableName, query, update, options); } /** * Retrieve all the indexes on the collection. */ collectionIndexes() { return this.manager.collectionIndexes(this.metadata.tableName); } /** * Retrieve all the indexes on the collection. */ collectionIndexExists(indexes) { return this.manager.collectionIndexExists(this.metadata.tableName, indexes); } /** * Retrieves this collections index info. */ collectionIndexInformation(options) { return this.manager.collectionIndexInformation(this.metadata.tableName, options); } /** * Initiate an In order bulk write operation, operations will be serially executed in the order they are added, creating a new operation for each switch in types. */ initializeOrderedBulkOp(options) { return this.manager.initializeOrderedBulkOp(this.metadata.tableName, options); } /** * Initiate a Out of order batch write operation. All operations will be buffered into insert/update/remove commands executed out of order. */ initializeUnorderedBulkOp(options) { return this.manager.initializeUnorderedBulkOp(this.metadata.tableName, options); } /** * Inserts an array of documents into MongoDB. */ insertMany(docs, options) { return this.manager.insertMany(this.metadata.tableName, docs, options); } /** * Inserts a single document into MongoDB. */ insertOne(doc, options) { return this.manager.insertOne(this.metadata.tableName, doc, options); } /** * Returns if the collection is a capped collection. */ isCapped() { return this.manager.isCapped(this.metadata.tableName); } /** * Get the list of all indexes information for the collection. */ listCollectionIndexes(options) { return this.manager.listCollectionIndexes(this.metadata.tableName, options); } /** * Reindex all indexes on the collection Warning: reIndex is a blocking operation (indexes are rebuilt in the foreground) and will be slow for large collections. */ rename(newName, options) { return this.manager.rename(this.metadata.tableName, newName, options); } /** * Replace a document on MongoDB. */ replaceOne(query, doc, options) { return this.manager.replaceOne(this.metadata.tableName, query, doc, options); } /** * Get all the collection statistics. */ stats(options) { return this.manager.stats(this.metadata.tableName, options); } /** * Update multiple documents on MongoDB. */ updateMany(query, update, options) { return this.manager.updateMany(this.metadata.tableName, query, update, options); } /** * Update a single document on MongoDB. */ updateOne(query, update, options) { return this.manager.updateOne(this.metadata.tableName, query, update, options); } } exports.MongoRepository = MongoRepository; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiRTpcXG5wLWRtc1xcbGNicDNcXG5vZGVfbW9kdWxlc1xcLnBucG1cXHR5cGVvcm1AMC4zLjI3X2lvcmVkaXNANS44Ll9hMmRjNWI3N2M3MTNmYWI0NTVmMWEyOTdkNTFlZDU5NVxcbm9kZV9tb2R1bGVzXFx0eXBlb3JtXFxyZXBvc2l0b3J5XFxNb25nb1JlcG9zaXRvcnkuanMiLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDO0FBQ2IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUQsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNqQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDN0MsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDeEQ7O0dBRUc7QUFDSCxNQUFNLGVBQWdCLFNBQVEsWUFBWSxDQUFDLFVBQVU7SUFDakQsNEVBQTRFO0lBQzVFLHFCQUFxQjtJQUNyQiw0RUFBNEU7SUFDNUU7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVO1FBQ25CLE1BQU0sSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLEtBQUssRUFBRSxXQUFXO1FBQ2pDLE1BQU0sSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUNEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLE9BQU87UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1B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TyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0Q7O09BRUc7SUFDSCxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRixDQUFDO0NBQ0o7QUFDRCxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyJFOlxcbnAtZG1zXFxsY2JwM1xcbm9kZV9tb2R1bGVzXFwucG5wbVxcdHlwZW9ybUAwLjMuMjdfaW9yZWRpc0A1LjguX2EyZGM1Yjc3YzcxM2ZhYjQ1NWYxYTI5N2Q1MWVkNTk1XFxub2RlX21vZHVsZXNcXHR5cGVvcm1cXHJlcG9zaXRvcnlcXE1vbmdvUmVwb3NpdG9yeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTW9uZ29SZXBvc2l0b3J5ID0gdm9pZCAwO1xuY29uc3QgUmVwb3NpdG9yeV8xID0gcmVxdWlyZShcIi4vUmVwb3NpdG9yeVwiKTtcbmNvbnN0IFR5cGVPUk1FcnJvcl8xID0gcmVxdWlyZShcIi4uL2Vycm9yL1R5cGVPUk1FcnJvclwiKTtcbi8qKlxuICogUmVwb3NpdG9yeSB1c2VkIHRvIG1hbmFnZSBtb25nb2RiIGRvY3VtZW50cyBvZiBhIHNpbmdsZSBlbnRpdHkgdHlwZS5cbiAqL1xuY2xhc3MgTW9uZ29SZXBvc2l0b3J5IGV4dGVuZHMgUmVwb3NpdG9yeV8xLlJlcG9zaXRvcnkge1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBPdmVycmlkZGVuIE1ldGhvZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLyoqXG4gICAgICogUmF3IFNRTCBxdWVyeSBleGVjdXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBNb25nb0RCLlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYW4gZXJyb3IuXG4gICAgICovXG4gICAgcXVlcnkocXVlcnksIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcl8xLlR5cGVPUk1FcnJvcihgUXVlcmllcyBhcmVuJ3Qgc3VwcG9ydGVkIGJ5IE1vbmdvREIuYCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVzaW5nIFF1ZXJ5IEJ1aWxkZXIgd2l0aCBNb25nb0RCIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYW4gZXJyb3IuXG4gICAgICovXG4gICAgY3JlYXRlUXVlcnlCdWlsZGVyKGFsaWFzLCBxdWVyeVJ1bm5lcikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yXzEuVHlwZU9STUVycm9yKGBRdWVyeSBCdWlsZGVyIGlzIG5vdCBzdXBwb3J0ZWQgYnkgTW9uZ29EQi5gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmluZHMgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBmaW5kIG9wdGlvbnMgb3IgY29uZGl0aW9ucy5cbiAgICAgKi9cbiAgICBmaW5kKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5maW5kKHRoaXMubWV0YWRhdGEudGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmluZHMgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBmaW5kIG9wdGlvbnMgb3IgY29uZGl0aW9ucy5cbiAgICAgKi9cbiAgICBmaW5kQnkod2hlcmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5maW5kQnkodGhpcy5tZXRhZGF0YS50YXJnZXQsIHdoZXJlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmluZHMgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBmaW5kIG9wdGlvbnMgb3IgY29uZGl0aW9ucy5cbiAgICAgKiBBbHNvIGNvdW50cyBhbGwgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBjb25kaXRpb25zLFxuICAgICAqIGJ1dCBpZ25vcmVzIHBhZ2luYXRpb24gc2V0dGluZ3MgKGZyb20gYW5kIHRha2Ugb3B0aW9ucykuXG4gICAgICovXG4gICAgZmluZEFuZENvdW50KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5maW5kQW5kQ291bnQodGhpcy5tZXRhZGF0YS50YXJnZXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyBlbnRpdGllcyB0aGF0IG1hdGNoIGdpdmVuIGZpbmQgb3B0aW9ucyBvciBjb25kaXRpb25zLlxuICAgICAqIEFsc28gY291bnRzIGFsbCBlbnRpdGllcyB0aGF0IG1hdGNoIGdpdmVuIGNvbmRpdGlvbnMsXG4gICAgICogYnV0IGlnbm9yZXMgcGFnaW5hdGlvbiBzZXR0aW5ncyAoZnJvbSBhbmQgdGFrZSBvcHRpb25zKS5cbiAgICAgKi9cbiAgICBmaW5kQW5kQ291bnRCeSh3aGVyZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmZpbmRBbmRDb3VudEJ5KHRoaXMubWV0YWRhdGEudGFyZ2V0LCB3aGVyZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZpbmRzIGVudGl0aWVzIGJ5IGlkcy5cbiAgICAgKiBPcHRpb25hbGx5IGZpbmQgb3B0aW9ucyBjYW4gYmUgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBgZmluZEJ5YCBtZXRob2QgaW5zdGVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJbmAgb3BlcmF0b3IsIGZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogLmZpbmRCeSh7XG4gICAgICogICAgIGlkOiBJbihbMSwgMiwgM10pXG4gICAgICogfSlcbiAgICAgKi9cbiAgICBmaW5kQnlJZHMoaWRzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuZmluZEJ5SWRzKHRoaXMubWV0YWRhdGEudGFyZ2V0LCBpZHMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyBmaXJzdCBlbnRpdHkgdGhhdCBtYXRjaGVzIGdpdmVuIGZpbmQgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kT25lKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5maW5kT25lKHRoaXMubWV0YWRhdGEudGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmluZHMgZmlyc3QgZW50aXR5IHRoYXQgbWF0Y2hlcyBnaXZlbiBXSEVSRSBjb25kaXRpb25zLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRPbmVCeSh3aGVyZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmZpbmRPbmVCeSh0aGlzLm1ldGFkYXRhLnRhcmdldCwgd2hlcmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyBlbnRpdHkgdGhhdCBtYXRjaGVzIGdpdmVuIGlkLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGBmaW5kT25lQnlgIG1ldGhvZCBpbnN0ZWFkIGluIGNvbmp1bmN0aW9uIHdpdGggYEluYCBvcGVyYXRvciwgZm9yIGV4YW1wbGU6XG4gICAgICpcbiAgICAgKiAuZmluZE9uZUJ5KHtcbiAgICAgKiAgICAgaWQ6IDEgLy8gd2hlcmUgXCJpZFwiIGlzIHlvdXIgcHJpbWFyeSBjb2x1bW4gbmFtZVxuICAgICAqIH0pXG4gICAgICovXG4gICAgYXN5bmMgZmluZE9uZUJ5SWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5maW5kT25lQnlJZCh0aGlzLm1ldGFkYXRhLnRhcmdldCwgaWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyBmaXJzdCBlbnRpdHkgYnkgYSBnaXZlbiBmaW5kIG9wdGlvbnMuXG4gICAgICogSWYgZW50aXR5IHdhcyBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlIC0gcmVqZWN0cyB3aXRoIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRPbmVPckZhaWwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmZpbmRPbmVPckZhaWwodGhpcy5tZXRhZGF0YS50YXJnZXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kcyBmaXJzdCBlbnRpdHkgdGhhdCBtYXRjaGVzIGdpdmVuIHdoZXJlIGNvbmRpdGlvbi5cbiAgICAgKiBJZiBlbnRpdHkgd2FzIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UgLSByZWplY3RzIHdpdGggZXJyb3IuXG4gICAgICovXG4gICAgYXN5bmMgZmluZE9uZUJ5T3JGYWlsKHdoZXJlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuZmluZE9uZUJ5T3JGYWlsKHRoaXMubWV0YWRhdGEudGFyZ2V0LCB3aGVyZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjdXJzb3IgZm9yIGEgcXVlcnkgdGhhdCBjYW4gYmUgdXNlZCB0byBpdGVyYXRlIG92ZXIgcmVzdWx0cyBmcm9tIE1vbmdvREIuXG4gICAgICovXG4gICAgY3JlYXRlQ3Vyc29yKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuY3JlYXRlQ3Vyc29yKHRoaXMubWV0YWRhdGEudGFyZ2V0LCBxdWVyeSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjdXJzb3IgZm9yIGEgcXVlcnkgdGhhdCBjYW4gYmUgdXNlZCB0byBpdGVyYXRlIG92ZXIgcmVzdWx0cyBmcm9tIE1vbmdvREIuXG4gICAgICogVGhpcyByZXR1cm5zIG1vZGlmaWVkIHZlcnNpb24gb2YgY3Vyc29yIHRoYXQgdHJhbnNmb3JtcyBlYWNoIHJlc3VsdCBpbnRvIEVudGl0eSBtb2RlbC5cbiAgICAgKi9cbiAgICBjcmVhdGVFbnRpdHlDdXJzb3IocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5jcmVhdGVFbnRpdHlDdXJzb3IodGhpcy5tZXRhZGF0YS50YXJnZXQsIHF1ZXJ5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBhbiBhZ2dyZWdhdGlvbiBmcmFtZXdvcmsgcGlwZWxpbmUgYWdhaW5zdCB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBhZ2dyZWdhdGUocGlwZWxpbmUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5hZ2dyZWdhdGUodGhpcy5tZXRhZGF0YS50YXJnZXQsIHBpcGVsaW5lLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBhbiBhZ2dyZWdhdGlvbiBmcmFtZXdvcmsgcGlwZWxpbmUgYWdhaW5zdCB0aGUgY29sbGVjdGlvbi5cbiAgICAgKiBUaGlzIHJldHVybnMgbW9kaWZpZWQgdmVyc2lvbiBvZiBjdXJzb3IgdGhhdCB0cmFuc2Zvcm1zIGVhY2ggcmVzdWx0IGludG8gRW50aXR5IG1vZGVsLlxuICAgICAqL1xuICAgIGFnZ3JlZ2F0ZUVudGl0eShwaXBlbGluZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmFnZ3JlZ2F0ZUVudGl0eSh0aGlzLm1ldGFkYXRhLnRhcmdldCwgcGlwZWxpbmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGEgYnVsa1dyaXRlIG9wZXJhdGlvbiB3aXRob3V0IGEgZmx1ZW50IEFQSS5cbiAgICAgKi9cbiAgICBidWxrV3JpdGUob3BlcmF0aW9ucywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmJ1bGtXcml0ZSh0aGlzLm1ldGFkYXRhLnRhcmdldCwgb3BlcmF0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvdW50IG51bWJlciBvZiBtYXRjaGluZyBkb2N1bWVudHMgaW4gdGhlIGRiIHRvIGEgcXVlcnkuXG4gICAgICovXG4gICAgY291bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5jb3VudCh0aGlzLm1ldGFkYXRhLnRhcmdldCwgcXVlcnkgfHwge30sIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb3VudCBudW1iZXIgb2YgbWF0Y2hpbmcgZG9jdW1lbnRzIGluIHRoZSBkYiB0byBhIHF1ZXJ5LlxuICAgICAqL1xuICAgIGNvdW50RG9jdW1lbnRzKHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuY291bnREb2N1bWVudHModGhpcy5tZXRhZGF0YS50YXJnZXQsIHF1ZXJ5IHx8IHt9LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ291bnQgbnVtYmVyIG9mIG1hdGNoaW5nIGRvY3VtZW50cyBpbiB0aGUgZGIgdG8gYSBxdWVyeS5cbiAgICAgKi9cbiAgICBjb3VudEJ5KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuY291bnRCeSh0aGlzLm1ldGFkYXRhLnRhcmdldCwgcXVlcnksIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluZGV4IG9uIHRoZSBkYiBhbmQgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBjcmVhdGVDb2xsZWN0aW9uSW5kZXgoZmllbGRPclNwZWMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5jcmVhdGVDb2xsZWN0aW9uSW5kZXgodGhpcy5tZXRhZGF0YS50YXJnZXQsIGZpZWxkT3JTcGVjLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBtdWx0aXBsZSBpbmRleGVzIGluIHRoZSBjb2xsZWN0aW9uLCB0aGlzIG1ldGhvZCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgTW9uZ29EQiAyLjYgb3IgaGlnaGVyLlxuICAgICAqIEVhcmxpZXIgdmVyc2lvbiBvZiBNb25nb0RCIHdpbGwgdGhyb3cgYSBjb21tYW5kIG5vdCBzdXBwb3J0ZWQgZXJyb3IuXG4gICAgICogSW5kZXggc3BlY2lmaWNhdGlvbnMgYXJlIGRlZmluZWQgYXQgaHR0cDovL2RvY3MubW9uZ29kYi5vcmcvbWFudWFsL3JlZmVyZW5jZS9jb21tYW5kL2NyZWF0ZUluZGV4ZXMvLlxuICAgICAqL1xuICAgIGNyZWF0ZUNvbGxlY3Rpb25JbmRleGVzKGluZGV4U3BlY3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5jcmVhdGVDb2xsZWN0aW9uSW5kZXhlcyh0aGlzLm1ldGFkYXRhLnRhcmdldCwgaW5kZXhTcGVjcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBtdWx0aXBsZSBkb2N1bWVudHMgb24gTW9uZ29EQi5cbiAgICAgKi9cbiAgICBkZWxldGVNYW55KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuZGVsZXRlTWFueSh0aGlzLm1ldGFkYXRhLnRhYmxlTmFtZSwgcXVlcnksIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgYSBkb2N1bWVudCBvbiBNb25nb0RCLlxuICAgICAqL1xuICAgIGRlbGV0ZU9uZShxdWVyeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmRlbGV0ZU9uZSh0aGlzLm1ldGFkYXRhLnRhYmxlTmFtZSwgcXVlcnksIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzdGluY3QgY29tbWFuZCByZXR1cm5zIHJldHVybnMgYSBsaXN0IG9mIGRpc3RpbmN0IHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleSBhY3Jvc3MgYSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGRpc3RpbmN0KGtleSwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5kaXN0aW5jdCh0aGlzLm1ldGFkYXRhLnRhYmxlTmFtZSwga2V5LCBxdWVyeSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERyb3BzIGFuIGluZGV4IGZyb20gdGhpcyBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGRyb3BDb2xsZWN0aW9uSW5kZXgoaW5kZXhOYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuZHJvcENvbGxlY3Rpb25JbmRleCh0aGlzLm1ldGFkYXRhLnRhYmxlTmFtZSwgaW5kZXhOYW1lLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRHJvcHMgYWxsIGluZGV4ZXMgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBkcm9wQ29sbGVjdGlvbkluZGV4ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuZHJvcENvbGxlY3Rpb25JbmRleGVzKHRoaXMubWV0YWRhdGEudGFibGVOYW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmluZCBhIGRvY3VtZW50IGFuZCBkZWxldGUgaXQgaW4gb25lIGF0b21pYyBvcGVyYXRpb24sIHJlcXVpcmVzIGEgd3JpdGUgbG9jayBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBvcGVyYXRpb24uXG4gICAgICovXG4gICAgZmluZE9uZUFuZERlbGV0ZShxdWVyeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmZpbmRPbmVBbmREZWxldGUodGhpcy5tZXRhZGF0YS50YWJsZU5hbWUsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmluZCBhIGRvY3VtZW50IGFuZCByZXBsYWNlIGl0IGluIG9uZSBhdG9taWMgb3BlcmF0aW9uLCByZXF1aXJlcyBhIHdyaXRlIGxvY2sgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgb3BlcmF0aW9uLlxuICAgICAqL1xuICAgIGZpbmRPbmVBbmRSZXBsYWNlKHF1ZXJ5LCByZXBsYWNlbWVudCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmZpbmRPbmVBbmRSZXBsYWNlKHRoaXMubWV0YWRhdGEudGFibGVOYW1lLCBxdWVyeSwgcmVwbGFjZW1lbnQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgZG9jdW1lbnQgYW5kIHVwZGF0ZSBpdCBpbiBvbmUgYXRvbWljIG9wZXJhdGlvbiwgcmVxdWlyZXMgYSB3cml0ZSBsb2NrIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG9wZXJhdGlvbi5cbiAgICAgKi9cbiAgICBmaW5kT25lQW5kVXBkYXRlKHF1ZXJ5LCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5maW5kT25lQW5kVXBkYXRlKHRoaXMubWV0YWRhdGEudGFibGVOYW1lLCBxdWVyeSwgdXBkYXRlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgYWxsIHRoZSBpbmRleGVzIG9uIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGNvbGxlY3Rpb25JbmRleGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmNvbGxlY3Rpb25JbmRleGVzKHRoaXMubWV0YWRhdGEudGFibGVOYW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgYWxsIHRoZSBpbmRleGVzIG9uIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGNvbGxlY3Rpb25JbmRleEV4aXN0cyhpbmRleGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuY29sbGVjdGlvbkluZGV4RXhpc3RzKHRoaXMubWV0YWRhdGEudGFibGVOYW1lLCBpbmRleGVzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoaXMgY29sbGVjdGlvbnMgaW5kZXggaW5mby5cbiAgICAgKi9cbiAgICBjb2xsZWN0aW9uSW5kZXhJbmZvcm1hdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuY29sbGVjdGlvbkluZGV4SW5mb3JtYXRpb24odGhpcy5tZXRhZGF0YS50YWJsZU5hbWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWF0ZSBhbiBJbiBvcmRlciBidWxrIHdyaXRlIG9wZXJhdGlvbiwgb3BlcmF0aW9ucyB3aWxsIGJlIHNlcmlhbGx5IGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGV5IGFyZSBhZGRlZCwgY3JlYXRpbmcgYSBuZXcgb3BlcmF0aW9uIGZvciBlYWNoIHN3aXRjaCBpbiB0eXBlcy5cbiAgICAgKi9cbiAgICBpbml0aWFsaXplT3JkZXJlZEJ1bGtPcChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuaW5pdGlhbGl6ZU9yZGVyZWRCdWxrT3AodGhpcy5tZXRhZGF0YS50YWJsZU5hbWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWF0ZSBhIE91dCBvZiBvcmRlciBiYXRjaCB3cml0ZSBvcGVyYXRpb24uIEFsbCBvcGVyYXRpb25zIHdpbGwgYmUgYnVmZmVyZWQgaW50byBpbnNlcnQvdXBkYXRlL3JlbW92ZSBjb21tYW5kcyBleGVjdXRlZCBvdXQgb2Ygb3JkZXIuXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZVVub3JkZXJlZEJ1bGtPcChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXIuaW5pdGlhbGl6ZVVub3JkZXJlZEJ1bGtPcCh0aGlzLm1ldGFkYXRhLnRhYmxlTmFtZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc2VydHMgYW4gYXJyYXkgb2YgZG9jdW1lbnRzIGludG8gTW9uZ29EQi5cbiAgICAgKi9cbiAgICBpbnNlcnRNYW55KGRvY3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5pbnNlcnRNYW55KHRoaXMubWV0YWRhdGEudGFibGVOYW1lLCBkb2NzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyBhIHNpbmdsZSBkb2N1bWVudCBpbnRvIE1vbmdvREIuXG4gICAgICovXG4gICAgaW5zZXJ0T25lKGRvYywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmluc2VydE9uZSh0aGlzLm1ldGFkYXRhLnRhYmxlTmFtZSwgZG9jLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY29sbGVjdGlvbiBpcyBhIGNhcHBlZCBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIGlzQ2FwcGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmlzQ2FwcGVkKHRoaXMubWV0YWRhdGEudGFibGVOYW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBsaXN0IG9mIGFsbCBpbmRleGVzIGluZm9ybWF0aW9uIGZvciB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBsaXN0Q29sbGVjdGlvbkluZGV4ZXMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmxpc3RDb2xsZWN0aW9uSW5kZXhlcyh0aGlzLm1ldGFkYXRhLnRhYmxlTmFtZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlaW5kZXggYWxsIGluZGV4ZXMgb24gdGhlIGNvbGxlY3Rpb24gV2FybmluZzogcmVJbmRleCBpcyBhIGJsb2NraW5nIG9wZXJhdGlvbiAoaW5kZXhlcyBhcmUgcmVidWlsdCBpbiB0aGUgZm9yZWdyb3VuZCkgYW5kIHdpbGwgYmUgc2xvdyBmb3IgbGFyZ2UgY29sbGVjdGlvbnMuXG4gICAgICovXG4gICAgcmVuYW1lKG5ld05hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5yZW5hbWUodGhpcy5tZXRhZGF0YS50YWJsZU5hbWUsIG5ld05hbWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlIGEgZG9jdW1lbnQgb24gTW9uZ29EQi5cbiAgICAgKi9cbiAgICByZXBsYWNlT25lKHF1ZXJ5LCBkb2MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5yZXBsYWNlT25lKHRoaXMubWV0YWRhdGEudGFibGVOYW1lLCBxdWVyeSwgZG9jLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGFsbCB0aGUgY29sbGVjdGlvbiBzdGF0aXN0aWNzLlxuICAgICAqL1xuICAgIHN0YXRzKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci5zdGF0cyh0aGlzLm1ldGFkYXRhLnRhYmxlTmFtZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBtdWx0aXBsZSBkb2N1bWVudHMgb24gTW9uZ29EQi5cbiAgICAgKi9cbiAgICB1cGRhdGVNYW55KHF1ZXJ5LCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci51cGRhdGVNYW55KHRoaXMubWV0YWRhdGEudGFibGVOYW1lLCBxdWVyeSwgdXBkYXRlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIGEgc2luZ2xlIGRvY3VtZW50IG9uIE1vbmdvREIuXG4gICAgICovXG4gICAgdXBkYXRlT25lKHF1ZXJ5LCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlci51cGRhdGVPbmUodGhpcy5tZXRhZGF0YS50YWJsZU5hbWUsIHF1ZXJ5LCB1cGRhdGUsIG9wdGlvbnMpO1xuICAgIH1cbn1cbmV4cG9ydHMuTW9uZ29SZXBvc2l0b3J5ID0gTW9uZ29SZXBvc2l0b3J5O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Nb25nb1JlcG9zaXRvcnkuanMubWFwXG4iXSwidmVyc2lvbiI6M30=