diff --git a/lib/DataStore/DataStore.js b/lib/DataStore/DataStore.js index ee417f7..f9f6ee3 100644 --- a/lib/DataStore/DataStore.js +++ b/lib/DataStore/DataStore.js @@ -56,6 +56,7 @@ class DataStore { fillReferencesValuesFromEntry(entry, referencedValues, fillSimpleReference) { for (let referenceField in referencedValues) { + if (!referencedValues.hasOwnProperty(referenceField)) continue; let reference = referencedValues[referenceField], choices = this.getReferenceChoicesById(reference), entries = [], @@ -63,6 +64,7 @@ class DataStore { if (reference.type() === 'reference_many') { for (let i in identifier) { + if (!identifier.hasOwnProperty(i)) continue; let id = identifier[i]; entries.push(choices[id]); } diff --git a/lib/Field/Field.js b/lib/Field/Field.js index a1db9d0..e6e7693 100644 --- a/lib/Field/Field.js +++ b/lib/Field/Field.js @@ -99,6 +99,7 @@ class Field { getMappedValue(value, entry) { for (let i in this._maps) { + if (!this._maps.hasOwnProperty(i)) continue; value = this._maps[i](value, entry); } @@ -126,6 +127,7 @@ class Field { getTransformedValue(value, entry) { for (let i in this._transforms) { + if (!this._transforms.hasOwnProperty(i)) continue; value = this._transforms[i](value, entry); } diff --git a/lib/Field/ReferenceField.js b/lib/Field/ReferenceField.js index 43d3ed9..ca82b08 100644 --- a/lib/Field/ReferenceField.js +++ b/lib/Field/ReferenceField.js @@ -115,6 +115,7 @@ class ReferenceField extends Field { if (identifier instanceof Array) { for (let j in identifier) { + if (!identifier.hasOwnProperty(j)) continue; results[identifier[j]] = true; } continue; diff --git a/lib/Queries/ReadQueries.js b/lib/Queries/ReadQueries.js index aa9776d..8d8522e 100644 --- a/lib/Queries/ReadQueries.js +++ b/lib/Queries/ReadQueries.js @@ -125,9 +125,11 @@ class ReadQueries extends Queries { let data = {}; let name; for (name in results[0]) { + if (!results[0].hasOwnProperty(name)) continue; data[name] = results[0][name]; } for (name in results[1]) { + if (!results[1].hasOwnProperty(name)) continue; data[name] = results[1][name]; } return data; @@ -152,11 +154,13 @@ class ReadQueries extends Queries { calls = []; for (let i in references) { + if (!references.hasOwnProperty(i)) continue; let reference = references[i], targetEntity = reference.targetEntity(), identifiers = reference.getIdentifierValues(rawValues); for (let k in identifiers) { + if (!identifiers.hasOwnProperty(k)) continue; calls.push(getOne(targetEntity, 'listView', identifiers[k], reference.name())); } } @@ -182,6 +186,7 @@ class ReadQueries extends Queries { calls = []; for (let i in references) { + if (!references.hasOwnProperty(i)) continue; let reference = references[i], targetEntity = reference.targetEntity(), identifiers = reference.getIdentifierValues(rawValues); @@ -211,6 +216,7 @@ class ReadQueries extends Queries { getRawValues = this.getRawValues.bind(this); for (let i in references) { + if (!references.hasOwnProperty(i)) continue; let reference = references[i]; let targetEntity = reference.targetEntity(); @@ -274,6 +280,7 @@ class ReadQueries extends Queries { i = 0; for (let j in references) { + if (!references.hasOwnProperty(j)) continue; let reference = references[j], response = responses[i++]; @@ -310,11 +317,12 @@ class ReadQueries extends Queries { i = 0; for (let j in references) { + if (!references.hasOwnProperty(j)) continue; let data = [], reference = references[j], identifiers = reference.getIdentifierValues(rawValues); - for (let k in identifiers) { + for (let k of identifiers) { response = responses[i++]; if (response.status == 'error') { // one of the responses failed @@ -349,6 +357,7 @@ class ReadQueries extends Queries { calls = []; for (let i in referencedLists) { + if (!referencedLists.hasOwnProperty(i)) continue; let referencedList = referencedLists[i], targetEntity = referencedList.targetEntity(), viewName = referencedList.datagridName(), @@ -376,6 +385,7 @@ class ReadQueries extends Queries { entries = {}; for (let i in referencedLists) { + if (!referencedLists.hasOwnProperty(i)) continue; let response = responses[j++]; if (response.status == 'error') { // If a response fail, skip it diff --git a/lib/Utils/PromisesResolver.js b/lib/Utils/PromisesResolver.js index 6edc915..72fd17c 100644 --- a/lib/Utils/PromisesResolver.js +++ b/lib/Utils/PromisesResolver.js @@ -28,6 +28,7 @@ class PromisesResolver { states[key] = true; results[key] = result; // result may be an error for (let i in states) { + if (!states.hasOwnProperty(i)) continue; if (!states[i]) { return; } diff --git a/lib/Utils/orderElement.js b/lib/Utils/orderElement.js index 6ddced5..5b29ed1 100644 --- a/lib/Utils/orderElement.js +++ b/lib/Utils/orderElement.js @@ -4,6 +4,7 @@ export default { objectKey; for (objectKey in input) { + if (!input.hasOwnProperty(objectKey)) continue; results.push(input[objectKey]); } diff --git a/lib/View/View.js b/lib/View/View.js index 9107952..18bee6a 100644 --- a/lib/View/View.js +++ b/lib/View/View.js @@ -140,6 +140,7 @@ class View { console.warn('Passing literal of Field to fields method is deprecated use array instead'); let result = []; for (let fieldName in arg) { + if (!arg.hasOwnProperty(fieldName)) continue; result = result.concat(View.flatten(arg[fieldName])); } return result; diff --git a/tests/before_all.js b/tests/before_all.js new file mode 100644 index 0000000..a8ab6d5 --- /dev/null +++ b/tests/before_all.js @@ -0,0 +1,18 @@ + +beforeEach(function() { + if (!Object.prototype.test_prototype_entry) { + Object.prototype.test_prototype_entry = + "Don't use for..in to enumerate Object properties, as users are free to " + + "add entries to the Object prototype, for example for polyfills. " + + "You should instead use\n" + + " for (let i in xs) { if (!xs.hasOwnProperty(i)) continue; var x = xs[i]; ... }"; + } + + if (!Array.prototype.test_prototype_entry) { + Array.prototype.test_prototype_entry = + "Don't use for..in to enumerate Array properties, as users are free to " + + "add entries to the Array prototype, for example for polyfills. " + + "You should instead use\n" + + " for (let i in xs) { if (!xs.hasOwnProperty(i)) continue; var x = xs[i]; ... }"; + } +});