function hasAbsoluteFileName(hook) { const fileName = hook.hookSource ? hook.hookSource.fileName : null; if (fileName == null) { return false; } else { return fileName.indexOf('/react-devtools-shared/') > 0; } } function serializeHook(hook) { if (!hook.hookSource) return hook; // Remove user-specific portions of this file path. let fileName = hook.hookSource.fileName; const index = fileName.lastIndexOf('/react-devtools-shared/'); fileName = fileName.substring(index + 1); let subHooks = hook.subHooks; if (subHooks) { subHooks = subHooks.map(serializeHook); } return { ...hook, hookSource: { ...hook.hookSource, fileName, // Otherwise changes in any test case or formatting might invalidate other tests. columnNumber: 'removed by Jest serializer', lineNumber: 'removed by Jest serializer', }, subHooks, }; } // test() is part of Jest's serializer API export function test(maybeHook) { if (maybeHook === null || typeof maybeHook !== 'object') { return false; } const hasOwnProperty = Object.prototype.hasOwnProperty.bind(maybeHook); return ( hasOwnProperty('id') && hasOwnProperty('isStateEditable') && hasOwnProperty('name') && hasOwnProperty('subHooks') && hasOwnProperty('value') && // Don't re-process an already printed hook. hasAbsoluteFileName(maybeHook) ); } // print() is part of Jest's serializer API export function print(hook, serialize, indent) { // Don't stringify this object; that would break nested serializers. return serialize(serializeHook(hook)); }