UNPKG

@configurator/ravendb

Version:
63 lines 3.32 kB
"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