detect-boring-package-pmb
Version:
Guess whether an npm package is a boring, semi-empty placeholder.
83 lines (42 loc) • 1.37 kB
JavaScript
/*jslint indent: 2, maxlen: 80, continue: false, unparam: false, node: true */
/* -*- tab-width: 2 -*- */
;
var EX = {}, assert = require('assert');
EX.isObj = function (x) { return ((x && typeof x) === 'object'); };
EX.deepCopyJSON = function (x) { return JSON.parse(JSON.stringify(x)); };
EX.sameData = function (a, b) {
try {
assert.deepStrictEqual(a, b);
} catch (err) {
if (err instanceof assert.AssertionError) { return false; }
throw err;
}
return true;
};
EX.deleteIf = function (obj, key, decide) {
var del = decide(obj[key], key, obj);
if (del) { delete obj[key]; }
return del;
};
EX.deleteIfEqual = function (obj, key, cmp) {
return EX.deleteIf(obj, key, EX.sameData.bind(null, cmp));
};
EX.deleteIfInArray = function (obj, key, arr) {
var val = obj[key], idx = arr.findIndex(EX.sameData.bind(null, val));
if (idx < 0) { return false; }
delete obj[key];
return { idx: idx, val: val };
};
EX.mapKeys = function (keys, iter) {
var vals = {};
if (!Array.isArray(keys)) { keys = Object.keys(keys); }
keys.forEach(function (key) { vals[key] = iter(key); });
return vals;
};
EX.popProp = function (obj, key) {
if (EX.isObj(key)) { return EX.mapKeys(key, EX.popProp.bind(null, obj)); }
var val = obj[key];
delete obj[key];
return val;
};
module.exports = EX;