@configurator/ravendb
Version:
RavenDB client for Node.js
71 lines • 2.9 kB
JavaScript
;
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