| module.exports = sigmund |
| function sigmund (subject, maxSessions) { |
| maxSessions = maxSessions || 10; |
| var notes = []; |
| var analysis = ''; |
| var RE = RegExp; |
| |
| function psychoAnalyze (subject, session) { |
| if (session > maxSessions) return; |
| |
| if (typeof subject === 'function' || |
| typeof subject === 'undefined') { |
| return; |
| } |
| |
| if (typeof subject !== 'object' || !subject || |
| (subject instanceof RE)) { |
| analysis += subject; |
| return; |
| } |
| |
| if (notes.indexOf(subject) !== -1 || session === maxSessions) return; |
| |
| notes.push(subject); |
| analysis += '{'; |
| Object.keys(subject).forEach(function (issue, _, __) { |
| // pseudo-private values. skip those. |
| if (issue.charAt(0) === '_') return; |
| var to = typeof subject[issue]; |
| if (to === 'function' || to === 'undefined') return; |
| analysis += issue; |
| psychoAnalyze(subject[issue], session + 1); |
| }); |
| } |
| psychoAnalyze(subject, 0); |
| return analysis; |
| } |
| |
| // vim: set softtabstop=4 shiftwidth=4: |