Yurik has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/294225

Change subject: Update tilerator to 8c0eb61
......................................................................

Update tilerator to 8c0eb61

List of changes:
8c0eb61 Process all files since last call
xxxxxxx Update node module dependencies

Change-Id: If66f60aa527b959437044c04e64c53c135f62afc
---
M 
node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inflight/package.json
M 
node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json
M 
node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/once/package.json
M 
node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/path-is-absolute/package.json
M node_modules/debug/node_modules/ms/package.json
M node_modules/express/node_modules/send/node_modules/ms/package.json
M node_modules/kartotherian-autogen/package.json
M node_modules/kartotherian-cassandra/package.json
M node_modules/kartotherian-core/lib/core.js
M node_modules/kartotherian-core/node_modules/xmldoc/package.json
M node_modules/kartotherian-core/package.json
M node_modules/kartotherian-demultiplexer/package.json
M node_modules/kartotherian-layermixer/package.json
M node_modules/kartotherian-overzoom/package.json
M 
node_modules/kartotherian-postgres/node_modules/pg-query-stream/node_modules/readable-stream/package.json
M node_modules/kartotherian-postgres/package.json
M node_modules/kartotherian-server/package.json
M node_modules/kartotherian-substantial/package.json
M node_modules/kue-ui/package.json
M 
node_modules/kue/node_modules/stylus/node_modules/source-map/node_modules/amdefine/package.json
M node_modules/kue/node_modules/stylus/node_modules/source-map/package.json
M 
node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/code-point-at/node_modules/number-is-nan/package.json
M 
node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/is-fullwidth-code-point/node_modules/number-is-nan/package.json
M 
node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rc/node_modules/minimist/package.json
M 
node_modules/mapnik/node_modules/node-pre-gyp/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/package.json
M 
node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
M node_modules/osm-bright-source/node_modules/postgis-vt-util/package.json
M node_modules/osm-bright-source/package.json
M node_modules/osm-bright-style/node_modules/osm-bright-fonts/package.json
M node_modules/osm-bright-style/package.json
M 
node_modules/service-runner/node_modules/limitation/node_modules/kad/package.json
M 
node_modules/service-runner/node_modules/yargs/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex/package.json
M 
node_modules/tilelive-vector/node_modules/s3urls/node_modules/minimist/package.json
M node_modules/tilerator-jobprocessor/index.js
M node_modules/tilerator-jobprocessor/lib/fileParser.js
A node_modules/tilerator-jobprocessor/lib/processAll.js
M node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/lib/core.js
M 
node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/node_modules/xmldoc/package.json
M 
node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/package.json
M node_modules/tilerator-jobprocessor/node_modules/tmp/package.json
M node_modules/tilerator-jobprocessor/package.json
M node_modules/type-is/node_modules/media-typer/package.json
M src
43 files changed, 135 insertions(+), 69 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/maps/tilerator/deploy 
refs/changes/25/294225/1

diff --git 
a/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inflight/package.json
 
b/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inflight/package.json
index 4010d03..077c122 100644
--- 
a/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inflight/package.json
+++ 
b/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/inflight/package.json
@@ -67,5 +67,6 @@
     "tmp": "tmp/inflight-1.0.5.tgz_1463529611443_0.00041943578980863094"
   },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz";
+  "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json
 
b/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json
index ae20208..bb58dde 100644
--- 
a/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json
+++ 
b/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json
@@ -55,5 +55,6 @@
     }
   ],
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz";
+  "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/once/package.json
 
b/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/once/package.json
index 980e6cc..e4ee912 100644
--- 
a/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/once/package.json
+++ 
b/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/once/package.json
@@ -58,5 +58,6 @@
       "email": "i...@izs.me"
     }
   ],
-  "_resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz";
+  "_resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/path-is-absolute/package.json
 
b/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/path-is-absolute/package.json
index a14a849..8f41ade 100644
--- 
a/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/path-is-absolute/package.json
+++ 
b/node_modules/bunyan/node_modules/mv/node_modules/rimraf/node_modules/glob/node_modules/path-is-absolute/package.json
@@ -5,7 +5,7 @@
   "license": "MIT",
   "repository": {
     "type": "git",
-    "url": "https://github.com/sindresorhus/path-is-absolute";
+    "url": "git+https://github.com/sindresorhus/path-is-absolute.git";
   },
   "author": {
     "name": "Sindre Sorhus",
@@ -65,5 +65,6 @@
     "tarball": 
"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz";
   },
   "directories": {},
-  "_resolved": 
"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz";
+  "_resolved": 
"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git a/node_modules/debug/node_modules/ms/package.json 
b/node_modules/debug/node_modules/ms/package.json
index e36489e..29c1ba5 100644
--- a/node_modules/debug/node_modules/ms/package.json
+++ b/node_modules/debug/node_modules/ms/package.json
@@ -43,6 +43,5 @@
     "tarball": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz";
   },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz";,
-  "readme": "ERROR: No README data found!"
+  "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz";
 }
diff --git 
a/node_modules/express/node_modules/send/node_modules/ms/package.json 
b/node_modules/express/node_modules/send/node_modules/ms/package.json
index 29c1ba5..e36489e 100644
--- a/node_modules/express/node_modules/send/node_modules/ms/package.json
+++ b/node_modules/express/node_modules/send/node_modules/ms/package.json
@@ -43,5 +43,6 @@
     "tarball": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz";
   },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz";
+  "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git a/node_modules/kartotherian-autogen/package.json 
b/node_modules/kartotherian-autogen/package.json
index fc6a313..0b5f9a6 100644
--- a/node_modules/kartotherian-autogen/package.json
+++ b/node_modules/kartotherian-autogen/package.json
@@ -31,7 +31,7 @@
   "readmeFilename": "README.md",
   "homepage": "https://github.com/kartotherian/kartotherian-autogen#readme";,
   "_id": "kartotherian-autogen@0.0.4",
-  "_shasum": "2dc4da98a3bc869f2ef2348db37f5bc8453e0a25",
+  "_shasum": "21c35747ea3c7ead8f14de52b0152d9d52de8739",
   "_from": "git+https://github.com/kartotherian/kartotherian-autogen.git";,
   "_resolved": 
"git+https://github.com/kartotherian/kartotherian-autogen.git#e469c42da1a7c9762a775b97d7234bcc653fff35";
 }
diff --git a/node_modules/kartotherian-cassandra/package.json 
b/node_modules/kartotherian-cassandra/package.json
index ebb317c..63c5aa0 100644
--- a/node_modules/kartotherian-cassandra/package.json
+++ b/node_modules/kartotherian-cassandra/package.json
@@ -34,7 +34,7 @@
   "readmeFilename": "README.md",
   "homepage": "https://github.com/kartotherian/kartotherian-cassandra#readme";,
   "_id": "kartotherian-cassandra@0.0.5",
-  "_shasum": "2ab014e86a4182c8dca98b387d5aa238833e5101",
+  "_shasum": "132091b63229aeaf35e5a04bbd22db7d88148589",
   "_from": "git+https://github.com/kartotherian/kartotherian-cassandra.git";,
   "_resolved": 
"git+https://github.com/kartotherian/kartotherian-cassandra.git#015536b95c91e592f0e34c588caa551614b6f720";
 }
diff --git a/node_modules/kartotherian-core/lib/core.js 
b/node_modules/kartotherian-core/lib/core.js
index ac3987a..8947551 100644
--- a/node_modules/kartotherian-core/lib/core.js
+++ b/node_modules/kartotherian-core/lib/core.js
@@ -551,7 +551,7 @@
     if (!source) {
         throw new Err('Unknown source').metrics('err.req.source');
     }
-    if (!source.public) {
+    if (!source.public && !core.getConfiguration().allSourcesPublic) {
         throw new Err('Source is not public').metrics('err.req.source');
     }
     return source;
@@ -564,9 +564,10 @@
  * @param dataHeaders
  */
 core.setResponseHeaders = function setResponseHeaders(res, source, 
dataHeaders) {
-    if (_app.conf.defaultHeaders) res.set(_app.conf.defaultHeaders);
+    var conf = core.getConfiguration();
+    if (conf.defaultHeaders) res.set(conf.defaultHeaders);
     if (source && source.defaultHeaders) res.set(source.defaultHeaders);
     if (dataHeaders) res.set(dataHeaders);
-    if (_app.conf.overrideHeaders) res.set(_app.conf.overrideHeaders);
+    if (conf.overrideHeaders) res.set(conf.overrideHeaders);
     if (source && source.headers) res.set(source.headers);
 };
diff --git a/node_modules/kartotherian-core/node_modules/xmldoc/package.json 
b/node_modules/kartotherian-core/node_modules/xmldoc/package.json
index c206eb7..fe4226d 100644
--- a/node_modules/kartotherian-core/node_modules/xmldoc/package.json
+++ b/node_modules/kartotherian-core/node_modules/xmldoc/package.json
@@ -33,7 +33,7 @@
   },
   "homepage": "https://github.com/nfarina/xmldoc#readme";,
   "_id": "xmldoc@0.3.1",
-  "_shasum": "ca99cbc212fac4f0aa0b5e5fa35b738c4eae00cc",
+  "_shasum": "0c6d07523ceb0ded6755bef194d932763328045f",
   "_from": "git+https://github.com/nyurik/xmldoc.git";,
   "_resolved": 
"git+https://github.com/nyurik/xmldoc.git#3107ca5fe10227539299fb1bb82992d5b824bc37";
 }
