Initial commit
[yaffs-website] / node_modules / sigmund / sigmund.js
1 module.exports = sigmund
2 function sigmund (subject, maxSessions) {
3     maxSessions = maxSessions || 10;
4     var notes = [];
5     var analysis = '';
6     var RE = RegExp;
7
8     function psychoAnalyze (subject, session) {
9         if (session > maxSessions) return;
10
11         if (typeof subject === 'function' ||
12             typeof subject === 'undefined') {
13             return;
14         }
15
16         if (typeof subject !== 'object' || !subject ||
17             (subject instanceof RE)) {
18             analysis += subject;
19             return;
20         }
21
22         if (notes.indexOf(subject) !== -1 || session === maxSessions) return;
23
24         notes.push(subject);
25         analysis += '{';
26         Object.keys(subject).forEach(function (issue, _, __) {
27             // pseudo-private values.  skip those.
28             if (issue.charAt(0) === '_') return;
29             var to = typeof subject[issue];
30             if (to === 'function' || to === 'undefined') return;
31             analysis += issue;
32             psychoAnalyze(subject[issue], session + 1);
33         });
34     }
35     psychoAnalyze(subject, 0);
36     return analysis;
37 }
38
39 // vim: set softtabstop=4 shiftwidth=4: