@zohodesk/client_build_tool
Version:
A CLI tool to build web applications and client libraries
87 lines (70 loc) • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.convertObjectToStringGen = convertObjectToStringGen;
exports.removeKeysFromObject = removeKeysFromObject;
/* eslint-disable no-restricted-syntax */
function objectPathMatcher(currentKey, objHierarchy = [], keysToBeRemoved = []) {
const objPathKey = objHierarchy.length > 0 ? `${objHierarchy.join('.')}.${currentKey}` : currentKey;
return keysToBeRemoved.some(key => {
const isWildPath = /^\*/.test(key);
if (isWildPath) {
const newKey = key.replace(/\*\.?/, '');
return objPathKey.includes(newKey);
}
return key === objPathKey;
});
}
/*
1) *.keyTobeRemoved -> means match every object path, this key will be removed
2) keyToBeremoved -> means root object key
3) nestedPath.keyToBeRemoved -> means only that nested path key
4) don't need to account for array iteration, just object key path is enough in the key to be removed.
*/
function removeKeysFromObject(obj, keysToBeRemoved, prevKeys = []) {
if (Array.isArray(obj)) {
return obj.map(item => removeKeysFromObject(item, keysToBeRemoved, prevKeys));
}
if (obj && typeof obj === 'object') {
const filteredKeyObject = {};
const ObjectKeys = Object.keys(obj);
for (const objectKey of ObjectKeys) {
const isKeyToBeRemoved = objectPathMatcher(objectKey, prevKeys, keysToBeRemoved);
if (!isKeyToBeRemoved) {
filteredKeyObject[objectKey] = removeKeysFromObject(obj[objectKey], keysToBeRemoved, [...prevKeys, objectKey]);
}
}
return filteredKeyObject;
}
return obj;
}
function* convertObjectToStringGen(obj) {
if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || obj === null) {
yield JSON.stringify(obj);
} else if (Array.isArray(obj)) {
yield '[';
let isFirst = true;
for (let item of obj) {
if (item === undefined) {
item = null;
}
yield `${isFirst ? '' : ','}`;
yield* convertObjectToStringGen(item);
isFirst = false;
}
yield ']';
} else {
yield '{';
let isFirst = true;
const entries = Object.entries(obj);
for (const [itemKey, itemValue] of entries) {
if (itemValue !== undefined) {
yield `${isFirst ? '' : ','}${JSON.stringify(itemKey)}: `;
yield* convertObjectToStringGen(itemValue);
isFirst = false;
}
}
yield '}';
}
}