From 9faac9f9fe03925c091fdcbbacfc88e938493b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 1 Nov 2016 11:00:58 +0100 Subject: [PATCH] Retrieve error with context if map validation fails --- NEWS.md | 8 +- lib/cartodb/controllers/map.js | 18 ++ npm-shrinkwrap.json | 356 +++++++++++-------------- package.json | 4 +- test/acceptance/errors-with-context.js | 68 +++++ 5 files changed, 258 insertions(+), 196 deletions(-) create mode 100644 test/acceptance/errors-with-context.js diff --git a/NEWS.md b/NEWS.md index 7f0e2f0d..84996b43 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,8 +1,14 @@ # Changelog -## 2.80.3 +## 2.81.0 Released 2016-mm-dd +Enhancements: + - Returns errors with context when query layer does not retrieve geometry column + +Announcements: + - Upgrades windshaft to [2.6.1](https://github.com/CartoDB/windshaft/releases/tag/2.6.1). + ## 2.80.2 Released 2016-10-26 diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 282d468b..4b66972f 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -166,6 +166,24 @@ MapController.prototype.create = function(req, res, prepareConfigFn) { }, function finish(err, layergroup) { if (err) { + if (Number.isFinite(err.layerIndex)) { + var error = new Error(err.message); + error.http_status = err.http_status; + + if (!err.http_status && err.message.indexOf('column "the_geom_webmercator" does not exist') >= 0) { + error.http_status = 400; + } + + error.type = 'layer'; + error.subtype = err.message.indexOf('Postgis Plugin') >= 0 ? 'query' : undefined; + error.layer = { + id: mapConfig.getLayerId(err.layerIndex), + index: err.layerIndex, + type: mapConfig.layerType(err.layerIndex) + }; + + err = error; + } self.sendError(req, res, err, 'ANONYMOUS LAYERGROUP'); } else { var analysesResults = context.analysesResults || []; diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index aa27da13..710cd147 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "windshaft-cartodb", - "version": "2.80.1", + "version": "2.81.0", "dependencies": { "body-parser": { "version": "1.14.2", @@ -106,7 +106,7 @@ }, "camshaft": { "version": "0.46.1", - "from": "camshaft@0.46.1", + "from": "https://registry.npmjs.org/camshaft/-/camshaft-0.46.1.tgz", "resolved": "https://registry.npmjs.org/camshaft/-/camshaft-0.46.1.tgz", "dependencies": { "async": { @@ -565,9 +565,16 @@ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" }, "tough-cookie": { - "version": "2.3.1", + "version": "2.3.2", "from": "tough-cookie@>=2.3.0 <2.4.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.1.tgz" + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "dependencies": { + "punycode": { + "version": "1.4.1", + "from": "punycode@>=1.4.1 <2.0.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + } + } }, "tunnel-agent": { "version": "0.4.3", @@ -1382,9 +1389,9 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz" }, "windshaft": { - "version": "2.5.0", - "from": "windshaft@2.5.0", - "resolved": "https://registry.npmjs.org/windshaft/-/windshaft-2.5.0.tgz", + "version": "2.6.1", + "from": "windshaft@2.6.1", + "resolved": "https://registry.npmjs.org/windshaft/-/windshaft-2.6.1.tgz", "dependencies": { "abaculus": { "version": "1.1.0-cdb7", @@ -3016,9 +3023,9 @@ } }, "sqlite3": { - "version": "3.1.7", + "version": "3.1.8", "from": "sqlite3@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.7.tgz", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.8.tgz", "dependencies": { "nan": { "version": "2.4.0", @@ -3027,11 +3034,11 @@ }, "node-pre-gyp": { "version": "0.6.31", - "from": "node-pre-gyp@>=0.6.31 <0.7.0", + "from": "node-pre-gyp@~0.6.31", "dependencies": { "mkdirp": { "version": "0.5.1", - "from": "mkdirp@>=0.5.1 <0.6.0", + "from": "mkdirp@~0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "dependencies": { "minimist": { @@ -3043,69 +3050,69 @@ }, "nopt": { "version": "3.0.6", - "from": "nopt@>=3.0.6 <3.1.0", + "from": "nopt@~3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "dependencies": { "abbrev": { "version": "1.0.9", - "from": "abbrev@>=1.0.0 <2.0.0", + "from": "abbrev@1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" } } }, "npmlog": { "version": "4.0.0", - "from": "npmlog@>=4.0.0 <5.0.0", + "from": "npmlog@^4.0.0", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.0.0.tgz", "dependencies": { "are-we-there-yet": { "version": "1.1.2", - "from": "are-we-there-yet@>=1.1.2 <1.2.0", + "from": "are-we-there-yet@~1.1.2", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz", "dependencies": { "delegates": { "version": "1.0.0", - "from": "delegates@>=1.0.0 <2.0.0", + "from": "delegates@^1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" }, "readable-stream": { "version": "2.1.5", - "from": "readable-stream@>=2.0.0 <3.0.0||>=1.1.13 <2.0.0", + "from": "readable-stream@^2.0.0 || ^1.1.13", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", "dependencies": { "buffer-shims": { "version": "1.0.0", - "from": "buffer-shims@>=1.0.0 <2.0.0", + "from": "buffer-shims@^1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz" }, "core-util-is": { "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", + "from": "core-util-is@~1.0.0", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.1 <2.1.0", + "from": "inherits@~2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" }, "isarray": { "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", + "from": "isarray@~1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" }, "process-nextick-args": { "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", + "from": "process-nextick-args@~1.0.6", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" }, "string_decoder": { "version": "0.10.31", - "from": "string_decoder@>=0.10.0 <0.11.0", + "from": "string_decoder@~0.10.x", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", + "from": "util-deprecate@~1.0.1", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" } } @@ -3114,64 +3121,64 @@ }, "console-control-strings": { "version": "1.1.0", - "from": "console-control-strings@>=1.1.0 <1.2.0", + "from": "console-control-strings@~1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" }, "gauge": { "version": "2.6.0", - "from": "gauge@>=2.6.0 <2.7.0", + "from": "gauge@~2.6.0", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.6.0.tgz", "dependencies": { "aproba": { "version": "1.0.4", - "from": "aproba@>=1.0.3 <2.0.0", + "from": "aproba@^1.0.3", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.0.4.tgz" }, "has-color": { "version": "0.1.7", - "from": "has-color@>=0.1.7 <0.2.0", + "from": "has-color@^0.1.7", "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz" }, "has-unicode": { "version": "2.0.1", - "from": "has-unicode@>=2.0.0 <3.0.0", + "from": "has-unicode@^2.0.0", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" }, "object-assign": { "version": "4.1.0", - "from": "object-assign@>=4.1.0 <5.0.0", + "from": "object-assign@^4.1.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" }, "signal-exit": { "version": "3.0.1", - "from": "signal-exit@>=3.0.0 <4.0.0", + "from": "signal-exit@^3.0.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.1.tgz" }, "string-width": { "version": "1.0.2", - "from": "string-width@>=1.0.1 <2.0.0", + "from": "string-width@^1.0.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "dependencies": { "code-point-at": { "version": "1.0.1", - "from": "code-point-at@>=1.0.0 <2.0.0", + "from": "code-point-at@^1.0.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.0.1.tgz", "dependencies": { "number-is-nan": { "version": "1.0.1", - "from": "number-is-nan@>=1.0.0 <2.0.0", + "from": "number-is-nan@^1.0.0", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" } } }, "is-fullwidth-code-point": { "version": "1.0.0", - "from": "is-fullwidth-code-point@>=1.0.0 <2.0.0", + "from": "is-fullwidth-code-point@^1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "dependencies": { "number-is-nan": { "version": "1.0.1", - "from": "number-is-nan@>=1.0.0 <2.0.0", + "from": "number-is-nan@^1.0.0", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" } } @@ -3180,260 +3187,216 @@ }, "strip-ansi": { "version": "3.0.1", - "from": "strip-ansi@>=3.0.1 <4.0.0", + "from": "strip-ansi@^3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "dependencies": { "ansi-regex": { "version": "2.0.0", - "from": "ansi-regex@>=2.0.0 <3.0.0", + "from": "ansi-regex@^2.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" } } }, "wide-align": { "version": "1.1.0", - "from": "wide-align@>=1.1.0 <2.0.0", + "from": "wide-align@^1.1.0", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz" } } }, "set-blocking": { "version": "2.0.0", - "from": "set-blocking@>=2.0.0 <2.1.0", + "from": "set-blocking@~2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" } } }, "rc": { "version": "1.1.6", - "from": "rc@>=1.1.6 <1.2.0", + "from": "rc@~1.1.6", "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz", "dependencies": { "deep-extend": { "version": "0.4.1", - "from": "deep-extend@>=0.4.0 <0.5.0", + "from": "deep-extend@~0.4.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz" }, "ini": { "version": "1.3.4", - "from": "ini@>=1.3.0 <1.4.0", + "from": "ini@~1.3.0", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz" }, "minimist": { "version": "1.2.0", - "from": "minimist@>=1.2.0 <2.0.0", + "from": "minimist@^1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" }, "strip-json-comments": { "version": "1.0.4", - "from": "strip-json-comments@>=1.0.4 <1.1.0", + "from": "strip-json-comments@~1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz" } } }, "request": { - "version": "2.75.0", - "from": "request@>=2.75.0 <3.0.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", + "version": "2.76.0", + "from": "request@^2.75.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.76.0.tgz", "dependencies": { "aws-sign2": { "version": "0.6.0", - "from": "aws-sign2@>=0.6.0 <0.7.0", + "from": "aws-sign2@~0.6.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz" }, "aws4": { "version": "1.5.0", - "from": "aws4@>=1.2.1 <2.0.0", + "from": "aws4@^1.2.1", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz" }, - "bl": { - "version": "1.1.2", - "from": "bl@>=1.1.2 <1.2.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "from": "readable-stream@>=2.0.5 <2.1.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - }, - "inherits": { - "version": "2.0.3", - "from": "inherits@>=2.0.1 <2.1.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - }, - "isarray": { - "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - }, - "process-nextick-args": { - "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "from": "string_decoder@>=0.10.0 <0.11.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - }, - "util-deprecate": { - "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - } - } - } - } - }, "caseless": { "version": "0.11.0", - "from": "caseless@>=0.11.0 <0.12.0", + "from": "caseless@~0.11.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz" }, "combined-stream": { "version": "1.0.5", - "from": "combined-stream@>=1.0.5 <1.1.0", + "from": "combined-stream@~1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "dependencies": { "delayed-stream": { "version": "1.0.0", - "from": "delayed-stream@>=1.0.0 <1.1.0", + "from": "delayed-stream@~1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" } } }, "extend": { "version": "3.0.0", - "from": "extend@>=3.0.0 <3.1.0", + "from": "extend@~3.0.0", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" }, "forever-agent": { "version": "0.6.1", - "from": "forever-agent@>=0.6.1 <0.7.0", + "from": "forever-agent@~0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" }, "form-data": { - "version": "2.0.0", - "from": "form-data@>=2.0.0 <2.1.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", + "version": "2.1.1", + "from": "form-data@~2.1.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.1.tgz", "dependencies": { "asynckit": { "version": "0.4.0", - "from": "asynckit@>=0.4.0 <0.5.0", + "from": "asynckit@^0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" } } }, "har-validator": { "version": "2.0.6", - "from": "har-validator@>=2.0.6 <2.1.0", + "from": "har-validator@~2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "dependencies": { "chalk": { "version": "1.1.3", - "from": "chalk@>=1.1.1 <2.0.0", + "from": "chalk@^1.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "dependencies": { "ansi-styles": { "version": "2.2.1", - "from": "ansi-styles@>=2.2.1 <3.0.0", + "from": "ansi-styles@^2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" }, "escape-string-regexp": { "version": "1.0.5", - "from": "escape-string-regexp@>=1.0.2 <2.0.0", + "from": "escape-string-regexp@^1.0.2", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" }, "has-ansi": { "version": "2.0.0", - "from": "has-ansi@>=2.0.0 <3.0.0", + "from": "has-ansi@^2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "dependencies": { "ansi-regex": { "version": "2.0.0", - "from": "ansi-regex@>=2.0.0 <3.0.0", + "from": "ansi-regex@^2.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" } } }, "strip-ansi": { "version": "3.0.1", - "from": "strip-ansi@>=3.0.0 <4.0.0", + "from": "strip-ansi@^3.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "dependencies": { "ansi-regex": { "version": "2.0.0", - "from": "ansi-regex@>=2.0.0 <3.0.0", + "from": "ansi-regex@^2.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" } } }, "supports-color": { "version": "2.0.0", - "from": "supports-color@>=2.0.0 <3.0.0", + "from": "supports-color@^2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" } } }, "commander": { "version": "2.9.0", - "from": "commander@>=2.9.0 <3.0.0", + "from": "commander@^2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "dependencies": { "graceful-readlink": { "version": "1.0.1", - "from": "graceful-readlink@>=1.0.0", + "from": "graceful-readlink@>= 1.0.0", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" } } }, "is-my-json-valid": { "version": "2.15.0", - "from": "is-my-json-valid@>=2.12.4 <3.0.0", + "from": "is-my-json-valid@^2.12.4", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", "dependencies": { "generate-function": { "version": "2.0.0", - "from": "generate-function@>=2.0.0 <3.0.0", + "from": "generate-function@^2.0.0", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" }, "generate-object-property": { "version": "1.2.0", - "from": "generate-object-property@>=1.1.0 <2.0.0", + "from": "generate-object-property@^1.1.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "dependencies": { "is-property": { "version": "1.0.2", - "from": "is-property@>=1.0.0 <2.0.0", + "from": "is-property@^1.0.0", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" } } }, "jsonpointer": { "version": "4.0.0", - "from": "jsonpointer@>=4.0.0 <5.0.0", + "from": "jsonpointer@^4.0.0", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz" }, "xtend": { "version": "4.0.1", - "from": "xtend@>=4.0.0 <5.0.0", + "from": "xtend@^4.0.0", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" } } }, "pinkie-promise": { "version": "2.0.1", - "from": "pinkie-promise@>=2.0.0 <3.0.0", + "from": "pinkie-promise@^2.0.0", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "dependencies": { "pinkie": { "version": "2.0.4", - "from": "pinkie@>=2.0.0 <3.0.0", + "from": "pinkie@^2.0.0", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" } } @@ -3442,44 +3405,44 @@ }, "hawk": { "version": "3.1.3", - "from": "hawk@>=3.1.3 <3.2.0", + "from": "hawk@~3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "dependencies": { "hoek": { "version": "2.16.3", - "from": "hoek@>=2.0.0 <3.0.0", + "from": "hoek@2.x.x", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" }, "boom": { "version": "2.10.1", - "from": "boom@>=2.0.0 <3.0.0", + "from": "boom@2.x.x", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" }, "cryptiles": { "version": "2.0.5", - "from": "cryptiles@>=2.0.0 <3.0.0", + "from": "cryptiles@2.x.x", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" }, "sntp": { "version": "1.0.9", - "from": "sntp@>=1.0.0 <2.0.0", + "from": "sntp@1.x.x", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" } } }, "http-signature": { "version": "1.1.1", - "from": "http-signature@>=1.1.0 <1.2.0", + "from": "http-signature@~1.1.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "dependencies": { "assert-plus": { "version": "0.2.0", - "from": "assert-plus@>=0.2.0 <0.3.0", + "from": "assert-plus@^0.2.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz" }, "jsprim": { "version": "1.3.1", - "from": "jsprim@>=1.2.2 <2.0.0", + "from": "jsprim@^1.2.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", "dependencies": { "extsprintf": { @@ -3501,52 +3464,52 @@ }, "sshpk": { "version": "1.10.1", - "from": "sshpk@>=1.7.0 <2.0.0", + "from": "sshpk@^1.7.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", "dependencies": { "asn1": { "version": "0.2.3", - "from": "asn1@>=0.2.3 <0.3.0", + "from": "asn1@~0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz" }, "assert-plus": { "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", + "from": "assert-plus@^1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" }, "dashdash": { "version": "1.14.0", - "from": "dashdash@>=1.12.0 <2.0.0", + "from": "dashdash@^1.12.0", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz" }, "getpass": { "version": "0.1.6", - "from": "getpass@>=0.1.1 <0.2.0", + "from": "getpass@^0.1.1", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz" }, "jsbn": { "version": "0.1.0", - "from": "jsbn@>=0.1.0 <0.2.0", + "from": "jsbn@~0.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" }, "tweetnacl": { "version": "0.14.3", - "from": "tweetnacl@>=0.14.0 <0.15.0", + "from": "tweetnacl@~0.14.0", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.3.tgz" }, "jodid25519": { "version": "1.0.2", - "from": "jodid25519@>=1.0.0 <2.0.0", + "from": "jodid25519@^1.0.0", "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz" }, "ecc-jsbn": { "version": "0.1.1", - "from": "ecc-jsbn@>=0.1.1 <0.2.0", + "from": "ecc-jsbn@~0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz" }, "bcrypt-pbkdf": { "version": "1.0.0", - "from": "bcrypt-pbkdf@>=1.0.0 <2.0.0", + "from": "bcrypt-pbkdf@^1.0.0", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz" } } @@ -3555,108 +3518,115 @@ }, "is-typedarray": { "version": "1.0.0", - "from": "is-typedarray@>=1.0.0 <1.1.0", + "from": "is-typedarray@~1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" }, "isstream": { "version": "0.1.2", - "from": "isstream@>=0.1.2 <0.2.0", + "from": "isstream@~0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" }, "json-stringify-safe": { "version": "5.0.1", - "from": "json-stringify-safe@>=5.0.1 <5.1.0", + "from": "json-stringify-safe@~5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" }, "mime-types": { "version": "2.1.12", - "from": "mime-types@>=2.1.7 <2.2.0", + "from": "mime-types@~2.1.7", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.12.tgz", "dependencies": { "mime-db": { "version": "1.24.0", - "from": "mime-db@>=1.24.0 <1.25.0", + "from": "mime-db@~1.24.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.24.0.tgz" } } }, "node-uuid": { "version": "1.4.7", - "from": "node-uuid@>=1.4.7 <1.5.0", + "from": "node-uuid@~1.4.7", "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz" }, "oauth-sign": { "version": "0.8.2", - "from": "oauth-sign@>=0.8.1 <0.9.0", + "from": "oauth-sign@~0.8.1", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz" }, "qs": { - "version": "6.2.1", - "from": "qs@>=6.2.0 <6.3.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz" + "version": "6.3.0", + "from": "qs@~6.3.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.0.tgz" }, "stringstream": { "version": "0.0.5", - "from": "stringstream@>=0.0.4 <0.1.0", + "from": "stringstream@~0.0.4", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" }, "tough-cookie": { - "version": "2.3.1", - "from": "tough-cookie@>=2.3.0 <2.4.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.1.tgz" + "version": "2.3.2", + "from": "tough-cookie@~2.3.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "dependencies": { + "punycode": { + "version": "1.4.1", + "from": "punycode@^1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + } + } }, "tunnel-agent": { "version": "0.4.3", - "from": "tunnel-agent@>=0.4.1 <0.5.0", + "from": "tunnel-agent@~0.4.1", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" } } }, "rimraf": { "version": "2.5.4", - "from": "rimraf@>=2.5.4 <2.6.0", + "from": "rimraf@~2.5.4", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", "dependencies": { "glob": { "version": "7.1.1", - "from": "glob@>=7.0.5 <8.0.0", + "from": "glob@^7.0.5", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", "dependencies": { "fs.realpath": { "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.0.0", + "from": "fs.realpath@^1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" }, "inflight": { "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", + "from": "inflight@^1.0.4", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", + "from": "wrappy@1", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" } } }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", + "from": "inherits@2", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" }, "minimatch": { "version": "3.0.3", - "from": "minimatch@>=3.0.2 <4.0.0", + "from": "minimatch@^3.0.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", "dependencies": { "brace-expansion": { "version": "1.1.6", - "from": "brace-expansion@>=1.0.0 <2.0.0", + "from": "brace-expansion@^1.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", "dependencies": { "balanced-match": { "version": "0.4.2", - "from": "balanced-match@>=0.4.1 <0.5.0", + "from": "balanced-match@^0.4.1", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz" }, "concat-map": { @@ -3670,19 +3640,19 @@ }, "once": { "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", + "from": "once@^1.3.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", + "from": "wrappy@1", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" } } }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", + "from": "path-is-absolute@^1.0.0", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" } } @@ -3691,12 +3661,12 @@ }, "semver": { "version": "5.3.0", - "from": "semver@>=5.3.0 <5.4.0", + "from": "semver@~5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz" }, "tar": { "version": "2.2.1", - "from": "tar@>=2.2.1 <2.3.0", + "from": "tar@~2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "dependencies": { "block-stream": { @@ -3706,31 +3676,31 @@ }, "fstream": { "version": "1.0.10", - "from": "fstream@>=1.0.2 <2.0.0", + "from": "fstream@^1.0.2", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz", "dependencies": { "graceful-fs": { "version": "4.1.9", - "from": "graceful-fs@>=4.1.2 <5.0.0", + "from": "graceful-fs@^4.1.2", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.9.tgz" } } }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", + "from": "inherits@~2.0.0", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" } } }, "tar-pack": { "version": "3.3.0", - "from": "tar-pack@>=3.3.0 <3.4.0", + "from": "tar-pack@~3.3.0", "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.3.0.tgz", "dependencies": { "debug": { "version": "2.2.0", - "from": "debug@>=2.2.0 <2.3.0", + "from": "debug@~2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "dependencies": { "ms": { @@ -3742,44 +3712,44 @@ }, "fstream": { "version": "1.0.10", - "from": "fstream@>=1.0.10 <1.1.0", + "from": "fstream@~1.0.10", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz", "dependencies": { "graceful-fs": { "version": "4.1.9", - "from": "graceful-fs@>=4.1.2 <5.0.0", + "from": "graceful-fs@^4.1.2", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.9.tgz" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <2.1.0", + "from": "inherits@~2.0.0", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" } } }, "fstream-ignore": { "version": "1.0.5", - "from": "fstream-ignore@>=1.0.5 <1.1.0", + "from": "fstream-ignore@~1.0.5", "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", "dependencies": { "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", + "from": "inherits@2", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" }, "minimatch": { "version": "3.0.3", - "from": "minimatch@>=3.0.0 <4.0.0", + "from": "minimatch@^3.0.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", "dependencies": { "brace-expansion": { "version": "1.1.6", - "from": "brace-expansion@>=1.0.0 <2.0.0", + "from": "brace-expansion@^1.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", "dependencies": { "balanced-match": { "version": "0.4.2", - "from": "balanced-match@>=0.4.1 <0.5.0", + "from": "balanced-match@^0.4.1", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz" }, "concat-map": { @@ -3795,61 +3765,61 @@ }, "once": { "version": "1.3.3", - "from": "once@>=1.3.3 <1.4.0", + "from": "once@~1.3.3", "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", + "from": "wrappy@1", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" } } }, "readable-stream": { "version": "2.1.5", - "from": "readable-stream@>=2.1.4 <2.2.0", + "from": "readable-stream@~2.1.4", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", "dependencies": { "buffer-shims": { "version": "1.0.0", - "from": "buffer-shims@>=1.0.0 <2.0.0", + "from": "buffer-shims@^1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz" }, "core-util-is": { "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", + "from": "core-util-is@~1.0.0", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.1 <2.1.0", + "from": "inherits@~2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" }, "isarray": { "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", + "from": "isarray@~1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" }, "process-nextick-args": { "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", + "from": "process-nextick-args@~1.0.6", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" }, "string_decoder": { "version": "0.10.31", - "from": "string_decoder@>=0.10.0 <0.11.0", + "from": "string_decoder@~0.10.x", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", + "from": "util-deprecate@~1.0.1", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" } } }, "uid-number": { "version": "0.0.6", - "from": "uid-number@>=0.0.6 <0.1.0", + "from": "uid-number@~0.0.6", "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz" } } diff --git a/package.json b/package.json index fb23fd16..fa370436 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "windshaft-cartodb", - "version": "2.80.3", + "version": "2.81.0", "description": "A map tile server for CartoDB", "keywords": [ "cartodb" @@ -39,7 +39,7 @@ "step-profiler": "~0.3.0", "turbo-carto": "0.18.0", "underscore": "~1.6.0", - "windshaft": "2.5.0", + "windshaft": "2.6.1", "yargs": "~5.0.0" }, "devDependencies": { diff --git a/test/acceptance/errors-with-context.js b/test/acceptance/errors-with-context.js new file mode 100644 index 00000000..e6e88f8b --- /dev/null +++ b/test/acceptance/errors-with-context.js @@ -0,0 +1,68 @@ +var assert = require('../support/assert'); +var CartodbWindshaft = require(__dirname + '/../../lib/cartodb/server'); +var serverOptions = require(__dirname + '/../../lib/cartodb/server_options'); +var server = new CartodbWindshaft(serverOptions); + +describe('error with context', function () { + var layerOK = { + options: { + sql: 'select cartodb_id, ST_Translate(the_geom_webmercator, 5e6, 0) as the_geom_webmercator ' + + 'from test_table', + cartocss: '#layer { marker-fill:red; marker-width:32; marker-allow-overlap:true; }', + cartocss_version: '2.0.1', + interactivity: 'cartodb_id' + } + }; + var layerKO = { + options: { + sql: 'select cartodb_id from test_table offset 3', // it doesn't return the_geom_webmercator so it must fail + cartocss: '#layer { marker-fill:blue; marker-allow-overlap:true; }', + cartocss_version: '2.0.2', + interactivity: 'cartodb_id' + } + }; + + var DB_ERROR_MESSAGE = 'Postgis Plugin: ERROR: column "the_geom_webmercator" does not exist'; + var scenarios = [{ + description: 'layergroup with 2 layers, second one has query error', + layergroup: { + version: '1.0.0', + layers: [layerOK, layerKO] + }, + expectedFailingLayer: { id: 'layer1', index: 1, type: 'mapnik' } + }, { + description: 'layergroup with 2 layers, first one has query error', + layergroup: { + version: '1.0.0', + layers: [layerKO, layerOK] + }, + expectedFailingLayer: { id: 'layer0', index: 0, type: 'mapnik' } + }]; + + scenarios.forEach(function (scenario) { + it(scenario.description, function (done) { + assert.response(server, { + url: '/api/v1/map', + method: 'POST', + headers: { + host: 'localhost', + 'Content-Type': 'application/json' + }, + data: JSON.stringify(scenario.layergroup) + }, { + status: 400 + }, function (res) { + var parsedBody = JSON.parse(res.body); + + assert.ok(Array.isArray(parsedBody.errors_with_context)); + + var err = parsedBody.errors_with_context[0]; + assert.equal(err.type, 'layer'); + assert.equal(err.subtype, 'query'); + assert.ok(err.message.indexOf(DB_ERROR_MESSAGE) >= 0); + assert.deepEqual(err.layer, scenario.expectedFailingLayer); + done(); + }); + }); + }); +});