diff --git a/node_modules/kartotherian-core/package.json 
b/node_modules/kartotherian-core/package.json
index c3fe3a2..c53223e 100644
--- a/node_modules/kartotherian-core/package.json
+++ b/node_modules/kartotherian-core/package.json
@@ -1,6 +1,6 @@
 {
   "name": "kartotherian-core",
-  "version": "0.0.7",
+  "version": "0.0.8",
   "description": "The core components of the Kartotherian maps tile service",
   "main": "index.js",
   "scripts": {
@@ -24,12 +24,12 @@
     "underscore": "^1.8.3",
     "xmldoc": "git+https://github.com/nyurik/xmldoc.git";
   },
-  "gitHead": "51266ac0a0289f9f1fa3b5966d2f47d28857933a",
-  "readme": "# kartotherian-core\n\nThe core components of the Kartotherian 
maps tile service\n\n## Sources\nSources is a way to set up data processing 
pipelines for Kartotherian and Tilerator.\nSources could be either stored in a 
set of standalone files, or be embedded in the\nmain configuration file, or a 
mix of both. The sources value in the config file\ncould be a string (file), an 
object defining the source, or an array of strings and objects.\n\n`uri` is the 
only mandatory field, and it specifies how 
[tilelive.js](https://github.com/mapbox/tilelive.js)\nwill locate and 
initialize the new source. The protocol determines which tile provider will be 
used.\n\nSince sometimes not everything can be added as query parameters to the 
Uri, there is a set of additional keys to help.\nValues can either be hardcoded 
as strings/numbers/booleans, or can be calculated on the fly.\n\nA simple 
source configuration to set up a tile storage as files in the ./vectors 
dir:\n```\nfilestore:\n    uri: file://./vectors\n```\nThe path can also be set 
via a parameter:\n```\nfilestore:\n    uri: file://\n    pathname: 
./vectors\n```\nThe value does not have to be given in the source, but instead 
could be dynamically generated.\nFor example, the `var` generator pulls the 
value from the variable store.\nThe variables are defined in a separate 
file(s), similar to sources.\n```\nfilestore:\n    uri: file://\n    pathname: 
{var: tilepath}  # Uses a variable named tilepath\n```\n\nMore parameters can 
be set using `params` - a set of additional values to be set in 
URI:\n```\noz:\n  # \"overzoom:\" is a tile source that will attempt to get a 
tile from another source,\n  # and if tile is missing, attempt to get a portion 
of the lower-zoom tile.\n  uri: overzoom://\n  # Specify the tile source - this 
adds a properly escaped query parameter\n  #   ?source=sourceref:///?ref=gen\n  
param:\n    source: {ref: gen}\n```\n\n## Value substitutions\n\nIn general, 
these value substitutions are available:\n* `{var:varname}` - the value becomes 
the value of the variable `varname` from the variables file / variables conf 
section of the main config file. This might be useful if you want to make all 
the settings public except for the passwords that are stored in a secure 
location.\n* `{ref:sourceId}` - the value becomes a reference to another 
source. Some sources function as filters/converters, pulling data internally 
from other sources and converting the result on the fly. For example, the 
[overzoom](https://github.com/kartotherian/kartotherian-overzoom) source pulls 
data from another source, and if it's not available, tries to find a lower-zoom 
tile above the given one, and extract a portion of it. Internally, it uses a 
forwarding sourceref: source.\n* `{npmloader: npm-module-name}` or `{npmloader: 
['npm-module-name', 'arg1', 'arg2', ...]}` - if npm module supports loading 
customization, it should be loaded via the npmloader. Npmloader is only 
available inside the source's `xml` key.\n* `{npmpath: ['npm-module-name', 
'subdir', 'subdir', 'filename']}` - some files may be located inside the NPM 
modules added to the Kartotherian project, i.e. 
[osm-bright-source](https://github.com/kartotherian/osm-bright.tm2source). To 
reference a file inside npm, set npm's value to an array, with the first value 
being the name of the npm module (resolves to the root of the npm module), and 
all subsequent strings being subdirs and lastly - the name of the file. Subdirs 
may be omitted. `npmpath: [\"osm-bright-source\", \"data.xml\"]` would resolve 
to a rooted path `/.../node_modules/osm-bright-source/data.xml`\n\n## XML-based 
sources\nThe `xml` parameter is used to load and alter XML for some sources 
like\n[tilelive-bridge](https://github.com/mapbox/tilelive-bridge) 
(SQL→VectorTile or TIFF→RasterTile) 
and\n[tilelive-vector](https://github.com/mapbox/tilelive-vector) (Style 
VectorTile → PNG).\nThe `xml` field must evaluate to the xml file 
path.\n\n```\ngen:                # The name of the source (could be referenced 
later)\n  uri: bridge://    # Required - the URI used to construct the source\n 
 xml:              # Init source with this xml instead of the URI's other 
parameters\n    # Set xml to the location of the 'data.xml', which is located 
inside the osm-bright-source npm\n    npmpath: [\"osm-bright-source\", 
\"data.xml\"]\n  xmlSetDataSource: # Before loading, update the datasource 
section of the standard mapnik config file\n    if:             # Only update 
datasources that match all these values (logical AND)\n      dbname: gis   # 
Instead of 'gis', you can use {npmpath:...}, {ref:..}, and {var:...}\n      
host: ''\n      type: postgis\n    set:            # Replace these keys with 
the new values\n      host: localhost\n      user: {var: osmdb-user}  # Instead 
of hardcoding, use the value from the variables file or conf section\n      
password: {var: osmdb-pswd}\n```\n\n* `xmlSetAttrs` - for xml, overrides the 
attributes of the root element with the new ones. For example, you may change 
the font directory of the `<Map>` element:\n```\ns2:\n  uri: vector://\n  
xml:\n    npmloader: osm-bright-style    # stylesheet xml is in npm\n  
xmlSetAttrs:\n    # Note that this is not needed for osm-bright-style because 
that module does this internally\n    font-directory: {npmpath: 
[\"osm-bright-fonts\", \"fonts/\"]}\n```\n* `xmlSetParams` - for xml, overrides 
the top level `<Parameters>` values with the new ones. For example, the 
`vector` source requires xml stylesheet to point to the proper source of 
PBFs:\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlSetParams:\n    source: {ref: gen}               
           # set source parameter to the 'gen' source\n```\n* `xmlLayers` - 
keep all non-layer data, but only keep those layers that are listed in this 
value (whitelist):\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlLayers: ['landuse', 'road']                # 
Only include these layers when rendering\n```\n* `xmlExceptLayers` - same as 
`xmlLayers`, but instead of whitelisting, blacklist (allow all except 
these):\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlExceptLayers: ['water']                    # 
Exclude water layer when rendering\n```\n* `xmlSetDataSource` - change all 
layer's datasources' parameters if they match conditions:\n`if` is a set of 
parameter values that all must match,\n`xmlLayers` and `xmlExcludeLayers` just 
like above set which layers to address,\nand `set` specifies the new parameter 
values to be set.\n\nInstead of an object, `xmlSetDataSource` can be set to an 
array of objects to provide\nmultple change sets.\n\n## Kartotherian-specific 
parameters:\n* `public` (boolean) - should this be source be accessible via 
`/<sourceId>/z/x/y.format` requests\n* `minzoom` (int) - minimum allowable zoom 
for the public request (public requests only)\n* `maxzoom` (int) - maximum 
allowable zoom for the public request (public requests only)\n* 
`defaultHeaders` (object) - a set of extra headers that will be sent to the 
user unless the source provides its own. (public requests only)\n* `headers` 
(object) - a set of extra headers that will be sent to the user instead of the 
headers returned by the source. (public requests only)\n* `formats` (array of 
strings) - one string or a list of string values specifying allowed formats, 
e.g. `['png','jpeg']`\n* `scales` (array of numbers) - one number or a list of 
number values specifying allowed scalings, e.g. `[1.3, 1.5, 2, 2.6, 3]`\n* 
`setInfo` (object) - provide values that will be reported to the client via the 
`/<sourceId>/info.json`. See https://github.com/mapbox/tilejson-spec\n* 
`overrideInfo` (object) - override values produced by the source's getInfo(), 
or if value is null, remove it. Result will be accessible via 
`/<sourceId>/info.json`. See https://github.com/mapbox/tilejson-spec\n";,
+  "gitHead": "3ddcd4a145aefb1bbe221bd9ea54ce1b7bbddbf0",
+  "readme": "# kartotherian-core\n\nThe core components of the Kartotherian 
maps tile service\n\n## Sources\nSources is a way to set up data processing 
pipelines for Kartotherian and Tilerator.\nSources could be either stored in a 
set of standalone files, or be embedded in the\nmain configuration file, or a 
mix of both. The sources value in the config file\ncould be a string (file), an 
object defining the source, or an array of strings and objects.\n\n`uri` is the 
only mandatory field, and it specifies how 
[tilelive.js](https://github.com/mapbox/tilelive.js)\nwill locate and 
initialize the new source. The protocol determines which tile provider will be 
used.\n\nSince sometimes not everything can be added as query parameters to the 
Uri, there is a set of additional keys to help.\nValues can either be hardcoded 
as strings/numbers/booleans, or can be calculated on the fly.\n\nA simple 
source configuration to set up a tile storage as files in the ./vectors 
dir:\n```\nfilestore:\n    uri: file://./vectors\n```\nThe path can also be set 
via a parameter:\n```\nfilestore:\n    uri: file://\n    pathname: 
./vectors\n```\nThe value does not have to be given in the source, but instead 
could be dynamically generated.\nFor example, the `var` generator pulls the 
value from the variable store.\nThe variables are defined in a separate 
file(s), similar to sources.\n```\nfilestore:\n    uri: file://\n    pathname: 
{var: tilepath}  # Uses a variable named tilepath\n```\n\nMore parameters can 
be set using `params` - a set of additional values to be set in 
URI:\n```\noz:\n  # \"overzoom:\" is a tile source that will attempt to get a 
tile from another source,\n  # and if tile is missing, attempt to get a portion 
of the lower-zoom tile.\n  uri: overzoom://\n  # Specify the tile source - this 
adds a properly escaped query parameter\n  #   ?source=sourceref:///?ref=gen\n  
param:\n    source: {ref: gen}\n```\n\n## Value substitutions\n\nIn general, 
these value substitutions are available:\n* `{var:varname}` - the value becomes 
the value of the variable `varname` from the variables file / variables conf 
section of the main config file. This might be useful if you want to make all 
the settings public except for the passwords that are stored in a secure 
location.\n* `{ref:sourceId}` - the value becomes a reference to another 
source. Some sources function as filters/converters, pulling data internally 
from other sources and converting the result on the fly. For example, the 
[overzoom](https://github.com/kartotherian/kartotherian-overzoom) source pulls 
data from another source, and if it's not available, tries to find a lower-zoom 
tile above the given one, and extract a portion of it. Internally, it uses a 
forwarding sourceref: source.\n* `{npmloader: npm-module-name}` or `{npmloader: 
['npm-module-name', 'arg1', 'arg2', ...]}` - if npm module supports loading 
customization, it should be loaded via the npmloader. Npmloader is only 
available inside the source's `xml` key.\n* `{npmpath: ['npm-module-name', 
'subdir', 'subdir', 'filename']}` - some files may be located inside the NPM 
modules added to the Kartotherian project, i.e. 
[osm-bright-source](https://github.com/kartotherian/osm-bright.tm2source). To 
reference a file inside npm, set npm's value to an array, with the first value 
being the name of the npm module (resolves to the root of the npm module), and 
all subsequent strings being subdirs and lastly - the name of the file. Subdirs 
may be omitted. `npmpath: [\"osm-bright-source\", \"data.xml\"]` would resolve 
to a rooted path `/.../node_modules/osm-bright-source/data.xml`\n\n## XML-based 
sources\nThe `xml` parameter is used to load and alter XML for some sources 
like\n[tilelive-bridge](https://github.com/mapbox/tilelive-bridge) 
(SQL→VectorTile or TIFF→RasterTile) 
and\n[tilelive-vector](https://github.com/mapbox/tilelive-vector) (Style 
VectorTile → PNG).\nThe `xml` field must evaluate to the xml file 
path.\n\n```\ngen:                # The name of the source (could be referenced 
later)\n  uri: bridge://    # Required - the URI used to construct the source\n 
 xml:              # Init source with this xml instead of the URI's other 
parameters\n    # Set xml to the location of the 'data.xml', which is located 
inside the osm-bright-source npm\n    npmpath: [\"osm-bright-source\", 
\"data.xml\"]\n  xmlSetDataSource: # Before loading, update the datasource 
section of the standard mapnik config file\n    if:             # Only update 
datasources that match all these values (logical AND)\n      dbname: gis   # 
Instead of 'gis', you can use {npmpath:...}, {ref:..}, and {var:...}\n      
host: ''\n      type: postgis\n    set:            # Replace these keys with 
the new values\n      host: localhost\n      user: {var: osmdb-user}  # Instead 
of hardcoding, use the value from the variables file or conf section\n      
password: {var: osmdb-pswd}\n```\n\n* `xmlSetAttrs` - for xml, overrides the 
attributes of the root element with the new ones. For example, you may change 
the font directory of the `<Map>` element:\n```\ns2:\n  uri: vector://\n  
xml:\n    npmloader: osm-bright-style    # stylesheet xml is in npm\n  
xmlSetAttrs:\n    # Note that this is not needed for osm-bright-style because 
that module does this internally\n    font-directory: {npmpath: 
[\"osm-bright-fonts\", \"fonts/\"]}\n```\n* `xmlSetParams` - for xml, overrides 
the top level `<Parameters>` values with the new ones. For example, the 
`vector` source requires xml stylesheet to point to the proper source of 
PBFs:\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlSetParams:\n    source: {ref: gen}               
           # set source parameter to the 'gen' source\n```\n* `xmlLayers` - 
keep all non-layer data, but only keep those layers that are listed in this 
value (whitelist):\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlLayers: ['landuse', 'road']                # 
Only include these layers when rendering\n```\n* `xmlExceptLayers` - same as 
`xmlLayers`, but instead of whitelisting, blacklist (allow all except 
these):\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlExceptLayers: ['water']                    # 
Exclude water layer when rendering\n```\n* `xmlSetDataSource` - change all 
layer's datasources' parameters if they match conditions:\n`if` is a set of 
parameter values that all must match,\n`xmlLayers` and `xmlExcludeLayers` just 
like above set which layers to address,\nand `set` specifies the new parameter 
values to be set.\n\nInstead of an object, `xmlSetDataSource` can be set to an 
array of objects to provide\nmultple change sets.\n\n## Kartotherian-specific 
parameters:\n* `public` (boolean) - should this be source be accessible via 
`/<sourceId>/z/x/y.format` requests. You may also set configuration parameter 
`allSourcesPublic` to true to make all sources public (might be dangerous)\n* 
`minzoom` (int) - minimum allowable zoom for the public request (public 
requests only)\n* `maxzoom` (int) - maximum allowable zoom for the public 
request (public requests only)\n* `defaultHeaders` (object) - a set of extra 
headers that will be sent to the user unless the source provides its own. 
(public requests only)\n* `headers` (object) - a set of extra headers that will 
be sent to the user instead of the headers returned by the source. (public 
requests only)\n* `formats` (array of strings) - one string or a list of string 
values specifying allowed formats, e.g. `['png','jpeg']`\n* `scales` (array of 
numbers) - one number or a list of number values specifying allowed scalings, 
e.g. `[1.3, 1.5, 2, 2.6, 3]`\n* `setInfo` (object) - provide values that will 
be reported to the client via the `/<sourceId>/info.json`. See 
https://github.com/mapbox/tilejson-spec\n* `overrideInfo` (object) - override 
values produced by the source's getInfo(), or if value is null, remove it. 
Result will be accessible via `/<sourceId>/info.json`. See 
https://github.com/mapbox/tilejson-spec\n";,
   "readmeFilename": "README.md",
   "homepage": "https://github.com/kartotherian/kartotherian-core#readme";,
-  "_id": "kartotherian-core@0.0.7",
-  "_shasum": "e451bfedcf255b632c5514e397b37b143eb3db29",
+  "_id": "kartotherian-core@0.0.8",
+  "_shasum": "773d1691503c55414a2cc8ec810307293c6baffa",
   "_from": "git+https://github.com/kartotherian/kartotherian-core.git";,
-  "_resolved": 
"git+https://github.com/kartotherian/kartotherian-core.git#51266ac0a0289f9f1fa3b5966d2f47d28857933a";
+  "_resolved": 
"git+https://github.com/kartotherian/kartotherian-core.git#3ddcd4a145aefb1bbe221bd9ea54ce1b7bbddbf0";
 }
diff --git a/node_modules/kartotherian-demultiplexer/package.json 
b/node_modules/kartotherian-demultiplexer/package.json
index fcfb1fd..9da924d 100644
--- a/node_modules/kartotherian-demultiplexer/package.json
+++ b/node_modules/kartotherian-demultiplexer/package.json
@@ -31,7 +31,7 @@
   "readmeFilename": "README.md",
   "homepage": 
"https://github.com/kartotherian/kartotherian-demultiplexer#readme";,
   "_id": "kartotherian-demultiplexer@0.0.4",
-  "_shasum": "069c3985cb77367285d43e8dd5024430a4b2d833",
+  "_shasum": "008e05f1edb5e4825bf73f189864b2b08219e48d",
   "_from": 
"git+https://github.com/kartotherian/kartotherian-demultiplexer.git";,
   "_resolved": 
"git+https://github.com/kartotherian/kartotherian-demultiplexer.git#5a01de1f67c7235c8e1cea89d889252d40bdd7f5";
 }
diff --git a/node_modules/kartotherian-layermixer/package.json 
b/node_modules/kartotherian-layermixer/package.json
index f5c137a..3cf1cf5 100644
--- a/node_modules/kartotherian-layermixer/package.json
+++ b/node_modules/kartotherian-layermixer/package.json
@@ -31,7 +31,7 @@
   "readmeFilename": "README.md",
   "homepage": "https://github.com/kartotherian/kartotherian-layermixer#readme";,
   "_id": "kartotherian-layermixer@0.0.4",
-  "_shasum": "ac5733c5dddaab0c90da6b329cf6ce06d474d987",
+  "_shasum": "d04ded6c8c3d147573d7892a450b9c42132a73db",
   "_from": "git+https://github.com/kartotherian/kartotherian-layermixer.git";,
   "_resolved": 
"git+https://github.com/kartotherian/kartotherian-layermixer.git#4bb5698622c3e51871468267625782f006b5178c";
 }
diff --git a/node_modules/kartotherian-overzoom/package.json 
b/node_modules/kartotherian-overzoom/package.json
index b9a1681..9a6318e 100644
--- a/node_modules/kartotherian-overzoom/package.json
+++ b/node_modules/kartotherian-overzoom/package.json
@@ -31,7 +31,7 @@
   "readmeFilename": "README.md",
   "homepage": "https://github.com/kartotherian/kartotherian-overzoom#readme";,
   "_id": "kartotherian-overzoom@0.0.4",
-  "_shasum": "06968fff3a9e74ff5707205a91c129cbfd32ddb4",
+  "_shasum": "97852289de6436e847e56e05d57547fe900232a8",
   "_from": "git+https://github.com/kartotherian/kartotherian-overzoom.git";,
   "_resolved": 
"git+https://github.com/kartotherian/kartotherian-overzoom.git#11a46bd8f7b5e108e881f19090b90c2675712b1d";
 }
diff --git 
a/node_modules/kartotherian-postgres/node_modules/pg-query-stream/node_modules/readable-stream/package.json
 
b/node_modules/kartotherian-postgres/node_modules/pg-query-stream/node_modules/readable-stream/package.json
index aeea3d6..7ce6c96 100644
--- 
a/node_modules/kartotherian-postgres/node_modules/pg-query-stream/node_modules/readable-stream/package.json
+++ 
b/node_modules/kartotherian-postgres/node_modules/pg-query-stream/node_modules/readable-stream/package.json
@@ -52,7 +52,7 @@
   },
   "_id": "readable-stream@2.1.4",
   "_shasum": "70b9791c6fcb8480db44bd155a0f6bb58f172468",
