import * as tslib_1 from "tslib";
import { DynamoDbWrapper } from '../dynamo-db-wrapper';
/**
 * Request class for the TransactWriteItems operation. Write up to 10 items to one or many tables in a transaction.
 */
var TransactWriteRequest = /** @class */ (function () {
    function TransactWriteRequest() {
        this.dynamoDBWrapper = new DynamoDbWrapper();
        this.params = {
            TransactItems: [],
        };
    }
    TransactWriteRequest.prototype.returnConsumedCapacity = function (level) {
        this.params.ReturnConsumedCapacity = level;
        return this;
    };
    /**
     * return item collection metrics.
     */
    TransactWriteRequest.prototype.returnItemCollectionMetrics = function (returnItemCollectionMetrics) {
        this.params.ReturnItemCollectionMetrics = returnItemCollectionMetrics;
        return this;
    };
    TransactWriteRequest.prototype.transact = function () {
        var _a;
        var writeOperations = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            writeOperations[_i] = arguments[_i];
        }
        if (!writeOperations || writeOperations.length === 0) {
            throw new Error('at least one transaction operation must be added');
        }
        if (this.params.TransactItems.length + writeOperations.length > 10) {
            throw new Error("Each transaction can include up to 10 unique items, including conditions.       Given operations count: " + (this.params.TransactItems.length + writeOperations.length));
        }
        (_a = this.params.TransactItems).push.apply(_a, tslib_1.__spread(writeOperations.map(function (wo) { return wo.transactItem; })));
        return this;
    };
    /**
     * execute the request and return the full reponse.
     */
    TransactWriteRequest.prototype.execFullResponse = function () {
        return this.dynamoDBWrapper.transactWriteItems(this.params);
    };
    /**
     * execute the request.
     */
    TransactWriteRequest.prototype.exec = function () {
        return this.dynamoDBWrapper.transactWriteItems(this.params)
            .then(function (response) { return; });
    };
    return TransactWriteRequest;
}());
export { TransactWriteRequest };
//# sourceMappingURL=transact-write.request.js.map