@k8ts/metadata
Version:
K8ts tools for working with k8ts metadata.
113 lines • 2.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mergeWith = mergeWith;
exports.merge = merge;
exports.filterMap = filterMap;
exports.mapKeys = mapKeys;
exports.mapValues = mapValues;
exports.toObject = toObject;
exports.toJS = toJS;
exports.equalsMap = equalsMap;
exports.mapFromObject = mapFromObject;
exports.mapToObject = mapToObject;
exports.getDeepPropertyDescriptor = getDeepPropertyDescriptor;
function mergeWith(map1, map2, merger) {
const result = new Map(map1);
const allKeys = new Set([...map1.keys(), ...map2.keys()]);
for (const k of allKeys) {
const val1 = map1.get(k);
const val2 = map2.get(k);
if (val1 !== undefined && val2 !== undefined) {
result.set(k, merger(val1, val2, k));
}
else if (val2 !== undefined) {
result.set(k, val2);
}
}
return result;
}
function merge(map1, map2) {
return mergeWith(map1, map2, (_old, _new) => _new);
}
function filterMap(map, pred) {
const out = new Map();
for (const [k, v] of map.entries()) {
if (pred(v, k))
out.set(k, v);
}
return out;
}
function mapKeys(map, fn) {
const out = new Map();
for (const [k, v] of map.entries()) {
out.set(fn(k), v);
}
return out;
}
function mapValues(map, fn) {
const out = new Map();
for (const [k, v] of map.entries()) {
out.set(k, fn(v, k));
}
return out;
}
function toObject(map) {
const out = {};
for (const [k, v] of map.entries()) {
const key = k?.str ?? String(k);
out[key] = v;
}
return out;
}
function toJS(map) {
return toObject(map);
}
function equalsMap(a, b) {
if (a.size !== b.size)
return false;
for (const [ka, va] of a.entries()) {
let found = false;
for (const [kb, vb] of b.entries()) {
const sa = ka?.str ?? ka;
const sb = kb?.str ?? kb;
if (sa === sb) {
found = true;
if (va !== vb)
return false;
break;
}
}
if (!found)
return false;
}
return true;
}
function mapFromObject(obj) {
const map = new Map();
for (const k of Object.keys(obj)) {
map.set(k, obj[k]);
}
return map;
}
function mapToObject(map) {
const obj = {};
for (const [k, v] of map.entries()) {
obj[k] = v;
}
return obj;
}
function getDeepPropertyDescriptor(obj, propertyKey) {
let current = obj;
while (current) {
const descriptor = Object.getOwnPropertyDescriptor(current, propertyKey);
if (descriptor) {
return {
...descriptor,
source: current
};
}
current = Object.getPrototypeOf(current);
}
return undefined;
}
//# sourceMappingURL=map.js.map