bolt icon indicating copy to clipboard operation
bolt copied to clipboard

'.val()' not added when prior() inside square brackets.

Open siddhantkothari opened this issue 4 years ago • 1 comments

A simple reproducible example showing the bug:

.bolt file: path /test/{x} is String{ validate() { this.parent()[prior(this)] == x } } .json file produced: { "rules": { "test": { "$x": { ".validate": "(newData.isString() && newData.parent().child(data).val() == $x)" } } } } .json file expected: { "rules": { "test": { "$x": { ".validate": "(newData.isString() && newData.parent().child(data.val()).val() == $x)" } } } } Inside the child function data.val() should be present. When I remove the prior(), the result is newData.val() as expected.

siddhantkothari avatar Aug 24 '20 11:08 siddhantkothari

To add a similar issue where .val() is not added:

path /{project_uuid} {
  read() {
    projectMatch(this.parent_uuid)
  }
}

function projectMatch(parent_uuid) {
  return (
    auth != null &&
    parent_uuid != null &&
    auth[parent_uuid] != null
  );
}

The last line compiles into:

auth[data.child('parent_uuid')] != null

instead of

auth[data.child('parent_uuid').val()] != null

Nickk4 avatar Jan 11 '24 20:01 Nickk4