bolt
bolt copied to clipboard
'.val()' not added when prior() inside square brackets.
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.
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