Skip to content

Commit 5bc8f31

Browse files
authored
chore: PouchDB-find abstract-mapper update (#8913)
* chore: var -> const * chore: simplify with array functions
1 parent 3e3be0b commit 5bc8f31

File tree

1 file changed

+29
-37
lines changed

1 file changed

+29
-37
lines changed

packages/node_modules/pouchdb-find/src/adapters/local/abstract-mapper.js

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,25 @@ import { matchesSelector, parseField } from 'pouchdb-selector-core';
1212
// the function, but it would also be a lot less performant.
1313
//
1414

15+
function getDeepValue(value, path) {
16+
for (const key of path) {
17+
value = value[key];
18+
if (value === undefined) {
19+
return undefined;
20+
}
21+
}
22+
return value;
23+
}
1524

1625
function createDeepMultiMapper(fields, emit, selector) {
1726
return function (doc) {
1827
if (selector && !matchesSelector(doc, selector)) { return; }
19-
var toEmit = [];
20-
for (var i = 0, iLen = fields.length; i < iLen; i++) {
21-
var parsedField = parseField(fields[i]);
22-
var value = doc;
23-
for (var j = 0, jLen = parsedField.length; j < jLen; j++) {
24-
var key = parsedField[j];
25-
value = value[key];
26-
if (typeof value === 'undefined') {
27-
return; // don't emit
28-
}
28+
29+
const toEmit = [];
30+
for (const field of fields) {
31+
const value = getDeepValue(doc, parseField(field));
32+
if (value === undefined) {
33+
return;
2934
}
3035
toEmit.push(value);
3136
}
@@ -34,18 +39,14 @@ function createDeepMultiMapper(fields, emit, selector) {
3439
}
3540

3641
function createDeepSingleMapper(field, emit, selector) {
37-
var parsedField = parseField(field);
42+
const parsedField = parseField(field);
3843
return function (doc) {
3944
if (selector && !matchesSelector(doc, selector)) { return; }
40-
var value = doc;
41-
for (var i = 0, len = parsedField.length; i < len; i++) {
42-
var key = parsedField[i];
43-
value = value[key];
44-
if (typeof value === 'undefined') {
45-
return; // do nothing
46-
}
45+
46+
const value = getDeepValue(doc, parsedField);
47+
if (value !== undefined) {
48+
emit(value);
4749
}
48-
emit(value);
4950
};
5051
}
5152

@@ -59,27 +60,18 @@ function createShallowSingleMapper(field, emit, selector) {
5960
function createShallowMultiMapper(fields, emit, selector) {
6061
return function (doc) {
6162
if (selector && !matchesSelector(doc, selector)) { return; }
62-
var toEmit = [];
63-
for (var i = 0, len = fields.length; i < len; i++) {
64-
toEmit.push(doc[fields[i]]);
65-
}
63+
const toEmit = fields.map(field => doc[field]);
6664
emit(toEmit);
6765
};
6866
}
6967

7068
function checkShallow(fields) {
71-
for (var i = 0, len = fields.length; i < len; i++) {
72-
var field = fields[i];
73-
if (field.indexOf('.') !== -1) {
74-
return false;
75-
}
76-
}
77-
return true;
69+
return fields.every((field) => field.indexOf('.') === -1);
7870
}
7971

8072
function createMapper(fields, emit, selector) {
81-
var isShallow = checkShallow(fields);
82-
var isSingle = fields.length === 1;
73+
const isShallow = checkShallow(fields);
74+
const isSingle = fields.length === 1;
8375

8476
// notice we try to optimize for the most common case,
8577
// i.e. single shallow indexes
@@ -113,18 +105,18 @@ function reducer(/*reduceFunDef*/) {
113105
}
114106

115107
function ddocValidator(ddoc, viewName) {
116-
var view = ddoc.views[viewName];
108+
const view = ddoc.views[viewName];
117109
// This doesn't actually need to be here apparently, but
118110
// I feel safer keeping it.
119111
/* istanbul ignore if */
120112
if (!view.map || !view.map.fields) {
121-
throw new Error('ddoc ' + ddoc._id +' with view ' + viewName +
113+
throw new Error('ddoc ' + ddoc._id + ' with view ' + viewName +
122114
' doesn\'t have map.fields defined. ' +
123115
'maybe it wasn\'t created by this plugin?');
124116
}
125117
}
126118

127-
var abstractMapper = abstractMapReduce(
119+
const abstractMapper = abstractMapReduce(
128120
/* localDocName */ 'indexes',
129121
mapper,
130122
reducer,
@@ -138,11 +130,11 @@ export default function (db) {
138130
// the standard findAbstractMapper query/viewCleanup.
139131
// This allows the indexeddb adapter to support partial_filter_selector.
140132
query: function addQueryFallback(signature, opts) {
141-
var fallback = abstractMapper.query.bind(this);
133+
const fallback = abstractMapper.query.bind(this);
142134
return db._customFindAbstractMapper.query.call(this, signature, opts, fallback);
143135
},
144136
viewCleanup: function addViewCleanupFallback() {
145-
var fallback = abstractMapper.viewCleanup.bind(this);
137+
const fallback = abstractMapper.viewCleanup.bind(this);
146138
return db._customFindAbstractMapper.viewCleanup.call(this, fallback);
147139
}
148140
};

0 commit comments

Comments
 (0)