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}`); } +                }}              ]          }, |