diff --git a/CHANGELOG.md b/CHANGELOG.md index 61996ca23..4f6348acc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ - CHANGED: Add `data_version` field to responses of all services. [#5387](https://github.com/Project-OSRM/osrm-backend/pull/5387) - FIXED: Use Boost.Beast to parse HTTP request. [#6294](https://github.com/Project-OSRM/osrm-backend/pull/6294) - FIXED: Fix inefficient osrm-routed connection handling [#6113](https://github.com/Project-OSRM/osrm-backend/pull/6113) + - NodeJS: + - FIXED: Support `skip_waypoints` in Node bindings [#6060](https://github.com/Project-OSRM/osrm-backend/pull/6060) - Misc: - CHANGED: missing files list is included in exception message. [#5360](https://github.com/Project-OSRM/osrm-backend/pull/5360) - CHANGED: Do not use deprecated Callback::Call overload in Node bindings. [#6318](https://github.com/Project-OSRM/osrm-backend/pull/6318) diff --git a/include/nodejs/node_osrm_support.hpp b/include/nodejs/node_osrm_support.hpp index 400d420a5..25f96661d 100644 --- a/include/nodejs/node_osrm_support.hpp +++ b/include/nodejs/node_osrm_support.hpp @@ -675,6 +675,22 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &arg params->generate_hints = Nan::To(generate_hints).FromJust(); } + if (Nan::Has(obj, Nan::New("skip_waypoints").ToLocalChecked()).FromJust()) + { + v8::Local skip_waypoints = + Nan::Get(obj, Nan::New("skip_waypoints").ToLocalChecked()).ToLocalChecked(); + if (skip_waypoints.IsEmpty()) + return false; + + if (!skip_waypoints->IsBoolean()) + { + Nan::ThrowError("skip_waypoints must be of type Boolean"); + return false; + } + + params->skip_waypoints = Nan::To(skip_waypoints).FromJust(); + } + if (Nan::Has(obj, Nan::New("exclude").ToLocalChecked()).FromJust()) { v8::Local exclude = diff --git a/test/nodejs/table.js b/test/nodejs/table.js index f4f0e6312..d2c50d83f 100644 --- a/test/nodejs/table.js +++ b/test/nodejs/table.js @@ -130,7 +130,7 @@ tables.forEach(function(annotation) { }); test('table: ' + annotation + ' throws on invalid arguments', function(assert) { - assert.plan(17); + assert.plan(18); var osrm = new OSRM(data_path); var options = {annotations: [annotation.slice(0,-1)]}; assert.throws(function() { osrm.table(options); }, @@ -190,6 +190,8 @@ tables.forEach(function(annotation) { assert.throws(function() { osrm.route({coordinates: two_test_coordinates, generate_hints: null}, function(err, route) {}) }, /generate_hints must be of type Boolean/); + assert.throws(function() { osrm.route({coordinates: two_test_coordinates, skip_waypoints: null}, function(err, route) {}) }, + /skip_waypoints must be of type Boolean/); }); test('table: throws on invalid arguments', function(assert) { @@ -239,6 +241,20 @@ tables.forEach(function(annotation) { }); }); + test('table: ' + annotation + ' table in Monaco without waypoints', function(assert) { + assert.plan(2); + var osrm = new OSRM(data_path); + var options = { + coordinates: two_test_coordinates, + skip_waypoints: true, // false is default + annotations: [annotation.slice(0,-1)] + }; + osrm.table(options, function(err, table) { + assert.strictEqual(table.sources, undefined); + assert.strictEqual(table.destinations, undefined); + }); + }); + test('table: ' + annotation + ' table in Monaco without motorways', function(assert) { assert.plan(2); var osrm = new OSRM({path: mld_data_path, algorithm: 'MLD'});