Skip to content

Commit c1d2c15

Browse files
Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only (#6417)
1 parent fb1bb7a commit c1d2c15

File tree

3 files changed

+56
-30
lines changed

3 files changed

+56
-30
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Unreleased
22
- Changes from 5.27.1
33
- Misc:
4+
- FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417)
45
- FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/)
56
- FIXED: Fix bindings compilation issue on the latest Node. Update NAN to 2.17.0. [#6416](https://github.com/Project-OSRM/osrm-backend/pull/6416)
67
# 5.27.1

include/nodejs/node_osrm_support.hpp

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,37 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo<v8::Value> &arg
767767
return false;
768768
}
769769
}
770+
771+
if (Nan::Has(obj, Nan::New("snapping").ToLocalChecked()).FromJust())
772+
{
773+
v8::Local<v8::Value> snapping =
774+
Nan::Get(obj, Nan::New("snapping").ToLocalChecked()).ToLocalChecked();
775+
if (snapping.IsEmpty())
776+
return false;
777+
778+
if (!snapping->IsString())
779+
{
780+
Nan::ThrowError("Snapping must be a string: [default, any]");
781+
return false;
782+
}
783+
const Nan::Utf8String snapping_utf8str(snapping);
784+
std::string snapping_str{*snapping_utf8str, *snapping_utf8str + snapping_utf8str.length()};
785+
786+
if (snapping_str == "default")
787+
{
788+
params->snapping = osrm::RouteParameters::SnappingType::Default;
789+
}
790+
else if (snapping_str == "any")
791+
{
792+
params->snapping = osrm::RouteParameters::SnappingType::Any;
793+
}
794+
else
795+
{
796+
Nan::ThrowError("'snapping' param must be one of [default, any]");
797+
return false;
798+
}
799+
}
800+
770801
return true;
771802
}
772803

@@ -1115,36 +1146,6 @@ argumentsToRouteParameter(const Nan::FunctionCallbackInfo<v8::Value> &args,
11151146
}
11161147
}
11171148

1118-
if (Nan::Has(obj, Nan::New("snapping").ToLocalChecked()).FromJust())
1119-
{
1120-
v8::Local<v8::Value> snapping =
1121-
Nan::Get(obj, Nan::New("snapping").ToLocalChecked()).ToLocalChecked();
1122-
if (snapping.IsEmpty())
1123-
return route_parameters_ptr();
1124-
1125-
if (!snapping->IsString())
1126-
{
1127-
Nan::ThrowError("Snapping must be a string: [default, any]");
1128-
return route_parameters_ptr();
1129-
}
1130-
const Nan::Utf8String snapping_utf8str(snapping);
1131-
std::string snapping_str{*snapping_utf8str, *snapping_utf8str + snapping_utf8str.length()};
1132-
1133-
if (snapping_str == "default")
1134-
{
1135-
params->snapping = osrm::RouteParameters::SnappingType::Default;
1136-
}
1137-
else if (snapping_str == "any")
1138-
{
1139-
params->snapping = osrm::RouteParameters::SnappingType::Any;
1140-
}
1141-
else
1142-
{
1143-
Nan::ThrowError("'snapping' param must be one of [default, any]");
1144-
return route_parameters_ptr();
1145-
}
1146-
}
1147-
11481149
bool parsedSuccessfully = parseCommonParameters(obj, params);
11491150
if (!parsedSuccessfully)
11501151
{

test/nodejs/table.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,30 @@ test('table: returns buffer', function(assert) {
8080
});
8181
});
8282

83+
test('table: throws on invalid snapping values', function (assert) {
84+
assert.plan(1);
85+
var osrm = new OSRM(data_path);
86+
var options = {
87+
coordinates: [three_test_coordinates[0], three_test_coordinates[1]],
88+
snapping: 'zing'
89+
};
90+
assert.throws(function () { osrm.table(options, function (err, response) { }); },
91+
/'snapping' param must be one of \[default, any\]/);
92+
});
93+
94+
test('table: snapping parameter passed through OK', function (assert) {
95+
assert.plan(2);
96+
var osrm = new OSRM(data_path);
97+
var options = {
98+
coordinates: [three_test_coordinates[0], three_test_coordinates[1]],
99+
snapping: 'any'
100+
};
101+
osrm.table(options, function(err, table) {
102+
assert.ifError(err);
103+
assert.ok(table['durations'], 'distances table result should exist');
104+
});
105+
});
106+
83107
var tables = ['distances', 'durations'];
84108

85109
tables.forEach(function(annotation) {

0 commit comments

Comments
 (0)