-  "_from": "readable-stream@>=2.0.5 <3.0.0",
+  "_from": "readable-stream@>=2.0.4 <3.0.0",
   "_npmVersion": "3.8.6",
   "_nodeVersion": "5.11.0",
   "_npmUser": {
diff --git a/node_modules/kartotherian-postgres/package.json 
b/node_modules/kartotherian-postgres/package.json
index 723a233..ef00f3d 100644
--- a/node_modules/kartotherian-postgres/package.json
+++ b/node_modules/kartotherian-postgres/package.json
@@ -34,7 +34,7 @@
   "readmeFilename": "README.md",
   "homepage": "https://github.com/kartotherian/kartotherian-postgres#readme";,
   "_id": "kartotherian-postgres@0.0.4",
-  "_shasum": "bca607d539f74274f4f1e8c1268f586b46c0cd66",
+  "_shasum": "42b9444e3308ca33305778c3191807fde8825f06",
   "_from": "git+https://github.com/kartotherian/kartotherian-postgres.git";,
   "_resolved": 
"git+https://github.com/kartotherian/kartotherian-postgres.git#bc5551015bd6951781d5f189640c520a61939491";
 }
diff --git a/node_modules/kartotherian-server/package.json 
b/node_modules/kartotherian-server/package.json
index 32bf046..56c2212 100644
--- a/node_modules/kartotherian-server/package.json
+++ b/node_modules/kartotherian-server/package.json
@@ -32,7 +32,7 @@
   "readme": "# kartotherian-server\n\nThe web request handling components of 
the Kartotherian maps tile service\n\nSee 
[Kartotherian](https://github.com/kartotherian/kartotherian)\n",
   "readmeFilename": "README.md",
   "_id": "kartotherian-server@0.0.9",
-  "_shasum": "1206410196af5f65b5042ef33b1784f15b0a5332",
+  "_shasum": "8bcc719f0b04f8da523ea404db0fd20444e78b99",
   "_from": "git+https://github.com/kartotherian/kartotherian-server.git";,
   "_resolved": 
"git+https://github.com/kartotherian/kartotherian-server.git#0fab080d2eaf911a594e2abf12ee50e2b9059f87";
 }
diff --git a/node_modules/kartotherian-substantial/package.json 
b/node_modules/kartotherian-substantial/package.json
index b2f786a..0902da6 100644
--- a/node_modules/kartotherian-substantial/package.json
+++ b/node_modules/kartotherian-substantial/package.json
@@ -32,7 +32,7 @@
   "readmeFilename": "README.md",
   "homepage": 
