Skip to content
This repository was archived by the owner on Aug 23, 2022. It is now read-only.

Commit b98fd89

Browse files
committed
Ensuring iteratee follows Immutable strategy. Fixes #846
1 parent 7fa925a commit b98fd89

File tree

2 files changed

+34
-20
lines changed

2 files changed

+34
-20
lines changed

src/utils/iteratee.js

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,44 @@
11
import identity from './identity';
2+
import _get from '../utils/get';
23

3-
function matcher(object) {
4-
return (compareObject) => {
5-
if (compareObject === object) return true;
4+
const defaultStrategy = {
5+
get: _get,
6+
};
67

7-
return Object.keys(object)
8-
.every((key) => object[key] === compareObject[key]);
9-
};
10-
}
118

12-
function propChecker(prop) {
13-
return (object) => object && !!object[prop];
14-
}
9+
export function createIteratee(s = defaultStrategy) {
10+
function matcher(object) {
11+
return (compareObject) => {
12+
if (compareObject === object) return true;
1513

16-
export default function iteratee(value) {
17-
if (typeof value === 'function') {
18-
return value;
14+
return Object.keys(object)
15+
.every((key) => s.get(object, key) === s.get(compareObject, key));
16+
};
1917
}
2018

21-
if (value === null) {
22-
return identity;
19+
function propChecker(prop) {
20+
return (object) => object && !!s.get(object, prop);
2321
}
2422

25-
if (typeof value === 'object') {
26-
return matcher(value);
27-
}
23+
return (value) => {
24+
if (typeof value === 'function') {
25+
return value;
26+
}
2827

29-
return propChecker(value);
28+
if (value === null) {
29+
return identity;
30+
}
31+
32+
if (typeof value === 'object') {
33+
return matcher(value);
34+
}
35+
36+
return propChecker(value);
37+
};
3038
}
3139

40+
const iteratee = createIteratee();
41+
3242
export function iterateeValue(data, value) {
3343
if (typeof value === 'function') {
3444
return value(data);
@@ -42,3 +52,5 @@ export function iterateeValue(data, value) {
4252

4353
return iteratee(value)(data);
4454
}
55+
56+
export default iteratee;

src/utils/track.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import findKey from '../utils/find-key';
22
import _get from '../utils/get';
3-
import iteratee from '../utils/iteratee';
3+
import { createIteratee } from '../utils/iteratee';
44
import isMulti from '../utils/is-multi';
55

66
const defaultStrategy = {
77
get: _get,
88
};
99

1010
function createTrack(s = defaultStrategy) {
11+
const iteratee = createIteratee(s);
12+
1113
return function track(model, ...predicates) {
1214
const isPartial = model[0] === '.';
1315

0 commit comments

Comments
 (0)