@beenotung/tslib
Version:
utils library in Typescript
67 lines (66 loc) • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toJson = toJson;
exports.mkNavigator = mkNavigator;
/**
* 1. resolve nested object as undefined
*
* 2. remove undefined fields
*
* 3. remove non-serializable fields (function, prototype)
*
* */
function toJson(o, visited) {
if (o === null) {
return null;
}
if (typeof o === 'object') {
if (visited.has(o)) {
return undefined;
}
else {
visited.add(o);
}
}
const res = {};
switch (typeof o) {
case 'string':
case 'number':
case 'boolean':
return o;
}
// eslint-disable-next-line guard-for-in
for (const k in o) {
const type = typeof o[k];
switch (type) {
case 'string':
case 'number':
case 'boolean':
res[k] = o[k];
break;
case 'function':
break;
case 'undefined':
break;
case 'object': {
const v = o[k];
if (Array.isArray(v)) {
res[k] = v.map(o => toJson(o, visited));
}
else {
const x = toJson(v, visited);
if (x === null || (x !== undefined && Object.keys(x).length > 0)) {
res[k] = x;
}
}
break;
}
default:
console.debug('unknown type of property:', { type, k, v: o[k] });
}
}
return res;
}
function mkNavigator() {
return toJson(window.navigator, new Set());
}