"https://github.com/kartotherian/kartotherian-substantial#readme";,
   "_id": "kartotherian-substantial@0.0.4",
-  "_shasum": "7d81e47fa1a0928eea00856d911ba0324ca1c090",
+  "_shasum": "c33f6f48e15282509898bcbb677aabbe08fbaf2f",
   "_from": "git+https://github.com/kartotherian/kartotherian-substantial.git";,
   "_resolved": 
"git+https://github.com/kartotherian/kartotherian-substantial.git#2584476802af86feaf7be32dc9329b6da4485cc1";
 }
diff --git a/node_modules/kue-ui/package.json b/node_modules/kue-ui/package.json
index b9af09d..abe1d02 100644
--- a/node_modules/kue-ui/package.json
+++ b/node_modules/kue-ui/package.json
@@ -43,7 +43,7 @@
   "readme": "# kue ui\n## Introduction\nJob management client for 
[kue](https://github.com/LearnBoost/kue/) (Version `>=0.8.10`)\n\n## 
Screenshots\n\n* [Screenshot 
1](https://cloud.githubusercontent.com/assets/1458008/5229932/76dd0e70-7716-11e4-9551-e87ce799d8dc.png)\n*
 [Screenshot 
2](https://cloud.githubusercontent.com/assets/1458008/5229934/7fdf1c84-7716-11e4-8fa3-3d9f3dc947c7.png)\n\n##
 Installation\n\n    $ npm install kue-ui\n\n## Setup\n### Mount with express 
and kue\n\n```javascript\nvar kue = require('kue');\nvar express = 
require('express');\nvar ui = require('kue-ui');\nvar app = express();\n\n// 
connect kue to appropriate redis, or omit for default 
localhost\nkue.createQueue({\n    redis: REDIS_URL\n});\n\nui.setup({\n    
apiURL: '/api', // IMPORTANT: specify the api url\n    baseURL: '/kue', // 
IMPORTANT: specify the base url\n    updateInterval: 5000 // Optional: Fetches 
new data every 5000 ms\n});\n\n// Mount kue JSON api\napp.use('/api', 
kue.app);\n// Mount UI\napp.use('/kue', 
ui.app);\n\napp.listen(3000);\n```\n\nNote that with the above configuration 
you can still access the built-in Kue UI at /api/active in the browser.\n\n### 
Standalone app\nYou can publish the application with any backend by serving the 
main index file. The application is built with Ember and only has one `.jade` 
file.\n```javascript\nvar template = require('kue-ui').index\n// -> absolute 
path to lib/client/dist/build.jade\n```\n\nThe index file needs to be compiled 
with jade. You have to define the following locals:\n\n* baseURL: namespace of 
the application (in previous example: `/kue`),\n* apiURL: kue's JSON api (in 
previous example: `/api`)\n* [optional] updateInterval: Time between each 
refresh of the app (in previous example: 5000)\n\n\n\n## Development\n\nAn 
example is provided in `example/many.js`. Run it alongside redis 
(`redis-server`)\n\n    $ node example/many.js\n\nThe app is now accessible on 
`localhost:3000/kue/`.\n\nYou can modify the app in `lib/client/app` and build 
it with `grunt build`.\n\n### Errors\n\n\n- Forgot to run 
redis-server\n```\nevents.js:72\n        throw er; // Unhandled 'error' event\n 
             ^\nError: Redis connection to 127.0.0.1:6379 failed - connect 
ECONNREFUSED\n```\n\n- Stats route not implemented yet on kue. Update kue to 
`>=0.8.10`\n\n```\nGET 
http://localhost:3000/api/jobs/video%20conversion/inactive/stats 404 (Not 
Found)\n```\n\n\n\n### License\n`kue-ui` is released under the MIT license. See 
LICENSE.txt for the complete text.\n\n### Contributors\n\n* [Arnaud 
Benard](github.com/arnaudbenard)\n* [Peter Kadlot](github.com/daralthus)\n* 
[Alex Loizou](github.com/alexloi)\n",
   "readmeFilename": "README.md",
   "_id": "kue-ui@0.1.0",
-  "_shasum": "890cd35c3b7362160b33c20e977260e88c55d8c7",
+  "_shasum": "ae4c2308461c8f80b579ae045fff80bb8acb01f5",
   "_from": "git+https://github.com/nyurik/kue-ui.git";,
   "_resolved": 
"git+https://github.com/nyurik/kue-ui.git#67cf0834e917b38278a707aaa62b1873e66f5d50";
 }
diff --git 
a/node_modules/kue/node_modules/stylus/node_modules/source-map/node_modules/amdefine/package.json
 
b/node_modules/kue/node_modules/stylus/node_modules/source-map/node_modules/amdefine/package.json
index 148f4c8..47ccd2f 100644
--- 
a/node_modules/kue/node_modules/stylus/node_modules/source-map/node_modules/amdefine/package.json
+++ 
b/node_modules/kue/node_modules/stylus/node_modules/source-map/node_modules/amdefine/package.json
@@ -42,5 +42,6 @@
     "tarball": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";
   },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";
+  "_resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/kue/node_modules/stylus/node_modules/source-map/package.json 
b/node_modules/kue/node_modules/stylus/node_modules/source-map/package.json
index 7d796c8..44fbad5 100644
--- a/node_modules/kue/node_modules/stylus/node_modules/source-map/package.json
+++ b/node_modules/kue/node_modules/stylus/node_modules/source-map/package.json
@@ -127,7 +127,7 @@
   ],
   "repository": {
     "type": "git",
-    "url": "http://github.com/mozilla/source-map.git";
+    "url": "git+ssh://g...@github.com/mozilla/source-map.git"
   },
   "directories": {
     "lib": "./lib"
@@ -157,7 +157,7 @@
   },
   "_id": "source-map@0.1.43",
   "_shasum": "c24bc146ca517c1471f5dacbe2571b2b7f9e3346",
-  "_from": "source-map@>=0.1.7 <0.2.0",
+  "_from": "source-map@>=0.1.0 <0.2.0",
   "_npmVersion": "1.4.9",
   "_npmUser": {
     "name": "nickfitzgerald",
@@ -181,5 +181,6 @@
     "shasum": "c24bc146ca517c1471f5dacbe2571b2b7f9e3346",
     "tarball": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz";
   },
-  "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz";
+  "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/code-point-at/node_modules/number-is-nan/package.json
 
b/node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/code-point-at/node_modules/number-is-nan/package.json
index 0d80298..4059a40 100644
--- 
a/node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/code-point-at/node_modules/number-is-nan/package.json
+++ 
b/node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/code-point-at/node_modules/number-is-nan/package.json
@@ -62,5 +62,6 @@
     }
   ],
   "directories": {},
-  "_resolved": 
"https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";
+  "_resolved": 
"https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/is-fullwidth-code-point/node_modules/number-is-nan/package.json
 
b/node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/is-fullwidth-code-point/node_modules/number-is-nan/package.json
index 0d80298..4059a40 100644
--- 
a/node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/is-fullwidth-code-point/node_modules/number-is-nan/package.json
+++ 
b/node_modules/kue/node_modules/yargs/node_modules/string-width/node_modules/is-fullwidth-code-point/node_modules/number-is-nan/package.json
@@ -62,5 +62,6 @@
     }
   ],
   "directories": {},
-  "_resolved": 
"https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";
+  "_resolved": 
"https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rc/node_modules/minimist/package.json
 
b/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rc/node_modules/minimist/package.json
index fd561e5..28d1392 100644
--- 
a/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rc/node_modules/minimist/package.json
+++ 
b/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rc/node_modules/minimist/package.json
@@ -66,5 +66,6 @@
     }
   ],
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
+  "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/package.json
 
b/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/package.json
index 1e95848..576fc6f 100644
--- 
a/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/package.json
+++ 
b/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/package.json
@@ -5,7 +5,7 @@
   "license": "MIT",
   "repository": {
     "type": "git",
-    "url": "https://github.com/chalk/strip-ansi";
+    "url": "git+https://github.com/chalk/strip-ansi.git";
   },
   "author": {
     "name": "Sindre Sorhus",
@@ -85,5 +85,6 @@
     "tmp": "tmp/strip-ansi-3.0.1.tgz_1456057278183_0.28958667791448534"
   },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+  "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
 
b/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
index 842d22b..de3bfd5 100644
--- 
a/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
+++ 
b/node_modules/mapnik/node_modules/node-pre-gyp/node_modules/rimraf/node_modules/glob/node_modules/once/node_modules/wrappy/package.json
@@ -58,5 +58,6 @@
     "host": "packages-16-east.internal.npmjs.com",
     "tmp": "tmp/wrappy-1.0.2.tgz_1463527848281_0.037129373755306005"
   },
-  "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+  "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";,
+  "readme": "ERROR: No README data found!"
 }
diff --git 
a/node_modules/osm-bright-source/node_modules/postgis-vt-util/package.json 
b/node_modules/osm-bright-source/node_modules/postgis-vt-util/package.json
index 4727fca..df04079 100644
--- a/node_modules/osm-bright-source/node_modules/postgis-vt-util/package.json
+++ b/node_modules/osm-bright-source/node_modules/postgis-vt-util/package.json
@@ -10,7 +10,7 @@
   "readme": "postgis-vt-util\n========\n\npostgres helper functions for making 
