diff options
-rw-r--r-- | ext/js/data/json-schema.js | 5 | ||||
-rw-r--r-- | test/test-json-schema.js | 7 |
2 files changed, 9 insertions, 3 deletions
diff --git a/ext/js/data/json-schema.js b/ext/js/data/json-schema.js index a6306c3a..8fb920fc 100644 --- a/ext/js/data/json-schema.js +++ b/ext/js/data/json-schema.js @@ -852,11 +852,12 @@ class JsonSchemaProxyHandler { let propertySchema; if (Array.isArray(target)) { - property = this._getArrayIndex(property); - if (property === null) { + const index = this._getArrayIndex(property); + if (index === null) { // Note: this does not currently wrap mutating functions like push, pop, shift, unshift, splice return target[property]; } + property = index; propertySchema = this._schema.getArrayItemSchema(property); } else { propertySchema = this._schema.getObjectPropertySchema(property); diff --git a/test/test-json-schema.js b/test/test-json-schema.js index c5ff830a..1c61f1b8 100644 --- a/test/test-json-schema.js +++ b/test/test-json-schema.js @@ -946,7 +946,12 @@ function testProxy1() { {error: false, value: ['default'], action: (value) => { value[0] = 'string'; }}, {error: true, value: ['default'], action: (value) => { value[0] = null; }}, {error: true, value: ['default'], action: (value) => { delete value[0]; }}, - {error: false, value: ['default'], action: (value) => { value[1] = 'string'; }} + {error: false, value: ['default'], action: (value) => { value[1] = 'string'; }}, + {error: false, value: ['default'], action: (value) => { + value[1] = 'string'; + if (value.length !== 2) { throw new Error(`Invalid length; expected=2; actual=${value.length}`); } + if (typeof value.push !== 'function') { throw new Error(`Invalid push; expected=function; actual=${typeof value.push}`); } + }} ] }, |