@configurator/ravendb
Version:
RavenDB client for Node.js
80 lines • 3.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CompareExchangeValueResultParser = void 0;
const CompareExchangeValue_1 = require("./CompareExchangeValue");
const Exceptions_1 = require("../../../Exceptions");
const TypeUtil_1 = require("../../../Utility/TypeUtil");
const ObjectUtil_1 = require("../../../Utility/ObjectUtil");
const Constants_1 = require("../../../Constants");
const MetadataAsDictionary_1 = require("../../../Mapping/MetadataAsDictionary");
class CompareExchangeValueResultParser {
static getValues(responseObj, materializeMetadata, conventions, clazz) {
const items = responseObj.results;
if (!items) {
(0, Exceptions_1.throwError)("InvalidOperationException", "Response is invalid. Results is missing.");
}
const results = {};
for (const item of items) {
if (!item) {
(0, Exceptions_1.throwError)("InvalidOperationException", "Response is invalid. Item is null");
}
const value = CompareExchangeValueResultParser.getSingleValue(item, materializeMetadata, conventions, clazz);
results[value.key] = value;
}
return results;
}
static getValue(response, materializeMetadata, conventions, clazz) {
if (!response) {
return null;
}
const values = CompareExchangeValueResultParser.getValues(response, materializeMetadata, conventions, clazz);
const itemsKeys = Object.keys(values);
if (!values || !itemsKeys.length) {
return null;
}
return values[itemsKeys[0]];
}
static getSingleValue(item, materializeMetadata, conventions, clazz) {
if (!item) {
return null;
}
const key = item.key || (0, Exceptions_1.throwError)("InvalidOperationException", "Response is invalid. Key is missing.");
const index = item.index;
if (TypeUtil_1.TypeUtil.isNullOrUndefined(index)) {
(0, Exceptions_1.throwError)("InvalidOperationException", `Response is invalid. Index is ${item.index}.`);
}
const raw = item.value;
const cv = item.changeVector;
if (TypeUtil_1.TypeUtil.isNullOrUndefined(raw)) {
return new CompareExchangeValue_1.CompareExchangeValue(key, index, null, cv, null);
}
let metadata;
const metadataRaw = raw[Constants_1.CONSTANTS.Documents.Metadata.KEY];
if (metadataRaw && TypeUtil_1.TypeUtil.isObject(metadataRaw)) {
metadata = !materializeMetadata ? MetadataAsDictionary_1.MetadataDictionary.create(metadataRaw) : MetadataAsDictionary_1.MetadataDictionary.materializeFromJson(metadataRaw);
}
let rawValue = raw.object;
if (clazz && TypeUtil_1.TypeUtil.isPrimitiveType(clazz) || TypeUtil_1.TypeUtil.isPrimitive(rawValue)) {
return new CompareExchangeValue_1.CompareExchangeValue(key, index, rawValue, cv, metadata);
}
else {
if (!rawValue) {
return new CompareExchangeValue_1.CompareExchangeValue(key, index, null, cv, metadata);
}
else {
const entityType = conventions.getJsTypeByDocumentType(clazz);
if (conventions.entityFieldNameConvention) {
rawValue = ObjectUtil_1.ObjectUtil.transformObjectKeys(rawValue, {
defaultTransform: conventions.entityFieldNameConvention,
recursive: true,
arrayRecursive: true
});
}
const entity = conventions.deserializeEntityFromJson(entityType, rawValue);
return new CompareExchangeValue_1.CompareExchangeValue(key, index, entity, cv, metadata);
}
}
}
}
exports.CompareExchangeValueResultParser = CompareExchangeValueResultParser;
//# sourceMappingURL=CompareExchangeValueResultParser.js.map