vector tiles in [Mapbox Studio]()\n\n## z\n\nGiven the !scale_denominator! 
mapnik token, returns a zoom level. Lets you to control at which zoom levels 
features appear.\n\n**Arguments:** !scale_denominator! [mapnik 
token]\n\n**Example:**\n\n```sql\n( SELECT\n    some, attributes,\n    
geom_generalized\n  FROM your_table\n  where z(!scale_denominator!) in 
(10,11,12)\n  union ALL\n  SELECT\n    some, attributes,\n    
geom_not_generalized\n  FROM your_table\n  where z(!scale_denominator!) >= 
13\n) as data\n```\n\n## labelgrid\n\nDe-duplicates features based on a given 
grid size, letting you control feature density. All features are snapped to a 
grid, but only 1 feature per grid cell is returend when selecting `DISTINCT ON` 
the labelgrid function.\n\n**Arguments:** geometry [geometry], grid size [an 
integer that divides evenly into 256], `!pixel_width!` [mapnik 
token]\n\n**Example:**\n\n```sql\n( SELECT\n    disctinct on(labelgrid(geom, 
128, !pixel_width!))\n    some, other, attributes\n  FROM your_table\n) AS 
data\n```\n\n## linelabel\n\nSelect only those line geometries long enough to 
be labeled; drops all line geometries too short for mapnik to place a label. 
Linelabel compares line length to the length of a user-supplied label 
field.\n\n**Arguments:** zoom [integer], label [text field], geometry 
[geometry]\n\n**Example:**\n\n```sql\n( SELECT\n    name, geom\n  FROM 
your_table\n  WHERE linelabel(z(!scale_denominator!), name, geom)\n) AS 
data\n```\n\n## merc_buffer\n\nWrapper for ST_Buffer that adjusts distance by 
latitude to approximate real-world measurements. Assumes input geometries are 
Web Mercator and input distances are real-world meters. Accuracy decreases for 
larger buffer distances and at extreme latitudes.\n\n**Arguments:** geometry 
[geometry], distance in meters [numeric]\n\n## merc_dwithin\n\nWrapper for 
ST_DWithin that adjusts distance by latitude to approximate real-world 
measurements. Assumes input geometries are Web Mercator and input distances are 
real-world meters. Accuracy decreases for larger distances and at extreme 
latitudes.\n\n**Arguments:** geometry a [geometry], geometry b [geometry], 
distance in meters [numeric]\n\n## merc_length\n\nWrapper for ST_Length that 
adjusts distance by latitude to approximate real-world measurements. Assumes 
input geometries are Web Mercator. Accuracy decreases for larger y-axis ranges 
of the input.\n\n**Arguments:** geometry [geometry]\n\n## tile_bbox\n\nGiven a 
Web Mercator tile ID as (z, x, y), returns a bounding-box geometry of the area 
covered by that tile.\n\n**Arguments:** zoom_level [integer], x_tile [integer], 
y_tile [integer]\n",
   "readmeFilename": "README.md",
   "_id": "postgis-vt-util@0.3.0",
-  "_shasum": "7bde88bbdd11955463ebeb45571a01734165467b",
+  "_shasum": "d77e2fcf7abf1ff771040525ec9a2b73dd12e2c7",
   "_from": "git+https://github.com/mapbox/postgis-vt-util.git#v0.3.0";,
   "_resolved": 
"git+https://github.com/mapbox/postgis-vt-util.git#5a62bbd3478a52716209fcbd2c9c474dbab29152";
 }
diff --git a/node_modules/osm-bright-source/package.json 
b/node_modules/osm-bright-source/package.json
index 314892c..a56afaa 100644
--- a/node_modules/osm-bright-source/package.json
+++ b/node_modules/osm-bright-source/package.json
@@ -18,7 +18,7 @@
   },
   "homepage": "https://github.com/nyurik/osm-bright.tm2source#readme";,
   "_id": "osm-bright-source@0.0.1",
-  "_shasum": "de9a37acd77c1986fa5e95c3db64093c9d0ffb4c",
+  "_shasum": "a512c6d3faaff23c88f6c6dc0846cd83715d779d",
   "_from": "git+https://github.com/kartotherian/osm-bright.tm2source.git";,
   "_resolved": 
"git+https://github.com/kartotherian/osm-bright.tm2source.git#7f24a683bb3d7884a8653d4b901ea50e7997ce51";
 }
diff --git 
a/node_modules/osm-bright-style/node_modules/osm-bright-fonts/package.json 
b/node_modules/osm-bright-style/node_modules/osm-bright-fonts/package.json
index b3a0a5f..c3639a1 100644
--- a/node_modules/osm-bright-style/node_modules/osm-bright-fonts/package.json
+++ b/node_modules/osm-bright-style/node_modules/osm-bright-fonts/package.json
@@ -15,7 +15,7 @@
   "readmeFilename": "README.md",
   "homepage": "https://github.com/kartotherian/osm-bright.fonts#readme";,
   "_id": "osm-bright-fonts@1.0.1",
-  "_shasum": "70465e65a338fa9801f758fe1c357e55ee81dbc6",
+  "_shasum": "03b7ab40801d14789b52203b2071e80adb211286",
   "_from": "git+https://github.com/kartotherian/osm-bright.fonts.git";,
   "_resolved": 
"git+https://github.com/kartotherian/osm-bright.fonts.git#3ac717a55a58d27d5afa0f1c88075fd3b22648a1";
 }
diff --git a/node_modules/osm-bright-style/package.json 
b/node_modules/osm-bright-style/package.json
index 29e11a0..eb4becb 100644
--- a/node_modules/osm-bright-style/package.json
+++ b/node_modules/osm-bright-style/package.json
@@ -18,7 +18,7 @@
   },
   "homepage": "https://github.com/kartotherian/osm-bright.tm2#readme";,
   "_id": "osm-bright-style@2.1.2",
-  "_shasum": "26bb2b2ea2c7a02267c656ee135e917382284824",
+  "_shasum": "ff121ccac3a6040f918e7ab954b6d2002a7f0915",
   "_from": "git+https://github.com/kartotherian/osm-bright.tm2.git";,
   "_resolved": 
"git+https://github.com/kartotherian/osm-bright.tm2.git#93fd6098cc0c90aa234f39c6afe4fc837b8143a2";
 }
diff --git 
a/node_modules/service-runner/node_modules/limitation/node_modules/kad/package.json
 
b/node_modules/service-runner/node_modules/limitation/node_modules/kad/package.json
index 94d66ff..2f82e60 100644
--- 
a/node_modules/service-runner/node_modules/limitation/node_modules/kad/package.json
+++ 
b/node_modules/service-runner/node_modules/limitation/node_modules/kad/package.json
@@ -75,7 +75,7 @@
   },
   "homepage": "https://github.com/kadtools/kad#readme";,
   "_id": "kad@1.3.6",
-  "_shasum": "8c31049d5e4e0c1d61639643f63f7e0ce7a3db92",
+  "_shasum": "621dcc9a4a406a8ebce8a5e1ec1e180638bb9d08",
   "_from": "git+https://github.com/gwicke/kad.git#master";,
   "_resolved": 
"git+https://github.com/gwicke/kad.git#31449a27a289b6f0ecbeec193d8bac9db8b9f513";
 }
diff --git 
a/node_modules/service-runner/node_modules/yargs/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex/package.json
 
b/node_modules/service-runner/node_modules/yargs/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex/package.json
index 80bf90b..74d76d5 100644
--- 
a/node_modules/service-runner/node_modules/yargs/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex/package.json
+++ 
b/node_modules/service-runner/node_modules/yargs/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex/package.json
@@ -5,7 +5,7 @@
   "license": "MIT",
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/sindresorhus/ansi-regex.git";
+    "url": "https://github.com/sindresorhus/ansi-regex";
   },
   "author": {
     "name": "Sindre Sorhus",
@@ -81,6 +81,5 @@
     "tarball": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";
   },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";,
-  "readme": "ERROR: No README data found!"
+  "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";
 }
diff --git 
a/node_modules/tilelive-vector/node_modules/s3urls/node_modules/minimist/package.json
 
b/node_modules/tilelive-vector/node_modules/s3urls/node_modules/minimist/package.json
index 5a9fc09..0e68b47 100644
--- 
a/node_modules/tilelive-vector/node_modules/s3urls/node_modules/minimist/package.json
+++ 
b/node_modules/tilelive-vector/node_modules/s3urls/node_modules/minimist/package.json
@@ -66,6 +66,5 @@
     }
   ],
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";,
-  "readme": "ERROR: No README data found!"
+  "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
 }
diff --git a/node_modules/tilerator-jobprocessor/index.js 
b/node_modules/tilerator-jobprocessor/index.js
index 1142ab5..96c098a 100644
--- a/node_modules/tilerator-jobprocessor/index.js
+++ b/node_modules/tilerator-jobprocessor/index.js
@@ -1,5 +1,6 @@
 'use strict';
 
 module.exports.fileParser = require('./lib/fileParser');
+module.exports.processAll = require('./lib/processAll');
 module.exports.Job = require('./lib/Job');
 module.exports.JobProcessor = require('./lib/JobProcessor');
diff --git a/node_modules/tilerator-jobprocessor/lib/fileParser.js 
b/node_modules/tilerator-jobprocessor/lib/fileParser.js
index 3320a5e..fda8ea5 100644
--- a/node_modules/tilerator-jobprocessor/lib/fileParser.js
+++ b/node_modules/tilerator-jobprocessor/lib/fileParser.js
@@ -175,7 +175,7 @@
 
 /**
  * Parse given file and enque the jobs
- * @param filepath
+ * @param {string|string[]} filepath
  * @param options
  * @param addJobCallback
  * @returns {*}
@@ -199,7 +199,8 @@
             return createTempFile().spread(function (path, fd, 
cleanupCallback) {
                 tmpFile = path;
                 tmpFileCleanupCb = cleanupCallback;
-                return Promise.each(filepath.split('|'), function (file) {
+                filepath = typeof filepath === 'string' ? filepath.split('|') 
: filepath;
+                return Promise.each(filepath, function (file) {
                     return parseSourceFile(file, options, fd);
                 });
             }).then(function () {
diff --git a/node_modules/tilerator-jobprocessor/lib/processAll.js 
b/node_modules/tilerator-jobprocessor/lib/processAll.js
new file mode 100644
index 0000000..c1fc5bc
--- /dev/null
+++ b/node_modules/tilerator-jobprocessor/lib/processAll.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var Promise = require('bluebird');
+var pathLib = require('path');
+var fs = Promise.promisifyAll(require('fs'));
+
+var core = require('kartotherian-core');
+var Err = core.Err;
+var fileParser = require('./fileParser');
+
+
+/**
+ * Parse given file and enque the jobs
+ * @param {string} expDirPath
+ * @param {string} stateFile
+ * @param {string} mask
+ * @param {object} options
+ * @param {Function} addJobCallback
+ * @returns {*}
+ */
+module.exports = function processAll(expDirPath, stateFile, mask, options, 
addJobCallback) {
+    var lastFileParsed, parsedFiles;
+    return fs.statAsync(stateFile).then(function (stat) {
+        if (!stat.isFile()) throw new Err(stateFile + ' is not a file');
+        return fs.accessAsync(stateFile, fs.R_OK + fs.W_OK);
+    }, function (err) {
+        if (err.code !== 'ENOENT') throw err;
+        // File does not exist, try to create an empty one
+        return fs.writeFileAsync(stateFile, '');
+    }).then(function () {
+        // File now exists, all checks have passed
+        return fs.readFileAsync(stateFile, {encoding: 'utf8'});
+    }).then(function (content) {
+        lastFileParsed = content;
+        return fs.readdir(expDirPath);
+    }).then(function (files) {
+        let re = new RegExp(mask);
+        files = files.filter(function (file) {
+            return re.test(file) && file > lastFileParsed;
+        });
+        return Promise.map(files, function (file) {
+            file = pathLib.resolve(expDirPath, file);
+            return fs.statAsync(file).then(function (stat) {
+                if (!stat.isFile()) throw new Err(file + ' is not a file');
+                return fs.accessAsync(file, fs.R_OK);
+            }).return(file);
+        });
+    }).then(function (files) {
+        parsedFiles = files.sort();
+        return fileParser(parsedFiles, options, addJobCallback);
+    }).then(function (parseResult) {
+        return fs.writeFileAsync(stateFile, 
pathLib.basename(parsedFiles[parsedFiles.length - 1])).return(parseResult);
+    });
+};
diff --git 
a/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/lib/core.js
 
