diff --git a/CHANGELOG.md b/CHANGELOG.md index 49ffcfbc3..272a8b59c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Unreleased - Changes from 5.27.1 - Misc: + - 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) - FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/) - 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) # 5.27.1 diff --git a/include/nodejs/node_osrm_support.hpp b/include/nodejs/node_osrm_support.hpp index c9db2372d..2faaa32f6 100644 --- a/include/nodejs/node_osrm_support.hpp +++ b/include/nodejs/node_osrm_support.hpp @@ -767,6 +767,37 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &arg return false; } } + + if (Nan::Has(obj, Nan::New("snapping").ToLocalChecked()).FromJust()) + { + v8::Local snapping = + Nan::Get(obj, Nan::New("snapping").ToLocalChecked()).ToLocalChecked(); + if (snapping.IsEmpty()) + return false; + + if (!snapping->IsString()) + { + Nan::ThrowError("Snapping must be a string: [default, any]"); + return false; + } + const Nan::Utf8String snapping_utf8str(snapping); + std::string snapping_str{*snapping_utf8str, *snapping_utf8str + snapping_utf8str.length()}; + + if (snapping_str == "default") + { + params->snapping = osrm::RouteParameters::SnappingType::Default; + } + else if (snapping_str == "any") + { + params->snapping = osrm::RouteParameters::SnappingType::Any; + } + else + { + Nan::ThrowError("'snapping' param must be one of [default, any]"); + return false; + } + } + return true; } @@ -1115,36 +1146,6 @@ argumentsToRouteParameter(const Nan::FunctionCallbackInfo &args, } } - if (Nan::Has(obj, Nan::New("snapping").ToLocalChecked()).FromJust()) - { - v8::Local snapping = - Nan::Get(obj, Nan::New("snapping").ToLocalChecked()).ToLocalChecked(); - if (snapping.IsEmpty()) - return route_parameters_ptr(); - - if (!snapping->IsString()) - { - Nan::ThrowError("Snapping must be a string: [default, any]"); - return route_parameters_ptr(); - } - const Nan::Utf8String snapping_utf8str(snapping); - std::string snapping_str{*snapping_utf8str, *snapping_utf8str + snapping_utf8str.length()}; - - if (snapping_str == "default") - { - params->snapping = osrm::RouteParameters::SnappingType::Default; - } - else if (snapping_str == "any") - { - params->snapping = osrm::RouteParameters::SnappingType::Any; - } - else - { - Nan::ThrowError("'snapping' param must be one of [default, any]"); - return route_parameters_ptr(); - } - } - bool parsedSuccessfully = parseCommonParameters(obj, params); if (!parsedSuccessfully) { diff --git a/test/nodejs/table.js b/test/nodejs/table.js index b73d74b7f..0285d1aea 100644 --- a/test/nodejs/table.js +++ b/test/nodejs/table.js @@ -80,6 +80,30 @@ test('table: returns buffer', function(assert) { }); }); +test('table: throws on invalid snapping values', function (assert) { + assert.plan(1); + var osrm = new OSRM(data_path); + var options = { + coordinates: [three_test_coordinates[0], three_test_coordinates[1]], + snapping: 'zing' + }; + assert.throws(function () { osrm.table(options, function (err, response) { }); }, + /'snapping' param must be one of \[default, any\]/); +}); + +test('table: snapping parameter passed through OK', function (assert) { + assert.plan(2); + var osrm = new OSRM(data_path); + var options = { + coordinates: [three_test_coordinates[0], three_test_coordinates[1]], + snapping: 'any' + }; + osrm.table(options, function(err, table) { + assert.ifError(err); + assert.ok(table['durations'], 'distances table result should exist'); + }); +}); + var tables = ['distances', 'durations']; tables.forEach(function(annotation) {