@configurator/ravendb
Version:
RavenDB client for Node.js
63 lines • 3.32 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OperationExecutor = void 0;
const OperationCompletionAwaiter_1 = require("./OperationCompletionAwaiter");
const BluebirdPromise = require("bluebird");
const Exceptions_1 = require("../../Exceptions");
const PatchOperation_1 = require("./PatchOperation");
const StatusCode_1 = require("../../Http/StatusCode");
const StringUtil_1 = require("../../Utility/StringUtil");
class OperationExecutor {
constructor(store, databaseName) {
this._store = store;
this._databaseName = databaseName ? databaseName : store.database;
if (!StringUtil_1.StringUtil.isNullOrWhitespace(this._databaseName)) {
this._requestExecutor = store.getRequestExecutor(this._databaseName);
}
else {
(0, Exceptions_1.throwError)("InvalidOperationException", "Cannot use operations without a database defined, did you forget to call forDatabase?");
}
}
forDatabase(databaseName) {
if (!databaseName) {
(0, Exceptions_1.throwError)("InvalidArgumentException", `Argument 'databaseName' is invalid: ${databaseName}.`);
}
if (this._databaseName.toLowerCase() === databaseName.toLowerCase()) {
return this;
}
return new OperationExecutor(this._store, databaseName);
}
async send(operation, sessionInfo, documentType) {
const command = operation.getCommand(this._store, this._requestExecutor.conventions, this._requestExecutor.cache);
await this._requestExecutor.execute(command, sessionInfo);
const result = BluebirdPromise.resolve()
.then(() => {
if (operation.resultType === "OperationId") {
const idResult = command.result;
return new OperationCompletionAwaiter_1.OperationCompletionAwaiter(this._requestExecutor, this._requestExecutor.conventions, idResult.operationId, command.selectedNodeTag || idResult.operationNodeTag);
}
else if (operation.resultType === "PatchResult") {
const patchOperationResult = new PatchOperation_1.PatchOperationResult();
if (command.statusCode === StatusCode_1.StatusCodes.NotModified) {
patchOperationResult.status = "NotModified";
return patchOperationResult;
}
if (command.statusCode === StatusCode_1.StatusCodes.NotFound) {
patchOperationResult.status = "DocumentDoesNotExist";
return patchOperationResult;
}
const patchResult = command.result;
patchOperationResult.status = patchResult.status;
const { conventions } = this._requestExecutor;
conventions.tryRegisterJsType(documentType);
const entityType = conventions.getJsTypeByDocumentType(documentType);
patchOperationResult.document = conventions.deserializeEntityFromJson(entityType, patchResult.modifiedDocument);
return patchOperationResult;
}
return command.result;
});
return Promise.resolve(result);
}
}
exports.OperationExecutor = OperationExecutor;
//# sourceMappingURL=OperationExecutor.js.map