b/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/lib/core.js
index ac3987a..8947551 100644
--- 
a/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/lib/core.js
+++ 
b/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/lib/core.js
@@ -551,7 +551,7 @@
     if (!source) {
         throw new Err('Unknown source').metrics('err.req.source');
     }
-    if (!source.public) {
+    if (!source.public && !core.getConfiguration().allSourcesPublic) {
         throw new Err('Source is not public').metrics('err.req.source');
     }
     return source;
@@ -564,9 +564,10 @@
  * @param dataHeaders
  */
 core.setResponseHeaders = function setResponseHeaders(res, source, 
dataHeaders) {
-    if (_app.conf.defaultHeaders) res.set(_app.conf.defaultHeaders);
+    var conf = core.getConfiguration();
+    if (conf.defaultHeaders) res.set(conf.defaultHeaders);
     if (source && source.defaultHeaders) res.set(source.defaultHeaders);
     if (dataHeaders) res.set(dataHeaders);
-    if (_app.conf.overrideHeaders) res.set(_app.conf.overrideHeaders);
+    if (conf.overrideHeaders) res.set(conf.overrideHeaders);
     if (source && source.headers) res.set(source.headers);
 };
diff --git 
a/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/node_modules/xmldoc/package.json
 
b/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/node_modules/xmldoc/package.json
index 2a62ed4..27ea8ff 100644
--- 
a/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/node_modules/xmldoc/package.json
+++ 
b/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/node_modules/xmldoc/package.json
@@ -33,7 +33,7 @@
   },
   "homepage": "https://github.com/nfarina/xmldoc#readme";,
   "_id": "xmldoc@0.3.1",
-  "_shasum": "83818a894f058d097344a27ad562145b611d2d2e",
+  "_shasum": "7b7704cfa5ba3aea650047fa056f87ee4408f379",
   "_from": "git+https://github.com/nyurik/xmldoc.git";,
   "_resolved": 
"git+https://github.com/nyurik/xmldoc.git#3107ca5fe10227539299fb1bb82992d5b824bc37";
 }
diff --git 
a/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/package.json
 
