@env0/dynamo-easy
Version:
DynamoDB client for NodeJS and browser with a fluent api to build requests. We take care of the type mapping between JS and DynamoDB, customizable trough typescript decorators.
50 lines • 2.09 kB
JavaScript
import * as tslib_1 from "tslib";
import { metadataForModel } from '../../decorator/metadata/metadata-for-model.function';
import { and } from '../expression/logical-operator/and.function';
import { addExpression } from '../expression/param-util';
import { addCondition } from '../expression/request-expression-builder';
import { getTableName } from '../get-table-name.function';
/**
* Abstract base class for all transact items.
*/
var TransactBaseOperation = /** @class */ (function () {
function TransactBaseOperation(modelClazz) {
if (!modelClazz) {
throw new Error("please provide the model class");
}
this.modelClazz = modelClazz;
this.metadata = metadataForModel(this.modelClazz);
if (!this.metadata.modelOptions) {
throw new Error('the given model class has no model decorator');
}
this.params = {
TableName: getTableName(this.metadata),
};
}
TransactBaseOperation.prototype.onlyIfAttribute = function (attributePath) {
return addCondition('ConditionExpression', attributePath, this, this.metadata);
};
/**
* add a condition necessary for the transaction to succeed
* @example req.onlyIf(or(attribute('age').lt(10), attribute('age').gt(20)))
*/
TransactBaseOperation.prototype.onlyIf = function () {
var conditionDefFns = [];
for (var _i = 0; _i < arguments.length; _i++) {
conditionDefFns[_i] = arguments[_i];
}
var condition = and.apply(void 0, tslib_1.__spread(conditionDefFns))(undefined, this.metadata);
addExpression('ConditionExpression', condition, this.params);
return this;
};
/**
* get the item attributes if the condition fails
*/
TransactBaseOperation.prototype.returnValuesOnConditionCheckFailure = function (value) {
this.params.ReturnValuesOnConditionCheckFailure = value;
return this;
};
return TransactBaseOperation;
}());
export { TransactBaseOperation };
//# sourceMappingURL=transact-base-operation.js.map