@configurator/ravendb
Version:
RavenDB client for Node.js
63 lines • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CaseInsensitiveKeysMap = void 0;
const TypeUtil_1 = require("../Utility/TypeUtil");
const CaseInsensitiveKeysStore_1 = require("./CaseInsensitiveKeysStore");
function validateKey(key) {
if (TypeUtil_1.TypeUtil.isNullOrUndefined(key)
|| TypeUtil_1.TypeUtil.isString(key)) {
return;
}
throw Error("Key must be a string.");
}
class CaseInsensitiveKeysMap {
static create() {
const result = new Map();
const origSet = result.set;
const origGet = result.get;
const origHas = result.has;
const origDelete = result.delete;
const originalKeysStore = new CaseInsensitiveKeysStore_1.CaseInsensitiveKeysStore();
result["keysCaseSensitive"] = false;
result.set = function (...args) {
const [key, ...rest] = args;
validateKey(key);
const lowerKey = originalKeysStore.setKey(key);
return origSet.call(result, lowerKey, ...rest);
};
result.get = function (...args) {
const [key, ...rest] = args;
const lowerKey = originalKeysStore.normalizeKey(key);
return origGet.call(result, lowerKey, ...rest);
};
result.has = function (...args) {
const [key, ...rest] = args;
const lowerKey = originalKeysStore.normalizeKey(key);
return origHas.call(result, lowerKey, ...rest);
};
result.delete = function (...args) {
const [key, ...rest] = args;
validateKey(key);
const lowerKey = originalKeysStore.deleteKey(key);
return origDelete.call(result, lowerKey, ...rest);
};
const origEntries = result.entries;
result.entries = function () {
return Array.from(origEntries.call(result))
.reduce((reduced, next) => {
const actualKey = originalKeysStore.getKey(next[0]);
return [...reduced, [actualKey, next[1]]];
}, [])[Symbol.iterator]();
};
result[Symbol.iterator] = function () {
return Array.from(origEntries.call(result))
.reduce((reduced, next) => {
const actualKey = originalKeysStore.getKey(next[0]);
return [...reduced, [actualKey, next[1]]];
}, [])[Symbol.iterator]();
};
return result;
}
}
exports.CaseInsensitiveKeysMap = CaseInsensitiveKeysMap;
//# sourceMappingURL=CaseInsensitiveKeysMap.js.map