UNPKG

@configurator/ravendb

Version:
71 lines 2.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConditionalGetDocumentsCommand = void 0; const RavenCommand_1 = require("../../Http/RavenCommand"); const StatusCode_1 = require("../../Http/StatusCode"); const StreamUtil_1 = require("../../Utility/StreamUtil"); const RavenCommandResponsePipeline_1 = require("../../Http/RavenCommandResponsePipeline"); const ObjectUtil_1 = require("../../Utility/ObjectUtil"); const Constants_1 = require("../../Constants"); class ConditionalGetDocumentsCommand extends RavenCommand_1.RavenCommand { constructor(id, changeVector, conventions) { super(); this._changeVector = changeVector; this._id = id; this._conventions = conventions; } createRequest(node) { const uri = node.url + "/databases/" + node.database + "/docs?id=" + this._urlEncode(this._id); return { uri, method: "GET", headers: { [Constants_1.HEADERS.IF_NONE_MATCH]: `"${this._changeVector}"` } }; } async setResponseAsync(bodyStream, fromCache) { if (!bodyStream) { this.result = null; return; } let body = null; this.result = await ConditionalGetDocumentsCommand.parseDocumentsResultResponseAsync(bodyStream, this._conventions, b => body = b); return body; } static async parseDocumentsResultResponseAsync(bodyStream, conventions, bodyCallback) { const body = await (0, StreamUtil_1.readToEnd)(bodyStream); bodyCallback?.(body); let parsedJson; if (body.length > conventions.syncJsonParseLimit) { const bodyStreamCopy = (0, StreamUtil_1.stringToReadable)(body); parsedJson = await RavenCommandResponsePipeline_1.RavenCommandResponsePipeline.create() .parseJsonAsync() .process(bodyStreamCopy); } else { parsedJson = JSON.parse(body); } return ConditionalGetDocumentsCommand._mapToLocalObject(parsedJson, conventions); } static _mapToLocalObject(json, conventions) { return { results: json.Results.map(x => ObjectUtil_1.ObjectUtil.transformDocumentKeys(x, conventions)), changeVector: json.ChangeVector }; } async processResponse(cache, response, bodyStream, url) { if (response.status === StatusCode_1.StatusCodes.NotModified) { return "Automatic"; } const result = await super.processResponse(cache, response, bodyStream, url); this.result.changeVector = response.headers.get("ETag"); return result; } get isReadRequest() { return false; } } exports.ConditionalGetDocumentsCommand = ConditionalGetDocumentsCommand; //# sourceMappingURL=ConditionalGetDocumentsCommand.js.map