@react-navigation/core
Version:
Core utilities for building navigators
53 lines (52 loc) • 1.46 kB
JavaScript
;
const checkSerializableWithoutCircularReference = (o, seen, location) => {
if (o === undefined || o === null || typeof o === 'boolean' || typeof o === 'number' || typeof o === 'string') {
return {
serializable: true
};
}
if (Object.prototype.toString.call(o) !== '[object Object]' && !Array.isArray(o)) {
return {
serializable: false,
location: location.slice(),
reason: typeof o === 'function' ? 'Function' : String(o)
};
}
if (seen.has(o)) {
return {
serializable: false,
reason: 'Circular reference',
location: location.slice()
};
}
seen.add(o);
if (Array.isArray(o)) {
for (let i = 0; i < o.length; i++) {
location.push(i);
const childResult = checkSerializableWithoutCircularReference(o[i], seen, location);
location.pop();
if (!childResult.serializable) {
seen.delete(o);
return childResult;
}
}
} else {
for (const key in o) {
location.push(key);
const childResult = checkSerializableWithoutCircularReference(o[key], seen, location);
location.pop();
if (!childResult.serializable) {
seen.delete(o);
return childResult;
}
}
}
seen.delete(o);
return {
serializable: true
};
};
export function checkSerializable(o) {
return checkSerializableWithoutCircularReference(o, new Set(), []);
}
//# sourceMappingURL=checkSerializable.js.map