Skip to content

Commit

Permalink
fix: improved retainer
Browse files Browse the repository at this point in the history
  • Loading branch information
simlu committed Nov 16, 2020
1 parent 69dcf97 commit 743934d
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 16 deletions.
5 changes: 5 additions & 0 deletions .idea/codeStyles/codeStyleConfig.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 10 additions & 16 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,25 +42,19 @@ module.exports.getParents = (fields) => [...fields

module.exports.Retainer = (fields) => {
const retainer = objectScan(['**'].concat(fields), {
rtn: 'count',
useArraySelector: false,
joined: false,
breakFn: ({
getKey, getTraversedBy, matchedBy, context
}) => {
if (matchedBy.length > 1) {
// matched by '**' and another needle => keep and break
return true;
breakFn: ({ parent, property, getTraversedBy }) => {
if (parent === undefined) {
return false;
}
const traversedBy = getTraversedBy();
if (traversedBy.length === 1) {
const key = getKey();
if (getTraversedBy().length === 1) {
// traversed by only '**' => delete and break
const directParent = key.slice(0, -1)
.reduce((p, k) => p[k], context.obj);
if (Array.isArray(directParent)) {
directParent.splice(key[key.length - 1], 1);
if (Array.isArray(parent)) {
parent.splice(property, 1);
} else {
delete directParent[key[key.length - 1]];
// eslint-disable-next-line no-param-reassign
delete parent[property];
}
return true;
}
Expand All @@ -69,6 +63,6 @@ module.exports.Retainer = (fields) => {
}
});
return (obj) => {
retainer(obj, { obj });
retainer(obj);
};
};

0 comments on commit 743934d

Please sign in to comment.