63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
/*
|
|
* decaffeinate suggestions:
|
|
* DS102: Remove unnecessary code created because of implicit returns
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
*/
|
|
|
|
const _ = require('underscore');
|
|
|
|
module.exports = {
|
|
|
|
/**
|
|
Removes ignored or private fields from a resume object
|
|
@returns an object with the following structure:
|
|
{
|
|
scrubbed: the processed resume object
|
|
ignoreList: an array of ignored nodes that were removed
|
|
privateList: an array of private nodes that were removed
|
|
}
|
|
*/
|
|
scrubResume(rep, opts) {
|
|
const traverse = require('traverse');
|
|
const ignoreList = [];
|
|
const privateList = [];
|
|
const includePrivates = opts && opts.private;
|
|
|
|
const scrubbed = traverse( rep ).map(function() { // [^1]
|
|
if (!this.isLeaf) {
|
|
if ((this.node.ignore === true) || (this.node.ignore === 'true')) {
|
|
ignoreList.push(this.node);
|
|
this.delete();
|
|
} else if (((this.node.private === true) || (this.node.private === 'true')) && !includePrivates) {
|
|
privateList.push(this.node);
|
|
this.delete();
|
|
}
|
|
}
|
|
if (_.isArray(this.node)) { // [^2]
|
|
this.after(function() {
|
|
this.update(_.compact(this.node));
|
|
});
|
|
}
|
|
});
|
|
|
|
return {
|
|
scrubbed,
|
|
ingoreList: ignoreList,
|
|
privateList
|
|
};
|
|
}
|
|
};
|
|
|
|
|
|
|
|
// [^1]: As of v0.6.6, the NPM traverse library has a quirk when attempting
|
|
// to remove array elements directly using traverse's `this.remove`. See:
|
|
//
|
|
// https://github.com/substack/js-traverse/issues/48
|
|
//
|
|
// [^2]: The workaround is to use traverse's 'this.delete' to nullify the value
|
|
// first, followed by removal with something like _.compact.
|
|
//
|
|
// https://github.com/substack/js-traverse/issues/48#issuecomment-142607200
|
|
//
|