b/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/package.json
index c77b855..7d22b22 100644
--- 
a/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/package.json
+++ 
b/node_modules/tilerator-jobprocessor/node_modules/kartotherian-core/package.json
@@ -1,6 +1,6 @@
 {
   "name": "kartotherian-core",
-  "version": "0.0.7",
+  "version": "0.0.8",
   "description": "The core components of the Kartotherian maps tile service",
   "main": "index.js",
   "scripts": {
@@ -24,12 +24,12 @@
     "underscore": "^1.8.3",
     "xmldoc": "git+https://github.com/nyurik/xmldoc.git";
   },
-  "gitHead": "51266ac0a0289f9f1fa3b5966d2f47d28857933a",
-  "readme": "# kartotherian-core\n\nThe core components of the Kartotherian 
maps tile service\n\n## Sources\nSources is a way to set up data processing 
pipelines for Kartotherian and Tilerator.\nSources could be either stored in a 
set of standalone files, or be embedded in the\nmain configuration file, or a 
mix of both. The sources value in the config file\ncould be a string (file), an 
object defining the source, or an array of strings and objects.\n\n`uri` is the 
only mandatory field, and it specifies how 
[tilelive.js](https://github.com/mapbox/tilelive.js)\nwill locate and 
initialize the new source. The protocol determines which tile provider will be 
used.\n\nSince sometimes not everything can be added as query parameters to the 
Uri, there is a set of additional keys to help.\nValues can either be hardcoded 
as strings/numbers/booleans, or can be calculated on the fly.\n\nA simple 
source configuration to set up a tile storage as files in the ./vectors 
dir:\n```\nfilestore:\n    uri: file://./vectors\n```\nThe path can also be set 
via a parameter:\n```\nfilestore:\n    uri: file://\n    pathname: 
./vectors\n```\nThe value does not have to be given in the source, but instead 
could be dynamically generated.\nFor example, the `var` generator pulls the 
value from the variable store.\nThe variables are defined in a separate 
file(s), similar to sources.\n```\nfilestore:\n    uri: file://\n    pathname: 
{var: tilepath}  # Uses a variable named tilepath\n```\n\nMore parameters can 
be set using `params` - a set of additional values to be set in 
URI:\n```\noz:\n  # \"overzoom:\" is a tile source that will attempt to get a 
tile from another source,\n  # and if tile is missing, attempt to get a portion 
of the lower-zoom tile.\n  uri: overzoom://\n  # Specify the tile source - this 
adds a properly escaped query parameter\n  #   ?source=sourceref:///?ref=gen\n  
param:\n    source: {ref: gen}\n```\n\n## Value substitutions\n\nIn general, 
these value substitutions are available:\n* `{var:varname}` - the value becomes 
the value of the variable `varname` from the variables file / variables conf 
section of the main config file. This might be useful if you want to make all 
the settings public except for the passwords that are stored in a secure 
location.\n* `{ref:sourceId}` - the value becomes a reference to another 
source. Some sources function as filters/converters, pulling data internally 
from other sources and converting the result on the fly. For example, the 
[overzoom](https://github.com/kartotherian/kartotherian-overzoom) source pulls 
data from another source, and if it's not available, tries to find a lower-zoom 
tile above the given one, and extract a portion of it. Internally, it uses a 
forwarding sourceref: source.\n* `{npmloader: npm-module-name}` or `{npmloader: 
['npm-module-name', 'arg1', 'arg2', ...]}` - if npm module supports loading 
customization, it should be loaded via the npmloader. Npmloader is only 
available inside the source's `xml` key.\n* `{npmpath: ['npm-module-name', 
'subdir', 'subdir', 'filename']}` - some files may be located inside the NPM 
modules added to the Kartotherian project, i.e. 
[osm-bright-source](https://github.com/kartotherian/osm-bright.tm2source). To 
reference a file inside npm, set npm's value to an array, with the first value 
being the name of the npm module (resolves to the root of the npm module), and 
all subsequent strings being subdirs and lastly - the name of the file. Subdirs 
may be omitted. `npmpath: [\"osm-bright-source\", \"data.xml\"]` would resolve 
to a rooted path `/.../node_modules/osm-bright-source/data.xml`\n\n## XML-based 
sources\nThe `xml` parameter is used to load and alter XML for some sources 
like\n[tilelive-bridge](https://github.com/mapbox/tilelive-bridge) 
(SQL→VectorTile or TIFF→RasterTile) 
and\n[tilelive-vector](https://github.com/mapbox/tilelive-vector) (Style 
VectorTile → PNG).\nThe `xml` field must evaluate to the xml file 
path.\n\n```\ngen:                # The name of the source (could be referenced 
later)\n  uri: bridge://    # Required - the URI used to construct the source\n 
 xml:              # Init source with this xml instead of the URI's other 
parameters\n    # Set xml to the location of the 'data.xml', which is located 
inside the osm-bright-source npm\n    npmpath: [\"osm-bright-source\", 
\"data.xml\"]\n  xmlSetDataSource: # Before loading, update the datasource 
section of the standard mapnik config file\n    if:             # Only update 
datasources that match all these values (logical AND)\n      dbname: gis   # 
Instead of 'gis', you can use {npmpath:...}, {ref:..}, and {var:...}\n      
host: ''\n      type: postgis\n    set:            # Replace these keys with 
the new values\n      host: localhost\n      user: {var: osmdb-user}  # Instead 
of hardcoding, use the value from the variables file or conf section\n      
password: {var: osmdb-pswd}\n```\n\n* `xmlSetAttrs` - for xml, overrides the 
attributes of the root element with the new ones. For example, you may change 
the font directory of the `<Map>` element:\n```\ns2:\n  uri: vector://\n  
xml:\n    npmloader: osm-bright-style    # stylesheet xml is in npm\n  
xmlSetAttrs:\n    # Note that this is not needed for osm-bright-style because 
that module does this internally\n    font-directory: {npmpath: 
[\"osm-bright-fonts\", \"fonts/\"]}\n```\n* `xmlSetParams` - for xml, overrides 
the top level `<Parameters>` values with the new ones. For example, the 
`vector` source requires xml stylesheet to point to the proper source of 
PBFs:\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlSetParams:\n    source: {ref: gen}               
           # set source parameter to the 'gen' source\n```\n* `xmlLayers` - 
keep all non-layer data, but only keep those layers that are listed in this 
value (whitelist):\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlLayers: ['landuse', 'road']                # 
Only include these layers when rendering\n```\n* `xmlExceptLayers` - same as 
`xmlLayers`, but instead of whitelisting, blacklist (allow all except 
these):\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlExceptLayers: ['water']                    # 
Exclude water layer when rendering\n```\n* `xmlSetDataSource` - change all 
layer's datasources' parameters if they match conditions:\n`if` is a set of 
parameter values that all must match,\n`xmlLayers` and `xmlExcludeLayers` just 
like above set which layers to address,\nand `set` specifies the new parameter 
values to be set.\n\nInstead of an object, `xmlSetDataSource` can be set to an 
array of objects to provide\nmultple change sets.\n\n## Kartotherian-specific 
parameters:\n* `public` (boolean) - should this be source be accessible via 
`/<sourceId>/z/x/y.format` requests\n* `minzoom` (int) - minimum allowable zoom 
for the public request (public requests only)\n* `maxzoom` (int) - maximum 
allowable zoom for the public request (public requests only)\n* 
`defaultHeaders` (object) - a set of extra headers that will be sent to the 
user unless the source provides its own. (public requests only)\n* `headers` 
(object) - a set of extra headers that will be sent to the user instead of the 
headers returned by the source. (public requests only)\n* `formats` (array of 
strings) - one string or a list of string values specifying allowed formats, 
e.g. `['png','jpeg']`\n* `scales` (array of numbers) - one number or a list of 
number values specifying allowed scalings, e.g. `[1.3, 1.5, 2, 2.6, 3]`\n* 
`setInfo` (object) - provide values that will be reported to the client via the 
`/<sourceId>/info.json`. See https://github.com/mapbox/tilejson-spec\n* 
`overrideInfo` (object) - override values produced by the source's getInfo(), 
or if value is null, remove it. Result will be accessible via 
`/<sourceId>/info.json`. See https://github.com/mapbox/tilejson-spec\n";,
+  "gitHead": "3ddcd4a145aefb1bbe221bd9ea54ce1b7bbddbf0",
+  "readme": "# kartotherian-core\n\nThe core components of the Kartotherian 
maps tile service\n\n## Sources\nSources is a way to set up data processing 
pipelines for Kartotherian and Tilerator.\nSources could be either stored in a 
set of standalone files, or be embedded in the\nmain configuration file, or a 
mix of both. The sources value in the config file\ncould be a string (file), an 
object defining the source, or an array of strings and objects.\n\n`uri` is the 
only mandatory field, and it specifies how 
[tilelive.js](https://github.com/mapbox/tilelive.js)\nwill locate and 
initialize the new source. The protocol determines which tile provider will be 
used.\n\nSince sometimes not everything can be added as query parameters to the 
Uri, there is a set of additional keys to help.\nValues can either be hardcoded 
as strings/numbers/booleans, or can be calculated on the fly.\n\nA simple 
source configuration to set up a tile storage as files in the ./vectors 
dir:\n```\nfilestore:\n    uri: file://./vectors\n```\nThe path can also be set 
via a parameter:\n```\nfilestore:\n    uri: file://\n    pathname: 
./vectors\n```\nThe value does not have to be given in the source, but instead 
could be dynamically generated.\nFor example, the `var` generator pulls the 
value from the variable store.\nThe variables are defined in a separate 
file(s), similar to sources.\n```\nfilestore:\n    uri: file://\n    pathname: 
{var: tilepath}  # Uses a variable named tilepath\n```\n\nMore parameters can 
be set using `params` - a set of additional values to be set in 
URI:\n```\noz:\n  # \"overzoom:\" is a tile source that will attempt to get a 
tile from another source,\n  # and if tile is missing, attempt to get a portion 
of the lower-zoom tile.\n  uri: overzoom://\n  # Specify the tile source - this 
adds a properly escaped query parameter\n  #   ?source=sourceref:///?ref=gen\n  
param:\n    source: {ref: gen}\n```\n\n## Value substitutions\n\nIn general, 
these value substitutions are available:\n* `{var:varname}` - the value becomes 
the value of the variable `varname` from the variables file / variables conf 
section of the main config file. This might be useful if you want to make all 
the settings public except for the passwords that are stored in a secure 
location.\n* `{ref:sourceId}` - the value becomes a reference to another 
source. Some sources function as filters/converters, pulling data internally 
from other sources and converting the result on the fly. For example, the 
[overzoom](https://github.com/kartotherian/kartotherian-overzoom) source pulls 
data from another source, and if it's not available, tries to find a lower-zoom 
tile above the given one, and extract a portion of it. Internally, it uses a 
forwarding sourceref: source.\n* `{npmloader: npm-module-name}` or `{npmloader: 
['npm-module-name', 'arg1', 'arg2', ...]}` - if npm module supports loading 
customization, it should be loaded via the npmloader. Npmloader is only 
available inside the source's `xml` key.\n* `{npmpath: ['npm-module-name', 
'subdir', 'subdir', 'filename']}` - some files may be located inside the NPM 
modules added to the Kartotherian project, i.e. 
[osm-bright-source](https://github.com/kartotherian/osm-bright.tm2source). To 
reference a file inside npm, set npm's value to an array, with the first value 
being the name of the npm module (resolves to the root of the npm module), and 
all subsequent strings being subdirs and lastly - the name of the file. Subdirs 
may be omitted. `npmpath: [\"osm-bright-source\", \"data.xml\"]` would resolve 
to a rooted path `/.../node_modules/osm-bright-source/data.xml`\n\n## XML-based 
sources\nThe `xml` parameter is used to load and alter XML for some sources 
like\n[tilelive-bridge](https://github.com/mapbox/tilelive-bridge) 
(SQL→VectorTile or TIFF→RasterTile) 
and\n[tilelive-vector](https://github.com/mapbox/tilelive-vector) (Style 
VectorTile → PNG).\nThe `xml` field must evaluate to the xml file 
path.\n\n```\ngen:                # The name of the source (could be referenced 
later)\n  uri: bridge://    # Required - the URI used to construct the source\n 
 xml:              # Init source with this xml instead of the URI's other 
parameters\n    # Set xml to the location of the 'data.xml', which is located 
inside the osm-bright-source npm\n    npmpath: [\"osm-bright-source\", 
\"data.xml\"]\n  xmlSetDataSource: # Before loading, update the datasource 
section of the standard mapnik config file\n    if:             # Only update 
datasources that match all these values (logical AND)\n      dbname: gis   # 
Instead of 'gis', you can use {npmpath:...}, {ref:..}, and {var:...}\n      
host: ''\n      type: postgis\n    set:            # Replace these keys with 
the new values\n      host: localhost\n      user: {var: osmdb-user}  # Instead 
of hardcoding, use the value from the variables file or conf section\n      
password: {var: osmdb-pswd}\n```\n\n* `xmlSetAttrs` - for xml, overrides the 
attributes of the root element with the new ones. For example, you may change 
the font directory of the `<Map>` element:\n```\ns2:\n  uri: vector://\n  
xml:\n    npmloader: osm-bright-style    # stylesheet xml is in npm\n  
xmlSetAttrs:\n    # Note that this is not needed for osm-bright-style because 
that module does this internally\n    font-directory: {npmpath: 
[\"osm-bright-fonts\", \"fonts/\"]}\n```\n* `xmlSetParams` - for xml, overrides 
the top level `<Parameters>` values with the new ones. For example, the 
`vector` source requires xml stylesheet to point to the proper source of 
PBFs:\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlSetParams:\n    source: {ref: gen}               
           # set source parameter to the 'gen' source\n```\n* `xmlLayers` - 
keep all non-layer data, but only keep those layers that are listed in this 
value (whitelist):\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlLayers: ['landuse', 'road']                # 
Only include these layers when rendering\n```\n* `xmlExceptLayers` - same as 
`xmlLayers`, but instead of whitelisting, blacklist (allow all except 
these):\n```\ns2:\n  public: true\n  uri: vector://\n  formats: 
[png,json,headers,svg,jpeg]\n  xml:\n    npmloader: osm-bright-style    # 
stylesheet xml is in npm\n  xmlExceptLayers: ['water']                    # 
Exclude water layer when rendering\n```\n* `xmlSetDataSource` - change all 
layer's datasources' parameters if they match conditions:\n`if` is a set of 
parameter values that all must match,\n`xmlLayers` and `xmlExcludeLayers` just 
like above set which layers to address,\nand `set` specifies the new parameter 
values to be set.\n\nInstead of an object, `xmlSetDataSource` can be set to an 
array of objects to provide\nmultple change sets.\n\n## Kartotherian-specific 
parameters:\n* `public` (boolean) - should this be source be accessible via 
`/<sourceId>/z/x/y.format` requests. You may also set configuration parameter 
`allSourcesPublic` to true to make all sources public (might be dangerous)\n* 
`minzoom` (int) - minimum allowable zoom for the public request (public 
requests only)\n* `maxzoom` (int) - maximum allowable zoom for the public 
request (public requests only)\n* `defaultHeaders` (object) - a set of extra 
headers that will be sent to the user unless the source provides its own. 
(public requests only)\n* `headers` (object) - a set of extra headers that will 
be sent to the user instead of the headers returned by the source. (public 
requests only)\n* `formats` (array of strings) - one string or a list of string 
values specifying allowed formats, e.g. `['png','jpeg']`\n* `scales` (array of 
numbers) - one number or a list of number values specifying allowed scalings, 
e.g. `[1.3, 1.5, 2, 2.6, 3]`\n* `setInfo` (object) - provide values that will 
be reported to the client via the `/<sourceId>/info.json`. See 
https://github.com/mapbox/tilejson-spec\n* `overrideInfo` (object) - override 
values produced by the source's getInfo(), or if value is null, remove it. 
Result will be accessible via `/<sourceId>/info.json`. See 
https://github.com/mapbox/tilejson-spec\n";,
   "readmeFilename": "README.md",
   "homepage": "https://github.com/kartotherian/kartotherian-core#readme";,
-  "_id": "kartotherian-core@0.0.7",
-  "_shasum": "4444dccadafcaefbbb3283ad40c4a4fd43acb322",
+  "_id": "kartotherian-core@0.0.8",
+  "_shasum": "e2786196de1b43ebe4377e0200d58eb19a3fa57f",
   "_from": "git+https://github.com/kartotherian/kartotherian-core.git";,
-  "_resolved": 
"git+https://github.com/kartotherian/kartotherian-core.git#51266ac0a0289f9f1fa3b5966d2f47d28857933a";
+  "_resolved": 
"git+https://github.com/kartotherian/kartotherian-core.git#3ddcd4a145aefb1bbe221bd9ea54ce1b7bbddbf0";
 }
diff --git a/node_modules/tilerator-jobprocessor/node_modules/tmp/package.json 
b/node_modules/tilerator-jobprocessor/node_modules/tmp/package.json
index 7105197..fb1db4e 100644
--- a/node_modules/tilerator-jobprocessor/node_modules/tmp/package.json
+++ b/node_modules/tilerator-jobprocessor/node_modules/tmp/package.json
@@ -42,7 +42,7 @@
   "readme": "# Tmp\n\nA simple temporary file and directory creator for 
[node.js.][1]\n\n[![Build 
Status](https://travis-ci.org/raszi/node-tmp.svg?branch=master)](https://travis-ci.org/raszi/node-tmp)\n[![Dependencies](https://david-dm.org/raszi/node-tmp.svg)](https://david-dm.org/raszi/node-tmp)\n\n##
 About\n\nThis is a [widely used library][2] to create temporary files and 
directories\nin a [node.js][1] environment.\n\nTmp offers both an asynchronous 
and a synchronous API. For all API calls, all\nthe parameters are 
optional.\n\nTmp uses crypto for determining random file names, or, when using 
templates,\na six letter random identifier. And just in case that you do not 
have that much\nentropy left on your system, Tmp will fall back to pseudo 
random numbers.\n\nYou can set whether you want to remove the temporary file on 
process exit or\nnot, and the destination directory can also be set.\n\n## How 
to install\n\n```bash\nnpm install tmp\n```\n\n## Usage\n\n### Asynchronous 
file creation\n\nSimple temporary file creation, the file will be closed and 
unlinked on process exit.\n\n```javascript\nvar tmp = 
require('tmp');\n\ntmp.file(function _tempFileCreated(err, path, fd, 
cleanupCallback) {\n  if (err) throw err;\n\n  console.log(\"File: \", path);\n 
 console.log(\"Filedescriptor: \", fd);\n  \n  // If we don't need the file 
anymore we could manually call the cleanupCallback\n  // But that is not 
necessary if we didn't pass the keep option because the library\n  // will 
clean after itself.\n  cleanupCallback();\n});\n```\n\n### Synchronous file 
creation\n\nA synchronous version of the above.\n\n```javascript\nvar tmp = 
require('tmp');\n\nvar tmpobj = tmp.fileSync();\nconsole.log(\"File: \", 
tmpobj.name);\nconsole.log(\"Filedescriptor: \", tmpobj.fd);\n  \n// If we 
don't need the file anymore we could manually call the removeCallback\n// But 
that is not necessary if we didn't pass the keep option because the library\n// 
will clean after itself.\ntmpobj.removeCallback();\n```\n\nNote that this might 
throw an exception if either the maximum limit of retries\nfor creating a 
temporary name fails, or, in case that you do not have the permission\nto write 
to the directory where the temporary file should be created in.\n\n### 
Asynchronous directory creation\n\nSimple temporary directory creation, it will 
be removed on process exit.\n\nIf the directory still contains items on process 
exit, then it won't be removed.\n\n```javascript\nvar tmp = 
require('tmp');\n\ntmp.dir(function _tempDirCreated(err, path, cleanupCallback) 
{\n  if (err) throw err;\n\n  console.log(\"Dir: \", path);\n  \n  // Manual 
cleanup\n  cleanupCallback();\n});\n```\n\nIf you want to cleanup the directory 
even when there are entries in it, then\nyou can pass the `unsafeCleanup` 
option when creating it.\n\n### Synchronous directory creation\n\nA synchronous 
version of the above.\n\n```javascript\nvar tmp = require('tmp');\n\nvar tmpobj 
= tmp.dirSync();\nconsole.log(\"Dir: \", tmpobj.name);\n// Manual 
cleanup\ntmpobj.removeCallback();\n```\n\nNote that this might throw an 
exception if either the maximum limit of retries\nfor creating a temporary name 
fails, or, in case that you do not have the permission\nto write to the 
directory where the temporary directory should be created in.\n\n### 
Asynchronous filename generation\n\nIt is possible with this library to 
generate a unique filename in the specified\ndirectory.\n\n```javascript\nvar 
tmp = require('tmp');\n\ntmp.tmpName(function _tempNameGenerated(err, path) {\n 
   if (err) throw err;\n\n    console.log(\"Created temporary filename: \", 
path);\n});\n```\n\n### Synchronous filename generation\n\nA synchronous 
version of the above.\n\n```javascript\nvar tmp = require('tmp');\n\nvar name = 
tmp.tmpNameSync();\nconsole.log(\"Created temporary filename: \", 
name);\n```\n\n## Advanced usage\n\n### Asynchronous file creation\n\nCreates a 
file with mode `0644`, prefix will be `prefix-` and postfix will be 
`.txt`.\n\n```javascript\nvar tmp = require('tmp');\n\ntmp.file({ mode: 0644, 
prefix: 'prefix-', postfix: '.txt' }, function _tempFileCreated(err, path, fd) 
{\n  if (err) throw err;\n\n  console.log(\"File: \", path);\n  
console.log(\"Filedescriptor: \", fd);\n});\n```\n\n### Synchronous file 
creation\n\nA synchronous version of the above.\n\n```javascript\nvar tmp = 
require('tmp');\n\nvar tmpobj = tmp.fileSync({ mode: 0644, prefix: 'prefix-', 
postfix: '.txt' });\nconsole.log(\"File: \", 
tmpobj.name);\nconsole.log(\"Filedescriptor: \", tmpobj.fd);\n```\n\n### 
Asynchronous directory creation\n\nCreates a directory with mode `0755`, prefix 
will be `myTmpDir_`.\n\n```javascript\nvar tmp = require('tmp');\n\ntmp.dir({ 
mode: 0750, prefix: 'myTmpDir_' }, function _tempDirCreated(err, path) {\n  if 
(err) throw err;\n\n  console.log(\"Dir: \", path);\n});\n```\n\n### 
Synchronous directory creation\n\nAgain, a synchronous version of the 
above.\n\n```javascript\nvar tmp = require('tmp');\n\nvar tmpobj = 
tmp.dirSync({ mode: 0750, prefix: 'myTmpDir_' });\nconsole.log(\"Dir: \", 
tmpobj.name);\n```\n\n### mkstemp like, asynchronously\n\nCreates a new 
temporary directory with mode `0700` and filename like 
`/tmp/tmp-nk2J1u`.\n\n```javascript\nvar tmp = require('tmp');\n\ntmp.dir({ 
template: '/tmp/tmp-XXXXXX' }, function _tempDirCreated(err, path) {\n  if 
(err) throw err;\n\n  console.log(\"Dir: \", path);\n});\n```\n\n### mkstemp 
like, synchronously\n\nThis will behave similarly to the asynchronous 
version.\n\n```javascript\nvar tmp = require('tmp');\n\nvar tmpobj = 
tmp.dirSync({ template: '/tmp/tmp-XXXXXX' });\nconsole.log(\"Dir: \", 
tmpobj.name);\n```\n\n### Asynchronous filename generation\n\nThe `tmpName()` 
function accepts the `prefix`, `postfix`, `dir`, etc. parameters 
also:\n\n```javascript\nvar tmp = require('tmp');\n\ntmp.tmpName({ template: 
'/tmp/tmp-XXXXXX' }, function _tempNameGenerated(err, path) {\n    if (err) 
throw err;\n\n    console.log(\"Created temporary filename: \", 
path);\n});\n```\n\n### Synchronous filename generation\n\nThe `tmpNameSync()` 
function works similarly to `tmpName()`.\n\n```javascript\nvar tmp = 
require('tmp');\nvar tmpname = tmp.tmpNameSync({ template: '/tmp/tmp-XXXXXX' 
});\nconsole.log(\"Created temporary filename: \", tmpname);\n```\n\n## 
Graceful cleanup\n\nOne may want to cleanup the temporary files even when an 
uncaught exception\noccurs. To enforce this, you can call the 
`setGracefulCleanup()` method:\n\n```javascript\nvar tmp = 
require('tmp');\n\ntmp.setGracefulCleanup();\n```\n\n## Options\n\nAll options 
are optional :)\n\n  * `mode`: the file mode to create with, it fallbacks to 
`0600` on file creation and `0700` on directory creation\n  * `prefix`: the 
optional prefix, fallbacks to `tmp-` if not provided\n  * `postfix`: the 
optional postfix, fallbacks to `.tmp` on file creation\n  * `template`: 
[`mkstemp`][3] like filename template, no default\n  * `dir`: the optional 
temporary directory, fallbacks to system default (guesses from environment)\n  
* `tries`: how many times should the function try to get a unique filename 
before giving up, default `3`\n  * `keep`: signals that the temporary file or 
directory should not be deleted on exit, default is `false`, means delete\n    
* Please keep in mind that it is recommended in this case to call the provided 
`cleanupCallback` function manually.\n  * `unsafeCleanup`: recursively removes 
the created temporary directory, even when it's not empty. default is 
`false`\n\n[1]: http://nodejs.org/\n[2]: 
https://www.npmjs.com/browse/depended/tmp\n[3]: 
http://www.kernel.org/doc/man-pages/online/pages/man3/mkstemp.3.html\n";,
   "readmeFilename": "README.md",
   "_id": "tmp@0.0.28",
-  "_shasum": "b68958ed33b28f1159ceee1a2180cb877a4082d6",
+  "_shasum": "8167062fcfbbd2fef41d2256fb2e28c2412d4a8d",
   "_from": "git+https://github.com/nyurik/node-tmp.git";,
   "_resolved": 
"git+https://github.com/nyurik/node-tmp.git#9b3c2c5ecadbf4ff0ae77e5089e937d7255ee870";
 }
diff --git a/node_modules/tilerator-jobprocessor/package.json 
b/node_modules/tilerator-jobprocessor/package.json
index cc091f7..aa7adc8 100644
--- a/node_modules/tilerator-jobprocessor/package.json
+++ b/node_modules/tilerator-jobprocessor/package.json
@@ -1,6 +1,6 @@
 {
   "name": "tilerator-jobprocessor",
-  "version": "0.0.5",
+  "version": "0.0.6",
   "description": "Processes tile generation jobs",
   "main": "index.js",
   "scripts": {
@@ -34,11 +34,11 @@
   "devDependencies": {
     "mocha": "^2.5.2"
   },
-  "gitHead": "afb5e9e2cc9c6c67c222810c0d1158bfba55732e",
+  "gitHead": "81c2a6c2240a27dba236fd013ead5b5db4860294",
   "readme": "# tilerator-jobprocessor  [![Build 
Status](https://travis-ci.org/kartotherian/tilerator-jobprocessor.svg?branch=master)](https://travis-ci.org/kartotherian/tilerator-jobprocessor)\n\nThe
 job processing components of the Tilerator maps tile generation service\n\nSee 
[Kartotherian](https://github.com/kartotherian/kartotherian)\n",
   "readmeFilename": "README.md",
-  "_id": "tilerator-jobprocessor@0.0.5",
-  "_shasum": "b04719727845c04347c372d98435c2d862229540",
+  "_id": "tilerator-jobprocessor@0.0.6",
+  "_shasum": "360e030756ef7d6aff8af963bb2684708f720a6d",
   "_from": "git+https://github.com/kartotherian/tilerator-jobprocessor.git";,
-  "_resolved": 
"git+https://github.com/kartotherian/tilerator-jobprocessor.git#afb5e9e2cc9c6c67c222810c0d1158bfba55732e";
+  "_resolved": 
"git+https://github.com/kartotherian/tilerator-jobprocessor.git#81c2a6c2240a27dba236fd013ead5b5db4860294";
 }
diff --git a/node_modules/type-is/node_modules/media-typer/package.json 
b/node_modules/type-is/node_modules/media-typer/package.json
index f6d6712..e280284 100644
--- a/node_modules/type-is/node_modules/media-typer/package.json
+++ b/node_modules/type-is/node_modules/media-typer/package.json
@@ -9,7 +9,7 @@
   "license": "MIT",
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/jshttp/media-typer.git";
+    "url": "https://github.com/jshttp/media-typer";
   },
   "devDependencies": {
     "istanbul": "0.3.2",
@@ -53,6 +53,5 @@
     "tarball": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz";
   },
   "directories": {},
-  "_resolved": 
"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz";,
-  "readme": "ERROR: No README data found!"
+  "_resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz";
 }
diff --git a/src b/src
index 84a7f15..8c0eb61 160000
--- a/src
+++ b/src
-Subproject commit 84a7f15a535c30dc74557904479502ecc47af634
+Subproject commit 8c0eb61139c997a60ce64460542f9270a560ea4d

-- 
To view, visit https://gerrit.wikimedia.org/r/294225
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If66f60aa527b959437044c04e64c53c135f62afc
Gerrit-PatchSet: 1
Gerrit-Project: maps/tilerator/deploy
Gerrit-Branch: master
Gerrit-Owner: Yurik <yu...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to