aboutsummaryrefslogtreecommitdiff
path: root/node_modules/clean-yaml-object/index.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-28 00:38:50 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-28 00:40:43 +0200
commit7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch)
tree6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/clean-yaml-object/index.js
parent963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff)
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/clean-yaml-object/index.js')
-rw-r--r--node_modules/clean-yaml-object/index.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/node_modules/clean-yaml-object/index.js b/node_modules/clean-yaml-object/index.js
new file mode 100644
index 000000000..77b08168e
--- /dev/null
+++ b/node_modules/clean-yaml-object/index.js
@@ -0,0 +1,92 @@
+'use strict';
+module.exports = function (object, filterFn) {
+ return cleanYamlObj(object, filterFn || defaultFilter, true, []);
+};
+
+function cleanYamlObj(object, filter, isRoot, seen) {
+ if (object === undefined) {
+ return null;
+ }
+
+ if (typeof object === 'function') {
+ return object.toString();
+ }
+
+ if (Buffer.isBuffer(object)) {
+ return 'Buffer\n' + object.toString('hex').split('')
+ .reduce(function (set, c) {
+ if (set.length && set[set.length - 1].length === 1) {
+ set[set.length - 1] += c;
+ if (set.length && set.length % 20 === 0) {
+ set[set.length - 1] += '\n';
+ } else {
+ set[set.length - 1] += ' ';
+ }
+ } else {
+ set.push(c);
+ }
+ return set;
+ }, []).join('').trim();
+ }
+
+ if (object && typeof object === 'object') {
+ if (object instanceof RegExp) {
+ return object.toString();
+ }
+
+ seen = seen.concat([object]);
+
+ var isArray = Array.isArray(object);
+
+ // Fill in any holes. This means we lose expandos,
+ // but we were gonna lose those anyway.
+ if (isArray) {
+ object = Array.apply(null, object);
+ }
+
+ var isError = object && typeof object === 'object' && object instanceof Error;
+
+ var set = isArray ? [] : {};
+
+ // name is typically not an ownProperty on an Error
+ if (isError && object.name && !object.hasOwnProperty('name') && filter('name', isRoot, object, set)) {
+ setProp('name', object, set, seen, filter);
+ }
+
+ var keys = Object.getOwnPropertyNames(object);
+ return keys.reduce(function (set, k) {
+ // magic property!
+ if (isArray && k === 'length') {
+ return set;
+ }
+
+ // Don't dump massive EventEmitter and Domain
+ // objects onto the output, that's never friendly.
+ if (isError && /^domain/.test(k)) {
+ return set;
+ }
+
+ if (!filter(k, isRoot, object, set)) {
+ return set;
+ }
+
+ setProp(k, object, set, seen, filter);
+
+ return set;
+ }, set);
+ }
+
+ return object;
+}
+
+function setProp(propName, source, target, seen, filter) {
+ if (seen.indexOf(source[propName]) === -1) {
+ target[propName] = cleanYamlObj(source[propName], filter, false, seen);
+ } else {
+ target[propName] = '[Circular]';
+ }
+}
+
+function defaultFilter() {
+ return true;
+}