ravendb
Version:
RavenDB client for Node.js
41 lines • 1.66 kB
JavaScript
import { Transform } from "node:stream";
import { RavenCommandResponsePipeline } from "../../../Http/RavenCommandResponsePipeline.js";
import { ObjectUtil } from "../../../Utility/ObjectUtil.js";
import { JsonlStringer } from "../../../ext/stream-json/jsonl/Stringer.js";
export function getDocumentResultsAsObjects(conventions, queryStream) {
const pipeline = RavenCommandResponsePipeline.create();
const keysTransform = new Transform({
objectMode: true,
transform(chunk, encoding, callback) {
let value = chunk["value"];
if (!value) {
return callback();
}
if (conventions) {
value = ObjectUtil.transformDocumentKeys(value, conventions);
}
callback(null, { ...chunk, value });
}
});
return pipeline.parseJsonlAsync(queryStream ? x => x["Item"] : x => x, {
transforms: [keysTransform]
});
}
export async function getDocumentStreamResultsIntoStreamPipeline(conventions) {
const pipeline = RavenCommandResponsePipeline.create();
return pipeline.parseJsonlAsync(x => x["Item"], {
transforms: [
new JsonlStringer({ replacer: (key, value) => key === '' ? value.value : value }),
]
});
}
export async function streamResultsIntoStream(bodyStream, conventions, writable) {
const pipeline = await getDocumentStreamResultsIntoStreamPipeline(conventions);
return new Promise((resolve, reject) => {
pipeline
.stream(bodyStream, writable, (err) => {
err ? reject(err) : resolve();
});
});
}
//# sourceMappingURL=Pipelines.js.map